Эта статья посвящена
новым возможностям будущего языка C#
6.0. Часть информации для данной статьи взята с источников и блогов, которые посвящены презентациям конференции NDC
2013
(new
Developers
Conference), проходившей с 2 по 6 декабря в Лондоне. В этой конференции Mads Torgersen презентовал
новые возможности языка C#
6.0. В последние годы команда Microsoft
была
сосредоточена на написании компилятора нового поколения в рамках проекта Roslyn, который Вы можете попробовать в действии уже сейчас.
1. Конструктор
по умолчанию (Primary
Constructor)
В новой версии языка
вызов конструктора по умолчанию будет выглядеть намного проще.
До
нововведения:
public class Point
{
private int _x, _y;
public Point(int x, int y)
{
_x = x;
_y = y;
}
}
После нововведения:
public class Point(int x, int y)
{
private int _x = x;
private int _y = y;
}
2. Неизменяемые автопроперти
(Read only auto properties)
До нововведения:
private readonly int _x;
public int X { get { return _x;
} }
После нововведения:
public int X { get; } =
_x;
3. Использование
using
для статических типов (static type using statment)
До нововведения:
public double A { get { return Math.Sqrt(Math.Round(5.142));
} }
После
нововведения:
using System.Math;
public double A { get { return Sqrt(Round
(5.142)); } }
4. Property Expression
Для свойств в новой
версии С#
добавлена инициализация get
и
set
метода
с помощью лямбда-выражения. Как это будет выглядеть, можно посмотреть в примере.
До
нововведения:
public double Distance
{
get { return Math.Sqrt((X * X) + (Y * Y)); }
}
После нововведения:
public double
Distance => Math. Sqrt((X * X) + (Y * Y));
5. Method Expression
Аналогичную возможность
сделали также для методов.
До нововведения:
public Point Move(int dx, int dy)
{
return new Point(X + dx1, Y + dy1);
}
После нововведения:
public Point
Move(int dx, int dy) => Point(X +
dx1, Y + dy1);
6. Использование
params
для коллекций (params for enumerables)
Как по мне, это очень
специфическая возможность. Да, она позволяет не приводить Вашу коллекцию к массиву.
Но в чем сложность принимать коллекцию для написанных методов вместо params? К сожалению, не вижу здесь
преимуществ использования.
До нововведения:
Do(array.ToArray());
public void Do(params int[] values)
{ }
После нововведения:
Do(array);
public void Do(params IEnumerable<int> values)
{ }
7. Проверка
на null
с помощью монад (Monadic null checking)
Команда разработчиков решила реализовать возможность языка на замену монады Maybe, которая очень популярна в функциональном
программировании. Вы можете посмотреть варианты решения с помощью linq, доступные на данный момент.
До нововведения:
if (points != null)
{
var next =
points.FirstOrDefault();
if (next != null && next.X != null) return next.X;
}
return -1;
После нововведения:
var
bestValue = points?.FirstOrDefault();?.X ?? -1;
8. Сonstructor
type parameter inference
Удаляет необходимость
создания статических фабричных методов и вместо них позволяет использовать дженерик тип (generic type). Примером может служить кортеж (Tuple) с его методом Tuple.Create.
До
нововведения:
var t = new Tuple<int, int>(1,
2);
После нововведения:
var t = new Tuple(1, 2);
Аналог, используемый сейчас:
var s= Tuple.Create(1, 2);
9. Встроенное объявление для выходных параметров (inline declarations for out params)
До нововведения:
int x;
int.TryParse("123", out x);
После
нововведения:
int.TryParse("123", out int x);
Итоги
В данной статье были
анонсированы новости с конференции NDC. Стоит упомянуть также об
возможностях, которые не были указаны в данной конференции, но были объявлены в видео с
Андерсом Хейлсбергом (возглавляет группу по проектированию и созданию
языка C#)
What
is new in C# 6.0. В этом видео Андерс Хейлсберг упоминал об использовании TypeScript
языка для более удобной работы с JavaScript
в
.Net.
О возможностях данного языка можно ознакомится в статье Более комфортная
работа с JavaScript в .NET. Также упоминалось о том, что язык C# все больше переходит в сторону использования
тасков и расширения возможностей для использования linq. Меня немного смущает тот факт,
что я ничего не слышал о том, войдут ли Immutable Collections, которые сейчас
доступны в предварительной версии, в основу языка C# 6.0 или нет. Надеюсь, авторы, материалы блогов которых
были использованы как источник, не рассердятся на меня из-за столь вольного
перевода их труда с добавлением своих мыслей и идей.
Источники:
No comments:
Post a Comment