click fraud detection

X++ в AX7: ключевое слово "var". Часть 1

Дата публикации: 03.03.2017
X++ в AX7: ключевое слово "var". Часть 1

Это как раз то новое свойство языка, которое вызывает больше всего споров. Совсем как в C#, теперь вы можете использовать ключевое слово “var” когда задаете переменные. Семантика та же самая, поэтому любое руководство по использованию этого ключевого слова в C# пойдет и для X++.

В C# ключевое слово “var” было введено для тех случаев, когда указать тип невозможно, почти невозможно или он не существенен, как в случае с анонимными типами и дженериками. Тот факт, что нужно меньше описывать, был положительно принят множеством разработчиков, и "var" стало пользоваться популярностью. Но о правилах его использования все еще спорят. Существует множество руководств и мнений. Начиная с одной крайности: «всегда используйте его, он делает код более читабельным», заканчивая другой крайностью: «никогда не используйте его, с ним код хуже читается». 

X++ не поддерживает анонимные типы и дженерики в AX7 – поэтому реальная необходимость в ключевом слове "var" отсутствует – тем не менее, оно поддерживается и уже используется повсеместно. Как и в C#, использование переменной также сильно типизировано, как и в случае, когда тип выражен явно.

Лично я рекомендую использовать “var” только в двух случаях:

1. Когда тип очевиден.

В X++ очень много повторений. Ключевое слово “var” позволяет избежать загромождения, что делает код более читабельным, а информация при этом не теряется.

Например: 

MyClass myClass = new MyClass();

В AX7 я бы написал:

var myClass = new MyClass();  

2. Когда тип не существенен:

Иногда вам не важен тип. Если он не важен для вас, то он не важен и для того, кто читает код. 

Например:
ListEnumerator enumerator = myCollection.getEnumerator();

В AX7 я бы написал:
var enumerator = myCollection.getEnumerator();   

Существует также несколько особых причин не использовать "var" в X++ (не относится к C#).

1. Ограниченная поддержка Visual Studio.

В X++ редакторе в Visual Studio вы можете использовать F12, чтобы перейти к определению типа. Тем не менее, редактор X++ все еще не так продвинут, как компилятор X++. На момент написания этой статьи дела обстоят таким образом, что эта функция будет не доступна для вас, если тип переменной не будет задан очевидным образом. То же самое относится и к IntelliSense: если вы используете ключевое слово "var" – IntelliSense (пока) не доступна.

2. Повышение риска появления "ошибок выполнения"(runtime errors).

Точно так же, как и компилятор C#, компилятор X++ будет определять тип по присвоению значения переменной, и применять те же самые правила и ограничения. Поэтому можно подумать, что использование var не ведет к большему числу ошибок выполнения. Но в X++ существует нюанс, о котором следует знать. Компилятор X++ не будет проводить процедуру проверки выводов метода на объекте (object) или объекте общего типа (common). Поэтому, если компилятор X++ определяет тип как объект или объект общего типа, у вас не будет этой дополнительной страховки. И это не всегда очевидно.

Рассмотрим следующий код:
CustTable custTable = Xml2Record(xml);
custTable.someInvalidMethod(); // Ошибка компиляции  

При использовании var, код выглядит так:
var custTable = Xml2Record(xml);  
custTable.someInvalidMethod(); // Ошибки компиляции нет, так как Xml2Record() возвращает объект общего типа (common)  

Этот пост имеет отношение к предварительному показу MICROSOFT DYNAMICS AX7; представлен как есть и не влечет за собой передачу каких-либо прав.

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

Оригинальная статья по ссылке

Продолжение:

2 часть - X++ в AX7: ключевые слова ”finally” и “using”, доступна тут.

3 часть - X++ в AX7: определение типа может включать 80 знаков, доступна тут.

4 часть - X++ в AX7: элементы с уровнями доступа private и public, доступна тут.

5 часть - X++ в AX7: Статические члены класса, доступна тут.

 

Акция "Тест-драйв Сопровождения"

Попробуй сопровождение АХ до подписания договора!


Узнать подробнее

Другие записи в блоге

14.09.2017
В AX7 X++ сейчас есть поддержка ключевого слова readonly. Семантика идентична readonly в C#.Вкратце: это позволяет вам определять члены класса, которые могут быть проинициализированы только при...
07.09.2017
В AX2012 переменные типа real компилируются как тип System.Decimal при компилировании CIL. В AX7 это является единственным возможным вариантом.Основное отличие между этими вариантами в максимальном...
04.09.2017
Почему аутсорсинговая компания эффективнее штатных IT-специалистов Бывают ситуации, когда штатные специалисты основную часть своего времени проводят в ожидании запросов или не могут...

Подпишитесь на блог

Все интересные статьи нашего блога на Вашем почтовом ящике!


Подписка

Служба контроля качества сервиса

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


Письмо директору