Home

Awesome

Ramda

Una biblioteca funcional practica para desarrolladores Javascript.

Build Status npm module dependencies Gitter

¿Por qué Ramda?

<img src="https://ramdajs.com/ramdaFilled_200x235.png" width="170" height="190" align="right" hspace="12" />

Ya hay varias bibliotecas excelentes con un sabor funcional. Por lo general, están destinadas a ser herramientas de uso general, adecuadas para trabajar en múltiples paradigmas.Ramda tiene un objetivo más centrado. Queriamos una biblioteca diseñada especificamente para un estilo de programación funcional, una que nunca mute los datos del usuario.

¿Cual es la diferencia?

Las principales características distintivas de Ramda son:

Los dos últimos puntos juntos hacen que sea muy fácil construir funciones como secuencia de funciones más simples, cada una de las cuales transforma los datos y los pasa al siguiente. Ramda esta diseñado para admitir este estilo de codificación.

Introducción

Filosofía

Usar Ramda debería parecerse a usar Javascript. Es práctico, Javascript funcional. No estamos presentando expresiones lambda en cadena, no estamos presentando consed lists, ni estamos transfiriendo todas las funciones de Clojure.

Nuestras estructuras de datos básicas son objetos Javascript simples, y nuestras colecciones habituales son matrices de Javascript. También mantenemos otras características nativas de Javascript, como funciones como objetos con propiedades.

La programación funcional es en buena parte sobre objetos inmutables y funciones sin efectos secundarios. Si bien Ramda no impone esto, sí permite que este estilo tenga la menos fricción posible.

Nuestro objetivo es una implementación limpia y elegante, pero la es el rey. Sacrificamos una gran cantidad de elegancia de implementación por una API más limpia.

Por último, pero no menos importante, Ramda se esfuerza por el rendimiento. Una implementación rápida y confiable gana a cualquier noción de pureza funcional.

Instalación

Para usar con node:

$ npm install ramda

Luego en la consola:

const R = require('ramda');

Para usar directamente en el navegador:

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

o la versión minificada:

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

o de un CDN, o cdnjs:

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

o unos de los siguientes enlaces de 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>

(tenga en cuenta que el uso de las ultimas versiones supone un riesgo significativo, los cambios de la API pueden romper su código.)

Estas etiquetas de script agregan la variable R en el alcance global del navegador.

O puede inyectar ramda en prácticamente cualquier sitio web utilizando the bookmarklet.

Nota para versiones > 0.25

Las versiones de Ramda > 0.25 no tiene una exportacíon predeterminada. Entonces, en lugar de import R from 'ramda';, uno tiene que usar import * as R from 'ramda'; O mejor aún, importe solo las funciones requeridas a través de import { functionName } from 'ramda';

Build

npm run build crea directorios es, src y actualiza dist/ramda.js and dist/ramda.min.js

Partial Builds

Es posible construir Ramda con un subconjunto de la funcionalidad para reducir su tamaño. El sistema de compilación de Ramda lo admite con banderas de comando. Por ejemplo si estás usando R.compose, R.reduce, y R.filter tu puedes crear una compilación parcial con:

npm run --silent partial-build compose reduce filter > dist/ramda.custom.js

Esto requiere tener Node/io.js instalado y las dependencias de ramda instaladas (use npm install antes de ejecutar la compilación parcial.).

Instalar funciones específicas

Instalar funciones individuales cont bit, npm and yarn sin intalar toda la biblioteca

Documentación

Por favor, revise API documentacion.

Tambien disponible nuestro Cookbook de funciones creadas a partir de Tamda que puede resultarte útiles.

El nombre

Ok.. nos gustan las ovejas. eso es todo. Es un nombre corto, aun no pillado. Podría haber sido eweda, pero entonces estaríamos obligados a decir eweda lamb!, y nadie quiere eso.

Ejecutando Test Suite

Consola:

Para ejecutar las pruebas desde consola, tu necesitas tener instalado mocha:

npm install -g mocha

Desde la raíz del proyecto, puedes llamar:

mocha

Alternativamente, si ha instalado las dependencias, a través de:

npm install

Entonces puede ejecutar las pruebas(y obtener resultados) ejecutando:

npm test

Navegador:

Puedes usar testem para prueba en diferentes navegadores (incluso headlessly), con livereloading de pruebas. Instale testem (npm install -g testem) and ejecuta testem. Abre el enlace proporcionado en su navegador y verá los resultados en su terminal.

Si tienes PhantomJS instalado, tu puedes ejecturar simplemente testem -l phantomjs.

Uso

Para v0.25 y superiores, importe toda la biblioteca o elija los módulos ES directamente desde la biblioteca:

import * as R from 'ramda'

const {identity} = R
R.map(identity, [1, 2, 3])

Desestructurar las importaciones de ramda * no necesariamente impide importar toda la biblioteca *. Puede seleccionar manualmente métodos como los siguientes, que solo tomarían las partes necesarias para que identity funcione:

import identity from 'ramda/src/identity'

identity()

Sin embargo, los métodos cherry-picking son engorrosos. La mayoria de los bundlers como Webpack and Rollup ofrecen tree-shaking como una manera de borrar codios no usados y disminuir el tamaño del bundle, pero su rendimiento varía, discutido aquí. Aquí hay un resumen de la configuración óptima basada en la tecnología que está utilizando:

  1. Webpack + Babel - use babel-plugin-ramda to automatically cherry pick methods. Discussion here, example here
  2. Webpack only - use UglifyJS plugin for treeshaking along with the ModuleConcatenationPlugin. Discussion here, with an example setup here
  3. Rollup - does a fine job properly treeshaking, no special work needed; example here

Typings

Traducciones

Agradecimientos

Gracias a J. C. Phillipps por el logo de Ramda. Ramda logo artwork © 2014 J. C. Phillipps. Licensed Creative Commons CC BY-NC-SA 3.0.