22.10.2008, 22:20
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от Kolyaj
|
а тот, который плохо читаем
|
Так я о том и говорю, что каждый второй берется судить всех по данному вопросу, употребляя выражение - "говнокод", не осознавая, что вытекает это очень часто просто лишь из локальных привычек; недавно на одном из форумов был топик про выражения в php, так там человеку загадили всю карму под предлогом "говнокод. так вообще неудобочитаемо." только лишь потому, что сами писать так не привыкли (и что еще хуже - не понимают в силу отсутствия опыта для чего нужны те или иные конструкции). В то время, как тема была не про стайл гайды, и не про чьи-то локальные привычки ставить скобку с новой строки или в той же, а про возможности языка (я поддерживал автора).
Речь шла примерно о следующих конструкциях:
var b = b || 'defaultValue';
!c && (c = 'defaultValue');
Кстати, я их почти каждый день использую вместо if'ов (если условия одиночные, максимум - двойные).
|
|
22.10.2008, 22:30
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Zeroglif
|
В этом смысле parseInt(str) - тот же говнокод
|
Т.е. из названия функции parseInt вообще непонятно, что она делает?
Dmitry A. Soshnikov, согласен, в принципе.
|
|
22.10.2008, 23:05
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Kolyaj
|
Т.е. из названия функции parseInt вообще непонятно, что она делает?
|
Название названием, а что за названием происходит надо же знать. У плюса нет никакого названия, но если банально знать суть этого оператора (чего он, пёс, делает), то и чего его читать-то, там 4 действия (вычислить, получить значение, превратить в число (если не число), вернуть). Вполне себе читаемый простой оператор, без наворотов. Даже сравнивать нельзя с parseInt, где и название так себе, а главное - суть-то навороченнее в разы, достаточно сравнить алгоритмы. Нужно задавать основание, нужно учитывать браузерные особенности, нужно знать, какие значения будут отсечены (та же пустая строка в текстбоксе), нужно помнить, что это обычный идентификатор ( поиск по scope chain), нужно помнить, что не-строки будут конвертированы со всеми вытекающими... и всё это ради примитивного превращения в число, для чего уже есть оператор (раз) и функция с более понятным названием(два)...
p.s. я не отвергаю парсы, просто они мне кажутся совершенно одинаково читаемыми с унарным плюсом "по названию", менее читаемыми по сути происходящего, и менее оптимальными для простого преобразования типа...
|
|
22.10.2008, 23:05
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от Dmitry A. Soshnikov
|
Речь шла примерно о следующих конструкциях:
var b = b || 'defaultValue';
!c && (c = 'defaultValue');
Кстати, я их почти каждый день использую вместо if'ов (если условия одиночные, максимум - двойные).
|
Я тоже стараюсь использовать подобные конструкции вместо «if(…) {…} else if(…) {…} else(…) {…}» и считаю, что тот, кто как-то отрицательно отзывается о таком использовании логических выражений, просто не до конца знает особенности языка и ему что-то там «ни-и-и-поня-я-ятна», поэтому это плохо.
|
|
22.10.2008, 23:45
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Dmitry A. Soshnikov
|
var b = b || 'defaultValue';
|
А var точно нужен?
Само собой, это удобные и понятные операторы, для профессионала они, в принципе, не должны снижать читабельность, проблема лежит в программировании только ради красоты/компактности/понтов, когда оператор вроде верный а место, куда его засунули чужое, как пример таких бешеных понтов - тынц.
Сообщение от Octane
|
отрицательно отзывается
|
Можно и отрицательно отозваться, когда чересчур закручено или не к месту, всё от контекста зависит, сами по себе шугарные операторы никого не должны пугать, даже... запятая.
|
|
23.10.2008, 12:04
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
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 используется значит переменная объявлена (не важно - в глобальном скопе или в пришла в качестве формального параметра); а фактически - просто объявится дважды (при объявлении не повлияет на результат, а при присваении перезапишется).
|
|
23.10.2008, 19:13
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Dmitry A. Soshnikov
|
а в этом случае место допустимое? - b = b || 'defaultValue'; ?
|
наверное если это в стиле е = е || event; когда заранее известно, что свойство 'е' точно в скопе существует и выбор понятен (никаких тебе falsy, только объекты, один из двух), удобный оператор, позволяет не разворачивать 'if-else' ради присваивания...
|
|
|
|