Некоторые новые возможности 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)”, а это совершенно корректный и разумный код. Это старая шутка, которая работает в любом языке, в котором есть оператор декремента (“--”).
Comments
Anonymous
July 21, 2010
Блин, ну хватит уже перво-апрельские шутки распространять..... Даже полный juniour в C# думаю сразу заподозрит неладное, а посмотрев на дату публикации сразу поймет. ...но постить не первого апреля такие "статьи"... мягко говоря очень плохой тон.Anonymous
January 04, 2011
Сначала я подумал, а зачем это надо, потом посмотрел на дату и удивился, что не 1 апреля, потом вспомнил, что статья переводная и пробежал текст до концаAnonymous
February 17, 2011
Перевод бредовый... и как-то не смешно получилось