JavaScript enkelregelige ‘if’-instructie – beste syntaxis, dit alternatief?

Het is duidelijk gesteld, hoewel de mening niettemin, dat het achterwege laten van accolades op een if-statement van één regel niet ideaal is voor onderhoudbaarheid en leesbaarheid.

Maar hoe zit het hiermee?

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

Het is nog meer gecomprimeerd en als het wordt uitgevouwen, worden de accolades niet vergeten. Zijn er flagrante problemen, en zo niet, wat zijn de overwegingen? Ik heb het gevoel dat het nog steeds erg leesbaar is, in ieder geval zoveel als een ternaire operator. Het lijkt mij dat ternaire operatoren niet zo vaak worden gesuggereerd vanwege de leesbaarheid, hoewel ik het gevoel heb dat die conclusie niet zo unaniem is.

De boze tweeling in mij wil dit suggereren, hoewel de syntaxis er duidelijk niet voor bedoeld is, en waarschijnlijk gewoon een slecht idee is.

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

Antwoord 1, autoriteit 100%

Ik heb het kortsluitgedrag van de &&-operator gezien om dit te bereiken, hoewel mensen die dit niet gewend zijn het misschien moeilijk vinden om te lezen of het zelfs een anti-patroon:

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

Persoonlijk gebruik ik vaak eenregelige ifzonder haakjes, zoals dit:

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

Als ik meer verklaringen in moet toevoegen, zal ik de uitspraken op de volgende regel plaatsen en beugels toevoegen. Omdat mijn IDE automatische inkeping doet, zijn de onderhoudbaarheid bezwaren tegen deze praktijk Moot.


Antwoord 2, Autoriteit 43%

Ik gebruik het als volgt:

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

Antwoord 3, Autoriteit 13%

U kunt dit formaat gebruiken, dat vaak wordt gebruikt in PHP:

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

Antwoord 4, Autoriteit 6%

Zoals al is vermeld, kunt u gebruiken:

& AMP; & AMP; stijl

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

of

Bracket-less-stijl

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

Kortsluiting retour

Als u echter de One Line ifverklaring tot kortsluiting een functie, moet u echter met de Bracket-Minder -versie gaan Zoals SO:

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

als

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

geeft u een SyntaxError: Unexpected keyword 'return'


Antwoord 5, Autoriteit 6%

Deze één regel is veel schoner.

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

Ik geef er de voorkeur aan. hoop dat het iemand helpt


Antwoord 6, autoriteit 6%

kan dit gebruiken,

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

uitleg: als lemonswaar is, dan alert("please give me a lemonade"), zo niet, alert("then give me a beer")


Antwoord 7, autoriteit 4%

Zoals veel mensen hebben gezegd, als u op zoek bent naar een echte 1-regel, dan:

   if (Boolean_expression) do.something();

heeft de voorkeur. Als je echter een if/else wilt doen, dan is ternary je vriend (en ook super cool):

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

OOK:

   var something = (Boolean_expression) ? trueValueHardware : falseATRON;

Ik zag echter een heel cool voorbeeld. Schreeuwt naar @Peter-Oslson voor &&

   (Boolean_expression) && do.something();

Ten slotte is het geen if-statement, maar het uitvoeren van dingen in een lus met een map/reduce of Promise.resolve() is ook leuk. Schreeuwt naar @brunettdan


Antwoord 8, autoriteit 4%

// Nog een eenvoudig voorbeeld

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

Antwoord 9, autoriteit 2%

Ik heb veel antwoorden gezien met veel stemmen die pleitten voor het gebruik van de ternaire operator. De ternaire is geweldig als a) je een alternatieve optie hebt en b) je een vrij eenvoudige waarde retourneert vanuit een eenvoudige voorwaarde. Maar…

De oorspronkelijke vraag had geen alternatief, en de ternaire operator met slechts een enkele (echte) vertakking dwingt je om een geconfectioneerd antwoord te retourneren.

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

Ik denk dat de meest voorkomende variant lemons ? 'foo...' : '', en, zoals je zult weten door het lezen van de talloze artikelen voor elke taal over waar, onwaar, waarheidsgetrouw, onwaar, null, nul, blanco, leeg (met onze zonder ?) , betreed je een mijnenveld (hoewel een goed gedocumenteerd mijnenveld.)

Zodra een deel van het ternaire ingewikkeld wordt, bent u beter af met een meer expliciete vorm van voorwaardelijk.

Een lange weg om te zeggen dat ik stem voor if (lemons) "foo".


Antwoord 10

(i === 0 ? "true" : "false")

Antwoord 11

Het kan ook met een enkele regel met while-lussen en ifals volgt:

if (blah)
    doThis();

Het werkt ook met while-loops.


Antwoord 12

Voorbeeld in pijlfuncties:

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

In beloften:

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

Anders:

if(somethingTrue) thenDo()

Als het maar een simpele voorwaarde is, gebruik ik waar mogelijk liever if(value)omdat het woord ifaan het begin van de uitspraak meer zegt over wat er gebeurt dan een paranthesis en vraagtekens.


Antwoord 13

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

Zelfs een bewerking toewijzen kunnen we ook doen met ronde haakjes

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

Other episodes