Richard Voß: Was bedeutet !==

Beitrag lesen

[is_not_false]
Das springt doch immernoch jeden an

Verstehe ich nicht.

while( x )
while( is_not_false( x ) )

Sicherlich, die Benennung war vielleicht sehr ungeschickt.

Hingegen ist

while( defined( x ) )

deutlich etwas anderes und leuchtet ein.

Wenn es Dir einleuchtet (mir nicht) dann kannst Du die PHP-Funktion auch gerne defined nennen. (oder is_defined, falls defined ein reserviertes Wort ist, das weiß ich nicht auswendig)

Es stimmt aber nicht. Ich prüfe ja nicht auf Definiertheit, sondern daruf, ob der Wert ein boolscher ist und auch noch false. Ich prüfe nicht, ob der Wert false ist, sondern ob er auch den reinen Typ boolean hat.

Die Funktion müsste

is_not_false_boolean( whatever ... )

heissen.

Weil es in Perl nur wenige Haupttypen an Variablen gibt: Skalare, Listen, Hashes, Dateidesktriptoren, Objekte und Referenzen. Eine Zahl, ein Bool-Wert und eine Zeichenkette werden alle durch den gleichen "Typ" repräsentiert.

Nein. Es gibt in Perl Skalare,Arrays und Hashes. Listen existieren nur intern.

In SELFHTML heißen die Arrays Listen, daher habe ich sie Listen genannt. Die Variablen mit dem @ davor, um es mal bildlich auszudrücken. Aber mit den Objekten und Referenzen habe ich mich wirklich vertan.

Das ist an dieser Stelle eigentlich unangebracht, aber der Perl-Abschnitt von Selfhtml ist keiner, der dazu dienen kann, Perl zu lernen :)

Nur gelingt es Perl, den Programmierer von diesen internen Typen fast nichts spüren zu lassen, dann schliesslich _will_ ich ja diesen typlosen Umgang.

PHP definiert ganz deutlich diese Typen. Wenn Dir das nicht gefällt, dann musst Du PHP auch nicht verwenden.

psst: mach ich auch nicht, aber http://www.wikiservice.at/dse/wiki.cgi?NiemandWirdGezwungen

Das Problem am Typkonzept ist, dass es inkonstistent ist und den Programmierer mit Dingen belästigt, die er doch eigentlich nicht will.

Woher willst Du wissen, was "der Programmierer" will oder nicht?

Der Programmierer will Konsistenz, aus dem einfachen Grund, weil Programmieren ohne konsistente Umgebungen keinen Spaß macht und Fehler produziert.

Wenn ich diesen Typquatsch will, nehme ich Java oder C zur Hand Will ich es nicht, nehme ich PHP, aber ich bekomme es trotzdem.

Nein. Es ist ganz einfach: Wenn Du diesen "Typquatsch" (wie Du ihn nennst) willst, dann nimmst Du Java, C oder PHP. Wenn Du ihn nicht willst, dann nimmst Du Perl.

Aber warum macht PHP den typquatsch dann nicht richtig? Nein, es hat, wie Perl, generall automatische Typkonvertierung. Mehr noch: es hat sogar implizite Typkonvertierung, wo nicht einmal Perl eine hat (== vs eq). Es versteckt den Typ einer Variablen, der Typ ist im Code nicht sichtbar. (es gibt kein "int $x = 5")

Trotzdem kann man so eine einfache Aufgabe wie eine while( readdir ) Schleife nicht korreakt realisieren, ohne tiefgreifendes Wissen über interne Typen zu haben. Viel mehr ist die Syntax verwirrend und erzeugt logisch redundante Konstrukte, wie

while( false !== (...) )

Ich verstehe Dein Problem wirklich nicht: Du magst Typen nicht.

Ich mag sie. Ich liebe sie. Die Möglichkeit der fixierten Typisierung in Perl 6 ist eine meiner liebsten Neuerungen. Aber ich mag es eben konsistent und schlüssig.

PS: Im Übrigen ist $a === $b nur eine Abkürzung für ($a == $b) && (gettype ($a) == gettype ($b))

Ja, das ändert nichts an der Imperfektion des Ganzen.