Rolf b: Gibt es einen Sinn für Anweisungen in if-Bedingiungen?

Beitrag lesen

Wie schon geschrieben - mit "= false" macht es keinen Sinn, es muss schon etwas sein, dessen Wert sich pro ändern kann. Und dann ist

   if (variable = any_expression) {
      // action for true-ish value
   } else {
      // action for falsy value
   }

   while (row = get_next_row()) {
      // row processing
   }

   // oder ganz "geschickt":
   for (var db = open_database(); row = get_next_row(db); ) {
      // row processing
   }

durchaus eine sehr typische und häufige Formulierung für Sprachen wie C, Java, JavaScript oder PHP.

Warum? Weil Programmierer faul sind, weil die alten Optimizer noch nicht so viel taugten, und man auf diese Weise 3 Bytes Source- und Object-Code sparen konnte. In einer Schleife wird es nochmal eine Nummer schicker.

LEIDER!!!

Was sind die Fallstricke?

  • Man kann = und == verwechseln
  • Man setzt implizit voraus, dass die Sprache auch nicht-boolesche Werte in Bedingungen zulässt und sie nach gewissen Regeln als truthy oder falsy interpretiert.

Es gibt durchaus Sprachen, die diese Konstrukte schlichtweg verbieten, z.B. C#. Nicht weil die Sprachentwickler zu blöd waren, sondern weil dieses Konstrukt fehlerträchtig ist. Warum tut es so weh, folgendes zu schreiben:

   var row = get_next_row();
   while (row !== null) {
      // process row
      row = get_next_row();
   }

Oder wenn man schon kompakt sein will:

   while ((row = get_next_row()) !== null) {
      // process row
   }

Das ist eh das, was der Compiler unter der Haube täte.

Rolf