23.05.2012, 17:20 | #21 |
Британский учённый
|
Я так пишу. Не вижу криминала. Считаю это более очевидным, сразу видно, что это булевая переменная.
X++: boolean b; Str s; NoYesId n; ; if ( b == true && n == NoYes::Yes && s != '') { } if ( b && n && s) { }
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: BOAL (2). |
23.05.2012, 17:25 | #22 |
Британский учённый
|
Цитата:
Сообщение от Владимир Максимов
Честно говоря, не вижу особых проблем. Ну, сравнивают с логической константой и что? Для меня, например, так нагляднее, чем использование восклицательного знака, да еще без пробела. Попробуй еще разгляди его! А так, никакой неоднозначности и не надо "с лупой" искать этот восклицательный знак.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
24.05.2012, 14:35 | #23 |
Administrator
|
А что здесь некрасивого? По сути, сравнение двух логических переменных - это XOR (исключающее "или").
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: macklakov (1). |
24.05.2012, 14:49 | #24 |
Administrator
|
А в целом согласен с fed. Качество кода, производимого Майкрософт, стремительно падает от версии к версии. К сожалению.
* это исключительно моё личное мнение
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
12.06.2012, 01:43 | #25 |
Участник
|
Интересная дискуссия.
Best practice такого конкретно нет, насколько мне известно, но этому и не препятствуют, так как, как уже многие написали, абсолютно легальная операция и многие предпочитают именно такой стиль написания. Личное мне это тоже всегда бросается в глаза, но чаще в других случаях, когда используются таблицы, и вместо if (inventTable) используется что-нить типа if (inventTable.ItemId != "") Но тому тоже есть теоретически верные аргументы, поэтому такие структуры я вижу в коде все чаще. По теме, в Inventory коде добавились еще конструкции вида if (0 != inventTable.RecId) или if (true == isProductMaster), когда константа идет первой в условии. Работал у нас парень один из Польши, который до этого писал много на С, и там это повсеместная практика, так как защищает от непроизвольных описок в таких логических условиях (уже забыл конкретные примеры, которые он приводил, когда я первый раз его об этом спросил) А про общее снижение кода... Да, я тоже считаю, что это так. Особенно учитывая сколько кода мы купили у партнеров. |
|
12.06.2012, 07:35 | #26 |
Moderator
|
Цитата:
Сообщение от kashperuk
По теме, в Inventory коде добавились еще конструкции вида if (0 != inventTable.RecId) или if (true == isProductMaster), когда константа идет первой в условии. Работал у нас парень один из Польши, который до этого писал много на С, и там это повсеместная практика, так как защищает от непроизвольных описок в таких логических условиях (уже забыл конкретные примеры, которые он приводил, когда я первый раз его об этом спросил) Но во первых даже в C есть более простое и изящное решение - просто включить варнинги компилятора. Все известные мне компиляторы C, (даже gcc по моему), могут выдавать варнинг при попытке использования оператора присвоения внутри if. Во вторых - а какое это вообще имеет отношение к Аксапте ? Уж там то нечаянно оператор присвоения в if() не засунешь... |
|
12.06.2012, 13:47 | #27 |
Участник
|
Цитата:
Сообщение от fed
Ну я тоже когда-то много программировал на C. Там всегда есть опасность вместо if(var==1) написать if(var=1). Второй вариант конструкции вполне синтаксически легален, но вместо сравнения, присвоит значение в var, потом результат операции (1) закастует в логическое значение и потом выполнит оператор, поскольку в if() стоит истинное логическое условие. В такой ситуации можно писать условие в вывернутом формате типа if (1==var). Тут уж если нечаянно один знак равенства поставил - компилятор ошибку выдаст.
Но во первых даже в C есть более простое и изящное решение - просто включить варнинги компилятора. Все известные мне компиляторы C, (даже gcc по моему), могут выдавать варнинг при попытке использования оператора присвоения внутри if. Во вторых - а какое это вообще имеет отношение к Аксапте ? Уж там то нечаянно оператор присвоения в if() не засунешь... А отношение имеет прямое - просто показывает, что у нас нету жестких рекомендаций написания кода, поэтому все пишут "как хотят". |
|
12.06.2012, 14:32 | #28 |
Модератор
|
А вот это напрасно - хотя бы из уважения к людям которым потом эти письма дяди Федора разбирать и фиксить стоило бы этим озаботиться
__________________
-ТСЯ или -ТЬСЯ ? |
|
12.06.2012, 14:45 | #29 |
Moderator
|
Еще страшно злит, когда в selectах в явном виде указывают список полей. Причем я могу понять, когда это делают с учетом покрывающего индекса (например только recId извлекают). Но понять, почему те криворукие создания которые AIF разрабатывали, ухитрились напихать списки полей во все запросы - это выше моих возможностей...
|
|
12.06.2012, 15:44 | #30 |
Возьми свет!!!
|
зато очень просто читать вот такое например
select count(RecId) from vendTrans where !ventTrans.SettleAmount убейтя я такое прочитать не могу!!!
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
12.06.2012, 16:33 | #31 |
Участник
|
Цитата:
Сообщение от fed
Еще страшно злит, когда в selectах в явном виде указывают список полей. Причем я могу понять, когда это делают с учетом покрывающего индекса (например только recId извлекают). Но понять, почему те криворукие создания которые AIF разрабатывали, ухитрились напихать списки полей во все запросы - это выше моих возможностей...
X++: select forupdate BankAccount from custTable where custTable.AccountNum == "Account"; custTable.BankAccount = "BankAccount"; custTable.update(); |
|
12.06.2012, 16:39 | #32 |
Участник
|
Цитата:
А надо писать на X++, используя best practices и naming conventions из X++. |
|
13.06.2012, 08:01 | #33 |
Участник
|
Цитата:
Сообщение от fed
Еще страшно злит, когда в selectах в явном виде указывают список полей. Причем я могу понять, когда это делают с учетом покрывающего индекса (например только recId извлекают). Но понять, почему те криворукие создания которые AIF разрабатывали, ухитрились напихать списки полей во все запросы - это выше моих возможностей...
Цитата:
If a select statement is local to a method, use a field list to increase performance. If you use
a select or a while select statement and the size of the fields that are used total less than 50 percent of the total record size, a warning appears if you do not use a field list. Другое дело, что подобная оптимизация порождает трудно отлавливаемые баги если кто-нибудь вдруг догадается добавить вызов display метода не проверив, какие поля он использует. Что самое противное Код: select Arrived from inventSum; print inventSum.AvailOrdered; |
|
13.06.2012, 09:39 | #35 |
Moderator
|
Цитата:
Сообщение от mayk
Это вообще-то является BP
If a select statement is local to a method, use a field list to increase performance. If you use a select or a while select statement and the size of the fields that are used total less than 50 percent of the total record size, a warning appears if you do not use a field list. и существенно ускоряеет выполнение запросов, так как в сеть не пихается туча данных, из которых не используется и половина.
Этот пример еще раз подтверждает мою мысль что Аксаптовские Development Best Practice пишутся не для реальных проектов, а для разработки сферического коня в кубе... Последний раз редактировалось fed; 13.06.2012 в 11:31. |
|
13.06.2012, 12:30 | #36 |
Участник
|
Цитата:
Так что милости просим к нам на работу, кто хочет изменить положение вещей и привнести реальный опыт внедрения АХ в код на SYS layer. |
|
13.06.2012, 12:45 | #37 |
Участник
|
Цитата:
Сообщение от kashperuk
Для того, чтобы они писались с учетом опыта реальных проектов, надо чтобы этот опыт у людей был Это, к моему большому сожалению, не так в большинстве случаев.
Так что милости просим к нам на работу, кто хочет изменить положение вещей и привнести реальный опыт внедрения АХ в код на SYS layer. |
|
13.06.2012, 13:44 | #38 |
Участник
|
Дык не идут к нам...
А те, кто идут, не справляются многие с техническими задачами на интервью. Более того, ERP программирование - это чуть специфическая область, а нанимаем мы обычно "for Micorosft", то есть человек этот должен иметь потенциал для продолжения работы в Майкрософт в другой команде, к примеру. |
|
13.06.2012, 13:58 | #39 |
Участник
|
Цитата:
Сообщение от ice
а что мешает нанять таких спецов? просто в вакансии требования из "плюсов" перенесите в обязательные
|
|
13.06.2012, 14:17 | #40 |
Moderator
|
Цитата:
Сообщение от kashperuk
Дык не идут к нам...
А те, кто идут, не справляются многие с техническими задачами на интервью. Более того, ERP программирование - это чуть специфическая область, а нанимаем мы обычно "for Micorosft", то есть человек этот должен иметь потенциал для продолжения работы в Майкрософт в другой команде, к примеру. Просто счас (как мне знакомые из бундеса говорят) у них там некоторый бум аксаптовский: в консультанты берут просто пользователей Аксапты с опытом (но без понимания системы в целом), в программисты просто C#овцев средней руки. Вот и вопрос - кто же это к вам пойдет на средние заработки, под заведомо невменяемый менеджмент и с достаточно мутными перспективами карьеры ? Только соискатели разрешений на работу... |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Бага в Query update(true) | 5 | |||
Не срабатывает skipDatabaseLog(true) | 14 | |||
visible(true) и курсор | 6 | |||
recordLevelSecurity(true) | 12 |
|