JS - очень простой язык
От: StandAlone  
Дата: 21.03.17 14:40
Оценка:
Джентльмены, дико извиняюсь за опоздание к срачу. Поскольку он уже стремительно набирает критическую массу и скоро сколлапсирует, возьму на себя смелость воспользоваться замечательной цитатой для создания отдельного топика.
Итак, два примера доказательства subj!:

1) 
doSomething().then(function () {
  return doSomethingElse();
});

2)
doSomething().then(function () {
  doSomethingElse();
});

3)
doSomething().then(doSomethingElse());

4)
doSomething().then(doSomethingElse);



success()
.then(function() { console.log('1+'); return fail(); }, function () {console.log('1-'); })
.then(function() { console.log('2+'); }, function () {console.log('2-'); return success();})
.then(function() { console.log('3+'); }, function () {console.log('3-'); })
.done();


Замечательный язык, не правда ли?! простой, выразительный, элегантный и эффективно решающий типичные проблемы.
Re: JS - очень простой язык
От: vsb Казахстан  
Дата: 21.03.17 14:47
Оценка: +4
А можно раскрыть мысль? Внимательно прочитал код, по-моему он и вправду очень простой. Практически первый курс университета, разве что функции высшего порядка могут изучать чуть позже.
Re[2]: JS - очень простой язык
От: StandAlone  
Дата: 21.03.17 14:57
Оценка: :))) :))) :)))
Здравствуйте, vsb, Вы писали:

vsb>А можно раскрыть мысль? Внимательно прочитал код, по-моему он и вправду очень простой.


https://www.youtube.com/watch?v=3Sd4drXMrZo
Отредактировано 21.03.2017 18:47 StandAlone . Предыдущая версия .
Re: JS - очень простой язык
От: neFormal Россия  
Дата: 21.03.17 15:09
Оценка: 5 (3) +3 :))) :))) :))) :))) :))) :))
Здравствуйте, StandAlone, Вы писали:

SA>Замечательный язык, не правда ли?! простой, выразительный, элегантный и эффективно решающий типичные проблемы.


да норм. то ли дело вот это:
> [1,2,3].map(parseInt)
< [1, NaN, NaN]

> ['10','10','10','10','10'].map(parseInt)
< [10, NaN, 2, 3, 4]
...coding for chaos...
Re: JS - очень простой язык
От: vdimas Россия  
Дата: 21.03.17 16:07
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>
SA>doSomething().then(doSomethingElse);
SA>


С++
doSomething()
    .then(doSomethingElseInAnyCase)
    .next(doSomethingElseOnSuccess)
    .recovery(doSomethingElseOnError);



SA>Замечательный язык, не правда ли?


Фигня полная. ))
Re[2]: JS - очень простой язык
От: IID Россия  
Дата: 21.03.17 16:16
Оценка: 2 (2) +2
Здравствуйте, vdimas, Вы писали:

V>С++

V>
V>doSomething()
V>    .then(doSomethingElseInAnyCase)
V>    .next(doSomethingElseOnSuccess)
V>    .recovery(doSomethingElseOnError);
V>


С++
std::unique_ptr<ColorARGB [] > renderBuffer(new ColorARGB[gifIn->SWidth * gifIn->SHeight]);

забыли выделенное — получили RCE (Remote Code Execution). Баг CVE-2017-0476 мартовского бюллетеня безопасности Android.
kalsarikännit
Re[2]: JS - очень простой язык
От: rFLY  
Дата: 21.03.17 16:28
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А можно раскрыть мысль?

+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?
Re[3]: JS - очень простой язык
От: Ведмедь Россия  
Дата: 21.03.17 16:31
Оценка: +2
Здравствуйте, rFLY, Вы писали:

vsb>>А можно раскрыть мысль?

FLY>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?

Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.
Да пребудет с тобой Великий Джа
Re[2]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.03.17 16:34
Оценка:
Здравствуйте, 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


F>
>> ['10','10','10','10','10'].map(parseInt)
F>< [10, NaN, 2, 3, 4]
F>


Аналогично.
Re[4]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.03.17 16:42
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.


Ну, это старый срач: статическая против динамической. Ничего нового JS тут не превносит.
Re[4]: JS - очень простой язык
От: vsb Казахстан  
Дата: 21.03.17 16:42
Оценка:
Здравствуйте, Ведмедь, Вы писали:

vsb>>>А можно раскрыть мысль?

FLY>>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?

В>Я думаю это про типизацию. По крайней мере это примеры "случайных" ошибок, которые во многих языках ловятся на уровне проверки синтаксиса. Для JS в этом случаевсе варианты валидны даже если вместо результата выполнения функции передаешь саму функцию.


Нетипизированных языков как бы половина, если не больше. И, судя по популярности, поклонников у них хватает. PHP, Python, Ruby, Perl, Lua, Lisp, это только из тех, которые на слуху. Понятно, что это несёт свои минусы, но и плюсы это тоже свои имеет, иначе ими бы просто никто не пользовался.

Кроме того в случае с JS есть как минимум два простых варианта добавить типы: TypeScript и Flow, если уж очень хочется.
Re[4]: JS - очень простой язык
От: rFLY  
Дата: 21.03.17 17:07
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>Я думаю это про типизацию.

Тут без реализации функции then сложно что-то сказать. Она может легко обрабатывать то, что возвращают (или не возвращают) колбэки. На андефайн у нее может быть своя логика, на значение другая, на функцию третья.
Re[5]: JS - очень простой язык
От: StandAlone  
Дата: 21.03.17 18:36
Оценка:
Здравствуйте, rFLY, Вы писали:

В>>Я думаю это про типизацию.

FLY>Тут без реализации функции then сложно что-то сказать.



Вы, поди, господа, из Си плюсплюс шарп ово Урюпинска?...
— Эх, бросить бы всё и уехать в Урюпинск!..
Re[3]: JS - очень простой язык
От: neFormal Россия  
Дата: 21.03.17 18:40
Оценка:
Здравствуйте, anonymous, Вы писали:

A>map передаёт в колбек 3 параметра, parseInt принимает два, из которых второй — основание системы счисления. Итого:


спасибо, я в курсе этих нюансов кривого языка.
...coding for chaos...
Re[4]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.03.17 18:48
Оценка:
Здравствуйте, neFormal, Вы писали:

A>>map передаёт в колбек 3 параметра, parseInt принимает два, из которых второй — основание системы счисления. Итого:

F>спасибо, я в курсе этих нюансов кривого языка.

Тогда не понятно, что эти примеры должны были продемонстрировать.
Re[5]: JS - очень простой язык
От: StandAlone  
Дата: 21.03.17 18:53
Оценка: +1 :)))
Здравствуйте, 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;
        }
    };
};
Отредактировано 21.03.2017 19:06 StandAlone . Предыдущая версия .
Re[3]: JS - очень простой язык
От: fmiracle  
Дата: 21.03.17 18:59
Оценка: 1 (1)
Здравствуйте, rFLY, Вы писали:

vsb>>А можно раскрыть мысль?

FLY>+1 я тоже что-то не понял. Примеры передачи анонимных функций, что они должны показать?

Это про промисы. "Неочевидные вещи для начинающих". Кажется, прямо копия из какой-то статьи в инете. Вроде где-то я такое видел уже.
Promise — это объект-оболочка над асинхронным выполнением. Позволяет запустить асинхронную операцию и позволяет связывать несколько операций в цепочки или параллельные вычисления. Важный момент — промис не имеет отдельного метода запуска, он просто создается и дальше останется только ждать результата. Потому отложенный запуск — через создающие функции.

// вот два метода, запускающие что-то асинхронно.
let f1 = () => new Promise(...);
let f2 = () => new Promise(...);

// если надо запустить их в параллель:
f1();
f2();

// а если надо последовательно:
f1().then( f2 ); // после окончания первого промиса будет выполнена f2, получен новый промис и запущен.

// отсюда частый косяк людей, которые делают связку, не изучив документацию или учебник пишут так:
f1().then( f2() ); // упс, так это же получился запуск двух промисов в параллель!
Re[6]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.03.17 19:05
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Я, конечно, не уверен, но могу предположить, что коллега демонстрировал свое восхищение потрясающей стройностью и непревзойденной продуманностью архитектуры нашего замечательного JS:

SA>Image: 1452745558498.png

Логичный вопрос тогда: как будет единственно правильно?
Re[6]: JS - очень простой язык
От: rFLY  
Дата: 21.03.17 19:06
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Вы, поди, господа, из Си [s]пл

Вас смущает передача функцифункций по ссылкам или делегатов?
А в каком языке по Вашему мнению это сделано правильно? Или правильно было вообще не делать?
Re: JS - очень простой язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.03.17 19:07
Оценка:
Здравствуйте, StandAlone, Вы писали:


SA>Джентльмены, дико извиняюсь за опоздание к срачу. Поскольку он уже стремительно набирает критическую массу и скоро сколлапсирует, возьму на себя смелость воспользоваться замечательной цитатой для создания отдельного топика.

SA>Итак, два примера доказательства subj!:

SA>[java]

SA>1)
SA>doSomething().then(function () {
SA> return doSomethingElse();
SA>});


ну он позволяет и так await ECMAScript 2017 Draft (ECMA-262)

await doSomething();
return doSomethingElse();


При этом TS позволяет это делать и для ES3/ES5

TypeScript 2.1: async/await for ES3/ES5

function delay(ms) {
    return new Promise(function (resolve) {
        setTimeout(resolve, ms);
    });
}
async function asyncAwait() {
    console.log("Knock, knock!");
    await delay(1000);
    console.log("Who's there?");
    await delay(1000);
    console.log("async/await!");
}
и солнце б утром не вставало, когда бы не было меня
Отредактировано 21.03.2017 21:22 Serginio1 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.