Шаг 178.
Язык программирования C#. Начала.
Делегаты и события. Лямбда-выражения

    На этом шаге мы приведем общие сведения о лямбда-выражениях.

    У анонимных методов есть конкурент - это лямбда-выражения. Лямбда-выражение представляет собой блок программного кода, который определяет метод и предназначен для присваивания в качестве значения переменной типа делегата. В этом смысле и лямбда-выражения, и анонимные методы служат одной цели. Разница лишь в том, как эта цель достигается.

    Итак, лямбда-выражение определяет метод. Как же это происходит? Синтаксис описания лямбда-выражения идеологически близок к описанию анонимного метода, но в несколько упрощенном виде. Условно лямбда-выражение можно рассматривать как состоящее из двух частей (левой и правой). Между ними размещается оператор =>. Левая часть определяет аргументы метода. В общем случае аргументы описываются в круглых скобках, для каждого аргумента указывается его тип и название. То есть фактически это круглые скобки с описанием аргументов метода. Отсутствие аргументов отображается пустыми круглыми скобками. В правой части, после оператора => описывается выделенный фигурными скобками блок, в котором размещаются команды, формирующие тело метода. Общий шаблон описания лямбда-метода такой:

  (аргументы) => {
    // Тело метода
  }

    Строго говоря, если взять описание анонимного метода, убрать ключевое слово delegate и между блоками из круглых и квадратных скобок поставить оператор =>, то получим лямбда-выражение. Оно используется точно так же, как и анонимный метод. Вместе с тем при использовании лямбда-выражений можно использовать некоторые упрощения, которые часто делают описание соответствующего метода компактным. Ниже перечислены основные правила, которые позволяют "упростить жизнь" при работе с лямбда-выражениями:

    Например, ниже приведено лямбда-выражение, определяющее метод, который по символьному и целочисленному аргументу вычисляет новый символ:

  (char s, int n) => { 
    int k = s + n; 
    return (char)k;
  }

    Мы могли бы определить такой же метод несколько иначе:

  (s, n)=>{
    return (char)(s + n);
  }

    Или еще проще:

  (s, n) => (char)(s + n)

    А вот пример лямбда-выражения для метода, который для заданного значения аргумента возвращает квадрат аргумента (произведение аргумента на самого себя):

  n => n * n

    То же самое, с помощью анонимного метода, мы могли бы описать следующим образом:

  delegate(int n) { 
    return n * n;
  }

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

    Со следующего шага мы начнем рассматривать примеры использования лямбда-выражений.




Предыдущий шаг Содержание Следующий шаг