|
![]() |
#1 |
Участник
|
Интересная дискуссия.
![]() Best practice такого конкретно нет, насколько мне известно, но этому и не препятствуют, так как, как уже многие написали, абсолютно легальная операция и многие предпочитают именно такой стиль написания. Личное мне это тоже всегда бросается в глаза, но чаще в других случаях, когда используются таблицы, и вместо if (inventTable) используется что-нить типа if (inventTable.ItemId != "") Но тому тоже есть теоретически верные аргументы, поэтому такие структуры я вижу в коде все чаще. По теме, в Inventory коде добавились еще конструкции вида if (0 != inventTable.RecId) или if (true == isProductMaster), когда константа идет первой в условии. Работал у нас парень один из Польши, который до этого писал много на С, и там это повсеместная практика, так как защищает от непроизвольных описок в таких логических условиях (уже забыл конкретные примеры, которые он приводил, когда я первый раз его об этом спросил) А про общее снижение кода... Да, я тоже считаю, что это так. Особенно учитывая сколько кода мы купили у партнеров. |
|
![]() |
#2 |
Moderator
|
Цитата:
Сообщение от kashperuk
![]() По теме, в Inventory коде добавились еще конструкции вида if (0 != inventTable.RecId) или if (true == isProductMaster), когда константа идет первой в условии. Работал у нас парень один из Польши, который до этого писал много на С, и там это повсеместная практика, так как защищает от непроизвольных описок в таких логических условиях (уже забыл конкретные примеры, которые он приводил, когда я первый раз его об этом спросил) Но во первых даже в C есть более простое и изящное решение - просто включить варнинги компилятора. Все известные мне компиляторы C, (даже gcc по моему), могут выдавать варнинг при попытке использования оператора присвоения внутри if. Во вторых - а какое это вообще имеет отношение к Аксапте ? Уж там то нечаянно оператор присвоения в if() не засунешь... |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от fed
![]() Ну я тоже когда-то много программировал на C. Там всегда есть опасность вместо if(var==1) написать if(var=1). Второй вариант конструкции вполне синтаксически легален, но вместо сравнения, присвоит значение в var, потом результат операции (1) закастует в логическое значение и потом выполнит оператор, поскольку в if() стоит истинное логическое условие. В такой ситуации можно писать условие в вывернутом формате типа if (1==var). Тут уж если нечаянно один знак равенства поставил - компилятор ошибку выдаст.
Но во первых даже в C есть более простое и изящное решение - просто включить варнинги компилятора. Все известные мне компиляторы C, (даже gcc по моему), могут выдавать варнинг при попытке использования оператора присвоения внутри if. Во вторых - а какое это вообще имеет отношение к Аксапте ? Уж там то нечаянно оператор присвоения в if() не засунешь... А отношение имеет прямое - просто показывает, что у нас нету жестких рекомендаций написания кода, поэтому все пишут "как хотят". |
|
![]() |
#4 |
Модератор
|
А вот это напрасно - хотя бы из уважения к людям которым потом эти письма дяди Федора разбирать и фиксить стоило бы этим озаботиться
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#5 |
Moderator
|
Еще страшно злит, когда в selectах в явном виде указывают список полей. Причем я могу понять, когда это делают с учетом покрывающего индекса (например только recId извлекают). Но понять, почему те криворукие создания которые AIF разрабатывали, ухитрились напихать списки полей во все запросы - это выше моих возможностей...
|
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от fed
![]() Еще страшно злит, когда в selectах в явном виде указывают список полей. Причем я могу понять, когда это делают с учетом покрывающего индекса (например только recId извлекают). Но понять, почему те криворукие создания которые AIF разрабатывали, ухитрились напихать списки полей во все запросы - это выше моих возможностей...
X++: select forupdate BankAccount from custTable where custTable.AccountNum == "Account"; custTable.BankAccount = "BankAccount"; custTable.update(); |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от 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; |
|
![]() |
#8 |
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. |
|
![]() |
#9 |
Участник
|
Цитата:
А надо писать на X++, используя best practices и naming conventions из X++. |
|
|
![]() |
||||
Тема | Ответов | |||
Бага в Query update(true) | 5 | |||
Не срабатывает skipDatabaseLog(true) | 14 | |||
visible(true) и курсор | 6 | |||
recordLevelSecurity(true) | 12 |
|