2012-01-29 9 views
14

Può la stenografia javascript per if-else restituire una funzione? Se sì, come funzionerebbe?Stenografia Javascript if-else e restituzione

es. ho questo:

if(boolean){ 
return; 
} 

e mi piacerebbe scrivere come questo:

(value)? return; 

Chrome si lamenta che il ritorno è inaspettato. C'è comunque qualcosa di simile a scrivere così che sia valido?

+2

Non è una scorciatoia per if-else.È un costrutto completamente diverso, e uno che non è appropriato per questo compito. –

+3

Davvero triste che questo non funzioni: 'someVal && return;'. Console dice 'return token inaspettato '. –

risposta

24

No, non è possibile farlo se non si restituisce un valore. Per esempio, se la funzione ha dovuto restituire un valore si potrebbe scrivere:

return boolean ? 'foo' : 'bar'; 

Ma non si può fermare l'esecuzione della funzione restituendo vuoto utilizzando l'operatore condizionale.

1

si vuole fare un ternary operator

che è questo:

(bool) ? ifTrue : ifFalse; 

Si prega di notare: non è possibile omettere la parte altra di un operatore ternario.

http://en.wikipedia.org/wiki/Ternary_operation

+0

Non penso che tu abbia capito cosa effettivamente la versione "lunga" del codice * ha * ... – Shog9

+2

No, ho capito. Ma sembra che stesse tentando di usare un operatore ternario, e stava cercando di forzarlo a comportarsi nel modo in cui lo immaginava con la sua originale "lunga" affermazione. Se avesse semplicemente voluto usare un'affermazione sans-curly, avrebbe potuto dirlo. * shrug * – Kristian

9

Se avete intenzione di tornare dalla funzione a questo punto della sua esecuzione indipendentemente dal fatto che il test restituisce vero o falso, è possibile utilizzare,

return (value) ? 1 : 2; 

Ma se si limita a desidero tornare presto quando un test valuta true (ad esempio, come controllo di integrità per impedire l'esecuzione quando i parametri non sono validi), il più breve possibile è:

if (boolean) return; 
+2

Solo il secondo si comporta in modo identico al primo esempio nella domanda. Certamente è più breve - una buona illustrazione di come pedissequamente includere parentesi graffe e newline può portare al desiderio di spararti ai piedi! – Shog9

+0

Buona modifica @ Shog9, mi mancano sempre le parole. –

0

Il "operatore ternario" condizionale (condition ? expression to evaluate when true : expression to evaluate when false) viene spesso utilizzato per l'assegnazione di una variabile condizionale semplice.

se avete bisogno:

if(x > 0) { 
    a = 10; 
}else{ 
    a = 30; 
} 

si può scrivere:

a = (x>0)? 10 : 30; 

Si può pensare ad esso come una semplice funzione, che prende 3 parametri (P1, P2, P3), se p1 è vero, restituisce p2 e se p1 è falso restituisce p3.

(p1)? p2 : p3; 

E proprio come una tale funzione, non c'è modo per esso a causare il genitore funzione di a restituire in base alle condizioni. È non quindi una scorciatoia per se/else.

3
if(boolean) return; 

singola linea, leggibile, perfettamente valido;