Каррирование и частичное применение
Я, оказывается, путал раньше каррирование и частичное применение. Даже не то чтобы путал, просто не пытался разобраться в чём разница между терминами, применяя то и другое по мере надобности. Недавно на «Хабре» в комментариях мне на моё незнание указали и я уяснил, наконец, что конкретно стоит за каждым термином.
Каррирование — преобразование функции от двух аргументов в функцию от первого аргумента, возвращающую функцию, результат вызова которой со вторым агрументом эквивалентен вызову первоначальной функции с упомянутыми аргументами. Немного запутанно, с примерами станет всё яснее. Я буду объяснять на примере Джаваскрипта, его больше народу знает, а на ПХП очень уж многословно получается. Кстати, в соответствующую статью в «Википедии» я добавил пример на «Гугл Гоу».
// функция, суммирующая два числа
function sum(x, y) {
return x+y;
}
alert(sum(2, 8)); // вернёт 10
function sum(x) {
return function (y) {
return x+y;
}
}
alert(sum(2)(8)); // тоже вернёт 10При вызове второй функции sum создаётся функция, в которую
Частичное применение функции (Partial function) — создание некой функции на базе указанной, где некоторые агрументы заменены конкретными значениями. Например:
function partial_one_arg(f, a) {
return function(b) {
return f(a, b);
}
}
min0 = partial_one_arg(Math.min, 0);
min1 = partial_one_arg(Math.min, 1);
alert([min0(-5), min0(5)]); // вернёт [-5, 0]
alert([min1(-5), min1(5)]); // вернёт [-5, 1]В примере я заменил один из агрументов фунции нахождения минимального значения на конкретное значение, теперь при вызове функции «min0» сравнение будет идти с нулём, при вызове «min1» — с единицей.
Очень простые штуки, часто встречающиеся в функциональном программировании.
Смените это немедленно!
Ещё банк помнит последние несколько паролей, так что менять два пароля по кругу тоже не получается.
Меня не устраивает метод, которым пользуются некоторые ребята — менять в конце пароля цифру. Я уже пару раз запутывался. Кстати, когдя я работал в «Яндексе», там тоже действовала похожая схема с регулярной схемой и запоминанием пароля.
Банк меня «защитил», я пользуюсь тем же паролем.
Интересно, что все три
Максимум — посмотреть на что я трачу деньги. «Альфа» присылает мне одноразовый пароль платежа через СМС, «Райффайзен» разрешал платить только с использованием клиентского сертификата, «Ак барс» просит ввести одноразовый циферный код со специальной карточки.
Я выше писал, что банки сбрасывают мне пароль при обращении в техподдержку. Как же они узнают что я это я?
Самое смешное, что любые банки определяют мою личность по телефону, по данным, которые легко узнать в интернете, плюс некое ключевое слово, которое, внимание, никогда не меняется в отличие от пароля. Хотите меня ограбить? Узнайте ключевое слово, зачем вам пароль?