Примечание: перейдите вниз к «Вопросу» ниже, если вы просто хотите пропустить контекст
Когда я говорю о Scala, я почти всегда уверен, что меня спросят "а когда бы вы использовали Closure?" Обычно я говорю «подождите, пока я не покажу вам для понимания», а затем я показываю, как для понимания может быть сведено к использованию flatMap / map + closures.
Этот пример помогает, однако мне сложно объяснить общую фразу «это когда вы узнаете, когда использовать закрытие». Это одна из тех вещей, к которым вы «просто привыкли» в функциональном программировании, вы почти делаете это, не задумываясь.
Обычно я говорю с разработчиками Java, когда говорю о Scala, и мне приходит в голову одна аналогия: «Вы знаете, когда создаете анонимный внутренний класс, которому нужен доступ к переменной где-то выше, где класс был определен? как закрытие ". Поэтому я использую обработку обратного вызова события в качестве одного конкретного примера (поскольку в этом сценарии неизбежно используются анонимные внутренние классы).
Учитывая аудиторию (нет опыта или ограниченный опыт работы с ФП), я не буду обсуждать такие термины, как монады, эти люди обычно ищут конкретные / прагматические примеры, к которым они могут относиться.
Вопрос:
У кого-нибудь есть свой собственный способ успешного объяснения замыканий, который действительно ударил по домам для разработчиков Java (или другого языка OO)?