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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.12.2012, 00:24   #21  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вы занимаетесь внешним видом, а не сутью.
Ну-ка, ну-ка...
Цитата:
Сообщение от mazzy Посмотреть сообщение
В ваших примерах (как и в изначальном) нахождение остатка от деления вычисляется несколько раз (до 4 вместо необходмых 2 вычислений).
Чем это плохо? В менее тривиальных примерах inline-вычисления можно выделить в метод, а уже тем, откуда метод берет данные, заморачиваться потом.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Представьте, что в реальной жизни это будет не нахождение остатка от деления, а вычисление остатка на некую дату на некоем складе и отдельно на складе пополнения. Вы и там тоже будете запускать процедуру расчета остатков лишние разы?
Есть такая прекрасная вещь, как "ленивая" инициализация: можно из всех возможных мест дергать один метод, а в нем реализовать "ленивое" вычисление значения и его кэширование/использование временной переменной. Вызывающая логика при этом существенно упрощается, а усилия по оптимизации можно сконцентрировать в одном месте.
Цитата:
Сообщение от mazzy Посмотреть сообщение
выражение внутри if вычисляется несколько раз.
inline-выражение - да, в общем же случае (при вызове метода вместо inline-выражения) это неверно.
Цитата:
Сообщение от mazzy Посмотреть сообщение
условие внутри switch всегда вычисляется только один раз. Именно для этого (ну, кроме формы записи) и вводился switch в процедурные языки.
В этом, для ряда задач, кроется минус этой конструкции: не всегда для принятия решения, по какой ветке передать управление, нужно полностью вычислять исходное выражение, зачастую для ряда ветвлений достаточно упрощенного (неполного) результата вычислений.
Цитата:
Сообщение от mazzy Посмотреть сообщение
если в switch условие вычисляется один раз, а в case константы... то можно добиться существенной оптимизации.
По-моему, сначала нужно реализовать просто нормально работающую логику, а уже потом заморачиваться оптимизацией. Тем более, что оптимизация может вообще изменить код до неузнаваемости.
Применительно к Аксапте тут есть одно противоречие: оптимизация vs простота сопровождения и развития кода. Зачастую при написании кода, по-моему, лучше выбрать более "многословный" вариант, состоящий из отчасти избыточных блоков, в большей степени автономных и поддающихся кастомизации, нежели написать лаконичный "заоптимизированный" вариант, который, в случае чего, придется просто выкинуть и переписать с нуля.

Это все, во многом, - брюзжание, но все же... не стоит делать из мухи слона: исходный вариант решения далек от идеала, были предложены более оптимальные варианты, но делать далеко идущие выводы на основе такой тривиальной задачи, по-моему, - перебор.
За это сообщение автора поблагодарили: Lemming (1), S.Kuskov (1), Player1 (1).
Старый 09.12.2012, 10:27   #22  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну-ка, ну-ка... Чем это плохо?
Мы все еще находимся в контексте Аксапты или перешли на разговор о "вообще"?

если "вообще" - согласен.

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Применительно к Аксапте тут есть одно противоречие: оптимизация vs простота сопровождения и развития кода. Зачастую при написании кода, по-моему, лучше выбрать более "многословный" вариант, состоящий из отчасти избыточных блоков, в большей степени автономных и поддающихся кастомизации, нежели написать лаконичный "заоптимизированный" вариант, который, в случае чего, придется просто выкинуть и переписать с нуля.
Ну... В общем да. Но без фанатизма же. Из цитаты следует индусский код Нужны дополнительные условия и уточнения.
Старый 16.09.2013, 05:34   #23  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10


Цитата:
Я читал исходники и восхищался. Практически не к чему придраться, ну разве что я бы еще тестов добавил. Но само решение - высший класс.
http://avva.livejournal.com/2672937.html

настоящее erp-решение!
Старый 16.09.2013, 16:49   #24  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от mazzy Посмотреть сообщение
Если честно, то чудовищная реализация, на мой взгляд.
Избыточное вычисление mod и куча лишнего кода.

с точки зрения вычислений лучше уж так.

X++:
#define.FIZZ(3)
#define.BUZZ(5)
static void FizzBuzzImpl(Args _args)
{
    int i;
    str fizz;
    str buzz;
    ;

    for (i = 1; i <=100; i++)
    {
        fizz = ((i mod #FIZZ) == 0) ? "Fizz" : "";
        buzz = ((i mod #BUZZ) == 0) ? "Buzz" : "";
        if( fizz || buzz )
        {
            info(strfmt("%1%2 %3", fizz, buzz, i));
        }
    }
}
можно было бы отказаться и от переменных fizz, buzz. Но код стал бы менее читаемым.

Вот только результат не совпадает с указанным в задании. Считаю, что тест по выявлению "не умеющих писать код" работает как надо.

Задание

Цитата:
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
Результат
Цитата:
Fizz 3
Buzz 5
Fizz 6
Fizz 9
Buzz 10
Fizz 12
FizzBuzz 15
Fizz 18
Buzz 20
Fizz 21
Fizz 24
Buzz 25
Fizz 27
FizzBuzz 30
Fizz 33
Buzz 35
Fizz 36
Fizz 39
Buzz 40
Fizz 42
FizzBuzz 45
Fizz 48
Buzz 50
Fizz 51
Fizz 54
Buzz 55
Fizz 57
FizzBuzz 60
Fizz 63
Buzz 65
Fizz 66
Fizz 69
Buzz 70
Fizz 72
FizzBuzz 75
Fizz 78
Buzz 80
Fizz 81
Fizz 84
Buzz 85
Fizz 87
FizzBuzz 90
Fizz 93
Buzz 95
Fizz 96
Fizz 99
Buzz 100
За это сообщение автора поблагодарили: mazzy (5).
Старый 16.09.2013, 17:56   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Napalm Посмотреть сообщение
Вот только результат не совпадает...
Результат
1. в чем именно не совпадает?
2. вы привели результат чего именно?
Старый 18.09.2013, 12:58   #26  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 483 (17) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Цитата:
Сообщение от mazzy Посмотреть сообщение
1. в чем именно не совпадает?
"...При этом вместо чисел..."
За это сообщение автора поблагодарили: mazzy (5).
Старый 18.09.2013, 13:14   #27  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
1. в чем именно не совпадает?
судя по приведенному результату в том, что вывод с 3ки идет, вместо " выводит на экран числа от 1 до 100."
За это сообщение автора поблагодарили: mazzy (2).
Старый 18.09.2013, 14:01   #28  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Stitch_MS Посмотреть сообщение
"...При этом вместо чисел..."
Ай, хорошо. Ай, люблю...

Спасибо.
исправленная версия

X++:
#define.FIZZ(3)
#define.BUZZ(5)
static void FizzBuzzImpl(Args _args)
{
    int i;
    str fizz;
    str buzz;
    ;

    for (i = 1; i <=100; i++)
    {
        fizz = ((i mod #FIZZ) == 0) ? "Fizz" : "";
        buzz = ((i mod #BUZZ) == 0) ? "Buzz" : "";
        if( fizz || buzz )
        {
            info(strfmt("%1%2", fizz, buzz));
        }
        else
        {
            info(strfmt("%1", i));
        }
    }
}
За это сообщение автора поблагодарили: S.Kuskov (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Budget entries import in AX2012 Blog bot DAX Blogs 0 21.11.2012 00:12
DynamicsAxSCM: Visualizing Security in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 0 29.08.2011 13:11
dynamicsaxbi: Screenshots of Dynamics AX 2009 Role Centers Blog bot DAX Blogs 0 18.03.2011 20:11
DynamicsAxSCM: Personalization of Role Centers in Dynamics AX 2009 Blog bot DAX Blogs 0 21.06.2010 16:05

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

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

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