O tipo char do F# é um valor de 16 bits que representa os componentes de texto endereçáveis mais pequenos, imutável por predefinição.
Os chars podem ser definidos como literais com plicas:
let ch = 'A'
// => val ch: char = 'A'
Uma string é uma sequência de chars.
Podes obter um char individual de uma string com indexação (a começar em zero):
"Exercism"[4] // => 'c'
Iterar sobre uma string devolve um char a cada passo.
O exemplo seguinte usa uma função de ordem superior e uma função anónima, por conveniência. Estes conceitos serão abordados como deve ser mais à frente no programa, mas por agora são essencialmente uma forma concisa de escrever um ciclo sobre os carateres de uma string.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Como mostrado acima, um char pode ser convertido no seu valor int.
Isto 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 carateres:
'A' < 'D' // => true
Além disso, um int pode ser convertido em char:
char 77 // => 'M'
A biblioteca System.Char contém o conjunto completo de métodos esperados numa linguagem .NET, como as conversões para maiúsculas/minúsculas:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
Neste exercício vais implementar um conjunto parcial de rotinas utilitárias para ajudar um programador a limpar nomes de identificadores.
Ao longo das 6 tarefas vais construir gradualmente as funções transform, para converter carateres individuais, e clean, para converter strings.
Um identificador válido é composto por zero ou mais letras, underscores, hífenes, pontos de interrogação e emojis.
Se for passada uma string vazia à função clean, deve ser devolvida uma string vazia.
Implementa a função transform para substituir todos os hífenes por underscores.
transform '-' // => "_"
Remove todos os carateres de espaço em branco. Isto inclui os espaços em branco no início e no fim.
transform ' ' // => ""
Modifica a função transform para converter camelCase em kebab-case
transform 'D' // => "-d"
Modifica a função transform para omitir os carateres numéricos.
transform '7' // => ""
Modifica a função transform para substituir todas as letras gregas no intervalo de 'α' a 'ω'.
transform 'β' // => "?"
Implementa a função clean para aplicar estas operações a uma string completa.
Os carateres que ficam fora das regras devem passar sem alterações.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Este tópico será abordado em detalhe mais à frente no currículo.
Por agora, pode ser útil saberes que existe uma função de ordem superior chamada String.collect que converte uma coleção de chars numa string, usando uma função que tu forneces.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Inscreve-te no Exercism para aprenderes e dominares F# com 18 conceitos148 exercícios, e mentoria humana real, tudo grátis.