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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2012, 23:18   #1  
Bergman is offline
Bergman
Участник
 
50 / 18 (1) ++
Регистрация: 07.12.2012
По-моему самое простое это:
X++:
for (i = 1; i <=100; i++)
            {

                if (i % 3 == 0 && i % 5 == 0)
                    Console.WriteLine("BuzzFuzz");
                else if ( i %3 ==0)
                    Console.WriteLine("Fuzz");
                else if(i%5 ==0)
                
                 Console.WriteLine("Buzz");
                else 
                    Console.WriteLine("{0}", i);
                
                }

Последний раз редактировалось Bergman; 07.12.2012 в 23:28.
Старый 08.12.2012, 16:23   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Stitch_MS Посмотреть сообщение
Можно и так (кода больше, но резь в глазах уменьшится )
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
Любители тернарных операторов видят это, наверное, так
Цитата:
Сообщение от Bergman Посмотреть сообщение
По-моему самое простое это:
Не, ребят.
1.
Вы занимаетесь внешним видом, а не сутью.
В ваших примерах (как и в изначальном) нахождение остатка от деления вычисляется несколько раз (до 4 вместо необходмых 2 вычислений).

Представьте, что в реальной жизни это будет не нахождение остатка от деления, а вычисление остатка на некую дату на некоем складе и отдельно на складе пополнения. Вы и там тоже будете запускать процедуру расчета остатков лишние разы?

2.
Чем плох if else if... тем что выражение внутри if вычисляется несколько раз.
условие внутри switch всегда вычисляется только один раз. Именно для этого (ну, кроме формы записи) и вводился switch в процедурные языки.
если в switch условие вычисляется один раз, а в case константы... то можно добиться существенной оптимизации. А не только внешнего вида.

в исходном примере суть switch вывернута наизнанку - условие константа, а в case - выражения (вдобавок с избыточным количеством).

Возврат к if else if... это возврат.

примерно так.
удивительно, что об этом приходится писать.
Старый 09.12.2012, 00:24   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (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   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну-ка, ну-ка... Чем это плохо?
Мы все еще находимся в контексте Аксапты или перешли на разговор о "вообще"?

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

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Применительно к Аксапте тут есть одно противоречие: оптимизация vs простота сопровождения и развития кода. Зачастую при написании кода, по-моему, лучше выбрать более "многословный" вариант, состоящий из отчасти избыточных блоков, в большей степени автономных и поддающихся кастомизации, нежели написать лаконичный "заоптимизированный" вариант, который, в случае чего, придется просто выкинуть и переписать с нуля.
Ну... В общем да. Но без фанатизма же. Из цитаты следует индусский код Нужны дополнительные условия и уточнения.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 13:48.