Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Интересные ссылки и их обсуждение (https://javascript.ru/forum/offtopic/45898-interesnye-ssylki-i-ikh-obsuzhdenie.html)

kobezzza 25.05.2014 11:41

Цитата:

Сообщение от nerv_ (Сообщение 313316)
только не кофе :cray:

Называется, угадай что:
if ((x) => x * x) {
}


:(

Странный у тебя пример :)
А вообще Arrow Function - это самое лучшее что есть в ES6, т.к.

1) Очень короткий и ясный синтаксис:

var foo = (x) => {
    return x * x;
};

// Ещё короче
var foo2 = (x) => x * x;

// Ещё короче :)
var foo3 = x => x * x;


2) Наследует this контекста в котором функция декларирована

var foo = {
  go: function () {
    var bar = () => {
      this.val // 1
    };
  }

  val: 1
};


3) Внутри Arrow Function не доступна ссылка arguments, что делает возможным дополнительную оптимизацию на уровне JIT и даст ощутимый профит при использовании вместе со всякими итераторами и т.д. ну а если нужен аналог arguments, то

var foo = (...args) => {
    ...
};

monolithed 25.05.2014 13:08

Цитата:

Сообщение от nerv_
if ((x) => x * x) {
}

Все очевидно — такая запись не имеет смысла

Презервативы с подогревом

Gozar 25.05.2014 14:07

Цитата:

Сообщение от monolithed
такая запись не имеет смысла

Может он имел в виду, что будет нечто подобное http://jsfiddle.net/5954r/:
var f, y = 10; 
if (f = (x) => x*x, f(y)) alert('it is worked!');

?

nerv_ 25.05.2014 14:14

Цитата:

Сообщение от monolithed
Все очевидно — такая запись не имеет смысла

это называется найди 10 отличий
1.
// (x) => x * x
if (function(x){return x*x;}) {
    alert(1);
}

if ((x) <= x * x && (x) => x * x && (x) >= x * x) {
    alert(1);
}

2.
var t1 = (function(x) {
    return x*x;
}());

// вот тут x() что я делаю, угадай:
// 1. вызываю arrow function
// 2. или вызываю x()
var t2 = ((x) => x*x());

Если ты выберешь, любой из вариантов, я скажу, что имел вииду другой.
Если ты ничего не выберешь, ты не угадал :D

kobezzza, я не против тех плюшек, которые несут arrow function. Но синтаксис, по крайней мере на первый взгляд, мне не нравится :(

monolithed 25.05.2014 14:17

Цитата:

Сообщение от Gozar
Может он имел в виду, что будет нечто подобное http://jsfiddle.net/5954r/

var f = x => x * x;

if (f(10)) alert('it is worked!');

Я бы так написал :)

Цитата:

Сообщение от nerv_
но синтаксис, по крайней мере на первый взгляд, мне не нравится

Он идеален, за одним исключением, что нужны пустые скобки если нет параметров

Gozar 25.05.2014 14:28

Цитата:

Сообщение от nerv_
синтаксис, по крайней мере на первый взгляд, мне не нравится

Цитата:

Сообщение от monolithed
Я бы так написал

;)

А мне нравится, надоели уже эти function и return-ы, занимают время и место.

monolithed 25.05.2014 14:32

Цитата:

Сообщение от Gozar
А мне нравится, надоели уже эти function и return-ы, занимают время и место.

Ага, еще бы ввели гарды и убрали лишние скобки цены бы не было :)

nerv_ 25.05.2014 14:53

Цитата:

Сообщение от Gozar
А мне нравится, надоели уже эти function и return-ы, занимают время и место.

представь, что у тебя на экране дофига кода вида
var b = x => 2 * Math.PI;
var a = с <= z + y;

При беглом просмотре не понятно где функции, а где НЕ функции.
Т.е. приходится вчитываться, а это время.

Касательно времени набора - автокомплит. Я пишу "fu" или "re" и этого достаточно. А вот читается в разы лучше.

Неужели мы движемся в сторону ручной обсфукации :(

monolithed 25.05.2014 15:06

Цитата:

Сообщение от nerv_
Неужели мы движемся в сторону ручной обсфукации

По твоей логике, Haskell, Erlang, Python, Lisp это обфускаторы?

Даже в C# и С++ есть лямбда-выражения

Gozar 25.05.2014 16:48

Цитата:

Сообщение от nerv_
автокомплит

Да, есть такой. Не решает проблему:
Цитата:

Сообщение от Gozar
занимают время и место



Цитата:

Сообщение от nerv_
читается

Как выучишь, так и читается. Я помню, что когда увидел впервые Javascript сильно удивлялся и ругался, а когда узнал про Регулярные Выражения думал - как вообще можно понять, что в подобной строке
// /^(?:(?:(?:http(?:s)?:\/\/|www\.)[-.a-z0-9а-яё]+?\.[a-zрф]{2,5}(?::[0-9]+)?)(?:\/[-a-z0-9а-яё.,!?&#$@/:;+_=%|^*}{\\`~]+[^.,!?\s\["<])?)$/
написано?! Однако эту строку написал я через полгода. И сейчас меня совсем не парит подобная запись и читается она нормально ;)

Мир разнообразен и хочу, чтобы js больше был похож на python, нежели на ООП php :) или лапшу. В js слишком многабукв. Давно пора добавить сахарку.


Часовой пояс GMT +3, время: 00:46.