В Java 8 кардинально переработали процедуру вывода типов выражений. В спецификации появилась целая новая глава на эту тему. Это весьма сложная штука, изложенная скорее на языке алгебры, чем на языке нормальных людей. Не каждый программист готов в этом разобраться. Я, разработчик IDE, которому приходилось ковыряться в соответствующем коде, к своему стыду тоже довольно плохо разбираюсь в этой теме и понимаю процесс только по верхам. Причём сложно не только мне, но и авторам компилятора Java. После выхода Java 8 обнаружились десятки багов, когда поведение компилятора не соответствовало спецификации, либо текст спецификации был неоднозначен. В средах разработки для Java ситуация обстояла не лучше: там тоже были баги, причём другие, поэтому код мог отображаться ошибочным в вашей IDE, но успешно компилироваться. Или наоборот. С годами ситуация улучшилась, многие баги исправили, хотя всё ещё в спецификации остались тёмные углы.
Рубрика «лямбды»
Что полезно знать Java-разработчику про вывод типов
2021-11-13 в 14:26, admin, рубрики: generic, java, вывод типов, компилятор, лямбды, портал в ад, ПрограммированиеОбъединяем функции логическими операторами в C++
2020-03-10 в 13:05, admin, рубрики: c++, stl, Блог компании OTUS. Онлайн-образование, лямбды, ПрограммированиеВ преддверии старта занятий в новом потоке группы «Разработчик С++» подготовили перевод интересного материала.
Большинство алгоритмов STL в C++ используют всего лишь одну функцию для выполнения некоторой работы над коллекцией. Например, чтобы извлечь все четные числа из коллекции, мы можем написать такой код:
auto const numbers = std::vector<int>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto results = std::vector<int>{};
std::copy_if(begin(numbers), end(numbers), back_inserter(results), isMultipleOf2);
Предполагая, что у нас есть функция isMultipleOf2
:
bool isMultipleOf2(int n)
{
return (n % 2) == 0;
}
(В этом конкретном случае было бы проще использовать лямбду, но для моих целей удобнее написать простую функцию, чтобы проиллюстрировать следующую мысль, которая применяется к более сложным функциям, таким как те, которые используются при реализации счетчика слов в верблюжьей нотации).Читать полностью »
Как в Java выстрелить себе в ногу из лямбды и не промахнуться
2016-10-17 в 11:58, admin, рубрики: java, java 8, анонимные функции, для начинающих, для новичков, замыкания, лямбды, Программирование, функциональное программированиеИногда можно услышать такие разговоры: никаких принципиальных изменений в Java 8 не произошло и лямбды это старые добрые анонимные классы щедро посыпанные синтаксическим сахаром. Как бы не так! Предлагаю сегодня поговорить, в чём отличие лямбд от анонимных классов. И почему попасть себе в ногу стало всё-таки сложнее.
Читать полностью »