![]() |
#1 |
Участник
|
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; } X++: if (applyInterestRate) { real rate = this.getInterestRate(); result = result * rate; } if (applyExchangeRate) { ExchangeRate rate = this.getExchangeRate(); result = result * rate.ExchangeRate; } ![]() Finally, we can:
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). |
![]() |
#2 |
MCT
|
Не знаю кому как, но было удобно, что все объявления были в начале кода.
__________________
Axapta book for developer |
|
![]() |
#3 |
Участник
|
не, инлайн - это здорово.
это сильно снижает вероятность повторного и неправильного использования локальных для циклов временных переменных. в условиях и в других блоках такое нечасто требуется, но также полезно. например, какая-нибудь локальная переменная для swap. (пока у нас нет inline-функций и методв, выделение в отдельную функцию бывает не очень хорошо с точки зрения производительности) |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
Может, ты просто по-другому не пробовал.
Очень удобно когда у переменной такой скока который надо - меньше возможности сделать ошибку использовав значение до его получения. Сразу видно и тип и то как используется. Легче манипулировать с кусками. |
|
![]() |
#6 |
Участник
|
Цитата:
![]() |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#7 |
Участник
|
Это не тот инлайн это по то чтобы оптимизатор инлайнил http://blogs.msdn.com/b/davidnotario...01/250398.aspx
Последний раз редактировалось belugin; 20.12.2015 в 15:17. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#8 |
Участник
|
А я, наоборот, ждал когда в Аксе появится возможность определять переменные там, где это логично. Особенно внутри блоков кода.
Кстати, из-за отсутствия такой возможности не любил инициализацию при объявлении переменных в начале кода - инициализирую в начале метода, а использую где-то там через 20-30 строк. А тут: объявил, инициализировал, использовал - все рядом и понятно. Особенно непонятно было с переменными цикла. Приходилось в начале метода писать: X++: Counter idx X++: for (idx = 1; ...); X++: for (Counter idx = 1; ...); Последний раз редактировалось Raven Melancholic; 20.12.2015 в 17:56. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#9 |
Модератор
|
Цитата:
Так что, Raven, я не думаю, что мы увидим X++: for (Counter idx = 1; ...); С Уважением, Георгий |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Banned
|
Да, хорошая вещь. А то раньше когда модифицировали существующий код я старался обойтись без переменных, чтобы вместо одного блока модификаций не появлялось два. Очень практично.
|
|
![]() |
#12 |
Участник
|
угу. в других языках норм.
|
|
![]() |
#13 |
Боец
|
Inline - это здорово. Но вот стоимость этих заимствований...
Вот, к примеру, как вы относитесь к тому факту, что сейчас минимальный чендж в коде - это новый билд с перекомпиляцией всего приложения? Если где-то compilation error - то всё, труба. Поправьте, если ошибаюсь |
|
![]() |
#14 |
Участник
|
Можно перекомпилировать либо модуль либо проект. Все приложение необязательно.
|
|
![]() |
#15 |
Боец
|
Вложение 9460
Я несколько по-другому эту фразу трактовал. Но ведь и AOS (IIS) придётся ре-ранить после малейшего изменения? Последний раз редактировалось DSPIC; 28.09.2017 в 01:50. |
|
![]() |
#16 |
Участник
|
В приведенном отрывке говорится о том, что при компиляции класса/формы/запроса или другого [составного] элемента модели компиляция завершится с ошибкой (соотв. .NET-тип не создастся), если ошибка будет найдена хотя бы в одном методе. Это отличается от нынешнего поведения, когда часть методов класса может быть с ошибками, а другая часть - без ошибок и прекрасно вызываться при этом. Но речи про перекомпиляцию всего приложения не идет.
На счет IIS - так и сейчас в AX 2012 приходится все АОСы передергивать, даже если на одном из них делаешь инкрементную компиляцию. |
|
![]() |
#17 |
Участник
|
|
|
![]() |
#18 |
Участник
|
Насколько я знаю - нельзя, потому что "кэш" в данном случае - это локальная копия приложения на каждом 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). |
![]() |
#19 |
Участник
|
О чёрт ! А мы на 2009-й умудрялись по живой переносить с кучей аосов. И кеши обновлялись.
Пропал калабуховский дом... ![]() |
|
![]() |
#20 |
Участник
|
Цитата:
Сообщение от DSPIC
![]() Вложение 9460
Я несколько по-другому эту фразу трактовал. "When you build a project, only those elements that are new or that have changed are built. " |
|