Я использовал CoffeeScript некоторое время. Я считаю, что это хороший язык в целом, конечно, лучше, чем простой JS, но я считаю, что я все еще сбитый с толку его правилами отступов. Возьмем такой пример:Пробелы, аргументы и функции Coffeescript
Bacon.mergeAll(
@searchButton.asEventStream('click')
@searchInput.asEventStream('keyup')
.filter (e) => e.keyCode is 13
)
.map =>
@searchInput.val()
.flatMapLatest (query) =>
Bacon.fromPromise $.ajax
url: @searchURL + encodeURI query
dataType: 'jsonp'
This does what it should (код основан на this tutorial, кстати), но мне потребовалось много проб и ошибок, чтобы получить это право.
Зачем нужны mergeAll
и asEventStream
круглые скобки вокруг своих аргументов? Почему отступов недостаточно, чтобы определить, где начинаются и заканчиваются их списки аргументов? OTOH, почему отступы достаточно для map
и flatMapLatest
? Почему пробелы перед способом подвески, такие как .filter
(его уровень отступа) недостаточно, чтобы определить, к чему он привязан? Кажется, это полностью игнорируется.
Есть ли окончательное руководство по правилам отступов этого языка? У меня никогда не возникало проблем с пониманием синтаксиса Python с первого взгляда, даже при очень сложной вложенности, поэтому это не проблема с синтаксисом на основе отступов.
Просто потому, что вы можете использовать анонимные функции, это не значит, что вам нужно. Если вы нарушите свои функции и дадите им имена, вы можете превратить путаницу в умственный разбор и догадки с помощью простых и читаемых вещей, таких как 'o.map (mangle_them) .filter (out_the_garbage) ...' –
Да, я бы обязательно сделайте это в производственном коде. Я просто убедился, что понимаю все нюансы синтаксиса, чтобы я не попал в какую-то ловушку. – Tobia