charlist는 ~c 시길을 사용해 만들어요.
~c"hello"
Elixir의 이전 버전에서는 charlist를 작은따옴표를 사용해 'hello'처럼 표현했어요.
문자열과 아주 비슷하게 생겼지만, 두 자료형은 서로 꽤 달라요. charlist는 정수로 이루어진 배열이에요. 이 정수들은 주어진 문자의 유니코드 값, 즉 코드 포인트를 나타내요.
[65, 66, 67]
# => ~c"ABC"
문자 앞에 ?를 붙이면 그 문자의 코드 포인트를 얻을 수 있어요.
?A
# => 65
[?:, ?)]
# => ~c":)"
charlist는 배열이기 때문에 재귀와 패턴 매칭을 사용해 다른 배열과 똑같이 다룰 수 있어요.
[first_letter | _] = ~c"cat"
first_letter
# => 99
++를 사용해 두 배열을 연결할 수 있어요.
~c"hi" ++ ~c"!"
# => ~c"hi!"
첫 번째 배열이 길수록 연결이 느려지므로, 길이가 임의인 배열에 반복해서 덧붙이는 것은 피하는 게 좋아요.
casecase는 주어진 값을 여러 패턴과 비교할 수 있게 해주는 제어 흐름 구조예요. case 표현식의 절들은 일치하는 것을 찾을 때까지 위에서 아래로 평가돼요.
age = 15
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
# => ~c"teenager"
독일 뮌헨에 있는 대기업의 시스템 관리자로 일하고 있어요. 맡은 업무 중 하나는 이메일 계정을 관리하는 거예요.
Mr. Müller에게 이메일을 보낼 수 없다는 불만이 곳곳에서 들려오고 있어요. 알아보니 회사 사람들 대부분이 오래된 이메일 클라이언트를 쓰고 있는데, 그 클라이언트가 ASCII가 아닌 문자 때문에 müller@firma.de를 올바른 이메일 주소로 인식하지 못하는 거예요.
사람들에게 애용하는 오래된 이메일 클라이언트를 버리라고 하는 건 이미 진 싸움이에요. 그래서 모든 이메일 계정에 대해 정리한 별칭을 만들기로 해요.
sanitize/1 함수를 구현해요. 사용자 이름을 charlist로 받아서, 소문자를 제외한 모든 문자를 제거한 사용자 이름을 반환해야 해요.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
sanitize/1 함수를 확장해요. 사용자 이름에서 밑줄 문자는 제거하면 안 돼요.
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
독일어 알파벳에는 ASCII가 아닌 문자가 네 개 있고, 모두 널리 알려진 ASCII 대체 문자가 있어요.
| 독일어 문자 | ASCII 대체 문자 |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
sanitize/1 함수를 확장해요. 표에 따라 독일어 문자를 대체해야 해요. 모든 사용자 이름은 이미 소문자라고 가정해도 돼요.
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.