Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Scala Grundkurs

Typenalias

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit einem Typenalias lassen sich eigene Typennamen für externe Typen definieren und so beispielsweise Bindungen an Bibliotheken vermeiden.

Transkript

Programmiersprachen wie Scala und Java kennen viele Basistypen, wie Integer, Boolean, Float und andere. Oftmals verwendet man solche Integer-Werte in einem völlig fremden Kontext, wie beispielsweise als Customer ID. Mit unter mag es zwar richtig sein, dass eine Customer ID nun eine Zahl ist, allerdings ist das normalerweise nicht die Intention des Programmierers, das genau so auszudrücken. Mit Hilfe eines so genannten Typenalias kann man eigene Typen für diese Art von besonderen Kontexten einführen. Und ich zeige Ihnen jetzt wie genau Sie das tun können. Ich befinde mich nun also in meiner Applikation. Hier gibt es einen Kunden, einen Warenkorb, Produkte und Preise. Aktuell sind Kunden nicht eindeutig identifizierbar, deswegen möchte ich nun eine so genannte Customer ID einführen. Der einfachste Schritt dies zu tun, wäre das Definieren einer Customer ID in Form eines Integer-Wertes, dieser muss natürlich berechnet werden, und ich vergebe sie üblicherweise sequentiell. So definiere ich also nun auf meinem "object Customer" einen virtuellen "counter" in Form eines "AtomicInteger", der bei 0 beginnt. Meine Customer ID definiert sich nun also durch "Customer.counter.addAndGet1". Das bedeutet nun, beim Erzeugen eines Customers wird automatisch eine Customer ID vergeben. Diese ist in aufsteigender Reihenfolge, das bedeutet also, der erste Customer wird eine ID von 1 bekommen. Nun kann es allerdings sein, dass ich mich zu einem späteren Zeitpunkt dafür entscheiden möchte, dass Customer ID bspw. kein Integer mehr ist, sondern in einer "case class" abgebildet werden soll. Da ich nun allerdings hier sehr basische Typen verwende, habe ich das Problem, dass ich, wenn ich an anderen Stellen mit der Customer ID arbeite, ich unter Umständen mit einem Integer-Typ arbeiten möchte. Ein Beispiel hierfür wäre der CustomerManager. Dieser könnte nun also eine Methode beziehungsweise Funktion definieren mit der Bezeichnung "findCustomer". Diese nimmt eine Customer ID entgegen, und hierbei handelt es sich nun also bspw. um einen Integer. Sollte ich mich also nun später dafür entscheiden, dass Customer ID's keine Integer-Werte mehr sind, müsste ich nun all die Funktionen und Methoden bestimmen, wo ich diese Annahme getroffen habe. Viel einfacher ist es an dieser Stelle, mit einem Typenalias zu arbeiten. Dies tut man üblicherweise auf einem sogenannten Package-Objekt, Das ist ein Objekt, das einen Typen global für ein Package definieren kann. In IntelliJ IDEA kann ich ein solches Package-Objekt über den Reiter "New" und "Package Object" erstellen. Hier habe ich nun also ein Package Object "basket" unter dem "package eu.janietz". Theoretisch könnte ich nun in der Datei "Customer" versuchen, einen Typ "CustomerId" zu erstellen, der sich aktuell mithilfe eines Integers bestimmt. Wie man bereits an der Fehlermarkierung sehen kann, ist dies nicht legitim. Alternativ könnte ich nun diesen Typen nun unterhalb des Customers definieren oder im "object Customer". Was allerdings nicht der richtige Ort dafür wäre, schließlich möchte ich, dass der Typ "CustomerId" in der gesamten Applikation bekannt ist. Aus diesem Grund definiere ich ihn nun auf Package-Ebene. So ist also eine "CustomerId" ein Integer. Sollte ich mich nun später dafür entscheiden, dass "CustomerId" kein Integer mehr ist, könnte ich diese Implementierung relativ einfach austauschen. Die Besonderheit liegt nun darin, dass ich hier für "customerId" statt "Int" "CustomerId" angeben kann. Ähnlich verhält es sich mit meinem CustomerManager. Dieser nimmt nun kein Integer mehr entgegen, sondern eine CustomerId. Das Besondere hier ist weiterhin, dass alle ursprünglichen Zuweisungen wie beispielsweise hier das Erzeugen einer Customer ID, was ja ursprünglich einen Integer generiert, eins zu eins weiter zu verwenden ist. Mit einem Typalias kann ich also nun einen Typen definieren, der bspw. von einem anderen Typen sich ableitet. Das passiert üblicherweise auf der Package-Ebene. Nichtsdestotrotz wäre es auch möglich dies unterhalb eines Objects oder einer Class zu tun. Die Besonderheit liegt darin, dass der spätere Austausch durch eine Implementierung ohne Refactoring wesentlich einfacher geworden ist. Besonders in dem Moment, wo man noch keine echten Typen einsetzt, wie beispielsweise bei Value-Werten, wie Integer, Boolean und ähnlichen.

Scala Grundkurs

Entdecken Sie die Möglichkeiten und Eigenschaften der modernen Programmiersprache Scala.

4 Std. 44 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:12.04.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!