AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.12.2013, 10:44   #1  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Перенесено из темы Классные программисты MS Бразилии создали сей шедевр

Нашёл интересный пример кода.
DAX 2009 (в AX 3.0 то же самое)

Класс ProdRouteType, метод update.

Привожу код метода:

X++:
void update()
{
    ProdTable        prodTable;
    ProdRoute        prodRoute_Orig= prodRoute.orig();
    ;
    ttsbegin;

    this.setBackStatus();

    if (prodRoute.OprPriority)
        prodRoute.LinkType = SchedJobLinkType::None;

    prodRoute.doUpdate();

    // Shop Floor Control begin
    if (Global::isConfigurationkeyEnabled(configurationkeynum(Jmgjob)))
    {
        JmgJobTable::synchronizeProdRoute(prodRoute);
    }
    // Shop Floor Control end

    if (0)
    {
        if  (prodRoute.BackorderStatus != prodRoute_Orig.BackorderStatus)
        {
            prodTable= prodRoute.prodTable(true);
            prodTable.status().setBackStatus();
            prodTable.doUpdate();
        }
    }

    ttscommit;
}
Не совсем понимаю условие

X++:
if (0)
По сути оно подразумевает, что код не будет выполняться.
Что вы думаете на этот счёт? Зачем так могли сделать?

Последний раз редактировалось Cardagant; 03.12.2013 в 10:50.
Старый 03.12.2013, 11:02   #2  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Перенесено из темы Классные программисты MS Бразилии создали сей шедевр


По сути оно подразумевает, что код не будет выполняться.
Что вы думаете на этот счёт? Зачем так могли сделать?
1. Существует такой "стиль" выключения блоков кода. Ну типа закомментировать. Про уместность лучше промолчать, но возможно в предыдущей жизни автор его где то использовал
2. Автор просто сделал код компилируемым в надежде дописать условие чуть позже и забыл

Последний раз редактировалось db; 03.12.2013 в 11:06.
За это сообщение автора поблагодарили: Cardagant (1).
Старый 03.12.2013, 11:05   #3  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от db Посмотреть сообщение
2. Автор просто сделал код компилируемым в надежде дописать условие чуть позже и забыл
А не легче написать

//TODO

и не забудешь точно
За это сообщение автора поблагодарили: Cardagant (1).
Старый 03.12.2013, 11:08   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от user_ax Посмотреть сообщение
А не легче написать

//TODO

и не забудешь точно
Скорее всего история данного примера начинается из очень ранних версий, где задач, возможно, ещё не было.
Старый 03.12.2013, 12:19   #5  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от user_ax Посмотреть сообщение
А не легче написать

//TODO

и не забудешь точно
вот throw error() или debug::assert() дают некую надежду что тебе рано или поздно напомнят в принудительном порядке, а TODO, увы, может жить вечно Если кусок действительно не важен для правильного исполнения, то можно и TODO с нормальным комментарием. Если понимаешь что работать без этого куска нормально не будет, но по каким либо причинам надо привести в компилируемый вид (в жизни всякое бывает, иногда реально надо), то надо прервать исполнение если дойдет до недоделанного места.
Старый 03.12.2013, 12:26   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,703 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от db Посмотреть сообщение
вот throw error() или debug::assert() дают некую надежду что тебе рано или поздно напомнят в принудительном порядке, а TODO, увы, может жить вечно Если кусок действительно не важен для правильного исполнения, то можно и TODO с нормальным комментарием. Если понимаешь что работать без этого куска нормально не будет, но по каким либо причинам надо привести в компилируемый вид (в жизни всякое бывает, иногда реально надо), то надо прервать исполнение если дойдет до недоделанного места.
ага, и теперь аксапта просто наводнена этими debug::assert(). надеемся что дойдут руки и доделают
Старый 04.12.2013, 09:53   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ice Посмотреть сообщение
ага, и теперь аксапта просто наводнена этими debug::assert(). надеемся что дойдут руки и доделают
Если, вдруг, кто-нибудь на самом деле думает что debug::assert признак чего-то недоделанного, прочитайте, пожалуйста этот пост
За это сообщение автора поблагодарили: mazzy (2), twilight (1), Ivanhoe (3), S.Kuskov (1).
Старый 04.12.2013, 13:44   #8  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от db Посмотреть сообщение
2. Автор просто сделал код компилируемым в надежде дописать условие чуть позже и забыл
Некомпилирующийся код не станет компилироваться от того, что его поставят под условие "if (0)". Вероятно, Вы имели в виду не "компилируемым", а "выполняющим правильные действия".
Старый 04.12.2013, 14:57   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,431 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Zabr Посмотреть сообщение
Некомпилирующийся код не станет компилироваться от того, что его поставят под условие "if (0)".
Именно так. Но теоретически можно представить представить себе ситуацию когда не содержащий ошибок компиляции код таким образом скрывается от выполнения, но не скрывается от компиляции. Например, для того что бы работали перекрестные ссылки, или просто чтобы бы при очередной компиляции проверять не появились ли ошибки в этом коде, связанные с изменениями в других объектах.
За это сообщение автора поблагодарили: mazzy (2).
Старый 09.12.2013, 21:50   #10  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Дивный код попался...

X++:
    TNow=TimeNow();
    super();
    switch(true)
    {

        case (23*3600 + 55*60 <tnow ):
            infolog.shutDown(true);
            return;
        break;
    }
... из рабочей Аксы.. она там вся почти такая. И ведь - все-таки работает ))
__________________
Best Regards,
Roman
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.