Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Насколько верно использовать присваивание как логическую операцию? (https://javascript.ru/forum/misc/22486-naskolko-verno-ispolzovat-prisvaivanie-kak-logicheskuyu-operaciyu.html)

ritium 21.10.2011 22:58

Насколько верно использовать присваивание как логическую операцию?
 
собственно вот

if(a=1)console.log('dd')
срабатывает

if(a=0)console.log('dd')
не срабатывает

насколько правильно использовать такую конструкцию?

Gvozd 22.10.2011 03:27

Это не есть best practice
Такой код приемлим ровно до тех пор пока его пишите Вы в одиночку.
Потому что стороннему программисту может показатся, что здесь сравнение, либо вы опечатались.
Чрез год, когда вы снова взгляните на свой код, вы будете в роли стороннего программиста, и такой код потребует дополинительного вашего времени. и эту потерю можно избежать.



Хорошей практикой является такой стиль:
a=0;
if(a) {
    console.log('dd')
}

в таком случае всем становится ясно что тут происходит (с поправкой на отсутсвие строгой типизации).

tenshi 22.10.2011 11:47

while( node= node.parentNode ) ancestors.push( node )

вполне нормальная практика

Gvozd 22.10.2011 14:02

для циклов такая практика нормальна ИМХО
не для if-ов

Riim 22.10.2011 14:07

Цитата:

Сообщение от Gvozd
не для if-ов

только вчера писал:
if (!partsCount || !(interval -= intervals[i] * num)) {
	break;
}

если interval вне if вычислять, то иногда он впустую вычисляться будет.

Kolyaj 22.10.2011 18:19

Цитата:

Сообщение от Riim
если interval вне if вычислять, то иногда он впустую вычисляться будет.

А не надо вне if, надо внутри, а потом ещё один.

Riim 22.10.2011 19:32

Цитата:

Сообщение от Kolyaj
А не надо вне if, надо внутри, а потом ещё один.

так:
if (!partsCount) {
    break;
}
interval -= intervals[i] * num;
if (!interval) {
    break;
}

?

А если вместо break много кода? Что-то башка под ночь не варит.

tenshi 23.10.2011 10:34

вынести этот код в функцию х)

либо извращаться:

breaking: {
    checks: {
        if( !partsCount ) break checks
        interval-= intervals[ i ] * num
        if( !interval ) break checks
        break breaking
    }
    // тут много кода
    // break loop
}

Riim 23.10.2011 13:00

Цитата:

Сообщение от tenshi
вынести этот код в функцию х)

если это не универсальный код, читабельней вряд ли станет.

tenshi 24.10.2011 04:57

он вызывается в 2 местах. этого достаточно


Часовой пояс GMT +3, время: 16:14.