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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2015, 13:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,459 / 846 (79) +++++++
Регистрация: 28.10.2006
mfp: X++ in AX7: Inline variable declarations
Источник: http://blogs.msdn.com/b/mfp/archive/...larations.aspx
==============
What would you pay to be able to do this in X++?

X++:
for(int i = 1; i  0)    
{
    int positiveInt = i;  
}
Or this:

X++:
if (applyInterestRate)
{
    real rate = this.getInterestRate();  
    result = result * rate;  
}  
if (applyExchangeRate) 
{  
    ExchangeRate rate = this.getExchangeRate();  
    result = result * rate.ExchangeRate;  
}



Finally, we can:
  • Declare variables close(r) to where they are used,
  • Variables are scoped by the block in which they are declared, and
  • Variable names can be reused in another scope.
The price: Join the ranks of AX7 developers!

Note: Whenever you consider using inline variable declarations – consider extracting the code into a smaller method instead. Here is why.



THIS POST APPLIES TO MICROSOFT DYNAMICS AX7 TECHNICAL PREVIEW; IS PROVIDED AS-IS AND CONFERS NO RIGHTS.




==============
Источник: http://blogs.msdn.com/b/mfp/archive/...larations.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.

Последний раз редактировалось mazzy; 18.12.2015 в 17:17.
За это сообщение автора поблагодарили: alex55 (1).
Старый 19.12.2015, 10:17   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Не знаю кому как, но было удобно, что все объявления были в начале кода.
__________________
Axapta book for developer
Старый 19.12.2015, 10:42   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MikeR Посмотреть сообщение
Не знаю кому как, но было удобно, что все объявления были в начале кода.
не, инлайн - это здорово.
это сильно снижает вероятность повторного и неправильного использования локальных для циклов временных переменных.

в условиях и в других блоках такое нечасто требуется, но также полезно. например, какая-нибудь локальная переменная для swap.

(пока у нас нет inline-функций и методв, выделение в отдельную функцию бывает не очень хорошо с точки зрения производительности)
Старый 20.12.2015, 08:32   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
(пока у нас нет inline-функций и методв, выделение в отдельную функцию бывает не очень хорошо с точки зрения производительности)
Теперь jit инлайнит сам
Старый 20.12.2015, 08:54   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от MikeR Посмотреть сообщение
Не знаю кому как, но было удобно, что все объявления были в начале кода.
Может, ты просто по-другому не пробовал.

Очень удобно когда у переменной такой скока который надо - меньше возможности сделать ошибку использовав значение до его получения. Сразу видно и тип и то как используется. Легче манипулировать с кусками.
Старый 20.12.2015, 13:49   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
пока у нас нет inline-функций и методв, выделение в отдельную функцию бывает не очень хорошо с точки зрения производительности
На счет inline-функций вспомнился чудесный код Retail-модуля, скажем, RetailTransactionSalesTransMark, сшитый местами из кучи "вложенных" методов суммарно в сотник строк кода. Не иначе его разработчики пеклись о производительности
За это сообщение автора поблагодарили: mazzy (2).
Старый 20.12.2015, 14:53   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Это не тот инлайн это по то чтобы оптимизатор инлайнил http://blogs.msdn.com/b/davidnotario...01/250398.aspx

Последний раз редактировалось belugin; 20.12.2015 в 15:17.
За это сообщение автора поблагодарили: mazzy (2).
Старый 20.12.2015, 17:50   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от MikeR Посмотреть сообщение
Не знаю кому как, но было удобно, что все объявления были в начале кода.
А я, наоборот, ждал когда в Аксе появится возможность определять переменные там, где это логично. Особенно внутри блоков кода.
Кстати, из-за отсутствия такой возможности не любил инициализацию при объявлении переменных в начале кода - инициализирую в начале метода, а использую где-то там через 20-30 строк. А тут: объявил, инициализировал, использовал - все рядом и понятно.
Особенно непонятно было с переменными цикла. Приходилось в начале метода писать:
X++:
Counter idx
Потом в цикле:
X++:
for (idx = 1; ...);
Вместо:
X++:
for (Counter idx = 1; ...);
когда idx имела смысл только внутри цикла.

Последний раз редактировалось Raven Melancholic; 20.12.2015 в 17:56.
За это сообщение автора поблагодарили: mazzy (2).
Старый 21.12.2015, 10:36   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от mazzy Посмотреть сообщение
не, инлайн - это здорово.
это сильно снижает вероятность повторного и неправильного использования локальных для циклов временных переменных.
Да, с одной стороны, инлайн - это здорово. Но ты думай про то, во что превратится код через 2-3 поколения. Вообше концов не найдешь. Аксапта - стройная система. И объявление переменных до кода немного выстраивало мозги разработчикам, они понимали, какие переменные вводят и зачем они нужны, где будут использоваться. И, в сообествии с духом (ну, кроме сеттлмента) - блоки не должны были быть большие, достаточно немного отмотать назад, что бы вспомнить, зачем ты данную переменную задекларировал (ну если ты оригинал и тебе лень было правильно назвать переменную - так, что бы ты из названия вспомнил, зачем она нужна). Так что грядет эра for(i=1; i<j;...). возможно, это неплохо, но противоречит основным принципам наименованя переменных, и ленивые разработчики, которые не привыкли к правильным наименованиям, и вообще все это впервые видят, все сильнее будут засирать код.

Так что, Raven, я не думаю, что мы увидим
X++:
for (Counter idx = 1; ...);
, скорее вышеуказанный пример.

С Уважением,
Георгий
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 21.12.2015, 10:44   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Да, с одной стороны, инлайн - это здорово. Но ты думай про то, во что превратится код через 2-3 поколения.
Насколько я знаю, это нормальная практика в языках, где это есть давно и не приводит ни к каким проблемам.
Старый 21.12.2015, 11:48   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Да, хорошая вещь. А то раньше когда модифицировали существующий код я старался обойтись без переменных, чтобы вместо одного блока модификаций не появлялось два. Очень практично.
Старый 21.12.2015, 13:04   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
угу. в других языках норм.
Старый 21.12.2015, 23:41   #13  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Inline - это здорово. Но вот стоимость этих заимствований...
Вот, к примеру, как вы относитесь к тому факту, что сейчас минимальный чендж в коде - это новый билд с перекомпиляцией всего приложения? Если где-то compilation error - то всё, труба. Поправьте, если ошибаюсь
Старый 22.12.2015, 06:08   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Можно перекомпилировать либо модуль либо проект. Все приложение необязательно.
Старый 22.12.2015, 11:47   #15  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Вложение 9460
Я несколько по-другому эту фразу трактовал.
Но ведь и AOS (IIS) придётся ре-ранить после малейшего изменения?

Последний раз редактировалось DSPIC; 28.09.2017 в 01:50.
Старый 22.12.2015, 13:12   #16  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
В приведенном отрывке говорится о том, что при компиляции класса/формы/запроса или другого [составного] элемента модели компиляция завершится с ошибкой (соотв. .NET-тип не создастся), если ошибка будет найдена хотя бы в одном методе. Это отличается от нынешнего поведения, когда часть методов класса может быть с ошибками, а другая часть - без ошибок и прекрасно вызываться при этом. Но речи про перекомпиляцию всего приложения не идет.
На счет IIS - так и сейчас в AX 2012 приходится все АОСы передергивать, даже если на одном из них делаешь инкрементную компиляцию.
Старый 22.12.2015, 13:55   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от gl00mie Посмотреть сообщение
На счет IIS - так и сейчас в AX 2012 приходится все АОСы передергивать, даже если на одном из них делаешь инкрементную компиляцию.
А без передергивания аосов нельзя ? Сброс кешей какой нить на каждом аосе или еще как.
Старый 22.12.2015, 14:34   #18  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Насколько я знаю - нельзя, потому что "кэш" в данном случае - это локальная копия приложения на каждом AOS'е.
Каждый AOS в AX 2012 хранит копию скомпилированного в CIL приложения локально у себя в подкаталоге bin\XppIL. Также файлы сборки приложения хранятся в базе моделей, в таблице SysXppAssembly. После того, как один из AOS'ов перекомпилирует CIL, он заливает в базу моделей свою обновленную локальную копию. При запуске каждый AOS сравнивает свою локальную версию CIL и версию в базе моделей (там хранятся в т.ч. даты-время модификации файлов), и если в последней файлы новее, то он выкачивает их, обновляя свою локальную копию в bin\XppIL. Насколько я знаю, кроме перезапуска другие способы заставить AOS обновить свою локальную версию CIL из базы моделей не описаны. Можно, конечно, компилировать CIL последовательно на каждом AOS'е, но это как-то... стремно, да и времени будет занимать при большом числе AOS'ов едва ли меньше, чем перезапуск. Опять же, при таком подходе будет достаточно длительный период, когда разные AOS'ы выполняют разную по сути версию приложения. Кроме того, если AOS выполняет какую-то бизнес-логику в CIL, то он не сможет на лету "выдернуть" из-под себя соотв. файл сборки (netmodule) и подменить его только что перекомпилированным. Из-за этого, к примеру, на пакетном сервере при работающих пакетах компиляция CIL обычно надолго зависает, пока соотв. пакеты не завершатся.
За это сообщение автора поблагодарили: sukhanchik (4), Logger (7).
Старый 22.12.2015, 14:53   #19  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
О чёрт ! А мы на 2009-й умудрялись по живой переносить с кучей аосов. И кеши обновлялись.
Пропал калабуховский дом...
Старый 22.12.2015, 15:40   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вложение 9460
Я несколько по-другому эту фразу трактовал.
https://ax.help.dynamics.com/en/wiki/build-operations/

"When you build a project, only those elements that are new or that have changed are built. "
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mfp: X++ in AX7: Const keyword Blog bot DAX Blogs 0 17.12.2015 12:02
mfp: X++ in AX7: Static event subscription Blog bot DAX Blogs 0 11.12.2015 11:11
mfp: X++ in AX7: Type declarations can be 80 characters Blog bot DAX Blogs 0 08.12.2015 03:18
mfp: X++ in AX7: The var keyword Blog bot DAX Blogs 43 04.12.2015 10:19
mfp: X++ in AX7 Blog bot DAX Blogs 0 02.12.2015 22:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.