Если функция в дальнейшем будет использоваться как «чистая» почему бы не использовать толстую стрелку после return? Если нужен контекст, то да надо вернуть function.
Цель была проиллюстрировать не подходы как таковые, а новые возможности, которые предоставляет ES2015 при использовании того или иного подхода. Да я согласен, пример, довольно искусственный, но если взять последний пример, то без изменения кода основной функции можно создавать необходимые в данный момент функции:
var greetHabrauser = createGreeter('Hello, %habrauser%!');
console.log(greetHabrauser("stalkerg"));
> Hello, stalkerg!
С обычной функцией без замыкания, такое было бы невозможно.
Эту фразу как-то сказал мой очень хороший знакомый. Я понимаю ее так:
Меньше больше:
Не имеет смысла в программе, решающей одну маленькую задачу, воплощать какие-то абстракции и паттерны. Лучше решить ее «в лоб». Пусть программа будет маленькой при этом лишние слои абстракции не будут стоять на пути понимания ее сути.
Больше меньше
Если программа растет, имеет смысл разбить ее на множество осмысленных взаимосвязанных кусков / слоев. Иначе сложность выйдет из-под контроля и дальнейшие изменения функций программы просто станет невозможным. Вот тут как раз на помощь приходят разные абстракции и паттерны.
В следующий раз когда мне понадобится использовать некую абстрактную сущность, которая всех поздравляет, я назову ее GreetingMachine. Хотя, если быть честным Greeter здесь не хуже какого-нибудь Animal. Разве не так?
Carlo, несомненно, умный мужик. Но в данном случае greeter более чем подходящее название для игрушечного примера несмотря на этот злополучный суффикс -er. В любом случае очередные примеры с Animal, Dog или Shape, Square были бы скучнее.
Смотри, у нас есть некие отслеживаемые данные и соответствующие действия, которые будут выполнены при изменении этих данных. При изменении данных, благодаря зависимостям возникает «волна» изменяющихся данных, которые переводят всю систему из одного состояния в другое, которое есть результат выполнения некоторых действий, например, выполнение формулы в табличном процессоре (Excel, Calc), расчет ипотечного кредита на сайте банка при каждом движении ползунка или изменении поля для ввода суммы кредита и т.п.
В данном случае в статье функция передаваемая в Tracker описывает то, какой процесс будет выполнен. При этом самое первое выполнение Tracker'а формирует эту динамическую систему (реактивное окружение), которое раскладывает все отслеживаемые данные и «соответствующие действия» по своим местам. И затем уже вызов метода set реактивной переменной с некоторым новым значением инициирует «волну» пересчета ипотечного кредита :) Как-то так.
У меня старший брат держит пчел. Он говорит, что есть разные породы пчел; некоторые да агрессивные, но он уже их как-то научился вычислять и содержит только мирные семьи пчел. Думаю норвеги тоже понимают, что делают.
Где я обидел python не ясно.
P.S. Статью немного исправил
С обычной функцией без замыкания, такое было бы невозможно.
Меньше больше:
Не имеет смысла в программе, решающей одну маленькую задачу, воплощать какие-то абстракции и паттерны. Лучше решить ее «в лоб». Пусть программа будет маленькой при этом лишние слои абстракции не будут стоять на пути понимания ее сути.
Больше меньше
Если программа растет, имеет смысл разбить ее на множество осмысленных взаимосвязанных кусков / слоев. Иначе сложность выйдет из-под контроля и дальнейшие изменения функций программы просто станет невозможным. Вот тут как раз на помощь приходят разные абстракции и паттерны.
В данном случае в статье функция передаваемая в Tracker описывает то, какой процесс будет выполнен. При этом самое первое выполнение Tracker'а формирует эту динамическую систему (реактивное окружение), которое раскладывает все отслеживаемые данные и «соответствующие действия» по своим местам. И затем уже вызов метода set реактивной переменной с некоторым новым значением инициирует «волну» пересчета ипотечного кредита :) Как-то так.