0

Про сахар (c#)

Андрей Трусов
2 апреля 2010 года

Всем известно, что синтаксическим сахаром называют различные "фишечки" языка, которые помогают более кратко записывать фрагменты кода.

Кстати, кроме сахара есть еще и неожиданные приемы использования свойств самого языка. Подумайте, например, что делает следующий фрагмент кода на c++:

a^=b, b^=a, a^=b;

Но сейчас я хочу написать не про непривычное применение, а про встроенные в язык конструкции, которые мне показались полезными. Да, и еще, язык будет с#, а не с++.

Рассмотрим мы вот такой список: 

  • ?:
  • ??
  • <value type>?
  • as
  • using <name> = <other name>
  • using () {}
  • params
  • #region #endregion

?:

Это условный оператор. Использование простое:
int i = a>b ?a : b;
аналог этой записи:
int i;
if (a>b) i=a; else i=b;
 
??

Еще один условный оператор, только на этот раз проверяется значение на null.
Позволяет подменить значение null другим значением:
string a = null;
string b = "'a' value: " a ?? "null";
 
<value type>?

Позволяет обьявлять "как бы" value типы, но с поддержкой null значения:
int? a;
a = 100;
a = null;
 
as

Приведение типа, которое не вызывает исключений, а возвращает null:
int a = 100;
string b = a asstring; // b == null
 
using<name> = <other name>

Назначение синонимов для namespace и типов

using Draw = System.Drawing;
using Col = System.Drawing.Color;
 
using() {}

Автоматический вызов Dispose:
using (Brush br1= new SolidBrush(Color.Red), br2 = new SolidBrush(Color.Green))
{
  //... 
}
 
params

Переменное количество аргументов в функции:
int Sum (params int[] list) 
{
  int sum = 0;
  for(int i = 0; i < list.Length; i++)
   sum += list[i];
  return sum;
}
Sum(1,2,3);
Sum(1,5,4,3,6,4,8,3,0,6) ;
 
#region #endregion

Никакого сокращения кода не дает. Но зато все равно используется,
потому что позволяет удобно сгруппировать код (повышает удобство
чтения кода, а это, согласитесь, тоже важно):
#region [ архисложные функции ]
//...
#endregion
 
p.s. Про LINQ и лямбда оператор раскажу отдельным постом, так как тема эта обширная.
p.s.s. А строка "a^=b, b^=a, a^=b;" на языке с++ просто меняет местами значения двух переменных без использования третьей.
 

Метки: , ,

Оставить комментарий