|
23.05.2012, 10:23 | #1 |
Moderator
|
if (a == true)
Всегда когда вижу в коде (на любом языке), попытки сравнения логических переменных, у меня возникают сильные сомнения в минимальном профессионализме человека, который писал код. (Неужели автор кода смог научится программировать, но ни разу не прочитал пятистраничную статейку про логические операции ?)
Сравнивать логическую переменную с константой - бессмысленно. Сравнивать две логических переменных можно, но стилистически не красиво. То есть - если возникло желание сравнить две логических переменных, скорее всего есть некая ошибка в подходе к программированию, поскольку при правильном построении алгоритма, эти две переменные надо было бы как-то по другому обрабатывать (типа if (a&&b) или if(a&&!b). Тем не менее, каждая новая версия Аксапты содержит все больше и больше попыток сравнения переменной с логической константой. Например в 2009ой поиск в AOD по строке "== true" дает 461 совпадение. А в 2012ой - уже 700. Причем, что самое любопытное, такие сравнения случаются не в каких-то второстепенных отчетах или формах, которые могут на откуп аутсорсерам и контрактерам отдавать. Такие сравнения можно увидеть, например, в классах ReqCalc, inventAdjustPost, LedgerJournalCheckPost. Я уверен что эти ключевые классы пишутся полноценными штатными разработчиками, причем не в Штатах, а в MDCC. Я вот много раз слышал, что мол при наборе разработчиков в Микрософт, проверяют не знание аксапты, а типа общую программистскую культуру и знание технологий разработки. Я не верю, что человек смог прочитать книжки про OOD и Agile Development, но так и не научился оператор if нормально писать. Возникает подозрение, что авторы этого кода не только Аксапту не знают, но и вообще программировать не умеют... Вот я и пытаюсь понять - это типа теперь такой best practice ? Последний раз редактировалось fed; 23.05.2012 в 11:01. |
|
|
За это сообщение автора поблагодарили: macklakov (1), b_nosoff (1), lev (2), S.Kuskov (2), makbeth (0), kornix (2). |
23.05.2012, 10:42 | #2 |
NavAx
|
Да в 2012 есть масса перлов. Есть новые, а есть и бережно переносимые из версии в версию.
Можете кинуть ссылку на статейку? Хочется почитать, для общего развития.
__________________
Isn't it nice when things just work? |
|
23.05.2012, 10:52 | #3 |
Moderator
|
|
|
23.05.2012, 11:03 | #4 |
NavAx
|
А, ну букварь я уже читал.
__________________
Isn't it nice when things just work? |
|
23.05.2012, 11:20 | #5 |
Сам.AX
|
Извиняюсь за оффтоп, немного иная история.
Но как бы вы отреагировали, увидев такой код. PHP код:
__________________
"Считать метафору доказательством, поток праздных слов источником истины, а себя оракулом - это заблуждение, свойственное всем нам." Поль Валери |
|
23.05.2012, 12:01 | #6 |
Участник
|
ну да, для типизированных языков, конструкция сравнения с константами избыточна, но не смертельна, лишь бы логически верный результат был и ожидаемое поведение.
Но к примеру на JavaScript, можно просто завести переменную, не инициализировать ее и фактически будет три значения true, false, null поэтому для упрощения можно использовать сравнение с какой либо константой, отметая два других значения, например, != true. X++: var flagTest; //.. flagTest=$("CheckBoxTest").selected; //... if(flagTest !=true) { } X++: bool? test = null; if (test) { } X++: bool? test = null; if (test == true) { }
__________________
Sergey Nefedov Последний раз редактировалось SRF; 23.05.2012 в 12:04. |
|
|
За это сообщение автора поблагодарили: fed (2). |
23.05.2012, 10:48 | #7 |
Участник
|
Ещё очень умиляют конструкции типа
X++: a = (< >) ? true : false; |
|
23.05.2012, 11:48 | #8 |
Роман Долгополов (RDOL)
|
тут сразу вспомнилось вот это обсуждение в похожей теме Проверка на RecId
да, тогда проблема реально была. уже давно всё исправлено, но код никто чистил и он остается примером для подражания для неокрепших мозгов |
|
23.05.2012, 10:57 | #9 |
Axapta
|
Если я вижу у кого-то код вида
X++: boolean bool; ... if (bool == true) ... PS А в конце, для надежности, можно добавить "!= false". Последний раз редактировалось oip; 23.05.2012 в 11:02. Причина: Добавил PS |
|
|
За это сообщение автора поблагодарили: AlGol (1), lev (1), jeky (1), Dark Light (1). |
23.05.2012, 12:00 | #10 |
Участник
|
Честно говоря, не вижу особых проблем. Ну, сравнивают с логической константой и что? Для меня, например, так нагляднее, чем использование восклицательного знака, да еще без пробела. Попробуй еще разгляди его! А так, никакой неоднозначности и не надо "с лупой" искать этот восклицательный знак.
В конструкции вида a = (<логическое условие>) ? true : false; тоже не вижу никакого "криминала". Подобную структуру легче модифицировать, если вдруг надо изменить результат на противоположный. Ну, сложно заметить "слившийся" ведущий восклицательный знак. Не видно его!
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: ivas (2). |
23.05.2012, 17:25 | #11 |
Британский учённый
|
Цитата:
Сообщение от Владимир Максимов
Честно говоря, не вижу особых проблем. Ну, сравнивают с логической константой и что? Для меня, например, так нагляднее, чем использование восклицательного знака, да еще без пробела. Попробуй еще разгляди его! А так, никакой неоднозначности и не надо "с лупой" искать этот восклицательный знак.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
23.05.2012, 15:37 | #12 |
Moderator
|
Ну я бы сказал, что if(a==true) пишут от непонимания и не умения программировать, а switch(true) пишут как раз таки от хорошего понимания того как оператор switch работает и приличного опыта разработки Вариант switch(true) изрядно повышает читаемость кода из за отсутствия большого количества вложенных if else...
|
|
23.05.2012, 16:08 | #13 |
Участник
|
Цитата:
Сообщение от fed
Ну я бы сказал, что if(a==true) пишут от непонимания и не умения программировать, а switch(true) пишут как раз таки от хорошего понимания того как оператор switch работает и приличного опыта разработки Вариант switch(true) изрядно повышает читаемость кода из за отсутствия большого количества вложенных if else...
X++: ok = true; if (ok && ...) { ok = false; ... } if (ok && ...) { ok = false; ... }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: macklakov (1). |
23.05.2012, 16:13 | #14 |
Участник
|
Мне тоже кажется, что switch(true), в некоторых случаях, повышает удобочитаемость кода.
Только в данном примере других неизящностей хватает: X++: if (_ledgerJournalTrans_Project.CostPrice < 0)
_ledgerJournalTrans_Project.CostPrice = - _ledgerJournalTrans_Project.CostPrice; В одних случаях с нулем сравнивается прямо (что, на мой взгляд более понятно), в других полагаются на приведение числа к логическому типу: X++: _ledgerJournalTrans_Project.Qty == 0 X++: !_ledgerJournalTrans.AmountCurDebit |
|
23.05.2012, 16:27 | #15 |
Участник
|
Если уж быть совсем занудой, то можно вспомнить теорему Джекопини (точное название не помню), смысл которой в том, что любой алгоритм можно представить всего тремя структурами.
|
|
23.05.2012, 16:33 | #16 |
Moderator
|
Цитата:
В идеале - нужно было бы добавить в X++ оператор elif или elseif, который бы позволял такие конструкции без вложености писать. Но раз такого оператора нету, остается использовать разные по степени кривости заменители... |
|
23.05.2012, 16:43 | #17 |
Участник
|
Не согласен. "Фича со switch(true)" не является какой-то лазейкой или брешью в компиляторе. Эта "фича" является прямым следствием возможности использовать в операторе Сase не только константы уровня компиляции, но и динамические структуры. Это преимущество, о котором нужно знать и использовать, а не стыдиться его
|
|
|
За это сообщение автора поблагодарили: db (2). |
23.05.2012, 17:20 | #18 |
Британский учённый
|
Я так пишу. Не вижу криминала. Считаю это более очевидным, сразу видно, что это булевая переменная.
X++: boolean b; Str s; NoYesId n; ; if ( b == true && n == NoYes::Yes && s != '') { } if ( b && n && s) { }
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: BOAL (2). |
24.05.2012, 14:35 | #19 |
Administrator
|
А что здесь некрасивого? По сути, сравнение двух логических переменных - это XOR (исключающее "или").
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: macklakov (1). |
24.05.2012, 14:49 | #20 |
Administrator
|
А в целом согласен с fed. Качество кода, производимого Майкрософт, стремительно падает от версии к версии. К сожалению.
* это исключительно моё личное мнение
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Бага в Query update(true) | 5 | |||
Не срабатывает skipDatabaseLog(true) | 14 | |||
visible(true) и курсор | 6 | |||
recordLevelSecurity(true) | 12 |
|