Джентльмены, дико извиняюсь за опоздание к срачу. Поскольку он уже стремительно набирает критическую массу и скоро сколлапсирует, возьму на себя смелость воспользоваться замечательной цитатой для создания отдельного топика.
Итак, два примера доказательства subj!:
А можно раскрыть мысль? Внимательно прочитал код, по-моему он и вправду очень простой. Практически первый курс университета, разве что функции высшего порядка могут изучать чуть позже.
Здравствуйте, rFLY, Вы писали:
vsb>>А можно раскрыть мысль? FLY>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?
Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.
Здравствуйте, neFormal, Вы писали:
F>да норм. то ли дело вот это: F>
>> [1,2,3].map(parseInt)
F>< [1, NaN, NaN]
F>
map передаёт в колбек 3 параметра, parseInt принимает два, из которых второй — основание системы счисления. Итого:
parseInt(1, 0); # зависит о реализации, скорее всего 1 по основанию 10
parseInt(2, 1); # 2 - не число по основанию 1
parseInt(3, 2); # 3 - не число по основанию 2
Здравствуйте, Ведмедь, Вы писали:
В>Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.
Ну, это старый срач: статическая против динамической. Ничего нового JS тут не превносит.
Здравствуйте, Ведмедь, Вы писали:
vsb>>>А можно раскрыть мысль? FLY>>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?
В>Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.
Нетипизированных языков как бы половина, если не больше. И, судя по популярности, поклонников у них хватает. PHP, Python, Ruby, Perl, Lua, Lisp, это только из тех, которые на слуху. Понятно, что это несёт свои минусы, но и плюсы это тоже свои имеет, иначе ими бы просто никто не пользовался.
Кроме того в случае с JS есть как минимум два простых варианта добавить типы: TypeScript и Flow, если уж очень хочется.
Здравствуйте, Ведмедь, Вы писали:
В>Я думаю это про типизацию.
Тут без реализации функции then сложно что-то сказать. Она может легко обрабатывать то, что возвращают (или не возвращают) колбэки. На андефайн у нее может быть своя логика, на значение другая, на функцию третья.
Здравствуйте, anonymous, Вы писали:
A>map передаёт в колбек 3 параметра, parseInt принимает два, из которых второй — основание системы счисления. Итого:
Здравствуйте, neFormal, Вы писали:
A>>map передаёт в колбек 3 параметра, parseInt принимает два, из которых второй — основание системы счисления. Итого: F>спасибо, я в курсе этих нюансов кривого языка.
Тогда не понятно, что эти примеры должны были продемонстрировать.
Здравствуйте, anonymous, Вы писали:
A>Тогда не понятно, что эти примеры должны были продемонстрировать.
Я, конечно, не уверен, но могу предположить, что коллега демонстрировал свое восхищение потрясающей стройностью и непревзойденной продуманностью архитектуры нашего замечательного JS:
var ref = function (value) {
if (value && value.then)
return value;
return {
then: function (callback) {
var result = defer();
// XXX
enqueue(function () {
result.resolve(callback(value));
});
return result.promise;
}
};
};
Здравствуйте, rFLY, Вы писали:
vsb>>А можно раскрыть мысль? FLY>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?
Это про промисы. "Неочевидные вещи для начинающих". Кажется, прямо копия из какой-то статьи в инете. Вроде где-то я такое видел уже.
Promise — это объект-оболочка над асинхронным выполнением. Позволяет запустить асинхронную операцию и позволяет связывать несколько операций в цепочки или параллельные вычисления. Важный момент — промис не имеет отдельного метода запуска, он просто создается и дальше останется только ждать результата. Потому отложенный запуск — через создающие функции.
// вот два метода, запускающие что-то асинхронно.
let f1 = () => new Promise(...);
let f2 = () => new Promise(...);
// если надо запустить их в параллель:
f1();
f2();
// а если надо последовательно:
f1().then( f2 ); // после окончания первого промиса будет выполнена f2, получен новый промис и запущен.
// отсюда частый косяк людей, которые делают связку, не изучив документацию или учебник пишут так:
f1().then( f2() ); // упс, так это же получился запуск двух промисов в параллель!
Здравствуйте, StandAlone, Вы писали:
SA>Я, конечно, не уверен, но могу предположить, что коллега демонстрировал свое восхищение потрясающей стройностью и непревзойденной продуманностью архитектуры нашего замечательного JS: SA>Image: 1452745558498.png
Логичный вопрос тогда: как будет единственно правильно?
Здравствуйте, StandAlone, Вы писали:
SA>Вы, поди, господа, из Си [s]пл
Вас смущает передача функцифункций по ссылкам или делегатов?
А в каком языке по Вашему мнению это сделано правильно? Или правильно было вообще не делать?
SA>Джентльмены, дико извиняюсь за опоздание к срачу. Поскольку он уже стремительно набирает критическую массу и скоро сколлапсирует, возьму на себя смелость воспользоваться замечательной цитатой для создания отдельного топика. SA>Итак, два примера доказательства subj!:
SA>[java] SA>1) SA>doSomething().then(function () { SA> return doSomethingElse(); SA>});