AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2009, 18:16   #1  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Я так вижу, что либо вы не читали либо не поняли моих объяснений.

Попробую более подробно разъяснить.
Смысл, то в том, что когда от выражения требуется вернуть значение, то:
  1. понятно его назначение- что должно быть результатом отражено явно
  2. исходя из понимания что вернется можно предположить как там что реализованно не заглядывая внутрь
  3. некоторые программисты следят за тем чтобы такие выражения просто вычисляли значение, но не меняли бы состояние объектов
Все это в сумме дает более понимаемый код ("читается"- это я не совсем точно написал).

То есть:
X++:
switch(value)
{
   case cond1 : action1
   case cond2 : action2
   default    : default_action
}
здесь надо разобраться как работает каждый action, плохо то, что такой стиль требует модификацию объектов внутри 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
Старый 22.10.2009, 18:30   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от cerbo Посмотреть сообщение
Все это в сумме дает более понимаемый код
Есть замечательное правило, очень хорошо применимое к системе, в которой УЖЕ есть код. Называется оно "Пусть безобразно, зато однообразно".

Т.е. никто не оценит усилия по улучшению читабельности отдельно взятого кода, если в остальных 255 местах он написан по-другому.

Микрософт делает шаги в этом направлении - и только они имеют право это делать как ее владельцы.

Если представить себе, что весь код будет переписан с нуля - то да, конечно можно пересмотреть все и вся.

А в АХ надо учитывать, что это не язык программирования в полном понимании и его компилятор не отлаживался полноценно (Вы уже успели с этим столкнуться). Поэтому написание кода "по аналогии" связано еще с заведомым обходом "косяков" компилятора.

Так что "массовость" существующего кода - сильно давит на всех остальных разработчиков - в т.ч. из МС (даже они оказались не готовы отказаться от X++ в пользу того же C#)
__________________
Возможно сделать все. Вопрос времени
Старый 22.10.2009, 18:34   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от cerbo Посмотреть сообщение
Если не void то немного проще потому, что наперед известно чем все закончится.
Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается
2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить
3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd ==
4. Лучше безобразно, но единообразно (via подполковник Схаба)

=> На практике, лучше switch

Последний раз редактировалось belugin; 22.10.2009 в 18:36.
Старый 22.10.2009, 19:05   #4  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,300 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от belugin Посмотреть сообщение
Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается
2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить
3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd ==
4. Лучше безобразно, но единообразно (via подполковник Схаба)

=> На практике, лучше switch
Поддерживаю. Добавил бы:
5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор.
6. Дополнительные возможности для ошибок при исправлении данного кода ввиду его непонятности программистам, соблюдающим best practice.
__________________
Михаил Андреев
https://www.amand.ru
Старый 22.10.2009, 20:34   #5  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Cool
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Поддерживаю. Добавил бы:
5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор.
+1

Довелось видеть "елку" из таких тернарных операторов, причем там ловилась какая-то "фантомная" ошибка. Елка была размером с экран(т.е. раз в двадцать больше того, что обсуждается тут, причем там был не switch, а if). Неизвестный автор сего шедевра был неоднократно проклят Увы, для отладчика Аксы это действительно один оператор.

p.s. Для любителей писать хитрый код есть старый добрый Perl или новый модный Nemerle. Давайте не будем превращать Х++ в инструмент для упражнений в программировании. При всей простоте встроенного языка, спустя почти десять лет, а так же при том, что вышли несколько книг по разработке, пол форума в разделе "Программирование" завалено RTFM вопросами. Думайте о коллегах, не усложняйте жизнь им, и себе
Теги
best practice, x++, антипаттерн, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
Тернарный оператор в select novic DAX: Программирование 7 10.07.2007 19:13
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
Не работает Debugger Antidot DAX: Программирование 0 20.12.2004 13:53
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:18.