Предложение по усовершенствованию JavaScript

Mar 11, 2013 07:42

Выдвигаю предложения по усовершенствованию синтаксиса языка JavaScript.

Для примера разберём такую простую конструкцию, как функция, генерирующая замыкания.

function foo(filter, pattern) {
var f = function(list) { return filter(pattern, list); };
return f;
};Конечно, в JavaScript есть опциональные точки с запятыми. Их можно не ставить, ( Read more... )

fp

Leave a comment

mpak666 March 11 2013, 15:49:31 UTC
Ну так ведь почти CoffeeScript получился

foo = (filter, pattern) ->
(list) ->
filter pattern, list

Reply

lionet March 11 2013, 15:50:40 UTC
Стрелки и запятые лишние.

Reply

mpak666 March 11 2013, 15:56:25 UTC
Просто равенства и отступов думаю будет не достаточно, чтобы понимать о чем речь идет в несовсем полностью функциональном языке, это может быть цикл например.

Reply

lionet March 11 2013, 15:57:19 UTC
В питоне решили же.

Reply

p1r4nh4 March 11 2013, 16:00:26 UTC
В питоне есть : в конце строк, после которых будет отступ, кстати. Но без него можно обойтись, если считать, что строка закончилась, если новых открытых скобок не появилось.

Вот в кофескрипте нет : в конце строк и строка не считается закончившейся, поэтому там иногда всë парсится в очень странный джаваскрипт.

Reply

mpak666 March 11 2013, 16:05:39 UTC
Так ведь в Python сразу вместо -> появляются "мусорные" lamdba, def еще и символ :

Reply

p1r4nh4 March 11 2013, 15:57:39 UTC
У кофескрипта очень неприятные правила двухмерности (разбора текста по отступам). Слишком неоднозначные и скобки на них не влияют.

Reply

mpak666 March 11 2013, 16:07:34 UTC
Скобки понятно, что например с 1-им параметром можно и упустить

list ->
filter pattern, list

например.

А про отступы я немного не понял, а что с ними не так?

Reply

p1r4nh4 March 11 2013, 16:14:13 UTC


if (a and b and
c)
return 1

Error: In q.coffee, Parse error on line 1: Unexpected 'POST_IF'

Но проблемы-то нет!

А еще

a 5
d: 6

-> a(5, {d: 6})

a 5
d 6

-> Error: In q.coffee, Parse error on line 2: Unexpected 'INDENT'

И вот таких правил, когда специально поддерживается какая-то мелочь - их очень много. Я уже их все выучил, похоже, и сейчас даже не могу вспомнить самые неприятные, но можно сделать ещë хуже. :)

О, кстати, вот это со словарëм убрали в 1.6, хе-хе. Но остальные всë еще на месте.

Reply

mpak666 March 11 2013, 16:21:19 UTC

if (a and b and
c)
return 1

тут как бы понятно, что если после if другая строка с отступом, то уже это в блоке, но если написать так

if (a and b and
c)
return 1
все ОК.

С хэшами да, была непонятка.

Reply

p1r4nh4 March 11 2013, 16:23:02 UTC
Там не нужны скобки. Оно и без них скомпилит. Это-то и плохо, он не по скобкам реагирует.

Reply


Leave a comment

Up