Logo Studenta

Lenguaje_de_programaci__n txt

¡Estudia con miles de materiales!

Vista previa del material en texto

Wiki Loves Monuments: ¡Fotografía un monumento, ayuda a Wikipedia y gana!
Más información
Elm (lenguaje de programación)
Ir a la navegaciónIr a la búsqueda
Elm es un lenguaje de programación para crear interfaces gráficas de usuario para 
navegadores web. Elm es un lenguaje funcional puro y fuertemente tipificado, y está
desarrollado con énfasis en usabilidad, rendimiento, y robustez. Proclama "no tener
excepciones en la práctica", hecho posible por el sistema de tipado estático del 
compilador.1
Elm
The Elm tangram
Desarrollador(es)
Evan Czaplicki
https://elm-lang.org/
Información general
Extensiones comunes .elm
Paradigma Programación funcional
Apareció en 2012
Diseñado por Evan Czaplicki
Última versión estable 0.19 (21 de agosto de 2018 (3 años, 2 meses y 1 día))
Sistema de tipos estático, tipado fuerte
Influido por Haskell, Standard ML, OCaml, F#
Licencia Licencia BSD2
[editar datos en Wikidata]
Índice
1 Historia
2 Características
2.1 Inmutabilidad
2.2 Tipos estáticos
2.3 Sistema de módulos
2.4 Interoperabilidad con HTML, CSS y JavaScript
3 Limitaciones
4 Código de ejemplo
5 Vea también
6 Referencias
7 Enlaces externos
Historia
Elm fue inicialmente diseñado por Evan Czaplicki en su tesis en 2012.3 La versión 
pública de Elm vino con muchos ejemplos y un editor en línea que lo hizo fácil de 
probar en un navegador web.4 Evan Czaplicki se unió a Prezi en 2013 para trabajar 
en Elm,5 y en 2016 se unió a NoRedInk como Ingeniero de Software trabajando en 
código libre, también empezando la Elm Software Foundation.6
La implementación inicial del compilador producía HTML, CSS, y Javascript.7 El 
conjunto de herramientas del lenguaje continuó expandiéndose, ahora incluyendo un 
REPL,8 gestor de paquetes,9 depurador con viaje en el tiempo,10 e instaladores para
Linux, Mac y Windows.11 Elm también tiene un ecosistema de librerías creadas por la
comunidad12 y un editor en línea avanzado que permite incluir dichas librerías y 
guardar el código para compartirlo.13
Características
Elm tiene un pequeño pero expresivo conjunto de funcionalidades en el lenguaje, 
incluyendo expresiones if, creación de variables locales, y expresiones case para 
la búsqueda de patrones.14 Como lenguaje funcional, tiene funciones anónimas, 
funciones como argumentos, y aplicación parcial (currificación) por defecto. Su 
This study source was downloaded by 100000831666117 from CourseHero.com on 04-26-2022 01:36:03 GMT -05:00
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
semántica incluye valores inmutables, funciones puras, y tipado estático con 
inferencia de tipos. Los programas de Elm producen HTML a través de un sistema de 
DOM virtual, y pueden interoperar con otro código Javascript.
Inmutabilidad
Todos los valores en Elm son inmutables, un valor no puede ser modificado después 
de ser creado. Elm utiliza estructuras de datos persistentes para implementar sus 
librerías Array, Dict, y Set.15
Tipos estáticos
Elm usa un sistema de tipado estático. Las anotaciones de tipos son opcionales, 
debido a la inferencia de tipos, pero recomendadas. Las anotaciones se ponen en la 
línea de arriba de la definición (no como en los lenguajes de la familia de C, 
donde los tipos y los nombres de las variables/parámetros están mezclados). Elm usa
un solo carácter : para significar la definición de tipos.
Los tipos incluyen primitivas como números enteros y cadenas de texto, y 
estructuras de datos básicas como listas (List ), tuplas (Tuple) y records 
(objetos). Las funciones se escriben con flechas, por ejemplo round : Float -> Int.
Union types (tipos de unión) permiten al programador crear tipos personalizados 
para representar datos de manera apropiada al dominio del problema.16
Los tipos pueden referenciar otros tipos, por ejemplo, una lista de números enteros
es List Int. Los tipos siempre empiezan con letra en mayúscula, las variables 
empiezan con letra en minúscula. Por ejemplo, una List a es una lista de valores de
tipo desconocido. Hay unos cuantos tipos especiales que los programadores crean 
para interactionar con el sistema de ejecución de Elm. Por ejemplo, Html Msg 
representa un árbol del DOM (virtual) cuyos manejadores de eventos producen 
mensajes de tipo Msg.
En vez de permitir que cualquier valor sea null implícitamente (como undefined o 
null en JavaScript), la librería estándar de Elm define un tipo Maybe a . El código
que produce o maneja valores opcionales lo hace utilizando explícitamente este 
tipo, y todo el código tiene garantías de que el valor que dice ser de un cierto 
tipo esta garantizado tener un valor de ese tipo presente.
Sistema de módulos
Elm tiene un sistema de módulos que permite a los usuarios dividir el código en 
partes más pequeñas llamadas módulos. Los módulos pueden esconder detalles de 
implementación, tales como funciones auxiliares, y agrupar código relacionado. Los 
módulos sirven como espacio de nombres a la hora de importar código, como por 
ejemplo Tuple.first. Las librerías o paquetes de terceros consisten en uno o más 
módulos, y están disponibles en la librería de paquetes de Elm. Todos los paquetes 
y librerías se versionan utilizando versionado semántico, que es verificado y hecho
cumplir por el compilador y otras herramientas. Esto significa, que quitar una 
función, o cambiar su tipo, puede ser hecho solo incrementando la versión mayor.
Interoperabilidad con HTML, CSS y JavaScript
Elm utiliza una abstracción llamada ports (puertos) para comunicarse con 
JavaScript.17 Permite que los valores fluyan hacia dentro y fuera de los programas 
Elm, haciendo posible la comunicación entre Elm y JavaScript.
Elm tiene una librería llamada elm-html que un programador puede utilizar para 
escribir HTML y CSS en Elm.18 Utiliza un sistema de DOM virtual para hacer las 
actualizaciones en la página más eficientes.19
Limitaciones
Al contrario que Haskell o PureScript, Elm no tiene soporte para higher-kinded 
types, y por lo tanto no puede proveer abstracciones genéricas para muchas 
This study source was downloaded by 100000831666117 from CourseHero.com on 04-26-2022 01:36:03 GMT -05:00
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
operaciones comunes.20 Por ejemplo, no hay funciones genéricas map, apply, fold, o 
filter. En vez dichos nombres hay que utilizar un prefijo con el módulo del tipo al
que nos queremos referir, por ejemplo List.map y Dict.map.
Código de ejemplo
-- Esto es un comentario de una linea
{- Este es un comentario multi-linea
 Puedes escribir en varias lineas
-}
{- Puedes {- anidar -} comentarios multi-linea -}
-- Aquí definimos un valor llamado ''greeting''. El tipo es inferido como cadena de
texto (String)
greeting =
 "Hola Mundo!"
-- Es mejor añadir anotaciones de tipos como documentación
hello : String
hello =
 "Hola."
-- Las funciones se declaran de la misma manera, con los argumentos siguiendo al 
nombre de la función.
add x y =
 x + y
-- De nuevo, mejor con anotaciones de tipos
hypotenuse : Float -> Float -> Float
hypotenuse a b =
 sqrt (a^2 + b^2)
-- Las funciones están currificadas 
-- Por ejemplo aquí usamos la aplicación parcial de la multiplicación con 2
multiplyBy2 : number -> number
multiplyBy2 =
 (*) 2
-- Las expresiones if se usan para decidir que hacer basado en una condición. Es 
obligatorio que este siempre el else
absoluteValue : number -> number
absoluteValue number =
 if number < 0 then negate number else number
-- Records (objetos) son usados para poner valores con nombre
book : { title : String, author : String, pages : Int }
book =
 { title = "Steppenwolf"
 , author = "Hesse"
 , pages = 237 
 }
-- Para acceder a un campo del objeto, utilizamos `.`
title : String
title =
 book.title
-- El acceso a campos `.` también se puede utilizar como función
This study source was downloadedby 100000831666117 from CourseHero.com on 04-26-2022 01:36:03 GMT -05:00
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
author : String
author =
 .author book
-- Podemos crear nuevos tipos con la palabra `type`
-- El siguiente tipo corresponde a la representación de un árbol binario
type Tree a
 = Empty
 | Node a (Tree a) (Tree a)
-- Es posible inspeccionar estos tipos con expresiones `case`
depth : Tree a -> Int
depth tree =
 case tree of
 Empty ->
 0
 Node value left right ->
 1 + max (depth left) (depth right)
Vea también
TypeScript: lenguaje de programación fuertemente tipado que compila a JavaScript
Referencias
 «Elm home page».
 «elm/compiler». GitHub.
 «Elm: Concurrent FRP for Functional GUIs».
 «Try Elm». elm-lang.org. Archivado desde el original el 21 de mayo de 2017. 
Consultado el 5 de octubre de 2018.
 «elm and prezi». elm-lang.org. Archivado desde el original el 24 de mayo de 2015. 
Consultado el 5 de octubre de 2018.
 «new adventures for elm». elm-lang.org.
 «elm-lang/elm-compiler». GitHub.
 «repl». elm-lang.org. Archivado desde el original el 31 de mayo de 2015. 
Consultado el 5 de octubre de 2018.
 «package manager». elm-lang.org. Archivado desde el original el 13 de marzo de 
2016. Consultado el 5 de octubre de 2018.
 «Time Travel made Easy». http://elm-lang.org.
 «elm/compiler». GitHub.
 «Elm Packages». package.elm-lang.org. Archivado desde el original el 11 de febrero
de 2015. Consultado el 5 de octubre de 2018.
 «Ellie, the Elm Live Editor».
 «Sintaxis». elm-lang.org. Archivado desde el original el 13 de marzo de 2016. 
Consultado el 5 de octubre de 2018.
 «core 5.1.1». package.elm-lang.org.
 «Custom Types». guide.elm-lang.org. Consultado el 5 de octubre de 2018.
 «JavaScript Interop». guide.elm-lang.org.
 «elm/html». package.elm-lang.org.
 «blazing fast html». elm-lang.org. Archivado desde el original el 13 de marzo de 
2016. Consultado el 5 de octubre de 2018.
 «Higher-Kinded types Not Expressible? #396». github.com/elm-lang/elm-compiler. 
Consultado el 6 de marzo de 2015.
Enlaces externos
Web oficial
Guía oficial de Elm (Inglés)
Control de autoridades
Proyectos WikimediaWd Datos: Q5366250
Categorías: Software de 2012Lenguajes funcionales
Menú de navegación
No has accedido
Discusión
This study source was downloaded by 100000831666117 from CourseHero.com on 04-26-2022 01:36:03 GMT -05:00
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
Contribuciones
Crear una cuenta
Acceder
ArtículoDiscusión
LeerEditarVer historial
Buscar
Buscar en Wikipedia
Portada
Portal de la comunidad
Actualidad
Cambios recientes
Páginas nuevas
Página aleatoria
Ayuda
Donaciones
Notificar un error
Herramientas
Lo que enlaza aquí
Cambios en enlazadas
Subir archivo
Páginas especiales
Enlace permanente
Información de la página
Citar esta página
Elemento de Wikidata
Imprimir/exportar
Crear un libro
Descargar como PDF
Versión para imprimir
En otros idiomas
Deutsch
English
Français
Italiano
日本語
한국어
Português
Русский
中文
5 más
Editar enlaces
Esta página se editó por última vez el 8 oct 2021 a las 06:35.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir 
Igual 3.0; pueden aplicarse cláusulas adicionales. Al usar este sitio, usted acepta
nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una 
organización sin ánimo de lucro.
Política de privacidadAcerca de WikipediaLimitación de responsabilidadVersión para 
móvilesDesarrolladoresEstadísticasDeclaración de cookiesWikimedia FoundationPowered
by MediaWiki
This study source was downloaded by 100000831666117 from CourseHero.com on 04-26-2022 01:36:03 GMT -05:00
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
Powered by TCPDF (www.tcpdf.org)
https://www.coursehero.com/file/112407956/Lenguaje-de-programaci%C3%B3ntxt/
http://www.tcpdf.org

Continuar navegando

Materiales relacionados

136 pag.
Python para Principiantes

User badge image

pilarsimonwilliam

262 pag.
497 pag.
Postgres-User

UNAM

User badge image

campuzanobeni3