Trilhas
/
Elm
Elm
/
Exercícios
/
Loja de Bicicletas da Betty
Loja de Bicicletas da Betty

Loja de Bicicletas da Betty

Exercício de aprendizagem

Introdução

Noções básicas 2

Exportar funções

Vimos como exportar funções no primeiro conceito; aqui vai uma revisão rápida.

Cada arquivo em Elm é um módulo e precisa conter uma instrução module antes de qualquer outro código.

Os nomes dos módulos precisam corresponder ao nome do arquivo, então o módulo Calculator precisa estar no arquivo Calculator.elm, e o módulo Parser.Utils precisa estar no arquivo Parser/Utils.elm.

Tudo o que é definido dentro de um módulo tem escopo privado e não pode ser acessado de fora dele, a menos que esteja listado em 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 funções de outros módulos

O acesso a funções definidas em outros módulos é feito por meio de imports. Todas as funções do módulo que foram expostas por ele ficam acessíveis ao importar esse módulo. Mas a forma de acessá-las varia conforme a maneira como o módulo é importado.

Imports qualificados são o padrão, e acessar uma função nesse tipo de módulo (por exemplo, a função map no módulo List) é feito prefixando o nome do módulo (List.map).

Imports abertos permitem acesso direto às funções expostas desse módulo, sem prefixo. Eles são feitos com a palavra-chave exposing, como um espelho da usada nas exportações. Você pode expor todas as funções disponíveis (com ..) ou apenas algumas específicas (por exemplo, map).

Você também pode importar tipos e seus construtores de outros módulos, o que é um conceito mais adiante.

Imports qualificados são preferidos por deixarem o código mais claro e evitarem conflitos de nomes.

-- 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

Anotações de tipo

Anotações de tipo são definidas com name : parameter types -> return type, sendo que os tipos dos parâmetros também são separados por ->.

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

Parênteses podem ser usados para definir parâmetros de função (que são eles próprios definidos com a mesma sintaxe, daí a necessidade deles).

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

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

Números

Existem dois tipos de números disponíveis em Elm, definidos pelos tipos Int e Float. O Int corresponde ao conjunto dos números inteiros, positivos e negativos. O Float corresponde ao conjunto dos números reais, limitado pela precisão do computador. As operações definidas sobre números geralmente funcionam com um tipo ou com o outro, mas não misturando os dois. Existem funções para converter entre os dois, como toFloat, que converte Int em Float, e round, floor, ceiling ou truncate, que convertem um Float em Int com semânticas diferentes.

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

Operações com strings

Para descrever palavras e frases em código, Elm tem um tipo String nativo. Literais de string são escritos entre aspas duplas, como "Hello World!". Um operador de concatenação de string ++ e um operador de igualdade == estão disponíveis por padrão.

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

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

A maioria das outras funções de string está no módulo String, que precisa ser importado.

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

Instruções

Neste exercício, você vai escrever um pouco de código para ajudar a Betty's Bike Shop, uma loja online de bicicletas e peças. Você tem três tarefas, com o objetivo de exibir corretamente os preços das bicicletas e das peças no site.

1. Exporte a função penceToPounds

Uma pessoa da sua equipe já escreveu o esqueleto do módulo, com as funções ainda não definidas penceToPounds e poundsToString. No entanto, essa pessoa esqueceu de exportar a função penceToPounds, que, por isso, ainda não está visível para outros módulos nem para a suíte de testes.

Adicione penceToPounds à lista de funções exportadas.

2. Converta pence em libras

Atualmente, o preço é armazenado como um número inteiro de pence (a loja de bicicletas fica no Reino Unido). No site, queremos mostrar o preço em libras, sendo que 1,00 libra equivale a 100 pence. Sua segunda tarefa é implementar a função penceToPounds, que recebe uma quantia em pence como Int e a converte no equivalente em libras como Float. Você também deve definir a anotação de tipo dessa função.

penceToPounds 106
    --> 1.06

3. Formate o preço para exibição no site

Como as bicicletas da Betty são vendidas em libras, os preços devem ser exibidos com o símbolo "£". Sua terceira tarefa é, portanto, implementar a função poundsToString, que recebe uma quantia em libras como Float e retorna o preço exibido como uma String com o símbolo da libra no início. O módulo String contém a função String.fromFloat, que vai ajudar nisso. Você deve importar o módulo String antes de usá-lo. Você também deve definir a anotação de tipo de poundsToString.

poundsToString 1.06
    --> "£1.06"
Editar via GitHub O link abre em uma nova janela ou aba
Elm Exercism

Tudo pronto para começar Loja de Bicicletas da Betty?

Crie sua conta no Exercism para aprender e dominar Elm com 28 conceitos110 exercícios e mentoria humana de verdade, tudo de graça.