Il tipo char di F# è un valore a 16 bit che rappresenta la più piccola componente indirizzabile del testo; è immutabile per impostazione predefinita.
I char si possono definire come letterali con gli apici singoli:
let ch = 'A'
// => val ch: char = 'A'
Le stringhe sono una sequenza di char.
Un singolo char si può estrarre da una stringa con l'indicizzazione (che parte da zero):
"Exercism"[4] // => 'c'
Iterando su una stringa si ottiene un char a ogni passo.
Il prossimo esempio usa una funzione di ordine superiore e una funzione anonima, per comodità. Ne parleremo come si deve più avanti nel programma del corso, ma per ora basti sapere che sono essenzialmente un modo conciso per scrivere un ciclo sui caratteri di una stringa.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Come mostrato sopra, un char può essere convertito nel suo valore int.
Questo funziona anche (almeno in alcuni casi) per altre scritture:
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
Quando si confrontano i caratteri, viene usato l'Int16 sottostante:
'A' < 'D' // => true
Inoltre, un int può essere convertito in char:
char 77 // => 'M'
La libreria System.Char contiene l'insieme completo dei metodi che ci si aspetta da un linguaggio .NET, come le conversioni in maiuscolo e in minuscolo:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
In questo esercizio implementerai un insieme parziale di routine di utilità per aiutare uno sviluppatore a ripulire i nomi degli identificatori.
Nelle 6 attività costruirai gradualmente le funzioni transform, per convertire singoli caratteri, e clean, per convertire stringhe.
Un identificatore valido è composto da zero o più lettere, underscore, trattini, punti interrogativi ed emoji.
Se alla funzione clean viene passata una stringa vuota, deve essere restituita una stringa vuota.
Implementa la funzione transform per sostituire ogni trattino con un underscore.
transform '-' // => "_"
Rimuovi tutti i caratteri di spazio bianco. Sono compresi anche gli spazi bianchi iniziali e finali.
transform ' ' // => ""
Modifica la funzione transform per convertire camelCase in kebab-case
transform 'D' // => "-d"
Modifica la funzione transform per omettere i caratteri numerici.
transform '7' // => ""
Modifica la funzione transform per sostituire le lettere greche nell'intervallo da 'α' a 'ω'.
transform 'β' // => "?"
Implementa la funzione clean per applicare queste operazioni a un'intera stringa.
I caratteri che non rientrano nelle regole devono passare inalterati.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Questo argomento sarà trattato in dettaglio più avanti nel percorso.
Per ora, può essere utile sapere che esiste una funzione di ordine superiore chiamata String.collect che converte una collezione di char in una stringa, usando una funzione che fornisci.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Iscriviti a Exercism per imparare e padroneggiare F# con 18 concetti148 esercizi e il mentoring di persone reali, tutto gratis.