Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите что делать со скриптом (https://javascript.ru/forum/misc/2025-podskazhite-chto-delat-so-skriptom.html)

Dmitry A. Soshnikov 22.10.2008 22:20

Цитата:

Сообщение от Kolyaj
а тот, который плохо читаем

Так я о том и говорю, что каждый второй берется судить всех по данному вопросу, употребляя выражение - "говнокод", не осознавая, что вытекает это очень часто просто лишь из локальных привычек; недавно на одном из форумов был топик про выражения в php, так там человеку загадили всю карму под предлогом "говнокод. так вообще неудобочитаемо." только лишь потому, что сами писать так не привыкли (и что еще хуже - не понимают в силу отсутствия опыта для чего нужны те или иные конструкции). В то время, как тема была не про стайл гайды, и не про чьи-то локальные привычки ставить скобку с новой строки или в той же, а про возможности языка (я поддерживал автора).

Речь шла примерно о следующих конструкциях:

var b = b || 'defaultValue';
!c && (c = 'defaultValue');


Кстати, я их почти каждый день использую вместо if'ов (если условия одиночные, максимум - двойные).

Kolyaj 22.10.2008 22:30

Цитата:

Сообщение от Zeroglif
В этом смысле parseInt(str) - тот же говнокод

Т.е. из названия функции parseInt вообще непонятно, что она делает?

Dmitry A. Soshnikov, согласен, в принципе.

Zeroglif 22.10.2008 23:05

Цитата:

Сообщение от Kolyaj
Т.е. из названия функции parseInt вообще непонятно, что она делает?

Название названием, а что за названием происходит надо же знать. У плюса нет никакого названия, но если банально знать суть этого оператора (чего он, пёс, делает), то и чего его читать-то, там 4 действия (вычислить, получить значение, превратить в число (если не число), вернуть). Вполне себе читаемый простой оператор, без наворотов. Даже сравнивать нельзя с parseInt, где и название так себе, а главное - суть-то навороченнее в разы, достаточно сравнить алгоритмы. Нужно задавать основание, нужно учитывать браузерные особенности, нужно знать, какие значения будут отсечены (та же пустая строка в текстбоксе), нужно помнить, что это обычный идентификатор (поиск по scope chain), нужно помнить, что не-строки будут конвертированы со всеми вытекающими... и всё это ради примитивного превращения в число, для чего уже есть оператор (раз) и функция с более понятным названием(два)...

p.s. я не отвергаю парсы, просто они мне кажутся совершенно одинаково читаемыми с унарным плюсом "по названию", менее читаемыми по сути происходящего, и менее оптимальными для простого преобразования типа...

Octane 22.10.2008 23:05

Цитата:

Сообщение от Dmitry A. Soshnikov (Сообщение 7385)
Речь шла примерно о следующих конструкциях:

var b = b || 'defaultValue';
!c && (c = 'defaultValue');


Кстати, я их почти каждый день использую вместо if'ов (если условия одиночные, максимум - двойные).

Я тоже стараюсь использовать подобные конструкции вместо «if(…) {…} else if(…) {…} else(…) {…}» и считаю, что тот, кто как-то отрицательно отзывается о таком использовании логических выражений, просто не до конца знает особенности языка и ему что-то там «ни-и-и-поня-я-ятна», поэтому это плохо.

Zeroglif 22.10.2008 23:45

Цитата:

Сообщение от Dmitry A. Soshnikov
var b = b || 'defaultValue';

А var точно нужен?

Само собой, это удобные и понятные операторы, для профессионала они, в принципе, не должны снижать читабельность, проблема лежит в программировании только ради красоты/компактности/понтов, когда оператор вроде верный а место, куда его засунули чужое, как пример таких бешеных понтов - тынц.

Цитата:

Сообщение от Octane
отрицательно отзывается

Можно и отрицательно отозваться, когда чересчур закручено или не к месту, всё от контекста зависит, сами по себе шугарные операторы никого не должны пугать, даже... запятая. ;)

Dmitry A. Soshnikov 23.10.2008 12:04

Zeroglif, спора нет, конструкции в коде только ради понтов я не рассматриваю.

Цитата:

Сообщение от Zeroglif
оператор вроде верный а место, куда его засунули чужое

а в этом случае место допустимое? - b = b || 'defaultValue'; ? те, кто не знаком с особенностью данного оператора в JS или Python (когда в случае false возвращается значение второго) тоже назвывали эту конструкцию понтами; те, кто знаком - вполне нормально относились (при одиночных условиях можно сразу в функцию передавать, например):

callSomeFunction(value || defaultValue);


С другой стороны - можно было вычислить это заранее:

var passValue;
if (value) {
  passValue = value;
} else {
  passValue = defaultValue;
}
callSomeFunction(passValue);


И это, вроде как, уже не понты (другое дело, что кода стало на "пару строк" больше, да и passValue осталась в скопе - но это "мелочи" =)).

Цитата:

Сообщение от Zeroglif
А var точно нужен?

формально, конечно, не нужен =) - я понимаю, что если уже b используется значит переменная объявлена (не важно - в глобальном скопе или в пришла в качестве формального параметра); а фактически - просто объявится дважды (при объявлении не повлияет на результат, а при присваении перезапишется).

Zeroglif 23.10.2008 19:13

Цитата:

Сообщение от Dmitry A. Soshnikov
а в этом случае место допустимое? - b = b || 'defaultValue'; ?

наверное ;) если это в стиле е = е || event; когда заранее известно, что свойство 'е' точно в скопе существует и выбор понятен (никаких тебе falsy, только объекты, один из двух), удобный оператор, позволяет не разворачивать 'if-else' ради присваивания...


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