Skript kürzen?

Habe im Dashboard eine Combobox eingerichtet, die mir eine Integervariable mit Werten von 0-8 schreibt. Mein Script liest diese Integervariable(34853) aus und schreibt damit eine Floatvariable(33401) mit neuen Werten:

Integer - Float
0 - 0
1 - 22
2 - 23
3 - 24
4 - 25
5 - 26
6 - 27
7 - 28
8 - 100

 $soll=GetValue(34853 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen\Zwischenvariable]*/);
 //echo $soll;
 if($soll == "0")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "0");
 }
 elseif($soll == "1")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "22");
 }
 elseif($soll == "2")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "23");
 }
 elseif($soll == "3")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "24");
 }
 elseif($soll == "4")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "25");
 }
 elseif($soll == "5")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "26");
 }
 elseif($soll == "6")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "27");
 }
 elseif($soll == "7")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "28");
 }
 elseif($soll == "8")
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, "100");
 }

Das Script funktioniert; jedoch denke ich, dass man es über eine Array-Abfrage kürzer schreiben kann. Aber wie?

Gruß
immergut

Ungetestet:



$temperaturen=array(
	0=>"0",
	1=>"22",
	2=>"23",
	3=>"24",
	4=>"25",
	5=>"26",
	6=>"27",
	7=>"28",
	8=>"100"
);
$sollwert=(int)GetValue(34853 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen\Zwischenvariable]*/);
SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, (float)$temperaturen[$sollwert]);


oder ohne Array:

 $soll=(int)GetValue(34853 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen\Zwischenvariable]*/);
 //echo $soll;
 if($soll == 0)
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/,0);
 }
 elseif($soll >= 0 AND $soll <=7)
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/,(float)($soll+21));
 }
 elseif($soll >=8)
 {
 SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, 100);
 } 

Das ist nun nicht so schön und vor allem kann man keine „Lücken“ haben, was mit dem Array geht, aber denkbar wäre, wenn es wirklich diesen diskreten Bereich abdecken soll, auch sowas:


$soll=(int)GetValue(34853);
switch( $soll )
{
	case 0: $val=0; break;
	case 8: $val=100; break;
	default: $val= 21 + $soll;
};
SetValue(33401 /*[Dashboard\Wohnzimmer\WZ Solltemp setzen]*/, $val);

Wat heisst hier „nicht so schön“ slap

:smiley:


 $soll = GetValue(34853);
 $x = ($soll == 0) ? 0 : (($soll == 8) ? 100 : 21+$soll);
 SetValue(33401, $x);

sysruns Variante als Kurzform :slight_smile:

paresy

PS: Ich mag die Array Variante am liebsten. Liest sich besser.

Sinn und Zweck ist es doch im Endeffekt dass ich das was ich schreibe auch verstehe und nicht wie lang oder kurz ein Script ist.

Was nutzt mir ein 5 zeiler der das selbe macht wie 70 Zeilen ich als Benutzer dann aber nur Bahnhof davon verstehe. :rolleyes:

FACK to Rainer!

Die Einsparungen für kurzen Code liegen mit PHP meist im einstelligen ms-Bereich!

Danke für eure Antworten. Werde das Script mit dem Array benutzen. Da ich ja von PHP kaum etwas verstehe, nehme ich das Array; da kann ich auch gut nachvollziehen, was passiert.

@nancilla:

Ich teile diese Ansicht nicht ganz - und leider fehlen dazu auch Aussagen des Herstellers, z.B. zu Ladezeiten etc. Eine einfache und sichere Mess-Möglichkeit fehlt m.E. leider. Das mag an IPS oder am WIN selbst liegen, keine Ahnung.

Wenn ich ein Script aus dem Editor rennen lasse, habe ich teilweise irre Differenzen in der Laufzeit 3 ms und teilweise bis 20 ms sind überhaupt keine Seltenheit. Wie soll da ein Rückschluss auf die echte Laufzeit und auf die erzielbare Einsparung gezogen werden?

Es mag sein, dass die Einsparung im einstelligen ms Bereich liegt, wenn ich ein einzelnes Script und eine einzelne „Einsparung“ ansehe, z.B. wie hier diskutiert.

Ganz anders wird es da m.E., wenn ich Scripte habe, die sehr häufig - im zweifel in paar -zig wenn nicht sogar 100 mal pro Benutzung laufen (service-routinen) bzw. die z.B. zentralen Charakter haben und von mehreren Scripten parallel benutzt werden. Da kommen dann doch schnell mal 50 und mehr ms zusammen, was, z.B. beim Einschalten des Lichts oder zeitkritschen Anwendungen (z.B. das auslesen eines Puffers, habe das Problem akut) zu Verzögerungen oder gar Ausfällen führen kann.

Ich habe, solange ich programmiere (Z80, 6502), immer diesen Twist gehabt, dass Leute abgewunken haben „wir haben übrig Rechenleistung“ und es im Endeffekt doch immer irgendwo geklemmt hat - gleiches gilt für Speicherkapazität. Es gab Zeiten, da haben wir 10MB Festplatten als „groß“ eingestuft.

Mein Fazit ist: Ein Programm kann niemals schnell genug laufen.

Insofern finde ich es durchaus löblich und ernsthaft diskutierenswert, wenn sich jemand um Optimierung von Code einen Kopf macht.

jwka

Das kommt immer auf die Baustelle an. Im Sandkasten würde ich nicht mit einem 80 Tonnen Bagger spielen. :wink:

Ja, das stimmt wohl. Allerdings sind das in diesem Fall „Äpfel und Birnen“. PHP ist ne Interpretersprache, da wird nichts vorher in Maschinencode gewandelt. Daher auch die Laufzeitdifferenzen: Wenn im Hintergrund andere Prozesse parallel zum PHP-Compiler/Interpreter laufen dann ergeben sich eben solche „Reisser“. PHP lässt sich eigentlich nicht absolut Optimal auf Laufzeiten trimmen.

Klar muss man überlegen wie man Schleifenfunktionen etc. aufbaut (Vorzeitigen abbrechen etc.). Aber zu versuchen in PHP ein paar Milisekunden rauszukitzeln ist gelinde gesagt „Blödsinn“ weil nicht möglich.

Kann man so sehen, will auch niemand bekehren.

Ich sehe es halt nunmal so:
Ich versuche, die Dinge überall so effizient und pflegbar wie möglich zu machen.

Zur Sache mit dem Bagger:

Für viele Menschen, die eine Wechselschaltung schon als genügend komfortabel für die Haussteuerung halten, rutschen wir alle hier auf Megatonnen-Bagger in einer 2qm Baustelle rum.

Alles eine Frage des Betrachtungswinkels, nicht wahr?:wink:

jwka

Wir sind ein freies Land und ein freies Forum (ich höre schon wieder Gegenstimmen :-)) und ja es gibt auch 370° Betrachtungswinkel.:wink:

@jwka

Ich schrieb ja extra „PHP“!.. in Assembler sparst du ja mit jedem Byte… das ist mir klar… aber PHP ist „sehr“ objektorientiert, was dem Vergleich mit 80’er-Prozessor eher einem Vergleich mit Bananen und Birnen, als Äpfel mit Birnen gleichsteht.