2016-10-13 2 views
4

при написании прописными буквами функция тривиально, так что:Point-свободный стиль капитализировать функцию с Ramda

«привет» => «Привет» «привет там» => «Привет там»

Как можно было бы написать его, используя беспутный стиль, используя Ramda JS?

https://en.wikipedia.org/wiki/Tacit_programming

ответ

7

Было бы что-то подобное:

const capitalize = R.compose(
    R.join(''), 
    R.juxt([R.compose(R.toUpper, R.head), R.tail]) 
); 

Demo (в ramdajs.com РЕПЛ).

И незначительные изменения для обработки null значения

const capitalize = R.compose(
    R.join(''), 
    R.juxt([R.compose(R.toUpper, R.head), R.tail]) 
); 

const capitalizeOrNull = R.ifElse(R.equals(null), R.identity, capitalize); 
+0

Да, это очень хорошо, и это работает, спасибо. –

+0

В качестве последующего вопроса, как бы вы справились с нулевым случаем при написании в стиле без точек? Если эта функция была вызвана с заглавной буквы (null), она взорвется. –

+0

@TutanRamen добавляет его с 'ifElse (equals (null), identity,', в противном случае я думаю, что это может быть полезно для монахи «Maybe». – zerkms

3

Я предлагаю использовать R.lens:

const char0 = R.lens(R.head, R.useWith(R.concat, [R.identity, R.tail])); 

R.over(char0, R.toUpper, 'ramda'); 
// => 'Ramda' 
5

Вы можете частично применить replace с Regex, который работает toUpper на первый символ:

const capitalize = R.replace(/^./, R.toUpper);

+1

Раньше бывают быстрые и грязные тесты по предоставленным ответам, а ваш самый быстрый. –

0

Я собрал несколько быстрых и грязных тестов для всех, кто интересуется. Похож на то, что @ lax4mike является самым быстрым из предоставленных ответов (хотя более простой, без точечного str[0].toUpperCase() + str.slice(1) способ быстрее [а также не тот, о котором спрашивал OP, так что это спор)].

https://jsfiddle.net/960q1e31/ (Вам нужно будет открыть консоль и запустить скрипку, чтобы увидеть результаты)

Смежные вопросы