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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.11.2015, 18:05   #1  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
If without else
Давно хотел написать, что программисты, которые забывают написать else для каждого if, а также default для каждого case - горят потом в аду в самых страшных муках. И вместе с ними еще те, кто ленятся писать детальные сообщения об ошибочных ситуациях, с указанием точного места в данных, которое вызвало ошибку. Чтоб вам врач в больнице так диагноз ставил!
Извините за оффтоп.
Старый 19.11.2015, 18:48   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если в начале метода стоит условие

X++:
if (...) return;

то Вы принципиально в таких случаях пишите else для всего остального кода метода?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 19.11.2015, 18:53   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вы слишком категоричны.
Старый 19.11.2015, 19:22   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Ненавижу, когда пишут методы больше 20-30 строк.
Ненавижу, когда
Пишут
цикл
if условие1
код с ещё кучей вложенных ифов
конецif
Конеццикла
Более читабельнее
цикл
if не условие1
продолжить
конецif
код с ещё кучей вложенных ифов
Конеццикла
Ненавижу когда в методе с десяток переменных и все называются переменная1, переменная2 место человеческих названий.
Ненавижу, когда ставят два таба место одного.
Ненавижу, когда пропускают больше одной строки.
Ненавижу, когда комментарии ставят снаружи метода, ещё и с двух сторон, а не в его начале.
То что вспомнил за последние пару дней. Блин, походу я злой человек.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 19.11.2015, 19:37   #5  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Falcon Посмотреть сообщение
Чтоб вам врач в больнице так диагноз ставил!
Похоже тяжелая выдалась неделька
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 19.11.2015, 22:13   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
"Ну вы блин даёте"(с)
__________________
С уважением,
Вячеслав
Старый 19.11.2015, 22:58   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Falcon Посмотреть сообщение
Давно хотел написать, что программисты, которые забывают написать else для каждого if...
Подавляющая часть локализаторского кода так выглядит:
X++:
if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
{
    // ...
}
И какой тут должен быть блок else?
Цитата:
Сообщение от miklenew Посмотреть сообщение
Ненавижу, когда пишут
Код:
цикл
 if условие1
  код с ещё кучей вложенных ифов
 конецif
Конеццикла
Более читабельнее
Код:
цикл
 if не условие1
  продолжить
 конецif
 код с ещё кучей вложенных ифов
Конеццикла
У меня вот прямо противоположный опыт: подчас хочется в такой цикл дописать что-нить своё - ан-нет, какой-то умник всё решил за других и вставил в начале цикла if (!..) continue. Кто сказал, что цикл всегда будет работать только ради его кода? Вроде никто такого не говорил - но просто добавить свой код не выходит, приходится сначала переписывать if (!..).

Последний раз редактировалось gl00mie; 19.11.2015 в 23:08. Причина: typo
За это сообщение автора поблагодарили: Михаил Андреев (1), AP-1055D (1).
Старый 20.11.2015, 04:41   #8  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,245 / 980 (37) +++++++
Регистрация: 03.04.2002
По поводу default согласен. Но вот else не всегда имеет смысл. По поводу сообщений об ошибках, в принципе, согласен. Но сделать их вменяемыми, чтобы, к примеру, по ссылке открывали справочник с недостающей конфигурацией, это значительное усилие. Это усилие стоит денег. А с точки зрения клиента непонятно, зачем тратить деньги, если все равно потом нужен будет человек с дебаггером, который будет расследовать причину невменяемых сообщений, выдаваемых стандартом.
__________________
Isn't it nice when things just work?
Старый 20.11.2015, 07:39   #9  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Коль пошла такая пьянка, меня бесят когда вот так:
X++:
    if(!_param) return ret1;
    if(_param) return ret2;
Старый 20.11.2015, 07:48   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
До кучи if (a == true)
Старый 20.11.2015, 09:58   #11  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от miklenew Посмотреть сообщение
Более читабельнее
цикл
if не условие1
продолжить
конецif
код с ещё кучей вложенных ифов
Конеццикла
Я не люблю использовать "продолжить" внутри цикла, так как при этом перед этим самым "продолжить" нельзя использовать setPrefix. Если программный код несколько раз натыкался на "продолжить", а потом внутри цикла выдал какое-нибудь сообщение, то оно выглядит трудночитаемым из-за нескольких накопленных префиксов.
Не знаю как это проявляется в Ax2012, но в Ax2009 я "продолжить" в цикле перестал использовать в случаях когда в цикле мне нужны префиксы.
__________________
Дмитрий
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 20.11.2015, 10:06   #12  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Damn Посмотреть сообщение
Я не люблю использовать "продолжить" внутри цикла, так как при этом перед этим самым "продолжить" нельзя использовать setPrefix. Если программный код несколько раз натыкался на "продолжить", а потом внутри цикла выдал какое-нибудь сообщение, то оно выглядит трудночитаемым из-за нескольких накопленных префиксов.
Не знаю как это проявляется в Ax2012, но в Ax2009 я "продолжить" в цикле перестал использовать в случаях когда в цикле мне нужны префиксы.
Я уж больше 5 лет не работаю с аксой. Проблемы негров шерифа не е..т.
А насчёт setPrefix надо просто акуратнее его использовать, насколько помню предпочтительнее один сетпрефикс на одну функцию. Надо 3 уровня вложенности делай три функции.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2015, 10:17   #13  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Подавляющая часть локализаторского кода так выглядит:
X++:
if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
{
    // ...
}
И какой тут должен быть блок else?
У меня вот прямо противоположный опыт: подчас хочется в такой цикл дописать что-нить своё - ан-нет, какой-то умник всё решил за других и вставил в начале цикла if (!..) continue. Кто сказал, что цикл всегда будет работать только ради его кода? Вроде никто такого не говорил - но просто добавить свой код не выходит, приходится сначала переписывать if (!..).
Угу
если ЗначенниеЗаполнено(реквизит) тогда
100500 строк
КонецЕсли;
- крутиш крутиш колёсик, доходиш до конца, видиш что заканчивается и сразу выход из цикла. А дальше идёт русский матерный.
Что удобнее смотреть код с двумя табами: один до цикла, один внутри цикла.
Или с тремя табами: Один до цикла, один внутри цикла и один на условие?
Мой выбор: чем меньше табов, тем лучше.
Но почему то я уверен, что если бы вы привели пример, то возможно я там сделал бы иначе. Нужна конкретика. Я имел ввиду банальную проверку на заполненность значений.
Вот из нового: ненавижу когда параметры запроса с перечислениями задают отдельно, а не в самом запросе. Правда эту тему наверно только одинесники поймут.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2015, 10:20   #14  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от Falcon Посмотреть сообщение
Давно хотел написать, что программисты, которые забывают написать else для каждого if, а также default для каждого case - горят потом в аду в самых страшных муках. И вместе с ними еще те, кто ленятся писать детальные сообщения об ошибочных ситуациях, с указанием точного места в данных, которое вызвало ошибку. Чтоб вам врач в больнице так диагноз ставил!
Извините за оффтоп.
За это сообщение автора поблагодарили: mazzy (2), Logger (1), TasmanianDevil (1), IvanS (1).
Старый 20.11.2015, 10:33   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Damn Посмотреть сообщение
Я не люблю использовать "продолжить" внутри цикла, так как при этом перед этим самым "продолжить" нельзя использовать setPrefix. Если программный код несколько раз натыкался на "продолжить", а потом внутри цикла выдал какое-нибудь сообщение, то оно выглядит трудночитаемым из-за нескольких накопленных префиксов.
Да к стати ещё это потенциальные грабли при сочетании с ttsbegin/ttscommit. Если в цикле размещена транзакция, то при использовании continue можно запросто из неё выпрыгнуть, пропустив ttscommit размещённый в конце тела цикла.
Старый 20.11.2015, 10:38   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от miklenew Посмотреть сообщение
Угу
если ЗначенниеЗаполнено(реквизит) тогда
100500 строк
Если 100500 строк, то в любом случае проблема
Старый 21.11.2015, 17:23   #17  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от belugin Посмотреть сообщение
Если 100500 строк, то в любом случае проблема
Вспомним метод updateNow класса CustVendSettle до DAX2009. Конечно до 100500 не дотянули, но было радостно.
Старый 21.11.2015, 17:26   #18  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Кто сказал, что цикл всегда будет работать только ради его кода?
Это, мы же гордимся наличием объектно-ориентированного. А если так, то тут должно работать "не изменяем, а расширяем". Или мы не супер объекто-ориентированные?
За это сообщение автора поблагодарили: macklakov (1).
Старый 22.11.2015, 12:15   #19  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я лично писал про опыт реальных проектов, а не про сферических объектно-ориентированных коней в вакууме Хорошие/плохие методы можно писать как в рамках ООП, так и в рамках процедурной парадигмы.
Старый 22.11.2015, 16:23   #20  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
gl00mie не плохо бы было конкретный пример.
Вы давно в программировании, давайте помогайте разбираться старичкам и новичкам с нюансами.
Я конкретный пример привёл, а вы наводите тень на плетень. Я думаю вы не страдаете отсутствием аргументации.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
 


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

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

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