Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Scala Grundkurs

Case-Klassen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Bei Case-Klassen handelt es sich um einen ganz besonderen Typ von Klassen in Scala, die sich durch ihre Unveränderlichkeit auszeichnen.

Transkript

Neben regulären Klassen kennt die Programmiersprache Scala auch so genannte "Case"-Klassen, diese eignen sich besonders gut für die Verarbeitung von Daten, und wie genau sich das äußert, möchte ich Ihnen nun demonstrieren. Ich befinde mich nun also in einer Anwendung, in der es einen Warenkorb gibt, einen Kunden und Produkte. Bis jetzt ist der Preis von Produkten durch einen "Double" definiert. Damit ist also nicht ganz klar, ob das Produkt "Samsung TV" in Form von 699,99 Euro bezahlt wird oder beispielsweise US-Dollar. Für genau diesen Zweck erstelle ich nun eine Case-Class. Statt dem Keyword "class" verwende ich zusätzlich "case", und benenne diese Klasse nun mit dem Bezeichner "Price", ähnlich wie auch bei einer normalen Klasse definiere ich nun Parameter für diese Klasse. Beispielsweise also den Wert in Form eines "doubles" und die Währung, in Form eines Strings. In Sachen Klassenhierarchie gibt es nun zwei Besonderheiten bei "case classes". Diese können lediglich von einer "abstract class" erben und andere "case classes" können nicht von anderen "case classes" erben. Zum Beispiel wäre es nicht möglich, eine "case class" "EuroPrice" zu definieren, die von "Price" abhängig ist. Als nächstes erzeuge ich nun eine Instanz eines solchen Preises. "case classes" haben hier auch die Besonderheit, dass ich standardmäßig nicht das "new"-Keyword benötige. Ich kann lediglich den Namen der Klasse nutzen und dann die Werte für die Parametrisierung. Beispielsweise also nun der Preis 699,99 Euro. Als nächstes muss ich noch meine bestehenden Klassen anpassen. Das bedeutet, das Argument "price" ist nun vom Typ "price". Und damit übergebe ich nun als Argument also die Instanz des Preises in Euro. Als nächstes starte ich nun die Anwendung. Die nächste Besonderheit, die man im Zusammenhang mit "case classes" feststellen kann, ist, dass sie standardmäßig eine Notation für "to string" implementieren, die alle Werte, die als Konstruktor in die "case class" hineinlaufen, innerhalb des Strings abbilden. Beispielsweise also nun für den Wert 699,99 Euro wird diese Darstellung gewählt. Außerdem sind "case classes" nach dem Scalaprinzip entworfen worden. Das bedeutet, Sie arbeiten primär mit "Immutability", sind also nicht veränderlich. Wenn ich mir nun also den Europreis ansehe, so kann ich seine Werte abrufen, also "value" für den konkreten Wert als auch "currency" für die Währung. Wenn ich also versuchen wollen würde, den Preis auf zehn Euro zu drücken, so bekomme ich automatisch einen Fehler; denn ich kann keine Änderung an einer "case class" vornehmen. Nichtsdestotrotz könnte es berechtigte Gründe geben, den Preis zu ändern. Dafür implementiert jede "case class" eine Standardmethode. Diese nennt sich "copy", und nun kann ich mir aussuchen, welche der Argumente der "case class" verändert werden sollen. Ich entscheide mich also nun für den Preis und ändere diesen auf zehn Euro. Wenn ich die Anwendung nun starte, bekomme ich hier die Ausgabe des Preises von zehn Euro, allerdings bleibt mein Samsung Fernseher, der den ursprünglichen Preis bekommen hat, davon unbeeindruckt. Hier ist der Preis weiterhin 699,99 Euro. Im Umkehrschluss bedeutet das, dass das Benutzen der Copy-Methode immer eine neue Instanz des Objektes erzeugt, und damit den Prinzipien von Scala treu bleibt. Des Weiteren ist es möglich, Implementierungen in einer "case class" hinzuzufügen. Üblicherweise stellt man hier Konvertierungsmethoden bereit. In meinem Fall könnte ich nun meinen Preis in US-Dollar konvertieren. Dafür nutze ich also wiederum die Copy-Methode und bestimme, dass der Preis nun der ursprüngliche Preis multipliziert mit dem aktuellen Währungskurs von 1,07 ist und dass sich die "currency" in dem Fall dann auf US-Dollar verändert. Wie üblich sollte ich für eine öffentliche Methode beziehungsweise Funktion immer einen Typ angeben. So kann ich nun bspw. meinen Europreis relativ einfach in US-Dollar konvertieren. Außerdem kann ich "case classes" mit besonderer Syntax innerhalb von Scala verwenden. Ein Beispiel hierfür ist das sogenannte "Destructuring". Das bedeutet, ich kann Werte aus der "case class" herausextrahieren. Zum Beispiel kann ich mir aus dem Europreis mit der Notation "Price()" und den jeweiligen Argumenten in die Variable "a" und die Variable "b" in Form von Konstanten nun die konkreten Ausprägungen ausgeben lassen. Das bedeutet in "a" steht nun der Wert des Preises und in "b" die Currency. Die Vergabe der Namen ist hierbei beliebig. Ich habe nun a und b gewählt, um illustrativ zu zeigen, dass das Ganze nicht Value oder Currency heißen muss. Die Destructuring-Syntax findet man vor allem auch im Zusammenhang mit Pattern-Matching. Festhalten lässt sich nun also, dass Case-Klassen Klassen mit fixierten Eigenschaften sind. Das bedeutet, sie sind nach dem Erzeugen unveränderlich. Dank genau dieser Struktur handelt es sich immer um serialisierbare Klassen. Das bedeutet, sie eignen sich besonders gut dafür, um über das Netzwerk übertragen zu werden. Eine Änderung in einer "case class" kann nur durch eine Kopie stattfinden, daher bezeichnet man sie als "Immutable". Üblicherweise wird eine "case class" in komplexen Pattern-Matching-Strukturen verwendet. Das steht vor allem auch im Zusammenhang mit dem Destructuring, wodurch man Argumente der "case class" innerhalb von verschiedenen Werten aus der Klasse herausextrahieren kann. Üblicherweise werden Case-Klassen für Klassen verwendet, die lediglich Daten beinhalten und geringe Menge an Methoden, die bspw. nur Konvertierungen darstellen.

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!