Задать вопрос

Первый аргумент — колбэк или данные? (Функциональное Программирование)

Существует общепринятый стиль написания асинхронных апи, где первым аргументом передается объект с данными, а последним — колбек:
function map( collection, callback ){
    for(var field in collection){
        callback( collection[field] );
    }
}
function first( items, count ){
    return items.slice(0, count - 1);
}

function mapFirstTwo( items ){
    return map(items, function(item){
        return first(item, 2);
    })
}


В функциональном стиле принято первым аргументом передавать калбек, а последним данные.
В таком случае мы можем используя каррирование и композицию избежать вложенных колбеков:
var map = curry(function( callback, collection ){
    for(var field in collection){
        callback( collection[field] );
    }
});
var first = curry(function( count, items ){
    return items.slice(0, count - 1);
});

var mapFirstTwo = map( first (2) );


Как вам такой подход? И библиотечка
https://github.com/quadroid/use-function-first
  • Вопрос задан
  • 2502 просмотра
Подписаться 5 Оценить Комментировать
Ответ пользователя yttrium К ответам на вопрос (3)
yttrium
@yttrium
подход callback last даёт необычайное удобство при использовании coffeescript. например
myButton.on 'click', ->
  alert 'ok'
довольно удобно и читается легко
в противном случае при подходе callback first использовать не очень удобно, и затрудняет чтение и поддержку
setTimeout (->
  alert 'ok'), 0
Ответ написан