Давайте поговорим про джаваскрипт. А точнее, про омерзительную традицию, которая лезет во все библиотеки npm из тормозного насквозь jQuery: про передачу аргументов ассоциативным массивом
( Read more... )
По-отдельности в разные функции из консистентного, хорошего набора. У функций практически всегда аргументы должны быть только обязательными, даже без перегрузки.
Вот в таком духе:
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 и подсветкой ссылок?
а по существу: много есть задач, где излишняя гибкость не нужна и не будет нужна (какая-то простая утилитарная функция, к примеру). как предлагается совокуплять ее с предложенным монстром?
В либе нужно заранее собрать из запчастей самые часто используемые утилитарные функции, но API всё равно должен быть мелко гранулирован.
Пример: в регулярках внутри есть только a*, звезда Клине. Но чтобы не писать aa*, был создан а+. В boost::spirit пошли дальше и заметили, что паттерн a(ba)* возникает достаточно часто, чтобы писать a%b.
я не про те либы, которые пишутся под этот паровоз, а про те, которые уже есть. предлагается писать конвертер из этой композиции под каждое сочленение с внешним миром?
Там что, какие-то чудесные фичи начинают использоваться что ли? Это не async/await, не rest-аргументы и даже не Promises A+. Здесь используется тот же самый язык, что и всегда. В чём проблема использовать такой подход при работе с другими либами?
Reply
Вот в таком духе:
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
Reply
var text = textHypher(compose(
checked(cache(wordHypher(lang.ru)), isRussian),
checked(cache(wordHypher(lang.en)), isEnglish),
identity
));
(Хотя вариадик-аргумент бы тоже, по-хорошему, из compose убрать, а то в Function.length херня какая-то будет, карринг не заработает.)
Reply
Reply
Reply
Reply
Пример: в регулярках внутри есть только a*, звезда Клине. Но чтобы не писать aa*, был создан а+. В boost::spirit пошли дальше и заметили, что паттерн a(ba)* возникает достаточно часто, чтобы писать a%b.
Reply
предлагается писать конвертер из этой композиции под каждое сочленение с внешним миром?
Reply
Reply
Leave a comment