bkonst
.. хочется странного?...
[phprus]
Я все-же не понимаю чем в данном случае исключения хуже замыканий?
[/phprus]
В данном случае - ничем. И ничем не лучше, в общем-то.
Пока особой разницы нет, правда? Теперь предположим, что эта функция может вызываться в разных контекстах и должна в зависимости от контекста иметь разную реакцию на ошибки (например - выводить информацию на экран; сохранять в лог; вызывать милицию). При использовании closures передаем в foo соответствующие closures и имеет соответствующее поведение.
Без closures то же поведение можно имитировать, но код будет заметно более громоздким.
Аналогично, c closures может проще и нагляднее выглядеть обработка коллекций:
И то, что легко можно добавить "подозрения на жульничество" - очень приятный плюс.
И то, что при желании куски обработки разных исходов можно хранить в одном месте - тоже плюс. Да, можно развести кучку маленьких классиков, используя паттерн Strategy. Можно обойтись closures.
Я все-же не понимаю чем в данном случае исключения хуже замыканий?
[/phprus]
В данном случае - ничем. И ничем не лучше, в общем-то.
Учитывая, что в PHP нормальных замыканий нет - да. В том же Javascript - разницы нет. E.g.:Помоему решение с исключениями будет лучше, так как с большой вероятностью в $form->show_error() надо будет передать информацию о том, что же произошло. Помоему если использовать исключения то это можно будет сделать проще.
Код:
function foo() {
...
account.withdraw(value, function() { form.show_success(); }, function(e) { form.show_error(e); })
...
}
Без closures то же поведение можно имитировать, но код будет заметно более громоздким.
Аналогично, c closures может проще и нагляднее выглядеть обработка коллекций:
Код:
bonus = $$$;
listOfAccountsSubjectToBonus.each(function(account) {
account.deposit(bonus);
});
Еще раз говорю - бизнес-логика имеет мерзкое свойство меняться. На ходу. В последний момент.Автор оригинала: dark-demon
bkonst, ничего подобного. мы спрашиваем отработала ли функция полностью "или прочее". и тут не важно есть ли подозрения на жульничество и тп.
И то, что легко можно добавить "подозрения на жульничество" - очень приятный плюс.
И то, что при желании куски обработки разных исходов можно хранить в одном месте - тоже плюс. Да, можно развести кучку маленьких классиков, используя паттерн Strategy. Можно обойтись closures.
Откуда дровишки? Только не говорите, что вы пробовали.это говорит не в его пользу. банальный пример: в большом куске кода у нас есть маленькая функция. и (о боже!) мы забыли проинициализировать переменную. в случае php - да ну и пофиг - переменная будет проинициализирован стандартным дефолтным значением и при попытке чтения будет выдан нотис. в случае замыкающихся языков - получите рандомный мусор в переменной без каких-либо предупреждений.