Track
/
Gleam
Gleam
/
Esercizi
/
Il negozio di biciclette di Betty
Il negozio di biciclette di Betty

Il negozio di biciclette di Betty

Esercizio di apprendimento

Introduzione

Interi

In Gleam ci sono due tipi diversi di numeri: gli interi e i numeri in virgola mobile.

Gli interi sono numeri senza parte decimale.

let integer = 3
// -> 3

Gleam ha diversi operatori che funzionano con gli interi.

1 + 1 // -> 2
5 - 1 // -> 4
5 / 2 // -> 2
3 * 3 // -> 9
5 % 2 // -> 1

2 > 1  // -> True
2 < 1  // -> False
2 >= 1 // -> True
2 <= 1 // -> False

Numeri in virgola mobile

I numeri in virgola mobile hanno una o più cifre dopo il separatore decimale.

let float = 3.45
// -> 3.45

Anche i numeri in virgola mobile hanno il proprio insieme di operatori.

1.0 +. 1.4 // -> 2.4
5.0 -. 1.5 // -> 3.5
5.0 /. 2.0 // -> 2.5
3.0 *. 3.1 // -> 9.3

2.0 >. 1.0  // -> True
2.0 <. 1.0  // -> False
2.0 >=. 1.0 // -> True
2.0 <=. 1.0 // -> False

Moduli

Moduli

Il codice Gleam è organizzato in moduli, e ogni file è un modulo Gleam.

Finora abbiamo scritto funzioni con la sintassi pub fn, che definisce una funzione disponibile pubblicamente per gli altri moduli. Le funzioni definite con fn sono visibili solo all'interno del modulo in cui sono definite e non possono essere usate da altri moduli.

// This function is public
pub fn add(x, y) {
  x + y
}

// This function is private
fn subtract(x, y) {
  x - y
}

I moduli Gleam hanno un nome, che deriva dal loro percorso file all'interno della directory src o test.

Per esempio, un modulo definito in src\geometry\rectangle.gleam (su Windows) o src/geometry/rectangle.gleam (su sistemi operativi simili a UNIX) si chiamerebbe geometry/rectangle.

Importare funzioni da altri moduli

Per accedere alle funzioni definite in altri moduli si usano gli import. Quando si importa un modulo, tutte le funzioni che esso espone diventano accessibili. Ma come accedervi dipende da come si importa il modulo.

Gli import qualificati sono quelli predefiniti: per accedere a una funzione di un modulo così importato (per esempio la funzione map del modulo gleam/list) si antepone il nome del modulo (list.map).

// Import the int module
import gleam/int

pub fn run(x: Int) -> String {
  // Use the to_string function from the int module
  int.to_string(x)
}

Per impostazione predefinita, il nome usato per riferirsi al modulo è l'ultima parte del nome del modulo, in questo caso int, ma lo si può cambiare usando la parola chiave as.

// Import the int module and refer to it as i
import gleam/int as i

pub fn run(x: Int) -> String {
  i.to_string(x)
}

Gli import non qualificati consentono di accedere direttamente alle funzioni esposte da quel modulo, senza anteporre nulla.

// Import the to_string function from the int module
import gleam/int.{to_string}

pub fn run(x: Int) -> String {
  to_string(x)
}

Gli import qualificati sono preferibili perché rendono più chiaro al lettore da dove viene una funzione ed evitano conflitti di nomi.

Libreria standard

Gleam ha una libreria standard ricca e ben documentata. La documentazione è disponibile online su hexdocs.pm/gleam_stdlib. Salva questo link da qualche parte: ti servirà spesso!

La maggior parte dei tipi di dati integrati ha un modulo corrispondente che offre funzioni per lavorare con quel tipo di dati. Per esempio, c'è il modulo gleam/int per gli interi, il modulo gleam/string per le stringhe, il modulo gleam/list per gli array e così via.

Istruzioni

In questo esercizio scriverai del codice per aiutare Betty's Bike Shop, un negozio online di bici e ricambi. Hai tre compiti, il cui scopo è mostrare correttamente sul sito i prezzi delle bici e dei ricambi.

1. Esporta la funzione pence_to_pounds

Il tuo collega ha già scritto lo scheletro del modulo, le funzioni incomplete pence_to_pounds e pounds_to_string. Tuttavia, ha dimenticato di esportare la funzione pence_to_pounds, quindi al momento non è visibile dagli altri moduli né dalla suite di test.

Esporta la funzione pence_to_pounds.

2. Converti i pence in sterline

Al momento il prezzo è memorizzato come un numero intero di pence (il negozio di bici ha sede nel Regno Unito). Sul sito vogliamo mostrare il prezzo in sterline, dove 1,00 sterlina equivale a 100 pence. Il tuo primo compito è implementare la funzione pence_to_pounds, che prende una quantità di pence come Int e la converte nel suo equivalente in sterline come Float. Dovresti anche aggiungere le annotazioni di tipo per quella funzione.

pence_to_pounds(106)
// -> 1.06

3. Formatta il prezzo da mostrare sul sito

Dato che le bici di Betty sono vendute in sterline, i prezzi dovrebbero essere mostrati con il simbolo «£». Il tuo secondo compito è quindi implementare la funzione pounds_to_string, che prende una quantità di sterline come Float e restituisce il prezzo mostrato come String, con il simbolo della sterlina anteposto.

Devi importare i moduli gleam/float e gleam/string prima di usarli.

Devi anche definire l'annotazione di tipo per pounds_to_string.

pounds_to_string(1.06)
// -> "£1.06"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Gleam Exercism

Vuoi iniziare Il negozio di biciclette di Betty?

Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.