it-swarm.com.de

JavaScript einzeilige 'if'-Anweisung - beste Syntax, diese Alternative?

Es ist klar gesagt worden, obwohl die Meinung dennoch ist, dass das Verzichten auf geschweifte Klammern in einer einzigen if-Anweisung nicht ideal für Wartbarkeit und Lesbarkeit ist.

Aber was ist damit?

if (lemons) { document.write("foo gave me a bar"); }

Es ist noch mehr komprimiert, und wenn es erweitert wird, werden die geschweiften Klammern nicht vergessen. Gibt es krasse Probleme, und wenn nicht, welche Überlegungen werden angestellt? Ich habe das Gefühl, dass es immer noch sehr gut lesbar ist, zumindest ohnehin so viel wie ein ternärer Operator. Mir scheint, dass ternäre Operatoren aufgrund der Lesbarkeit nicht so viel empfohlen werden, obwohl ich der Meinung bin, dass diese Schlussfolgerung nicht ganz so einig ist.

Der böse Zwilling in mir möchte das vorschlagen, obwohl die Syntax offensichtlich nicht dafür gedacht ist und wahrscheinlich nur eine schlechte Idee ist.

(syntax) ? document.write("My evil twin emerges"): "";
137
David Hobs

Ich habe das Kurzschlussverhalten des &&-Operators gesehen, mit dem dies erreicht wurde, obwohl Personen, die dies nicht gewohnt sind, Schwierigkeiten haben, es zu lesen oder es sogar als Anti-Pattern zu bezeichnen:

lemons && document.write("foo gave me a bar");  

Ich persönlich verwende oft einzeilige if ohne Klammern wie folgt:

if (lemons) document.write("foo gave me a bar");

Wenn ich weitere Anweisungen hinzufügen muss, setze ich die Anweisungen in die nächste Zeile und füge Klammern hinzu. Da meine IDE eine automatische Einrückung durchführt, sind die Einwände gegen die Wartbarkeit dieser Praxis umstritten.

237
Peter Olson

Ich benutze es so:

(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");
103
asael2

Sie können dieses Format verwenden, das üblicherweise in PHP verwendet wird:

(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");
34
Macro

// Ein weiteres einfaches Beispiel

 var a = 11;
 a == 10 ? alert("true") : alert("false");
13
user3413838

Diese eine Linie ist viel sauberer.

if(dog) alert('bark bark');

Ich bevorzuge das. hoffe es hilft jemandem

12
shakee93

kann dies verwenden, 

lemons ? alert("please give me a lemonade") : alert("then give me a beer");

erklärung: Wenn lemons vorhanden ist, geben Sie mir eine Benachrichtigung ("Bitte geben Sie mir eine Limonade") else Warnung ("Dann gib mir ein Bier") 

Wie viele Leute gesagt haben, wenn Sie nach einer tatsächlichen Zeile suchen, wenn:

    if (Boolean_expression) do.something();

ist bevorzugt. Wenn Sie jedoch nach einem if/else suchen, dann ist ternary Ihr Freund (und auch super cool):

    (Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();

EBENFALLS:

    var something = (Boolean_expression) ? trueValueHardware : falseATRON;

Ich sah jedoch ein sehr cooles Beispiel. Schreit @ Peter-Oslson nach &&

    (Boolean_expression) && do.something();

Letztendlich ist es keine if-Anweisung, aber die Ausführung von Dingen in einer Schleife mit map/verkleinern oder Promise.resolve () macht auch Spaß. Schreit @brunettdan

3
Kemacal

Beispiel in Pfeilfunktionen:

let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)

In Versprechungen:

Promise.resolve()
  .then(_=>checkTrueFalse && asyncFunc())
  .then(_=>{ .. })

Andernfalls:

if(somethingTrue) thenDo()

Wenn es nur eine einfache Bedingung ist, ziehe ich es vor, if (value) zu verwenden, da das Wort if am Anfang der Anweisung mehr über das Geschehen als Paranthesis und Fragezeichen sagt.

2
brunettdan

Es kann auch eine einzelne Zeile mit while-Schleifen und if verwendet werden:

if (blah)
    doThis();

Es funktioniert auch mit while-Schleifen.

2
Noitidart

Wie bereits gesagt, können Sie Folgendes verwenden:

&& style

lemons && document.write("foo gave me a bar");  

oder 

halterloser Stil

if (lemons) document.write("foo gave me a bar");

kurzschlussrückkehr

Wenn Sie jedoch die einzeilige if-Anweisung zum Kurzschließen einer Funktion verwenden möchten, müssen Sie die Version Brackless wie folgt verwenden:

if (lemons) return "foo gave me a bar";

wie 

lemons && return "foo gave me a bar"; // does not work!

gibt dir einen SyntaxError: Unexpected keyword 'return'

0
Marc

Ich habe viele Antworten mit vielen Stimmen gesehen, die sich für die Verwendung des ternären Operators aussprechen. Der Ternär ist großartig, wenn a) Sie eine alternative Option haben und b) Sie einen relativ einfachen Wert aus einer einfachen Bedingung zurückgeben. Aber...

Die ursprüngliche Frage hatte keine Alternative, und der ternäre Operator mit nur einer (echten) Verzweigung zwingt Sie, eine konfektionierte Antwort zurückzugeben.

lemons ? "foo gave me a bar" : "who knows what you'll get back"

Ich denke, die häufigste Variation ist lemons ? 'foo...' : '', und wie Sie aus den unzähligen Artikeln für jede Sprache über wahr, falsch, wahr, falsch, null, null, leer, leer (mit unserem ohne? ), Sie betreten ein Minenfeld (wenn auch ein gut dokumentiertes Minenfeld).

Sobald ein Teil des Ternärs kompliziert wird, ist es besser, eine explizite Form der Bedingung zu verwenden.

Ein langer Weg, um zu sagen, dass ich für if (lemons) "foo" stimme.

0
Anita Graham
**Old Method:**
if(x){
   add(x);
}
New Method:
x && add(x);

Sogar die Zuweisung von Operationen können wir auch mit runden Klammern durchführen

exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));
0