Ich habe mir die Problematik noch einmal angesehen, dass man beim Erstellen von Status Variablen keinen echten Standardwert setzen kann, da nie bekannt ist, ob die Variable erstellt wurde, oder nicht. (Es wäre aufwendig möglich, indem man vor dem Aufruf prüft, ob die SV vorhanden war…)
Die damalige Idee war, dass man als Rückgabeparameter nicht die ID, sondern einen Boolean Wert liefert. Das würde jedoch die Abwärtskompatibilität beeinträchtigen. Zur 5.0 hätten wir die Chance dies zu ändern. Insgesamt würde die Änderung auch sehr einfach zu bewerkstelligen sein und (sofern man das neue Feature nicht nutzt) wäre eine einfache Kompatibilität zu 4.4 und älter und gleichzeitig 5.0 sehr einfach möglich.
Vorschlag zur 5.0
//Setze 18.5 als Standardwert beim Erstellen der Variable
if($this->RegisterVariableInteger("SollTemperatur", "Soll Temperatur", "Temperature", 0)) {
SetValue($this->GetIDForIdent("SollTemperatur"), 18.5);
}
Was müsste angepasst werden in alten Modulen, sofern der Rückgabewert genutzt wird?
Vorher:
$id = $this->RegisterVariableInteger("SollTemperatur", "Soll Temperatur", "Temperature", 0);
SetValue($id, 18.5);
Nachher:
//Da die ID nicht mehr kommt, müsste zur Zeit GetIDForIdent genutzt werden*
$this->RegisterVariableInteger("SollTemperatur", "Soll Temperatur", "Temperature", 0);
SetValue($this->GetIDForIdent("SollTemperatur"), 18.5);
Was haltet ihr von dem Vorschlag?
Anmerkung: Da in Zukunft ein neues $this->SetValue kommt, um das ReadOnly Flag und Sandboxing korrekt zu verwirklichen (@Nall-Chan erklärt euch gerne warum das wichtig ist :D), wird diese Änderung sowieso irgendwann notwendig. Jedoch ist diese Änderung jetzt ein Breaking Change - die SetValue Geschichte könnte man langsam über eine Deprecated Warning einführen. Sobald diese also „durch ist“, ist der Rückgabewert obsolete. Wir könnten also ggf. die Änderung des Rückgabewertes bis zur 6.0 zurückstellen, wodurch es kein Breaking Change mehr wäre.
Bonus: In dem Zuge würden wir auch die ConnectParent, RequireParent und ForceParent Funktionen anpassen, sodass dort auch ein Boolean Rückgabewert vorhanden ist, der das Erstellen der Instanz signalisiert.