/**
* Package for patterns
*
* @author Igor Fedorenko (mailto:if.zommy@gmail.com)
* @version $Id$
* @since 0.1
*/
package ru.job4j.patterns;

/**
 * Функциональное программирование. Нет переменным, да функциям.
 * Основным компонентом лямбдя выражения является лямбда оператор.
 * Эта штука разделяет выражение на две части:
 * Левая - список параметров.
 * Правая - тело лямбда выражения.
 * Используются функциональные интерфейсы.
 *
 * Терминальные лямбда выражения - не возвращают значение.
 * Нетерминальные лямбда выражения - возвращают значение.
 *
 * Если выражение принимает один параметр то скобки можно опустить
 * (String) -> ...  == String -> ...
 *
 * Существуют два типа лямбда-выражений: однострочное выражение и блок кода.
 *  В блочных лямбда-выражениях можно использовать внутренние вложенные блоки, циклы,
 *  конструкции if, switch, создавать переменные и т.д.
 *  Если блочное лямбда-выражение должно возвращать значение,
 *  то явным образом применяется оператор return.
 *
 *  Лямбда-выражение может использовать переменные,
 *  которые объявлены во вне в более общей области видимости
 *  - на уровне класса или метода, в котором лямбда-выражение определено.
 *  Однако в зависимости от того, как и где определены переменные,
 *  могут различаться способы их использования в лямбдах.
 *
 *  Лямбда-выражения имеют доступ к переменным области видимости, в которой их определили.
 *  Но доступ возможен только при условии, что переменные являются effective final,
 *  то есть либо явно имеют модификатор final, либо не меняют своего значения после инициализации.
 * С другой стороны, в java8 есть замыкания, то есть лямбда-выражение
 * может использовать переменные уже после того, как действие их области видимости закончилось:
 */
