ich habe eine alte Übungsaufgabe ( Thema: Nebenläufige Programmierung ) gefunden, bei welcher ich die Aufgabenstellung nicht ganz verstehe ( brauche keine Lösung ).
Ist hier das Arbeiten mit Futures gemeint?
Aufgabe:
Gegeben ist die folgende Klasse mit unveränderlichen x- bzw. y-Koordinaten eines Punktes.
getDistance() soll die Distanz des Punktes zum Ursprung liefern. Die Distanz soll weder bei der Initialisierung gesetzt werden, noch bei jedem Aufruf neu berechnet werden (da mit x und y auch die Distanz konstant ist).
Also ich verstehe das so, dass Werte, die berechnet werden können, nicht sofort berechnet werden. Erst wenn der Wert benötigt wird, wird dieser berechnet. Das findet sich nicht nur bei Berechnungen sondern auch beim Laden von Inhalten.
So werden ggf. Dinge aus einer Datenbank erst geladen, wenn auf diese zugegriffen wird. Wichtig kann sein, dass ggf. Ergebnisse invalide gemacht werden müssen. Also wenn es sowas wie "setX" und "setY" gibt, dann müsste man da distance wieder auf 0 oder so setzen. (Finde ich hier blöd gemacht, da 0 ja ein gültiger Wert ist. Daher wäre ein -1 oder so evtl. besser.)
Die Funktion Math.sqrt(x*x + y*y*) wird nie einen negativen Wert zurückgeben, deshalb kann getrost gg. den negativen Initialisierungswert geprüft werden.
Das ist jetzt Geschmackssache. Ich persönlich finde es sauberer das mit null zu initialisieren und danach mit den "richtigen" Werten zu arbeiten. Wenn es negativ initialisiert wird, dann ist das in meinen Augen einfach falsch!
Ja, da gebe ich Flown zu 100% Recht. Daher habe ich das ja auch versucht zu thematisieren. Im Code war halt nur schon der Typ double vorgegeben. Aber eine Änderung zur Klasse Double ist mehr als angebracht. Bei einem Code Review würde ich auch immer auf genau dies Wert legen.
Wenn aber eine Vorgabe 1:1 genutzt werden muss, dann geht es ja leider nicht und die Vorgabe hatte ich so verstanden, dass nur noch nach dem Getter gefragt war.
Und ich finde es nicht falsch, erstens, weil es sehr lokal ist und der Wert nie die Außenwelt sieht, zweitens, weil per Definition der Berechnung nie ein negativer Wert entsteht und in diesem Fall ein negativer Wert semantisch identisch zu null ist und drittens, da Java keine value-Typen hat, man so auf Autoboxing sowie eine weitere Indirektion verzichtet.
Jetzt müsste man erst einmal definieren, was richtig und was falsch ist.
Richtig mag es sein, weil es funktioniert. Damit könnte man sich zufrieden geben.
Richtig mag es sein, weil es durch die Aufgabe vorgegeben ist. Es ist halt nur die Funktion zu schreiben, die genau dies implementiert.
Falsch ist es aber, wenn man sich mit Clean Code auseinander setzt. Das -1 ist weder intuitiv verstehbar noch hat es die Bedeutung von "kein Wert vorhanden". Daher ist es im Rahmen einer Code Review direkt anzupassen. (Das wäre die Position, die ich bei einer Code Review vertreten würde. Denn die Punkte von oben sind in keiner Weise ausreichend für eine richtige Lösung! Das merkt man dann, wenn man größere Projekte pflegen und warten muss!)
Daher meine klare Position bezüglich falsch was die generelle Thematik angeht. Auch wenn eine solche Lösung für die gestellte Aufgabe falsch ist, da hier ja das Feld vorgegeben wurde.
Und ich finde es nicht falsch, erstens, weil es sehr lokal ist und der Wert nie die Außenwelt sieht, zweitens, weil per Definition der Berechnung nie ein negativer Wert entsteht und in diesem Fall ein negativer Wert semantisch identisch zu null ist und drittens, da Java keine value-Typen hat, man so auf Autoboxing sowie eine weitere Indirektion verzichtet.
Entschuldige ich wollte nicht ausdrücken, dass die Variante an sich falsch ist, da du recht hast. Ich wollte nur ausdrücken, dass der Wert distance an sich mit -1 falsch ist und ein ungültiger Wert in meinen Augen ist!