Javascript des tages

Na, kann in javascript der ausdruck (a == 1 && a == 2 && a == 3) irgendwie true ergeben? Das kann in einer halbwegs gesunden programmiersprache doch gar nicht passieren, oder?

Ähmmmmm… unter umständen kann es doch passieren.

Dieses javascript ist und bleibt eine extratolle programmiersprache. 😉

via Fefe.

Und ja, man kann so etwas auch in anderen programmiersprachen verursachen. Zum beispiel in C++, das ich zwar nicht (mehr) besonders mag, aber für eine durchaus benutzbare programmiersprache halte:

 
#include <iostream>

using namespace std;

class krank 
{ 
private: 
  int t; 
public: 
  krank () : t(1) { } 
  bool operator== (int i) { return i == t++; } 
};

int main (int argc, char **argv) 
{ 
  krank a; 
  cout << ((a == 1 && a == 2 && a == 3) ? "Krank" : "Gesund") << endl; 
  return 0; 
} 

C++-progger sind vermutlich nicht so gestrickt, dass sie jemals auf solche ideen für einen gaga-nebeneffekt im vergleichsoperator kämen. In javascript hingegen lässt sich so eine wertinkonsistenz eines objektes mit leichtigkeit „versehentlich“ erzeugen, wenn einer der verstrahlteren javascript-progger einen getter mit nebeneffekten gemacht hat, und so tritt das kranke verhalten dann halt irgendwann auch mal in „freier wildbahn“ auf…

Wehe dem, der dann darin die fehler suchen muss! 😦

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.