Nicht größer ist nicht gleich kleinergleich
In einer Kraut und Rüben – typisierten Sprache wie PHP ist das Gegenteil von Größer ( > ) nicht unbedingt Kleinergleich ( <= ).
Immer wieder komme ich auf Sachen, die ich so löse:
if(!($id > 0))
Wenn ich herausfinden will ob z.b. eine User-Id wirklich gültig (also größer Null ist) ist. In der kleinen Zeile sind gleich mehrere Annahmen:
- Größer kann etwas nur sein, wenn es auch eine Zahl ist. Ist also auch eine Prüfung, ob es sich um eine Zahl handelt.
- Die Variable kann auch (wenn schlecht programmiert wurde) null sein oder einen String enthalten.
Wäre
$id = “hi”;
Würde eine umgestellte Abfrage
if($id <= 0)
nicht greifen. In dem Fall liegt ja auch wieder eine Prüfung auf eine Zahl inne. Nur diesmal nicht zu unserem Vorteil sondern zu unserem Nachteil. Währenddessen die ursprüngliche Abfrage auch kein Problem damit hat, wenn $id ein String ist.

am 30.09.2009 um 20:24
Mir ist gerade wieder, ähnlich einem Schlag ins Gesicht, klargeworden, wozu man statische Typsysteme erfunden hat und warum ich nie wieder mit dynamischen programmieren will.
am 30.09.2009 um 22:24
PHP is n schlechtes Beispiel für dynamisch typisierte Sprachen. Das DuckTyping von Ruby ist genial
am 01.10.2009 um 00:33
Jo, wie KB schon sagt muss man da zwischen strong dynamic typing und weak dynamic typing unterscheiden.
Wobei ich ruby auch nicht als genial ansehen würde. Ich ärger mich immer wieder über das konvertieren. Beispiel: to_s:
puts “Zahl: ” + i.to_s