문자와 문자열은 Elm에서 텍스트를 표현하는 기본이에요.
문자열은 문자의 배열이라고 생각할 수 있고, 대부분의 List 함수에는 String 모듈에 대응하는 함수가 있어요.
Char 타입은 'a'처럼 작은따옴표로 감싼 유니코드 문자 하나를 나타내요.
Char 모듈은 문자의 성질을 검사하는 조건 함수(Char -> Bool)를 제공해요: isUpper, isLower, isAlpha, isAlphaNum
이 모듈에는 문자를 변환하는 toUpper, toLower, toLocaleUpper, toLocaleLower 함수도 있고, toCode와 fromCode로 유니코드 숫자 값(Int)으로 바꾸거나 되돌리는 함수도 있어요.
String 타입은 문자열을 효율적으로 다루기 위해 기본으로 제공되는 표현으로, "this is an Elm string."처럼 유니코드 문자의 나열을 모두 나타낼 수 있어요.
여러 줄 문자열은 큰따옴표 세 개로 표현하고, 이스케이프하지 않은 따옴표와 줄바꿈을 그대로 넣을 수 있어요.
"""
This is a multiline string.
All line-breaks and whitespace,
are preserved.
"""
String 모듈에는 아래 표에 정리된 모든 함수가 들어 있어요.
가장 자주 쓰이는 함수 몇 가지를 살펴볼까요?
cons : Char -> String -> String는 문자열의 맨 앞에 문자를 하나 추가해요.
cons 'T' "he truth is out there"
--> "The truth is out there"
(++): String -> String -> String는 두 문자열을 이어 붙여요.
"butter" ++ "fly"
--> "butterfly"
split : String -> String -> List String는 주어진 구분자를 기준으로 문자열을 문자열의 배열로 나눠요.
split ";" "cat;dog;cow"
--> ["cat", "dog", "cow"]
join : String -> List String -> String는 문자열의 배열을 주어진 구분자로 이어 붙여요.
join "a" ["H", "w", "ii", "n"]
--> "Hawaiian"
replace : String -> String -> String -> String는 주어진 부분 문자열이 나오는 곳을 모두 바꿔요.
replace "Hello" "Goodbye cruel" "Hello world."
--> "Goodbye cruel world."
length : String -> Int는 문자열에 들어 있는 문자의 개수를 반환해요.
length "Hello world."
--> 12
toInt : String -> Maybe Int는 문자열을 Just Int로 변환하려고 시도하고, 형식이 올바르지 않은 문자열에는 Nothing을 반환해요.
toInt "-42"
--> Just -42
contains : String -> String -> Bool는 두 번째 문자열이 첫 번째 문자열을 포함하는지 확인해요.
contains "the" "theory"
--> True
map : (Char -> Char) -> String -> String는 주어진 함수를 문자열의 모든 Char에 적용해요.
여기서 주어지는 함수는 Char에서 Char로 가는 함수여야 해요.
map (\c -> if c == '/' then '.' else c) "a/b/c"
--> "a.b.c"
| 조작 | 부분 문자열 | 검사 | 변환 | 고차 함수 |
|---|---|---|---|---|
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 |
이 연습 문제에서는 개발자가 식별자 이름을 정리하는 데 도움이 되는 유틸리티 함수 몇 개를 구현해요.
다섯 개의 과제를 통해 clean 함수를 차근차근 완성해 나가요.
올바른 식별자는 0개 이상의 문자와 밑줄로 이루어져 있어요.
clean 함수에 빈 문자열을 넘기면 빈 문자열을 반환해야 해요.
clean1 함수를 구현해 모든 공백을 밑줄로 바꿔요. 문자열 앞뒤의 공백에도 똑같이 적용돼요.
clean1 "my Id"
--> "my___Id"
clean2 함수를 구현해 이전 함수가 하는 일을 모두 하면서, 흔히 쓰이는 제어 문자(\n, \t, \r)를 "[CTRL]" 문자열로 바꿔요.
clean2 "my\nId"
--> "my[CTRL]Id",
clean3 함수를 구현해 이전 함수가 하는 일을 모두 하면서 케밥 케이스를 카멜 케이스로 바꿔요.
clean3 "à-ḃç"
--> "àḂç"
clean4 함수를 구현해 이전 함수가 하는 일을 모두 하면서 모든 숫자를 생략해요.
clean4 "123"
--> ""
마지막으로 clean 함수를 구현해 이전 함수가 하는 일을 모두 하면서 'α'부터 'ω'까지의 그리스 문자를 생략해요.
clean "My Οβιεγτ Finder"
--> "My_Ο_Finder"
Exercism에 가입하고 Elm 트랙을 개념 28개연습 문제 110개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.