Scala Grundkurs

Virtuelle Typen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Virtuelle oder auch dynamische Typen können innerhalb von Codeblöcken erzeugt werden, ohne zusätzlich eine Klassendefinition anlegen zu müssen. Wie das funktioniert und auf welche Besonderheiten Sie achten müssen, erklärt Ihnen dieser Film.

Transkript

Mitunter kommt man oft in die Verlegenheit, Typen zu erstellen, die lediglich dafür dienen, dass man beispielsweise einen Rückgabewert aus einer Methode liefern kann, der mehr als nur ein Feld ist. Genau diese Art von Typen eignen sich für die Anwendung von virtuellen Typen innerhalb von Scala. Statt also beispielsweise eine neue Klasse zu definieren, kann ich lediglich an der Ausgabe meiner Methode, beziehungsweise Funktion definieren, welche Felder zur Verfügung gestellt werden. Und genau wie, werde ich Ihnen nun zeigen. Ich befinde mich nun in meiner Applikation. Innerhalb dieser Applikation gibt es Kunden, einen Warenkorb, Preise und Produkte, die einem Warenkorb hinzugefügt werden und dementsprechend dann in einem Online-Shop eingekauft werden können. Mein Ziel ist es nun, die Funktion "checkout", um mehr Ausgaben zu erweitern. Dazu gehören beispielsweise Preise vor Steuern, nach Steuern, Preise mit Versand und ohne Versand. Als erstes füge ich dafür mehr als ein Produkt zu meinem Warenkorb hinzu. Dafür verwende ich also die Methode "basket.adItem", nehme nun ein solches Produkt, wie in diesem Fall nun den Samsung-Fernseher, und definiere für diesen einen Preis. Als nächstes füge ich nun noch eine LG-Soundbar hinzu. Diese kostet nun 250 Euro und damit ist mein Warenkorb vollständig. Als nächstes hätte ich nun gerne einen Rückgabewert aus dem Aufruf von "checkout". Dafür begebe ich mich in den "CheckoutHandler". Dort befindet sich die Implementierung der Funktion "checkout" für einen Online-Shop. Als erstes müsste ich nun die Preise aller Produkte summieren. Das mache ich nun mithilfe einer Konstante "basketPrice". Diese berechnet sich aus den Produkten, die sich im "Basket" befinden, also den Items, von denen lasse ich mir genau das Preisfeld geben. Allerdings habe ich nun genau das Problem, dass das Preisfeld aktuell nicht sichtbar ist. Dafür mache ich also eine kurze Anpassung an der Klasse "Product". Ich mache das Feld "Price" sichtbar. Als nächstes summiere ich die Preise auf, zur Basis eines Preises von 0 Euro. Das ist also der Ausgangspreis, und alle anderen Preise werden nun zu diesem Preis dazu addiert. Das bedeutet also für jeden Preis der Produkte findet nun diese Addition statt, ausgehend von der Basis eines Preises von 0 Euro. Als nächstes kann ich nun mein Ausgabeobjekt definieren. Dafür benötige ich lediglich das "new"-Keyword und die geschweiften Klammern, um einen Block zu definieren. Nun befinde ich mich innerhalb einer neuen Klasse. Diese wird exklusiv nur für die Ausgabe aus meiner Funktion "checkout" erzeugt, beispielsweise kann sie einen Feldpreis definieren, das genau den "basketPrice" beinhaltet. Als nächstes könnte ich nun den Preis nach Steuern berechnen. Nenne dieses Feld daher "priceAfterTax", und gehe nun von dem "basketPrice" aus, kopiere diesen, nehme seinen ursprünglichen Wert und mulitpliziere ihn mit der Mehrwertsteuer von 19 %. Als nächstes definiere ich noch pauschal Versandkosten in Höhe von 4,90 Euro. Und den Gesamtpreis definiere ich nun also aus dem Preis nach Steuern und den Versandkosten. An der Stelle ist nun mein Rückgabetyp also dynamisch und definiert sich aus dem Inhalt dieser Klasse. Ich habe noch eine andere Klasse mit der Bezeichnung "AuditLogger". Diese definiert aktuell einen Rückgabewert von "Unit" für die Methode, beziehungsweise für die Funktion "checkout". Daher entferne ich nun "Unit" und bestimme den Rückgabewert dieser Funktion anhand des Aufrufes der Funktion darüber. Als nächstes erhalte ich nun hier ein "checkout"-Objekt. Auf diesem sind also nun all die Felder definiert, die in meiner virtuellen Klasse existieren. Falls man mit virtuellen Klassen arbeitet, empfiehlt es sich meistens bei Änderungen innerhalb dieser Klassen einen kompletten Rebuild zu starten. Dies geht unter "Build" Das Problem, das hier entstehen kann, ist, dass neue Felder nicht automatisch in die virtuelle Klasse übernommen werden. Deshalb sollte hier häufiger ein "Rebuild" durchgeführt werden, insbesondere dann, wenn ein derartiges Problem auftritt. Für das Ergebnis meines Warenkorbs erhalte ich also nun 1135 Euro. Ich habe nun also einen virtuellen Typ nur mit der Hilfe des "new"-Keywords erstellt. Diese Klasse, die dabei erstellt wurde, ist nur virtuell existent, das bedeutet, ich habe ihr weder einen Namen gegeben noch sie explizit definiert. Damit sinkt insgesamt auch die Anzahl der Klassen innerhalb meiner Anwendung. Besonders für solche Szenarien, wo ich lediglich einen Rückgabewert definieren möchte. Dass die Klasse nun keine Namensgebung hat, kann unter Umständen auch zu Problemen führen. Besonders dann, wenn sie mit einer Fehlermeldung im Zusammenhang steht, denn dann ist oft nicht klar, woher diese Klasse ursprünglich stammt. Nutzen Sie diese Möglichkeiten also mit Vorsicht und setzen Sie sie mit Bedacht ein.

Scala Grundkurs

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

4 Std. 44 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
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!