2015-05-27 4 views
1

Я пытаюсь понять, как это сделать в JavaScript и не может найти правильные слова для Google. Это довольно распространенная картина.Что вы называете этим шаблоном программирования?

someOperation(obj) { resultOfSomeOperation -> 
    anotherOperation(resultOfSomeOperation) 
} 

Предположительно someOperation это метод, который принимает в качестве аргументов obj и функции с подписью result -> ??. Как вы это называете?

+3

На каком языке программирования находится ваш пример? Если речь идет о JS, вы можете создать действительный пример JS, демонстрирующий идею. – zerkms

+1

JS-эквивалент кажется '' 'someOperation (obj, function (resultOfSomeOperation) {anotherOperation (resultOfSomeOperation);});' '' – Neelabh

+4

Это похоже на сочетание кода CoffeeScript и обычного синтаксиса JavaScript. –

ответ

1

Я считаю, что шаблон, на который вы указываете, является шаблоном «Обратный звонок», или, в более общем плане, «Функции более высокого порядка», в котором функция принимает функцию как параметр, а затем использует переданную функцию в некотором путь. Некоторыми примерами могут быть каждый, карта, сокращение и т. Д. Они часто используют лямбда-функции.

Вот информация по этим темам: Callbacks on Wikipedia, JavascriptIsSexy Callbacks, Eloquent Javascript Chapter 5.

Я склоняюсь к примерам Javascript, потому что это тег, который вы использовали. Не стесняйтесь задавать мне уточняющие вопросы, и я могу объяснить их дальше.

Вот пример:.

var exampleArray = [1, 2, 3, 4, 5]; 

exampleArray.map(function(num){ 
    return num * 2 
}); 
// Returns [2, 4, 6, 8, 10]; 

Как вы можете видеть, карта использует анонимную функцию, которая была передана в Map применяет данную функцию к каждому элементу массива и возвращает эти выходы к новый массив. Это также можно сделать, предварительно определив функцию и передав ее по имени.

var exampleArray = [1, 2, 3, 4, 5]; 

var doubleValue = function(num) { 
    return num * 2; 
}; 

exampleArray.map(doubleValue); 
// Returns [2, 4, 6, 8, 10]; 
+0

Спасибо за подробный ответ! Образец, на который я имею в виду, это когда вы связываете несколько функций (обычно лямбда) на монадическом объекте. «.map» - отличный пример. Это легко сделать в Scala и очень идиоматично, но, похоже, просто приводит к обратному аду в JS (не настоящие монады). – Xianny

+0

Возможно, если вы предоставите более подробный пример того, что вы говорите, я могу быть более полезным. Вы можете определенно связать эти вещи вместе. Например: '[1,2,3,4,5] .map (func) .filter (func) .reduce (func)' тип цепочки является полностью жизнеспособным. Если вы застряли в обратном пути, возможно, вам стоит взглянуть на обещания? (Bluebird или Q) – ChadF

Смежные вопросы