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

Category: Статьи Post Date: 01.04.2020

Это как раз то новое свойство языка, которое вызывает больше всего споров. Совсем как в 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: статические члены класса” доступна тут.

6 часть “X++ в AX7: ключевые слова Client/Server” доступна тут.

7 часть “X ++ в AX7: статическая подписка на событие” доступна тут.

8 часть “X ++ в AX7: статические классы” доступна тут.

9 часть “Х ++ в АХ7: Internal keyword” доступна тут.

10 часть “Х ++ в АХ7: вещественные типы данных” доступна тут.

11 часть “Х ++ в АХ7: ключевое слово Readonly” доступна тут.

12 часть “Х ++ в АХ7: методы расширения” доступна тут.

Подписывайтесь на канал @d365neti в Telegram

Подписаться

Добавить комментарий