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

Существует общепринятый стиль написания асинхронных апи, где первым аргументом передается объект с данными, а последним — колбек:
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
  • Вопрос задан
  • 2501 просмотр
Пригласить эксперта
Ответы на вопрос 3
Видел ещё 3 стиль:
function(...required_args, callback, ...optional_args)
, здесь несколько преимуществ: видно сразу опциональные аргументы и легче их парсить.

А вот на вопрос сложно ответить так как он сводится к: хорошо ли функциональное программирование?
Ведь если вы используете карринг, композиции функций, то callback first лучше будет. А если же нет, то тогда просто дело вкуса. Мне например иногда смущает в карринге, что порядок аргументов функций слишком важен. Вот например даже в `first` вам пришлось поменять местами count и items. Но это скорее дело привычки и полного дзен понимания.
Ответ написан
Комментировать
yttrium
@yttrium
подход callback last даёт необычайное удобство при использовании coffeescript. например
myButton.on 'click', ->
  alert 'ok'
довольно удобно и читается легко
в противном случае при подходе callback first использовать не очень удобно, и затрудняет чтение и поддержку
setTimeout (->
  alert 'ok'), 0
Ответ написан
qmax
@qmax
программер
А мне кажется, для избавлеиня от callback hell гораздо лучшее лекарство - Deferred/Promise (правильно реализованные)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы