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

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

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

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

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

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

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

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

 

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

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


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

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

17.11.2017
Модуль «Сводное планирование» / «Журналы» / «Резервный запас» / «Строки» / кн. «Строки журнала» / «Создать строки».1. Вычисляется количество месяцев (numOfMonth) между датой начала и датой конца...
18.10.2017
Какую цену вы бы заплатили, чтобы иметь возможность делать так в X ++?for (int i = 1; i <= n; i++)   {}    Или так:
12.10.2017
В AX7 X++ теперь поддерживается ключевое слово const. Его семантика аналогична семантике в C#. Если вкратце, то это позволяет вам определять члены в классе и переменные в методе, они могут быть...

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

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


Подписка

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

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


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