2013-04-13 4 views

ответ

8

Да, если разделить функции запятыми:

foo && (bar(), baz()) 

Это кодирование практика ужасно, но это полезно для Минимизация кода или цели code golf.

if (foo) { 
    bar(); 
    baz(); 
} 

превращается в:

foo&&(bar(),baz()) 

и

if (!foo) { 
    bar(); 
    baz(); 
} 

превращается в:

foo||(bar(),baz()) 

и

if (foo) { 
    bar(); 
    baz(); 
} else { 
    fizz(); 
    buzz(); 
} 

превращается в:

foo?(bar(),baz()):(fizz(),buzz()) 

хотя переменные, вероятно, будет переименована в Minifier к чему-то вроде:

a&&(b(),c()) 
+0

Это то, что я ищу, и спасибо за головы. Мне просто интересно, возможно ли это. – user1643156

+2

Почему эта ужасная практика кодирования? Это странный синтаксис, но как только вы овладеете им, это прекрасно, я думаю! –

+0

@GreenCode Это нормально, пока кто-то еще не должен читать и понимать этот код. – bfavaretto

2

Вы не можете поставить точку с запятой в середине выражения.

foo && (doThis() || doThat()); 

Как doThis не имеет возвращаемого значения, оно вычисляется следующим образом:

true && (doThis() || doThat()); 
(doThis() || doThat()); 
(undefined || doThat()); 
(doThat()); 
undefined; 

Но ответил @zzzzBov, то comma operator может также использоваться и лучше в том смысле, что она Безразлично» t зависит от возвращаемых значений.

Обратите внимание, что такие сокращения не очень удобочитаемы, вы должны позволить инструментам для минимизации выполнять такую ​​работу. (Например Closure Compiler)

0

Вы можете использовать comma operator:

foo && (doThis(), doThat()); 

Конечно если doThis возвращает значение truthy, которое вы также можете получить:

foo && doThis() && doThat(); 

Но это больше похоже;

if (foo) 
    if (doThis()) 
     doThat(); 

Однако, как правило, это «стенография» не используются, если нет никакого присваивания на левой стороне, потому что делает код более уродливой и менее читаемым.