Le type char de F# est une valeur de 16 bits qui représente les plus petites composantes adressables du texte, immuable par défaut.
On peut définir des char comme littéraux à l'aide de guillemets simples :
let ch = 'A'
// => val ch: char = 'A'
Les strings sont une séquence de char.
On peut extraire un char d'une string grâce à son indice (en partant de zéro) :
"Exercism"[4] // => 'c'
Parcourir une string renvoie un char à chaque étape.
L'exemple suivant utilise une fonction d'ordre supérieur et une fonction anonyme, par commodité. Elles seront vues en détail plus tard dans le programme, mais pour l'instant il s'agit essentiellement d'une façon concise d'écrire une boucle sur les caractères d'une string.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Comme montré ci-dessus, on peut convertir un char en sa valeur int.
Cela fonctionne aussi (au moins dans certains cas) pour d'autres écritures :
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
C'est l'Int16 sous-jacent qui est utilisé pour comparer des caractères :
'A' < 'D' // => true
De plus, on peut convertir un int en char :
char 77 // => 'M'
La bibliothèque System.Char contient l'ensemble complet des méthodes attendues pour un langage .NET, comme les conversions majuscule/minuscule :
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
Dans cet exercice, on va implémenter un ensemble partiel de routines utilitaires pour aider un développeur à nettoyer des noms d'identifiants.
Au fil des 6 tâches, tu construiras progressivement les fonctions transform, qui convertit des caractères isolés, et clean, qui convertit des strings.
Un identifiant valide se compose de zéro ou plusieurs lettres, tirets bas, tirets, points d'interrogation et emojis.
Si une string vide est passée à la fonction clean, une string vide doit être renvoyée.
Implémente la fonction transform pour remplacer tous les tirets par des tirets bas.
transform '-' // => "_"
Supprime tous les caractères d'espacement, y compris ceux en début et en fin de string.
transform ' ' // => ""
camelCase en kebab-case
Modifie la fonction transform pour convertir du camelCase en kebab-case.
transform 'D' // => "-d"
Modifie la fonction transform pour omettre tout caractère numérique.
transform '7' // => ""
Modifie la fonction transform pour remplacer toutes les lettres grecques comprises entre 'α' et 'ω'.
transform 'β' // => "?"
Implémente la fonction clean pour appliquer ces opérations à une string entière.
Les caractères qui ne relèvent pas de ces règles doivent rester inchangés.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Ce sujet sera traité en détail plus tard dans le programme.
Pour l'instant, il peut être utile de savoir qu'il existe une fonction d'ordre supérieur appelée String.collect, qui convertit une collection de chars en une string, à l'aide d'une fonction que tu fournis.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Inscris-toi sur Exercism pour apprendre et maîtriser F# avec 18 concepts148 exercices, et un vrai mentorat humain, le tout gratuitement.