🐏 Practical functional Javascript
Clone or download
Pull request Compare This branch is 24 commits ahead, 47 commits behind ramda:master.
Ars Ars
Ars and Ars G
Latest commit 18d62e3 Nov 22, 2018

README.md

Ramda

Практичная функциональная библиотека для JavaScript программистов.

Build Status npm module dependencies Gitter

Почему Ramda?

Уже есть несколько отличных библиотек с функциональным оттенком. Как правило, они предназначены для того, чтобы быть инструментами общего назначения, подходят для работы в нескольких парадигмах. У Ramda, в свою очередь, более конкретная цель. Мы хотели библиотеку, разработанную специально для программирования в функциональном стиле, библиотеку, с которой легко создавать функциональные источники информации, которая не изменяет данные пользователя.

В чем разница?

Основные отличительные особенности Ramda:

  • Ramda делает упор на чистый функциональный стиль. Неизменность (Immutable) данных и отсутствие побочных эффектов функций лежат в основе философии дизайна. Это помогает выполнять работу с помощью простого и элегантного кода.

  • Ramda функции имеют автоматический карринг. Это позволяет легко строить новые функции из старых просто не передавая конечный параметр.

  • Параметры в Ramda функциях расположены таким образом, чтобы сделать карринг как можно более удобным. Данные, которые должны быть обработанны, как правило, передаются в последнюю очередь.

Последние два пункта вместе, делают простым создание последовательностей функций, каждая из которых преобразует данные и передает их следующей. Ramda спроектирована для поддержки такого стиля написания кода.

Введение

Философия

Используя Ramda у вас должно появиться чувство как будто вы просто используете JavaScript. Это практичный, функциональный JavaScript. Мы не представляем лямбда выражения в строках, мы не заимствуем consed списки, мы не импортируем все функции с Clojure.

Наши базовые структуры данных - это простые JavaScript объекты, а наши обычные коллекции - это JavaScript массивы. Мы также сохраняем другие встроенные в JavaScript функции, такие как функции-объекты со свойствами.

Функциональное программирование в значительной степени связано с неизменными (immutable) объектами и Функциями без побочных эффектов. Хотя Ramda не применяет это, она позволяет использовать такой стиль с как можно меньшим "трением".

Мы стремимся к реализации как чистоты, так и элегантности кода, но АРI остается более важным. Частично мы приносим в жертву элегантность реализации ради более чистого АРI.

И последнее, но не менее важное: Ramda стремится к производительности. Надежная и быстрая реализация побеждают любые понятия функциональной чистоты.

Установка

Для использования с node:

$ npm install ramda

Затем в консоли:

const R = require('ramda');

Для прямого использования в браузере:

<script src="path/to/yourCopyOf/ramda.js"></script>

или минифицированная версия:

<script src="path/to/yourCopyOf/ramda.min.js"></script>

или с CDN, или cdnjs:

<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

или с помощью одной из ссылок приведенных ниже jsDelivr:

<script src="//cdn.jsdelivr.net/npm/ramda@0.25.0/dist/ramda.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/ramda@0.25/dist/ramda.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/ramda@latest/dist/ramda.min.js"></script>

(заметьте, что использование latest привносит огромный риск того, что при изменении Ramda API ваш код может сломаться.)

Эти теги script добавляют переменную R в глобальной области видимости браузера.

Или вы можете вставить Ramda в любой ничего не подозревающий сайт с помощью bookmarklet.

Замечания к версиям > 0.25 Версии Rambda > 0.25 не имеют экспрота по умолчанию. Поэтому вместо import R from 'ramda'; нужно использовать import * as R from 'ramda'; А еще лучше, импортировать только необходимые функции через import { functionName } from 'ramda';

Сборка

  • на Unix-подобных платформах, npm run build обновляет dist/ramda.js и dist/ramda.min.js
  • на Windows, запишите результат scripts / build --complete до временного файла, после чего переименуйте временный файл на dist / ramda.js.

Частичная сборка

Возможно собрать Ramda с подмножеством функциональных возможностей ради уменьшения размера файла. Система сборки Ramda предоставляет эту возможность с помощью флажков в командной строке. Например, если вы используете R.compose, R.reduce и R.filter, вы можете создать частичную сборку с помощью следующей строки:

./scripts/build -- src/compose.js src/reduce.js src/filter.js > dist/ramda.custom.js

Для этого нужно иметь установленный Node/io.js.

Документация

Имя

Хорошо, Итак, мы любим овец: ram:. Это все. Это короткое имя, никем пока не занято. Это с легкостью могло бы быть eweda, но тогда мы бы были вынуждены говорить eweda lamb! (lamb - ягненок, прим.переводчика), а токого никто не хотел. Для тех, кто не является носителем английского языка, lambs - это детеныш овцы, ewes - это овца, а rams - бараны. Поэтому, возможно, ramda-это повзрослевшая lambda... Но, наверное, нет.

Запуск тестов

Консоль:

Для запуска тестов с консоли, вам необходимо установить mocha:

npm install -g mocha

Тогда из корня вашего проекта вы можете просто вызвать

mocha

Или если вы установили зависимости через:

npm install

тогда вы можете запустить тесты (и получить вывод деталей в терминале) запустив команду:

npm test

Браузер:

Вы можете использовать testem для тестирования в разных браузерах (и даже в "безголовых" браузерах), с мгновенной перезагрузкой. Установите testem (npm install -g testem) и выполните testem. Откройте ссылку которую предоставит вам ваш браузер и вы увидите результаты в вашем терминале.

Если у вас установлен PhantomJS , вы можете выполнить testem -l phantomjs для запуска тестов полностью в "безголовом" режиме.

Переводы

Благодарности

Спасибо J. C. Phillipps за Ramda logo. Ramda logo artwork © 2014 J. C. Phillipps. Creative Commons Licensed CC BY-NC-SA 3.0.