Rutas
/
Elm
Elm
/
Ejercicios
/
La tienda de bicicletas de Betty
La tienda de bicicletas de Betty

La tienda de bicicletas de Betty

Ejercicio de aprendizaje

Introducción

Fundamentos 2

Exportar funciones

La exportación de funciones ya se trató en el primer concepto; aquí tienes un repaso rápido.

Cada archivo en Elm es un módulo y debe contener una instrucción module antes de cualquier otro código.

Los nombres de los módulos deben coincidir con el nombre de su archivo, así que el módulo Calculator debe estar en el archivo Calculator.elm, y el módulo Parser.Utils debe estar en el archivo Parser/Utils.elm.

Todo lo que se define dentro de un módulo tiene un ámbito privado dentro de él y no se puede acceder desde fuera de este módulo, a menos que se incluya en exposing.

-- Calculator.elm
-- Define the Calculator module, and expose the `add` function
module Calculator exposing (add)

six = 3 + 3

add number1 number2 = number1 + number2
-- Calculator.elm
-- Define the Calculator module, and expose everything within: `six` and `add`
module Calculator exposing (..)

six = 3 + 3

add number1 number2 = number1 + number2

https://elm-lang.org/docs/syntax#modules

Importar funciones desde otros módulos

Para acceder a las funciones definidas en otros módulos se usan las importaciones. Todas las funciones de ese módulo que hayan sido expuestas por él pasan a ser accesibles al importar ese módulo. Pero la forma de acceder a ellas varía según cómo se importe el módulo.

Las importaciones cualificadas son las predeterminadas, y para acceder a una función de ese módulo (por ejemplo, la función map del módulo List) se antepone el nombre del módulo (List.map).

Las importaciones abiertas permiten acceder directamente a las funciones expuestas de ese módulo, sin anteponer nada. Se hacen con la palabra clave exposing, de forma análoga a la que se usa en las exportaciones. Puedes exponer todas las funciones disponibles (con ..) o solo algunas (por ejemplo, map).

También puedes importar tipos y sus constructores desde otros módulos, lo cual es un concepto que verás más adelante.

Se prefieren las importaciones cualificadas para favorecer la claridad y evitar conflictos de nombres.

-- qualified imports
import List                            -- List.map, List.foldl
import List as L                       -- L.map, L.foldl

-- open imports
import List exposing (..)              -- map, foldl, concat, ...
import List exposing ( map, foldl )    -- map, foldl, List.concat

https://elm-lang.org/docs/syntax#modules

Anotaciones de tipo

Las anotaciones de tipo se definen con name : parameter types -> return type, y los tipos de los parámetros también se separan con ->.

add : Int -> Int -> Int
add number1 number2 = number1 + number2

Se pueden usar paréntesis para definir los parámetros de una función (que a su vez se definen con la misma sintaxis, de ahí la necesidad de los paréntesis).

-- Transform every character in a string
map : (Char -> Char) -> String -> String
map charMapperFunction string =
    -- ...

https://elm-lang.org/docs/syntax#type-annotations

Números

En Elm hay dos tipos de números, definidos por los tipos Int y Float. Int se corresponde con el conjunto de los números enteros positivos y negativos. Float se corresponde con el conjunto de los números reales, limitado por la precisión del ordenador. Las operaciones definidas sobre números normalmente funcionan con un tipo u otro, pero no los mezclan. Existen funciones para convertir entre ambos, como toFloat, que convierte Int en Float, y round, floor, ceiling o truncate, que convierten un Float en un Int con distintas semánticas.

https://package.elm-lang.org/packages/elm/core/latest/Basics#Int

Operaciones con cadenas

Para describir palabras y frases en el código, Elm tiene un tipo String nativo. Los literales de String se escriben entre comillas dobles, como "Hello World!". El operador ++ de concatenación de String y el operador == de igualdad están disponibles por defecto.

hello : String -> String
hello subject = "Hello " ++ subject

hello "World!" --> "Hello World!"

La mayoría de las demás funciones de String están en el módulo String, que debe importarse.

https://package.elm-lang.org/packages/elm/core/latest/String

Instrucciones

En este ejercicio vas a escribir algo de código para ayudar a Betty's Bike Shop, una tienda online de bicicletas y piezas. Tienes tres tareas, cuyo objetivo es mostrar correctamente los precios de las bicicletas y las piezas en el sitio web.

1. Exporta la función penceToPounds

Tu compañero ya ha escrito el esqueleto del módulo, las funciones sin definir penceToPounds y poundsToString. Sin embargo, se ha olvidado de exportar la función penceToPounds, por lo que actualmente no es visible para otros módulos ni para el conjunto de pruebas.

Añade penceToPounds a la lista de funciones exportadas.

2. Convierte peniques en libras

Actualmente, el precio se almacena como un número entero de peniques (la tienda de bicicletas tiene su sede en el Reino Unido). En el sitio web queremos mostrar el precio en libras, donde 1,00 libra equivale a 100 peniques. Tu segunda tarea es implementar la función penceToPounds, que toma una cantidad de peniques como Int y la convierte en su equivalente en libras como Float. También debes definir la anotación de tipo para esa función.

penceToPounds 106
    --> 1.06

3. Da formato al precio para mostrarlo en el sitio web

Como las bicicletas de Betty se venden en libras, los precios deben mostrarse con el símbolo «£». Tu tercera tarea es, por tanto, implementar la función poundsToString, que toma una cantidad de libras como Float y devuelve su precio mostrado como un String con el símbolo de la libra delante. El módulo String contiene la función String.fromFloat, que te será útil para esto. Debes importar el módulo String antes de usarlo. También debes definir la anotación de tipo para poundsToString.

poundsToString 1.06
    --> "£1.06"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elm Exercism

¿Listo para empezar La tienda de bicicletas de Betty?

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.