С выпуском Roslyn, облачного компилятора .NET, у нас есть первое представление о функциях, которые, вероятно, войдут в C # 6.0 — почему так мало огласки по поводу крупного события?
Roslyn — это полностью переработанный компилятор .NET, и одна из его обещанных функций состоит в том, что он упрощает добавление языковых функций. В рамках выпуска исходного кода Roslyn для .NET Foundation у нас также есть список «языковых функций». В них перечислены все 35 функций, которые были добавлены или добавляются в C # и Visual Basic. Многие из этих новых функций представляют собой небольшие модификации уже существующих вещей, и в примечаниях указано, что они далеки от окончательного и могут быть изменены в любое время. Это тем более вероятно, учитывая, что Roslyn явно упрощает изменение языка.
Итак, какие большие новые функции?
Если честно — их нет.
Большинство перечисленных изменений небольшие и часто сводятся к тому, что стало называться синтаксическим сахаром, то есть более короткими способами написания вещей, которые вы уже можете сделать.
Характеристики
Одно приятное изменение — способ создания автоматических свойств. Теперь вы можете определить автоматические свойства только для чтения и инициализировать их. Например:
общедоступный int Y {получить; } = Y;
создает свойство Y только для получения и инициализирует его значением y.
Что немного страннее, так это идея члена, состоящего из выражения, сочетания инициализации свойства и лямбда-выражений. Например:
int X => х * х;
определяет член, который возвращает квадрат x, т.е.
int X {получить {х * х;}};
Инициализация
Команда обычно была занята реализацией других вариантов инициализаторов. Например, теперь вы можете инициализировать объект Dictionary
новый словарь
и любой объект, поддерживающий индексатор как свойство (см .: В поисках свойств по умолчанию). Вы также можете выполнить доступ к индексу, используя синтаксис свойства. Например вместо:
indexObject [«х»];
ты можешь написать
indexObject. $ x
Новый первичный конструктор предоставляет другой способ инициализации объектов. Если вы включите что-то похожее на конструктор как часть определения класса, например
открытый класс Point (int x, int y) {}
затем для параметров создаются и автоматически назначаются частные члены, а пример эквивалентен:
открытый класс Point {частный int x, y; общественная точка (int x, int y) {this.x = x; this.y = y; }}
То есть основной конструктор определяет набор частных членов, которые инициализируются при создании объекта. Если у вас есть основной конструктор, все остальные конструкторы должны вызывать его, используя форму this (основные параметры), например. this (x, y), чтобы он мог инициализировать закрытые члены.
Более удивительный новый инициализатор для события:
новая кнопка {OnClick + = eventHandler};
это почти похоже на JavaScript!
Выражения и литералы
Говоря о JavaScript (или C), это также новый оператор точки с запятой, который позволяет вам объединять столько выражений, сколько вам нужно, и значением выражения является значение последнего. Цель этого дополнения — предоставить вам несколько шагов в частях языка, которые позволяют вводить только одно выражение. Например:
var x = (var y = rand (10); y * y);
устанавливает x равным квадрату случайного числа.
Еще одна новая функция выражения — это возможность объявлять переменные внутри выражения. Например
var y = (int x = 3) * x;
устанавливает y равным 9.
Есть несколько небольших, но приятных дополнений к способу использования литералов. Теперь есть двоичный литерал:
int x = 0b0111;
Вы можете использовать разделители цифр для презентации и убедиться, что вы подсчитали правильное количество цифр:
интервал x = 0xFF_00_FF_00;
Вы можете легко создавать многострочные строковые литералы:
«Привет
а строковые литералы могут включать переменные с помощью строковой интерполяции:
«Привет \ {record.name) как дела?»
хотя это всего лишь «возможно», поэтому он может не попасть в C # 6.
Еще одно приятное расширение — это возможность более простого использования статических методов. Например, если вам просто нужен квадратный корень и вы используете некоторые другие математические функции, вам сейчас нужно написать такие вещи, как:
var a = Math.Sqrt (Математический.Sin (0.5));
но теперь ты можешь писать
Использование System.Math; … var a = Sqrt (Sin (0.5));
См. Также: C # получает нового оператора — безопасная навигация.
Исключения
Есть также некоторые дополнения к обработке исключений. Теперь вы можете использовать ожидание в операторе catch и finally. Например:
попробуйте {сделать что-нибудь} Catch {await cleanup ();} Наконец {await cleanup ();}
Еще одно приятное дополнение для обработки исключений — это возможность использовать фильтры. Например
catch (исключение e) if (e.count> 5) {сделай что-нибудь}
Если условие истинно, то вводится перехват, в противном случае исключение продолжается. Это лучше, чем обработка исключения, выполнение теста в блоке catch, а затем повторная генерация исключения, поскольку он сохраняет стек в целости.
Вы можете найти полный список новых функций с указанием их текущего статуса на сайте Rosyln.
Так что вы думаете о C # 6?
Это действительно похоже на синтаксическую возню, но в основном приятно. Это то, что ждет C # в будущем? Неужели он действительно не упускает ничего особенного, что могло бы сделать его лучше?
Я думаю, что C # достиг такого уровня зрелости, когда он действительно успокоился и его функции, вероятно, нельзя было заморозить. Это, конечно, не относится к связанной с ней библиотеке классов, в которой живет большая часть утилит в современных языках.
Больше информации
Статус реализации языковой функции
Статьи по Теме
В C # появился новый оператор — безопасная навигация
RyuJIT — компилятор JIT .NET нового поколения
Microsoft советует разработчикам C # изучать JavaScript !?
Команда Microsoft объясняет языковую стагнацию
Чтобы получать информацию о новых статьях на I Programmer, установите панель инструментов I Programmer, подпишитесь на RSS-канал, подпишитесь на нас в Twitter, Facebook, Google+ или Linkedin или подпишитесь на нашу еженедельную новостную рассылку.
Комментарии
Оставьте комментарий или просмотрите существующие комментарии с помощью Disqus
или отправьте свой комментарий по адресу: comments@i-programmer.info