Elmでは、文字と文字列がテキストを表すための基本になります。文字列は文字のリストと考えることができ、Listのほとんどの関数にはStringモジュールに対応するものがあります。
Char型は、'a'のように一重引用符で囲んだ単一のUnicode文字を表します。
Charモジュールには、文字の性質を調べる述語関数(Char -> Bool)が用意されています。たとえばisUpper、isLower、isAlpha、isAlphaNumです。
また、このモジュールには、文字を変換する関数としてtoUpper、toLower、toLocaleUpper、toLocaleLowerが、数値のUnicode値(Int)との相互変換を行う関数としてtoCodeとfromCodeがあります。
String型は、効率的な文字列操作のための組み込みの表現で、任意のUnicode文字の並びを表すことができます。たとえば"これはElmの文字列です。"のように。
複数行の文字列は二重引用符3つで表し、エスケープされていない引用符や改行を含めることができます。
"""
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は、2つの文字列を連結します。
"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は、2番目の文字列に1番目の文字列が含まれているかどうかを調べます。
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 |
この演習では、エンジニアが識別子の名前を整えるのを助けるユーティリティ関数の一部を実装します。
5つのタスクを通して、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"