|
![]() |
#1 |
Участник
|
Я так вижу, что либо вы не читали либо не поняли моих объяснений.
Попробую более подробно разъяснить. Смысл, то в том, что когда от выражения требуется вернуть значение, то:
То есть: X++: switch(value) { case cond1 : action1 case cond2 : action2 default : default_action } X++: result= cond1 ? result1 : cond2 ? result2 : default_result; То же и с функциями. Если функция void, то есть основания для беспокойства- внутри нее 100% изменяется состояние объектов, а иначе она не была бы void. Если не void то немного проще потому, что наперед известно чем все закончится.
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005 |
|
![]() |
#2 |
Administrator
|
Есть замечательное правило, очень хорошо применимое к системе, в которой УЖЕ есть код. Называется оно "Пусть безобразно, зато однообразно".
Т.е. никто не оценит усилия по улучшению читабельности отдельно взятого кода, если в остальных 255 местах он написан по-другому. Микрософт делает шаги в этом направлении - и только они имеют право это делать как ее владельцы. Если представить себе, что весь код будет переписан с нуля - то да, конечно можно пересмотреть все и вся. А в АХ надо учитывать, что это не язык программирования в полном понимании и его компилятор не отлаживался полноценно (Вы уже успели с этим столкнуться). Поэтому написание кода "по аналогии" связано еще с заведомым обходом "косяков" компилятора. Так что "массовость" существующего кода - сильно давит на всех остальных разработчиков - в т.ч. из МС (даже они оказались не готовы отказаться от X++ в пользу того же C#)
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#3 |
Участник
|
Цитата:
1. Так не делают, поэтому инструментарием данный путь не поддерживается 2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить 3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd == 4. Лучше безобразно, но единообразно (via подполковник Схаба) => На практике, лучше switch Последний раз редактировалось belugin; 22.10.2009 в 18:36. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от belugin
![]() Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается 2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить 3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd == 4. Лучше безобразно, но единообразно (via подполковник Схаба) => На практике, лучше switch 5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор. 6. Дополнительные возможности для ошибок при исправлении данного кода ввиду его непонятности программистам, соблюдающим best practice. |
|
![]() |
#5 |
Участник
|
![]() Цитата:
Довелось видеть "елку" из таких тернарных операторов, причем там ловилась какая-то "фантомная" ошибка. Елка была размером с экран(т.е. раз в двадцать больше того, что обсуждается тут, причем там был не switch, а if). Неизвестный автор сего шедевра был неоднократно проклят ![]() p.s. Для любителей писать хитрый код есть старый добрый Perl или новый модный Nemerle. Давайте не будем превращать Х++ в инструмент для упражнений в программировании. При всей простоте встроенного языка, спустя почти десять лет, а так же при том, что вышли несколько книг по разработке, пол форума в разделе "Программирование" завалено RTFM вопросами. Думайте о коллегах, не усложняйте жизнь им, и себе ![]() |
|
Теги |
best practice, x++, антипаттерн, как правильно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|