Banale Fehler?

Ich arbeite täglich mit mehreren Sprachen und viele meiner Fehler sind auf babylonische Syntax-Verwirrungen zurückzuführen.
Mein bebliebtester ist = anstatt == als Vergleichsoperator, wenn ich mal wieder von SQL oder Basic auf PHP, JS oder C gewechselt habe. In PHP liefert ja eine Zuweisung à la ($x = 0) als Ergebnis true, gleichzeitig ist der Inhalt von $x versaut. Alles läuft ohne Fehler durch - obwohl man ja eigentlich ($x == 0) meinte - bei sowas hat mich das Debuggen schon Stunden gekostet.
 
PHP liefert bei einer Zuweisung den zugewiesenen Wert. Ein $x = 0 liefert also den Integerwert 0. Beweis:
PHP:
var_dump($x = 0);
Ich arbeite wo es möglich ist gerne mit dem Identitäts-Vergleichsoperator („===“, auch typensicherer Vergleichsoperator genannt), der dazu sogar etwas schneller zu sein scheint.
 
PHP liefert bei einer Zuweisung den Wert der Zuweisung. Ein $x = 0 liefert also den Integerwert 0. Beweis:
PHP:
var_dump($x = 0);
Ich arbeite wo es möglich ist gerne mit dem Identitäts-Vergleichsoperator („===“, auch typensicherer Vergleichsoperator genannt), der sogar etwas schneller zu sein scheint.

Yep, blödes Beispiel. Besseres Beispiel wäre z.B. ($x = 42) gewesen. Es ist ja so, dass PHP 0 als false interpretiert, alle anderen Zahlen als true. So liefert z.B.
PHP:
$x = 0; echo ($x = 42) ? 'ja ' : 'nein '; echo $x;
Code:
ja 42
Nicht gerade was der Programmierer wollte.

Klar, ich verwende auch wo's geht die typ-sichern Vergleichsoperatoren - bloß wenn man den ganzen Vormittag in Basic programmiert hat und dann am Nachmittag am PHP-Projekt weiterbastelt, dann sind so manche Synapsen schon mal etwas verpolt...
 
Code:
bool isValid( int val ){
   if( val < 100 );
   return true;
   return false;
}
Ich hab 3h gebraucht um den Fehler zu finden. Seit dem setz ich immer Klammern.^^
 
Das Beispiel von kle-ben ist typisch fuer Funktionen mit boolschem Rueckgabewert. Es wird verkompliziert und damit leichter Fehler eingebaut. Der Compiler sollte es zwar anders schreiben, Fehler erkennt er aber nicht.
 
Ja, ja das Hin und Her wechseln zwischen verschiedenen Programmiersprachen sorgt schon machmal für Überraschungen.

Ich setze mittlerweile auch meist Klammern bzw. begin .. end Böcke (Objectpascal) auch wenn sie eigentlich nicht benötigt werden. Dies hat nach meinen Erfahrungen gleich mehrere Vorteile:
1. Man vermeidet Fehler, insbesondere bei Verschachtlungen, die sich meist nur schwer finden lassen.
2. Wenn man später Codezeilen ergänzen möchte, ist dies einfacher, da man nicht mehr auf Codeblöcke achten muß, denn die sind ja schon da
3. Der Quelltext läßt sich besser lesen und man erkennt i.d.R auch noch nach einem Jahr, was man da verbrochen hatte

Da die Compiler / Interpreter normalerweise Code optimieren, stören die nicht erforderlichen Klammerungen auch nicht weiter und es ist auch guter Programmierstil, wenn der Quelltext übersichtlich gestaltet wird. Oftmals wird auf Klammerungen nur aus Bequemlichkeit verzichtet. Dies ist genau so wie mit Kommentaren - auch diese gehören zum guten Programmierstil.
 

Neue Beiträge

Zurück