El tipo char de F# es un valor de 16 bits que representa el componente de texto más pequeño al que se puede acceder, y es inmutable por defecto.
Los char se pueden definir como literales con comillas simples:
let ch = 'A'
// => val ch: char = 'A'
Las cadenas de caracteres son una secuencia de caracteres.
Se puede obtener un char concreto de una cadena mediante indexación (empezando en cero):
"Exercism"[4] // => 'c'
Al iterar sobre una cadena se obtiene un char en cada paso.
El siguiente ejemplo utiliza una función de orden superior y una función anónima, por comodidad. Estas se tratarán adecuadamente más adelante en el temario, pero por ahora son, esencialmente, una forma concisa de escribir un bucle sobre los caracteres de una cadena.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Como se muestra arriba, un char se puede convertir a su valor int.
Esto también funciona (al menos en algunos casos) con otros sistemas de escritura:
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
Para comparar caracteres se utiliza el valor Int16 subyacente:
'A' < 'D' // => true
Además, un int se puede convertir a char:
char 77 // => 'M'
La biblioteca System.Char contiene el conjunto completo de métodos que se esperan de un lenguaje .NET, como las conversiones a mayúsculas y minúsculas:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
En este ejercicio vas a implementar un conjunto parcial de rutinas auxiliares para ayudar a un desarrollador a limpiar nombres de identificadores.
A lo largo de las 6 tareas irás construyendo gradualmente las funciones transform, para convertir caracteres individuales, y clean, para convertir strings.
Un identificador válido consta de cero o más letras, guiones bajos, guiones, signos de interrogación y emojis.
Si se pasa un string vacío a la función clean, debería devolverse un string vacío.
Implementa la función transform para sustituir los guiones por guiones bajos.
transform '-' // => "_"
Elimina todos los caracteres de espacio en blanco. Esto incluye los espacios en blanco al principio y al final.
transform ' ' // => ""
Modifica la función transform para convertir camelCase a kebab-case
transform 'D' // => "-d"
Modifica la función transform para omitir los caracteres que sean numéricos.
transform '7' // => ""
Modifica la función transform para sustituir las letras griegas del rango de 'α' a 'ω'.
transform 'β' // => "?"
Implementa la función clean para aplicar estas operaciones a un string completo.
Los caracteres que queden fuera de las reglas deben pasar sin cambios.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Este tema se tratará en detalle más adelante en el temario.
Por ahora, puede resultarte útil saber que existe una función de orden superior llamada String.collect que convierte una colección de char en un string, usando una función que tú proporciones.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Regístrate en Exercism para aprender y dominar F# con 18 conceptos148 ejercicios y mentoría humana real, todo gratis.