Hi!
Stimmt, ich habe mich tatsächlich geirrt. Ich habe Codeausschnitt und Erklärung verkehrt zugeordnet. Die eigentliche Aussage bzw. die Erklärung ist aber in der Sache richtig, behaupte ich mal.
Ja.
Wobei ich noch nie verstanden habe, warum man extra einen Boolean-Typ definiert, obwohl der keine andere Aussage transportiert als die andernorts ersatzweise verwendeten numerischen Konstanten 0 oder 1 (oder allgemein 0 und !=0).
Doch, wenn man typsicher arbeitet, will man den Unterschied genauso haben wie den zwischen NULL und 0.
Gut, in PHP hat man daraus insofern eine Tugend gemacht, als Funktionen einen numerischen Wert _oder_ false zurückgeben können, und das sogar unterscheidbar ist.
Eben. Siehe strpos(): "gefunden an Position 0" ist was anderes als "nicht gefunden" (false). Wenn du diese beiden Fälle auseinanderhalten willst, brauchst du ohne Boolean einen weiteren Zahlenwert, wie -1. Auf den müsste man dann wieder extra vergleichen. Dumm nur, dass man wegen PHPs automatischer Typumwandlung und dem nicht typsicherem Auswerten des if-Arguments explizit typsicher auf false vergleichen muss.
Allerdings hat man in Sprachen mit starker Typisierung nicht die Möglichkeit, Boolean und Integer gemixt zurückgeben zu können. Trotzdem sehe ich da die Existenz von Boolean nicht als überflüssig an. Wenn (wie in C#) definiert ist, dass if nur boolesche Werte auswerten darf, kann man nicht aus Versehen einen Ausdruck notieren, der Integer zum Ergebnis hat. Da hat schon der Compiler was dagegen. Hier muss man typsauber vergleichen oder explizit typecasten, was auch dem Code-Leser beim verstehen der Intention hilft. C dürfte da nachlässiger sein und maximal eine Warnung werfen.
Lo!