ANUBIS: Stress mit Switch-Anweisung

Hallo!
Die Switch-Anweisung is ja ganz gut und schön, aber sie hat auch einige Macken...

1. Der einzige Operator, der möglich ist, ist ==, der ja durch case automatisch definiert wurde. Andere wie < funzen nich.

2. Es is nich möglich, Bedingungen wie bei der if-Anweiung mit && bzw. || zu verbinden.

3. Nach case muss immer eine Zahl eingesezt werden, eine Variable wird nicht berücksichtigt. Selbst wenn der Wert der Variable ins Formular richtig eingegeben wurde, wird die Default-Anweisung ausgeführt.

Bei diesen drei Dingen habe ich hunderte von Möglichkeiten probiert (Klammern usw.), doch niemals hat es funktioniert.
Ich frage mich jetzt: Bin ich einfach nur zu blöd oder geht das wirklich nicht???

Thank You!
mfg ANUBIS

  1. hi,

    Die Switch-Anweisung is ja ganz gut und schön, aber sie hat auch einige Macken...

    nein, sie ist lediglich für das, was du vorhast, ungeeignet.

    1. Der einzige Operator, der möglich ist, ist ==, der ja durch case automatisch definiert wurde. Andere wie < funzen nich.

    ja. und?

    1. Es is nich möglich, Bedingungen wie bei der if-Anweiung mit && bzw. || zu verbinden.

    ja. und?

    1. Nach case muss immer eine Zahl eingesezt werden, eine Variable wird nicht berücksichtigt. Selbst wenn der Wert der Variable ins Formular richtig eingegeben wurde, wird die Default-Anweisung ausgeführt.

    keine zahl, aber ein _wert_. die variable steht im switch(), und wird in den cases mit festen werten verglichen.
    und?

    Ich frage mich jetzt: Bin ich einfach nur zu blöd oder geht das wirklich nicht???

    wenn dein auto nicht über's wasser fahren will - hat es dann "ein paar macken", oder hast du es vielleicht einfach nur nicht nach seinem vorgesehenen einsatzzweck verwendet?

    gruss,
    wahsaga

    --
    http://wazgnuks.net/ - back from the dead
  2. Hallo Anubis,

    Die Switch-Anweisung is ja ganz gut und schön, aber sie hat auch einige Macken...

    1. Der einzige Operator, der möglich ist, ist ==, der ja durch case automatisch definiert wurde. Andere wie < funzen nich.

    richtig, dafür ist if() zuständig.

    1. Es is nich möglich, Bedingungen wie bei der if-Anweiung mit && bzw. || zu verbinden.

    richtig, so etwas würde man dann mit einem if() machen.

    1. Nach case muss immer eine Zahl eingesezt werden, eine Variable wird nicht berücksichtigt.

    ja, das wurde seinerzeit so festgelegt.

    Ich frage mich jetzt: Bin ich einfach nur zu blöd oder geht das wirklich nicht???

    Ich weis nicht was genau dir vorschwebt. Aber du kannst if() und switch() deinen wünschen entsprechend mischen:

    if(a<4) {
      switch(a) {
        case 1:
        case ...
    else
      foo();

    Alles klar?

    Grüße,

    Jochen

  3. Ja bloß...
    Ich will ne Anweisung machen, die etwa 2000 Möglchikeiten berücksichtigt. Da kann ich nicht mit if else anfangen...
    Übrigens, stürzt der IE bei 6k-8k Zeilen Code ab???
    ANUBIS

    1. Hallo,

      Ich will ne Anweisung machen, die etwa 2000 Möglchikeiten berücksichtigt. Da kann ich nicht mit if else anfangen...

      Das kommt darauf an: Du kannst die 2000 Möglichkeiten aber bestimmt so strukturieren, dass Du einige Abfrage zusammenfasst. Da kommen dann bestimmt keine 2000 Abfragen zusammen. Näheres dazu kann man aber nur sagen, wenn man den Gegenstand Deiner Abfragen kennt...

      Übrigens, stürzt der IE bei 6k-8k Zeilen Code ab???

      Nur wenn dicke Fehler im Code sind...

      ;o) bluntburn

      --
      jeden Tag 'ne Currywurst...
      1. Moin!
        Ja gut...
        2000 Möglichkeiten brauche ich WIRKLICH, und jede der 2000 hat noch mal so 2 bis 3 Möglichkeiten (Haltet mich BITTE nihct für verrückt!!)
        Wenn nicht switch, wass soll ich dann nehmen?? Zusammenfassen geht nicht...
        Thank You!
        mfg
        ANUBIS

        1. 2000 Möglichkeiten brauche ich WIRKLICH, und jede der 2000 hat noch mal so 2 bis 3 Möglichkeiten (Haltet mich BITTE nihct für verrückt!!)
          Wenn nicht switch, wass soll ich dann nehmen?? Zusammenfassen geht nicht...

          keine Ahnung kommt darauf an wie deine Struktur aussieht. Normalerweise ein assoziatives Array oder eine Funktion.

          Struppi.

    2. hi,

      Ich will ne Anweisung machen, die etwa 2000 Möglchikeiten berücksichtigt. Da kann ich nicht mit if else anfangen...

      dann solltest du zunächst einmal das konzept überdenken.

      wenn so viele abfragen innerhalb eines scriptes nötig sind (bzw. eher nötig erscheinen), scheint mir da das konzept zumindest zweifelhaft zu sein.

      gruss,
      wahsaga

      --
      http://wazgnuks.net/ - back from the dead
    3. Ich will ne Anweisung machen, die etwa 2000 Möglchikeiten berücksichtigt. Da kann ich nicht mit if else anfangen...

      Ich hab noch nie switch case verwendet und auch noch nie das Gefühl gehabt das ich es brauche. In der Regel läßt sich sowas mit assoziativen Arrays eleganter lösen.

      Struppi.

    4. Hi,

      Ich will ne Anweisung machen, die etwa 2000 Möglchikeiten berücksichtigt. Da kann ich nicht mit if else anfangen...

      Und auch nicht mit switch case. Da muß es besseres geben ... ;-)

      Übrigens, stürzt der IE bei 6k-8k Zeilen Code ab???

      Nein, keine Version.

      Gruß, Cybaer (der in knapp 9 Jahren JS-Programmierung switch case noch nie verwendet und nie vermißt hat)

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  4. Hallo Anubis.

    1. Es is nich möglich, Bedingungen wie bei der if-Anweiung mit && bzw. || zu verbinden.

    Also das || kannst du zumindest improvisieren:

    case 1:
    case 2: ... break;
    default: ...

    heißt soviel wie:

    if (1||2) ...
    else ...

    MfG _Siro.

  5. Hallo,

    Bei diesen drei Dingen habe ich hunderte von Möglichkeiten probiert (Klammern usw.), doch niemals hat es funktioniert.
    Ich frage mich jetzt: Bin ich einfach nur zu blöd oder geht das wirklich nicht???

    Mit switch kann man auch auf true/false pruefen und bei den cases entsprechende Bedingungen formulieren:

    function bla(xyz)
    {
      switch(true)
      {
        case(xyz<=10):
        alert("Der Wert ist kleiner als 10 oder gleich 10.");
        break;

    case(xyz>10 && xyz<20):
        alert("Der Wert liegt zwischen 10 und 20.");
        break;

    case(xyz>=20):
        alert("Der Wert ist groesser als 20 oder gleich 20.");
        break;

    default:
        alert("Kein Ergebnis erhalten."); // wenn xyz z. B. ein String ist
        break;
      }
    }

    bla(5);
    bla(15);
    bla(20);
    bla("abc");

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
    1. Hallo Thomas,

      switch(true)
        {
          case(xyz<=10):

      Das bringt den Netscape 4 zum Absturz beim Parsen des Quellcodes (nicht einmal beim Ausführen), wenn JavaScript aktiviert ist.

      Viele Grüße,
      Christian

      1. Hi,

        Das bringt den Netscape 4 zum Absturz beim Parsen des Quellcodes (nicht einmal beim Ausführen), wenn JavaScript aktiviert ist.

        Nur der Vollständigkeit halber (für Old-Browser-Junkies wie meiner einer ;-)): Und ältere Navigatoren kriegen beim Parsen (nicht Ausführen) von switch generell die Krise.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. Hallo,

        switch(true)
          {
            case(xyz<=10):

        Das bringt den Netscape 4 zum Absturz beim Parsen des Quellcodes (nicht einmal beim Ausführen), wenn JavaScript aktiviert ist.

        Das hatte ich noch gar nicht bemerkt, wobei ich switch(true){...} in online gestellten HTML-Dokumenten auch nicht verwendet habe -- bei dieser SVG-Anwendung: http://svglbc.datenverdrahten.de/?code=wavelength2rgb fand ich es mal ganz praktisch.

        BTW: Auch PHP kann switch(true|false) analog verarbeiten.

        MfG, Thomas

        --
        SVG - Learning By Coding
        http://svglbc.datenverdrahten.de/