options = options || {}; или обращение к говнокодерам на JS

Sep 11, 2014 18:28

Давайте поговорим про джаваскрипт. А точнее, про омерзительную традицию, которая лезет во все библиотеки npm из тормозного насквозь jQuery: про передачу аргументов ассоциативным массивом ( Read more... )

Leave a comment

dmytrish September 11 2014, 15:17:43 UTC
А как их правильно передавать?

Reply

udpn September 11 2014, 16:42:20 UTC
По-отдельности в разные функции из консистентного, хорошего набора. У функций практически всегда аргументы должны быть только обязательными, даже без перегрузки.

Вот в таком духе:

var word = new MultiLangHypher();
word.add(cache(wordHypher(lang.ru)), isRussian);
word.add(cache(wordHypher(lang.en)), isEnglish);
var text = textHypher(word);

И никогда так:

var result = $('p').hyphenate({language: 'en-us'});
// где многоязычность? кеш? настройки кеша? интеграция с markdown и подсветкой ссылок?

Reply

metaclass September 11 2014, 16:55:34 UTC
word.add мутабельность, мутабельность, не хотим :)

Reply

udpn September 11 2014, 17:17:38 UTC
Не, полностью иммутабельно тоже нельзя, снова тормоза будут. Ладно, давайте иммутабельно.

var text = textHypher(compose(
    checked(cache(wordHypher(lang.ru)), isRussian),
    checked(cache(wordHypher(lang.en)), isEnglish),
    identity
));

(Хотя вариадик-аргумент бы тоже, по-хорошему, из compose убрать, а то в Function.length херня какая-то будет, карринг не заработает.)

Reply

ext_1321514 September 11 2014, 19:42:51 UTC
это пиздец, приехали

Reply

udpn September 12 2014, 07:35:15 UTC
А по существу?

Reply

ext_1321514 September 12 2014, 07:39:24 UTC
а по существу: много есть задач, где излишняя гибкость не нужна и не будет нужна (какая-то простая утилитарная функция, к примеру). как предлагается совокуплять ее с предложенным монстром?

Reply

udpn September 12 2014, 08:18:07 UTC
В либе нужно заранее собрать из запчастей самые часто используемые утилитарные функции, но API всё равно должен быть мелко гранулирован.

Пример: в регулярках внутри есть только a*, звезда Клине. Но чтобы не писать aa*, был создан а+. В boost::spirit пошли дальше и заметили, что паттерн a(ba)* возникает достаточно часто, чтобы писать a%b.

Reply

ext_1321514 September 12 2014, 08:51:23 UTC
я не про те либы, которые пишутся под этот паровоз, а про те, которые уже есть.
предлагается писать конвертер из этой композиции под каждое сочленение с внешним миром?

Reply

udpn September 14 2014, 11:24:22 UTC
Там что, какие-то чудесные фичи начинают использоваться что ли? Это не async/await, не rest-аргументы и даже не Promises A+. Здесь используется тот же самый язык, что и всегда. В чём проблема использовать такой подход при работе с другими либами?

Reply


Leave a comment

Up