22.10.2009, 17:07 | #21 |
Участник
|
Цитата:
Если мне рекомендуют какие-то правила (особено с приставками Best, Only и т.д.) я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую. А вы разве не так?
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005 |
|
|
За это сообщение автора поблагодарили: Eldar9x (4). |
22.10.2009, 17:22 | #22 |
Ищущий знания...
|
понимаете, правила придумываются не просто так. Правила - это стандартизация определенных действий, понятных всем людям.
Если говорите про нашу программу, то правила были придуманы, что бы любой программист мог поддерживать код в программе. Если каждый будет писать по своему принципу, то будет полный огород, и поддержка будет мукой. Мне тоже некоторые принципы не понятны в аксапте, а вначале их было ещё больше, однако все равно стараюсь следовать правилам.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: blokva (1). |
22.10.2009, 17:24 | #23 |
----------------
|
Вам даже компилятор "сказал", что это неBestPractices, попробуйте его убедить в обратном
|
|
22.10.2009, 17:26 | #24 |
Пенсионер
|
Цитата:
Сообщение от cerbo
Они не правы потому, что не доказали, что то что я предложил хуже Best Practice и нужно использовать их. Этого никто не сделал.
Если мне рекомендуют какие-то правила (особено с приставками Best, Only и т.д.) я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую. А вы разве не так? Все эти "приставки" придуманы для того, чтобы каждый, повторяю КАЖДЫЙ смог разобраться. А Ваш подход - это подход типа "я крут немеряно, а после меня хоть трава не расти". Я не о том, что Вы не правы на 100%, я к тому что это подход индивидуалиста, а Ваши тексты потом люди со "стандартным" мышлением будут читать. Вы предлагаете им сначала изучить Вашу манеру программирования, а потом только выполнять свои прямые обязанности? зы: уже опередили
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 22.10.2009 в 17:28. Причина: опередили |
|
22.10.2009, 17:32 | #25 |
MCT
|
Знавал одного "архитектора", который как раз очень любил такие вещи и всегда надменно про себя говорил - этот не индусский код. По делам этот работничек сделал модуль, который состоял из четырех таблиц, которые содержали одинаковые по составу поля и при вставке данные прописывались по всем четырем таблицам. Красоты архтектуры не было, то есть вообще архитекруры не было. ИМХО надо делать все в меру.
Думаю что более "гикнуто" было вообще писать код в одну строчку X++: #localMacro. case Command::%1: return new Edit%1(); #endmacro switch (_cmd){ #(CopyAll) #(Copy) #(MoveAll) #(Move) } return null
__________________
Axapta book for developer |
|
22.10.2009, 17:46 | #26 |
Участник
|
Цитата:
Цитата:
Кстати говоря, опыт, приобретенный в одной среде программирования, надо чрезвычайно осторожно применять в другой. То, что в одной среде было хорошо и правильно, в другой может оказаться плохо и не правильно. Все зависит от внутренней логики соответствующей среды программирования. Ну, давайте считать прооблемы Вашего подхода: 1. Для компилятора - это "не естесственная" конструкция. Приходится что-то мудрить, чтобы он пропустил. Оператор Switch - естесственная конструкция. Никаких проблем с компилятором 2. Вообще-то, то, что Вы написали - это одна команда. Одна строка. Более-менее "читабельной" она выглядит лишь потому, что Вы ее "разбили на части" переносом строки. Т.е. "искусственно" привели ее в более "читабельный" вид. В "естесственном" виде разобраться во вложенных операторах крайне сложно. Оператор Switch разбивает на части "естесственным" образом. Просто по самому своему синтаксису 3. Пока Вам требуется только одно действие по условию, но что Вы будете делать, если по каждому условию (или по одному из) потребуется выполнить два действия? Переписывать весь код? Оператор Switch легко расширяется в случае множественности команд. |
|
22.10.2009, 17:51 | #27 |
Сенбернар
|
- Вырезано Модератором: На личности не переходим -
Не. Никогда Просто - мозг снесло у парня. КМК Последний раз редактировалось RVS; 22.10.2009 в 18:22. |
|
22.10.2009, 18:09 | #28 |
Участник
|
|
|
22.10.2009, 18:16 | #29 |
Участник
|
Я так вижу, что либо вы не читали либо не поняли моих объяснений.
Попробую более подробно разъяснить. Смысл, то в том, что когда от выражения требуется вернуть значение, то:
То есть: 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 |
|
22.10.2009, 18:16 | #30 |
Moderator
|
Коллеги, как модератор прошу - поаккуратнее в выражениях.
__________________
Андрей. |
|
22.10.2009, 18:30 | #31 |
Administrator
|
Есть замечательное правило, очень хорошо применимое к системе, в которой УЖЕ есть код. Называется оно "Пусть безобразно, зато однообразно".
Т.е. никто не оценит усилия по улучшению читабельности отдельно взятого кода, если в остальных 255 местах он написан по-другому. Микрософт делает шаги в этом направлении - и только они имеют право это делать как ее владельцы. Если представить себе, что весь код будет переписан с нуля - то да, конечно можно пересмотреть все и вся. А в АХ надо учитывать, что это не язык программирования в полном понимании и его компилятор не отлаживался полноценно (Вы уже успели с этим столкнуться). Поэтому написание кода "по аналогии" связано еще с заведомым обходом "косяков" компилятора. Так что "массовость" существующего кода - сильно давит на всех остальных разработчиков - в т.ч. из МС (даже они оказались не готовы отказаться от X++ в пользу того же C#)
__________________
Возможно сделать все. Вопрос времени |
|
22.10.2009, 18:34 | #32 |
Участник
|
Цитата:
1. Так не делают, поэтому инструментарием данный путь не поддерживается 2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить 3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd == 4. Лучше безобразно, но единообразно (via подполковник Схаба) => На практике, лучше switch Последний раз редактировалось belugin; 22.10.2009 в 18:36. |
|
22.10.2009, 18:54 | #33 |
Пенсионер
|
А еще зачастую код в Аксе читают консультанты, для того, чтобы разобраться в логике поведения, как консультант я также категорически против, а то как правильно сказал sukhanchik в стандарте я код привык читать как мне его MS предлагает, а тут я натыкаюсь на непонятную конструкцию, что опять же заставляет меня непродуктивно напрягаться!
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
22.10.2009, 19:05 | #34 |
Участник
|
Цитата:
Сообщение от belugin
Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается 2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить 3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd == 4. Лучше безобразно, но единообразно (via подполковник Схаба) => На практике, лучше switch 5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор. 6. Дополнительные возможности для ошибок при исправлении данного кода ввиду его непонятности программистам, соблюдающим best practice. |
|
22.10.2009, 20:34 | #35 |
Участник
|
Цитата:
Довелось видеть "елку" из таких тернарных операторов, причем там ловилась какая-то "фантомная" ошибка. Елка была размером с экран(т.е. раз в двадцать больше того, что обсуждается тут, причем там был не switch, а if). Неизвестный автор сего шедевра был неоднократно проклят Увы, для отладчика Аксы это действительно один оператор. p.s. Для любителей писать хитрый код есть старый добрый Perl или новый модный Nemerle. Давайте не будем превращать Х++ в инструмент для упражнений в программировании. При всей простоте встроенного языка, спустя почти десять лет, а так же при том, что вышли несколько книг по разработке, пол форума в разделе "Программирование" завалено RTFM вопросами. Думайте о коллегах, не усложняйте жизнь им, и себе |
|
22.10.2009, 22:57 | #36 |
Сенбернар
|
... сильное заявление...
ВАМ НИКТО - НИЧЕГО - НЕ ДОЛЖЕН. С момента, когда Вы это осознаете - Вам легче будет жить. Вы не поверите Цитата:
Голову - включите, уже. Эти Best Practices-ы - кровью пишутся, вааще-та
__________________
Best Regards, Roman |
|
|
За это сообщение автора поблагодарили: Lemming (-2). |
23.10.2009, 07:11 | #37 |
MCTS
|
мне интересно другое. Почему BestPractice довольно часто нарушается на системных слоях. Зачем следовать правилам, которые нарушаются их же авторами?
PS: switch, вообще говоря, и на самом деле, более читаем. |
|
23.10.2009, 09:23 | #38 |
Administrator
|
Цитата:
А когда писалась локализация, то во-первых - продукт еще не был микрософтовским, а во-вторых из-за скудности документации и отсутствия большого количества "проварившихся в этой системе" специалистов - писалось все "как казалось".
__________________
Возможно сделать все. Вопрос времени |
|
23.10.2009, 10:13 | #39 |
Участник
|
Кстати. Не лучшим ли доказательством того, что так писать не следует является тот факт, что автор не может определить причину ошибки?
|
|
|
За это сообщение автора поблагодарили: RVS (1), lev (2). |
23.10.2009, 10:50 | #40 |
Боец
|
Не тратьте время впустую...
1. Всё равно сделает по-своему (видно некому ему там по шапке дать) 2. Сколько несоответствий BP и "своего" кода можно встретить в современном, стандартном X++ (видно некому ему по шапке давать) 3. А главное - всё равно перейдут на C# и будет новый BP Я уж как-то смирился с мыслью о том, что скоро DAX угробят: как со стороны MS так и со стороны внедренцев. |
|
|
За это сообщение автора поблагодарили: Lemming (2). |