O tipo char do F# é um valor de 16 bits que representa os menores componentes endereçáveis de texto, imutável por padrão.
Os chars podem ser definidos como literais com aspas simples:
let ch = 'A'
// => val ch: char = 'A'
Strings são uma sequência de chars.
Um char individual pode ser obtido de uma string com indexação (a partir do zero):
"Exercism"[4] // => 'c'
Iterar sobre uma string retorna um char a cada passo.
O próximo exemplo usa uma função de ordem superior e uma função anônima, por conveniência. Elas serão abordadas direito mais adiante no programa de estudos, mas por enquanto são, na prática, uma forma concisa de escrever um laço sobre os caracteres de uma string.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Como mostrado acima, um char pode ser convertido para seu valor int.
Isso também funciona (pelo menos algumas vezes) para outros sistemas de escrita:
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
O Int16 subjacente é usado ao comparar caracteres:
'A' < 'D' // => true
Além disso, um int pode ser convertido para char:
char 77 // => 'M'
A biblioteca System.Char contém o conjunto completo de métodos esperados para uma linguagem .NET, como conversões para maiúsculas/minúsculas:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
Neste exercício, você vai implementar um conjunto parcial de rotinas utilitárias para ajudar quem desenvolve a limpar nomes de identificadores.
Nas 6 tarefas, você vai construir aos poucos as funções transform, para converter caracteres individuais, e clean, para converter strings.
Um identificador válido é composto por zero ou mais letras, sublinhados, hífens, pontos de interrogação e emojis.
Se uma string vazia for passada para a função clean, uma string vazia deve ser retornada.
Implemente a função transform para substituir todos os hífens por sublinhados.
transform '-' // => "_"
Remova todos os caracteres de espaço em branco. Isso inclui espaços em branco no início e no fim.
transform ' ' // => ""
Modifique a função transform para converter camelCase em kebab-case
transform 'D' // => "-d"
Modifique a função transform para omitir qualquer caractere que seja numérico.
transform '7' // => ""
Modifique a função transform para substituir qualquer letra grega no intervalo de 'α' a 'ω'.
transform 'β' // => "?"
Implemente a função clean para aplicar essas operações a uma string inteira.
Caracteres que ficam fora das regras devem passar sem alteração.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Este tópico será abordado em detalhes mais adiante no programa de estudos.
Por enquanto, pode ser útil saber que existe uma função de ordem superior chamada String.collect que converte uma coleção de chars em uma string, usando uma função que você fornece.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Crie sua conta no Exercism para aprender e dominar F# com 18 conceitos148 exercícios e mentoria humana de verdade, tudo de graça.