Limpinho

Limpinho

Exercício de aprendizagem

Introdução

Strings

Caracteres e strings formam a base para a representação de texto em Elm. As strings podem ser vistas como listas de caracteres, e a maioria das funções de List tem a sua equivalente no módulo String.

Caracteres

O tipo Char representa um único caractere unicode entre aspas simples, por exemplo 'a'. O módulo Char fornece funções de predicado (Char -> Bool) para testar qualidades de um caractere: isUpper, isLower, isAlpha e isAlphaNum O módulo também fornece funções para converter um caractere toUpper, toLower, toLocaleUpper, toLocaleLower, além de converter de e para o seu valor numérico unicode (Int) com toCode e fromCode.

Strings

O tipo String oferece uma representação embutida para a manipulação eficiente de strings e consegue representar qualquer sequência de caracteres unicode, por exemplo "this is an Elm string." Strings de várias linhas são representadas com três aspas duplas e podem conter aspas e quebras de linha sem escape.

"""
    This is a multiline string.
All line-breaks and whitespace,
are preserved. 
"""

Funções de String

O módulo String contém todas as funções resumidas na tabela abaixo. Algumas das funções mais usadas incluem:

cons : Char -> String -> String adiciona um caractere ao início de uma string.

cons 'T' "he truth is out there" 
    --> "The truth is out there"

(++): String -> String -> String concatena duas strings.

"butter" ++ "fly" 
    --> "butterfly"

split : String -> String -> List String divide uma string em uma lista de strings no separador dado.

split ";" "cat;dog;cow" 
    --> ["cat", "dog", "cow"]

join : String -> List String -> String concatena uma lista de strings usando um separador dado.

join "a" ["H", "w", "ii", "n"] 
    --> "Hawaiian"

replace : String -> String -> String -> String substitui todas as ocorrências de uma substring dada.

replace "Hello" "Goodbye cruel" "Hello world." 
    --> "Goodbye cruel world."

length : String -> Int retorna o número de caracteres em uma string.

length "Hello world." 
    --> 12

toInt : String -> Maybe Int tenta converter uma string em Just Int e retorna Nothing para strings com formato incorreto.

toInt "-42" 
    --> Just -42

contains : String -> String -> Bool verifica se a segunda string contém a primeira.

contains "the" "theory" 
    --> True

map : (Char -> Char) -> String -> String aplica uma função dada a cada Char da string. Repare que a função fornecida precisa ser um mapeamento de Char para Char.

map (\c -> if c == '/' then '.' else c) "a/b/c" 
    --> "a.b.c"

Todas as funções de String:

Manipulação Substrings Verificação Conversão Ordem superior
reverse slice length toInt map
repeat left isEmpty fromInt filter
replace right contains toFloat foldl
append dropLeft startsWith fromFloat foldr
concat dropRight indexes toList any
split fromList all
join fromChar
words
lines
cons
uncons

Instruções

Neste exercício, você vai implementar um conjunto parcial de funções utilitárias para ajudar quem desenvolve a limpar nomes de identificadores.

Nas 5 tarefas, você vai construir aos poucos a função clean. Um identificador válido é formado por zero ou mais letras e sublinhados.

Se uma string vazia for passada para a função clean, uma string vazia deve ser retornada.

1. Substitua espaços por sublinhados

Implemente uma função clean1 para substituir qualquer espaço por sublinhados. Isso vale também para espaços no início e no fim.

clean1 "my   Id"
    --> "my___Id"

2. Substitua caracteres de controle pela string em maiúsculas "[CTRL]"

Implemente clean2 para fazer tudo o que a função anterior faz e substituir caracteres de controle comuns (\n, \t e \r ) pela string "[CTRL]".

clean2 "my\nId"
    --> "my[CTRL]Id",

3. Converta kebab-case em camelCase

Implemente clean3 para fazer tudo o que a função anterior faz e converter kebab-case em camelCase.

clean3 "à-ḃç"
    --> "àḂç"

4. Omita dígitos

Implemente clean4 para fazer tudo o que a função anterior faz e omitir todos os dígitos.

clean4 "123"
    --> ""

5. Omita letras gregas minúsculas

Por fim, implemente clean para fazer tudo o que a função anterior faz e omitir quaisquer letras gregas no intervalo de 'α' a 'ω'.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
Editar via GitHub O link abre em uma nova janela ou aba
Elm Exercism

Tudo pronto para começar Limpinho?

Crie sua conta no Exercism para aprender e dominar Elm com 28 conceitos110 exercícios e mentoria humana de verdade, tudo de graça.