Некоторые новые возможности C# 4.0

Я надеюсь, вы уже знаете, что мы завершили реализацию C# 4. Была добавлена поддержка взаимодействия с динамическими языками и устаревшими объектными моделями, именованные и необязательные параметры, возможность «привязки» (link) к интерфейсам из Primary Interop Assembly, и моя любимая возможность – ковариантность и контравариантность интерфейсов и типов делегатов.

Иногда мы умудряемся найти время в графике работы для маленьких дополнительных возможностей, которые не ложатся четко в «тему» будущего выпуска, но являются очень полезными сами по себе. В C# 3 мы добавили все возможности для поддержки LINQ, но сумели также добавить авто-свойства (auto-properties) и частичные методы, при этом ни одна из этих возможностей напрямую не сопутствовала целям LINQ. Но поскольку эти возможности были очень полезными и относительно простыми в проектировании, реализации, тестировании и документировании, мы добавили их в тот выпуск.

Сегодня я объявляю о том, что мы сумели добавить два дополнительных оператора в C# 4, не объявленные до сегодняшнего дня: оператор «стремится к» (goes to) (записывается -->) и оператор «приближается » (is approached by) (записывается <--). Фактически, мы сумели добавить оба оператора в последний коллективный обзор (comunity preview), так что, если у вас есть CTP -версия, вы можете попробовать эти операторы уже сегодня! (Как вы, вероятно, знаете, мы не любим выпускать новые функции пока с ними вначале не познакомится компьютерное сообщество).

Вот примеры применения этих операторов:

int x = 10;
// читается «пока x стремится к нулю»
while (x --> 0)
{
    Console.WriteLine("x = {0}", x);
}

Как вы видите, этот код делает именно то, что от него ожидают: x становится 9, 8, 7 и т.д. пока не «устремится в нуль». Наш потрясающий архитектор компилятора Нил (Neal) узнал по своим контактам, что в последней версии Java тоже будет такой оператор; мы хотим сохранить значительное превосходство в возможностях языка по сравнению с Java, конечно мы работали сверхурочно, чтобы предоставить эту возможность нашему ценному сообществу разработчиков на языке C#.

Вскоре после этого, наш потрясающий менеджер по спецификации языка Мэдс (Mads) понял, что мы можем обобщить этот подход и для обратного оператора, который мы назвали «приближается к » (is approached by). Так что мы реализовали и его тоже:

int x = 10;
// читается «пока 0 приближается к x»
while (0 <-- x)
{
Console.WriteLine("x = {0}", x);
}

Как вы можете опять видеть, x принимает каждое значение, приближаясь к нулю. Точная семантика этого оператора немного отличается от семантики оператора goes-to, но я опишу эти различия в будущих сообщениях.

Весьма неплохо, так ведь? Я думаю, вы ребята можете обдумать все варианты использования этих новых операторов. Сроки давили на нас невероятно, но мы сумели это сделать.

Я знаю, что мы говорили о том, что хотим поддерживать парность возможностей языков C# и Visual Basic. К сожалению, на этот раз мы не смогли добавить эти операторы в VB. Возможно, мы сделаем это в будущей версии.

Дополнение: Всех с Первым Апреля! Всем, кого я сумел одурачить, включая по крайней мере одного тестировщика в команде C#, ха ха ха! Конечно, мы не анонсировали новые операторы за день перед выпуском C# 4.0. “while (x -->) – это тоже самое, что и “while( x-- > 0)”, а это совершенно корректный и разумный код. Это старая шутка, которая работает в любом языке, в котором есть оператор декремента (“--”).

Оригинал статьи