Scala Bytes: The Lion sleeps tonight

Nun die Erklärung: Wir definieren für B ein Lower Bound und ein Upper Bound. Mit Letzterem drücken wir aus, dass wir für goToSleep nur Awake und für wakeUp nur Asleep akzeptieren. Mit dem Lower Bound stellen wir die Beziehung zu A her, d. h. zum tatsächlichen „Zustand“ des Animals. Wenn wir z. B. goToSleep aufrufen und A ist gerade Asleep, dann gibt es keinen passenden Typ, der sowohl ein Subtyp von Awake ist (Upper Bound), als auch ein Supertyp von Asleep (Lower Bound). Somit kompiliert dieser Versuch erst gar nicht, und wir sind am Ziel.

Fazit

Abschließend sei angemerkt, dass wir hier sehr tief in die Trickkiste des Scala-Typsystems greifen. Das ist in der Tat nicht ganz einfach zu verstehen, ohne sich gut mit Scala auszukennen. Aber zum einen lösen wir damit ein komplexes Problem, das man z. B. mit Java so gar nicht lösen könnte. Und zum anderen machen wir die Verwendung unseres Codes besonders einfach bzw. „narrensicher“. Gerade Letzteres zeichnet Scala aus: Um Libraries oder gute APIs zu schreiben, muss man zwar „tief tauchen“, aber um diese zu verwenden, muss man kein Experte sein, vielmehr wird es einem sogar besonders leicht gemacht. Der komplette Code kann übrigens unter [1] eingesehen werden.

Heiko Seeberger ist als Director Professional Services für Typesafe tätig. Er ist Scala-Enthusiast, seit er diese wunderbare Sprache im Jahr 2008 kennenlernte. Er hat mehr als zehn Jahre Erfahrung in der Beratung und Softwareentwicklung auf der Java-Plattform, trägt aktiv zu Projekten aus der Scala-Community bei und gibt seine Expertise regelmäßig in Form von Artikeln und Vorträgen weiter.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.