einfach JS Frage
Xeroooo
- javascript
Hallo
ich habe ne sicherlich einfache Frage...
Ich wollte nur mal wissen ob man mit der Fallunterscheidung auch Berreiche abfragen kann ... also zum beispiel > 1 oder so.
danke für die Antwort
hi,
Ich wollte nur mal wissen ob man mit der Fallunterscheidung auch Berreiche abfragen kann ... also zum beispiel > 1 oder so.
switch(true) {
case a > 5:
...;
break;
case a <= 5:
...;
break;
}
sollte m.W. auch in javascript funktionieren.
gruß,
wahsaga
Danke für die hilfe, jedoch kann man doch mit
switch(true) {
case a > 5:
...;
break;
case a <= 5:
...;
break;
}
nur den berreich von unter 5 und den von gleich oder größer fünf abdecken, aber was is wenn ich nun auch noch genau die zahl 7 oder 1 haben will?`
MFG Xeroooo
hi,
Danke für die hilfe,
hast du's ausprobiert, bevor du dich bedankst? :-)
switch lässt sich in einigen anderen sprachen derart verwenden - aber bei JS bin ich mir nicht sicher.
jedoch kann man doch mit [...]
nur den berreich von unter 5 und den von gleich oder größer fünf abdecken, aber was is wenn ich nun auch noch genau die zahl 7 oder 1 haben will?
dann machst du dafür eigene cases - vor den "allgemeineren" natürlich.
case a==7:
...;
break;
case (a==1 || a==4711):
...;
break;
gruß,
wahsaga
hallo,
dann schreib case 7: und case 1: VOR die übigen anweisungen..
ein wenig denkarbeit musst du schon selbst erbringen.
grüße Chris
Hallo Chris
dann schreib case 7: und case 1: VOR die übigen anweisungen..
ein wenig denkarbeit musst du schon selbst erbringen.
Nein, bei wahsagas Variente müsste eher
case a == 7:
und case a == 1:
eingefügt werden.
Auf Wiederlesen
Detlef
switch(true) {
case a > 5:
...;
break;
case a <= 5:
...;
break;
}
wahsaga,
Gibt es irgendeinen vernünftigen Grund, if (a > 5) ... else ...;
in dieser von dir vorgestellten Form zu notieren?
Live long and prosper,
Gunnar
hi,
Gibt es irgendeinen vernünftigen Grund,
if (a > 5) ... else ...;
in dieser von dir vorgestellten Form zu notieren?
zum beispiel, wenn's viele ähnliche bedingungen sind, du keine lust hast if/elsif/else drei meter weit nach rechts ragend zu verschachteln.
gruß,
wahsaga
zum beispiel, wenn's viele ähnliche bedingungen sind, du keine lust hast if/elsif/else drei meter weit nach rechts ragend zu verschachteln.
wahsaga,
Dann rück halt nicht ein. ;-) SCNR.
IMHO ist switch(true)
ein Missbrauch der switch-Anweisung und kein guter Stil.
Live long and prosper,
Gunnar
hi,
IMHO ist
switch(true)
ein Missbrauch der switch-Anweisung und kein guter Stil.
ja, magst recht haben ... aber wenner doch genau danach fragt ...? :-)
gruß,
wahsaga
ja, magst recht haben ... aber wenner doch genau danach fragt ...? :-)
wahsaga,
Hatter doch gar nicht. Er fragte nach „Fallunterscheidung“, und IF-THEN-ELSE ist auch eine.
Live long and prosper,
Gunnar
PS. Wer hat sich da bei der Bewertung meines Postings vertippt? >:-/
hi,
Hatter doch gar nicht. Er fragte nach „Fallunterscheidung“, und IF-THEN-ELSE ist auch eine.
streitbare these :-)
selfhtml nennt nur den switch "fallunterscheidung", und auch wenn man mal nach fallunterscheidung googlet, kommen da solche definitionen raus wie:
http://www.bullhost.de/f/fallunterscheidung.html:
"Bei dem EDV Begriff Fallunterscheidung handelt es sich um eine Kontrollstruktur, welche die weitere Abarbeitung eines Programms von einer Bedingung abhängig macht. Bei der Fallunterscheidung können beliebig viele zu vergleichende Bereiche angegeben werden, zum Beispiel können in Abhängigkeit davon, ob eine Variable den Wert 1, 2, 3, 4, 5 oder 10 annimmt unterschiedliche Programmteile abgearbeitet werden. Anweisungen, mit denen sich Fallunterscheidungen realisieren lassen, sind häufig mit Case oder ähnlichen betitelt."
oder http://www.galileocomputing.de/openbook/unix_guru/node310.html:
"Die Fallunterscheidung ist eine Art gestaffeltes if. Der Inhalt einer Variablen wird untersucht und für jeden denkbaren Inhalt eine Aktion definiert."
gruß,
wahsaga
Ich wollte nur mal wissen ob man mit der Fallunterscheidung auch Berreiche abfragen kann ... also zum beispiel > 1 oder so.
Xeroooo,
Wenn du mit „Fallunterscheidung“ switch
meinst, dann nein (AFAIK).
Mit if
ist das aber kein Problem.
Live long and prosper,
Gunnar
Ich wollte nur mal wissen ob man mit der Fallunterscheidung auch Berreiche abfragen kann ... also zum beispiel > 1 oder so.
Du msinst ob eine Zahl in einem Bereich liegt?
z.b. zwischen 1 und 7
var a = 0;
if(a > 0 && a < 8) alert('ja'); else alert('nein');
Struppi.
z.b. zwischen 1 und 7
var a = 0;
if(a > 0 && a < 8) alert('ja'); else alert('nein');
Struppi,
Das stimmt wohl nicht ganz.
var a = 0.5;
if(a > 0 && a < 8) alert('ja'); else alert('nein');
liefert wohl nicht das gewünschte Ergebnis.
Live long and prosper,
Gunnar
Das stimmt wohl nicht ganz.
var a = 0.5;
if(a > 0 && a < 8) alert('ja'); else alert('nein');
>
> liefert wohl nicht das gewünschte Ergebnis.
Wer hat den von Fließkommazahlen gesprochen ;-)
Aber na gut auch das geht:
~~~javascript
var a = 0.5;
if(a >= 1 && a <=7) alert('ja'); else alert('nein');
Struppi.
Aber na gut auch das geht:
var a = 0.5;
if(a >= 1 && a <=7) alert('ja'); else alert('nein');
Struppi,
Das trifft aber auch nicht „zwischen 1 und 7“ (so wie ich die Bedeutung mal gelernt habe).
Die natürliche Sprache mag da ambivalent sein, ob die Ränder mit dazugehören. Bei uns war mit „zwischen a und b“ das offene Intervall ]a, b[ gemeint; mit „von a bis b“ das geschlossene [a, b].
Live long and prosper,
Gunnar
Aber na gut auch das geht:
var a = 0.5;
if(a >= 1 && a <=7) alert('ja'); else alert('nein');
Struppi,
Das trifft aber auch nicht „zwischen 1 und 7“ (so wie ich die Bedeutung mal gelernt habe).
Dann kommen die Gleichheitszeichen weg.
Die natürliche Sprache mag da ambivalent sein, ob die Ränder mit dazugehören. Bei uns war mit „zwischen a und b“ das offene Intervall ]a, b[ gemeint; mit „von a bis b“ das geschlossene [a, b].
Mir war die Orginalaussage zu Ambivalent, als das ich darauf eingehen wollte ;-)
.... ich hab nur Realschule gemacht, bitte keine höhere Mathematik
Struppi.
Hi,
ich habe ne sicherlich einfache Frage...
Wie Du an den Reaktionen und Diskussionen vielleicht schon festgestellt haben magst: nein, hast Du nicht ;-)
Ich wollte nur mal wissen ob man mit der Fallunterscheidung auch Berreiche abfragen kann ... also zum beispiel > 1 oder so.
Es hat sich ja bereits herausgestellt, das Du mit "Fallunterscheidung" eine switch() meinst. Nun ist ein switch(x) eigentlich nichts anders als eine Optimierungshilfe für den Compiler/Interpreter: die Variable x soll nur bei den in den "cases" bestimmten Werten wichtig sein, ansonsten nicht (oder auch umgekehrt, ist hier egal). Wenn diese Werte tatsächlich bestimmt sind (1,2,3 oder auch als Strings "eins, "zwei", "drei"), dann kann der Compiler/Interpreter sowas wunderbar optimieren.
Sind es aber Bereiche, die zudem an einer Seite offen sind, kann er das nicht, er bastelt daraus höchstwahrscheinlich eine if/else Kette. Das ist zwar einerseits angenehm, da Du das dann nicht selbst zu tun brauchst aber andererseits auch viel Arbeit für den Compiler/Interpreter. Bei einem Compiler ist das recht egal: da machst Du es nur einmal, aber bei einem Interpreter machst Du es bei jedem Aufruf des Scriptes.
Du kannst es also (ja, das war ein kaum nachvollziehbarer Sprung ;-) besser gleich eigenhändig trennen:
function testValues(a){
var found = false;
if(isNaN(a)) return Number.NaN;
switch(a){
case 1: alert("a ist 1. Beweis: a = " + a);
found = true;
break;
case 7: alert("a ist 5. Beweis: a = " + a);
found = true;
break;
default: break;
}
if(found) return;
if(a < 5){
alert("a ist kleiner als 5. Beweis: a = " + a);
}
if(a >= 5){
alert("a ist größergleich 5. Beweis: a = " + a);
}
}
Die Reihenfolge ist natürlich wichtig wenn die genauen Werte innerhalb der Bereichsabfragen liegen, wie es hier der Fall ist. Es geht natürlich auch andersrum aber dann würdest Du einen switch pro Bereichsabfrage benötigen:
function testValues(a){
if(isNaN(a)) return Number.NaN;
if(a < 5){
switch(a){
case -1: alert("a ist -1. Beweis: a = " + a);
break;
case 1: alert("a ist 1. Beweis: a = " + a);
break;
case 4: alert("a ist 4. Beweis: a = " + a);
break;
default: break;
}
alert("a ist kleiner als 5. Beweis: a = " + a);
}
if(a >= 5){
switch(a){
case 5: alert("a ist 5. Beweis: a = " + a);
break;
case 7: alert("a ist 7. Beweis: a = " + a);
break;
case 616: alert("a ist 616. Beweis: a = " + a);
break;
default: break;
}
alert("a ist größergleich 5. Beweis: a = " + a);
}
}
(beides nicht probiert und daher in der stillen Hoffnung, das ich keine allzu groben Fehler gemacht habe ;-)
so short
Christoph Zurnieden