In diesem Blog spreche ich über ein neues Sprachfeature, das von project coin für Java7 vorgeschlagen wurde, und über die Probleme, die ich damit sehe. Vielleicht ist es an der Zeit, sich die Scala-Bücher zu kaufen und tief in die Materie einzutauchen...
Wer hat dieses Konstrukt schon einmal gesehen?
int i, j; i = j = 10;
Lässt sich das überhaupt kompilieren? Natürlich wird es das: Der Wert einer Zuweisung ist die rechte Seite der Zuweisung und kann daher einer anderen Variablen zugewiesen werden. In meiner beruflichen Laufbahn sind mir solche Anweisungen bisher nur in Frameworks begegnet, die von Leuten geschrieben wurden, die zu schlau für ihr eigenes Wohl sind. Es dauert ein paar Sekunden, bis man es kapiert hat, und dann wird einem klar, dass beide Variablen auf denselben Wert gesetzt werden, kein Problem! Ich sehe den Wert dieses "Features" der Java-Sprache nicht: Die Aufteilung auf zwei Zeilen schadet weder dem Compiler noch der JVM und schon gar nicht dem armen Programmierer, der die Codezeilen lesen muss, nachdem das Genie, das sie ursprünglich geschrieben hat, das Gebäude verlassen hat. Kürzlich habe ich einen Vorschlag für ein neues Feature in Jdk7 gelesen, das Indexierungszugriff für Listen und Maps bieten wird. Die normalen Beispiele sind recht einfach zu lesen oder zu schreiben:
Liste Namen = ...
names[0] = "Maarten Winkels"; // - -> names.set(0, "Maarten Winkels");
String you = names[1]; // -.> names.get(1);
Karte Wohnort = ...
Wohnort["Maarten Winkels"] = "Indien"; // -> Wohnort.put("Maarten Winkels", "Indien");
String r = residence["Koningin Beatrix"]; // - -> residence.get("Koningin Beatrix");
Das sieht auf den ersten Blick gut aus. Der Code ist jedoch kürzer und leichter zu lesen, während viele gute Dinge wie Typsicherheit (die Liste ist immer noch eine Liste) und Polymorphismus (die Indexoperatoren sind auf den Java-Kernschnittstellen definiert und funktionieren in jeder Implementierung) beibehalten werden. Als ich das fortgeschrittenere Beispiel las, begann sich etwas in meinem Kopf zu regen.
residence["Maarten Winkels"] = residence["Koningin Beatrix"] = "Palace";
Was sagt Ihnen also diese Codezeile? Vielleicht müssen Sie sie sich noch einmal ansehen, bevor Sie Ihre Antwort geben. Zunächst könnten Sie zu dem Schluss kommen, dass die Königin ("=Koningin") und ich uns einen Palast teilen werden. Das ist doch das, was die normale "doppelte" Zuordnung bedeutet, oder? Beide Variablen werden den gleichen Wert haben. Denken Sie um! Die Königin wird in einen Palast umziehen und ich bleibe an dem Ort, an dem sie vorher gewohnt hat (was vielleicht immer noch in Ordnung ist...)! Der Grund dafür ist, dass die Put-Operation auf einer Map tatsächlich den zuvor gespeicherten Wert zurückgibt. Der Code lässt sich wie folgt übersetzen:
residence.put("Maarten Winkels", residence.put("Koningin Beatrix", "Palace"));
Damit sollte klar sein, dass ich einen anderen Wohnsitz habe als die Königin. Wenn der Königin in der
Verfasst von
Maarten Winkels
Contact



