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: Статические члены класса, доступна тут.

 

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

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


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

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

08.06.2017
Заметки о саммите и российском рынке Dynamics  Компания Neti специализируется на разработке AX с 2003 года. Наш конек — передовые технологии MS Dynamics: мы находим, изучаем и внедряем в...
04.05.2017
Теперь можно задавать переменные класса как статические. Семантика точно такая же, как в C#, а именно: все экземпляры класса смогут использовать такой элемент, и, если один класс установит значение,...
18.04.2017
С самой первой версии Axapta переменные, объявленные в классе, имели уровень доступа protected. В AX7 по умолчанию уровень доступа остается таким же, но его уже можно изменить на public или private....

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

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


Подписка

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

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


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