کاراکترها و رشتهها پایهی نمایش متن در Elm را تشکیل میدهند.
میتوان رشتهها را بهصورت فهرستی از کاراکترها در نظر گرفت و بیشتر توابع List معادلشان را در ماژول String دارند.
نوع Char یک کاراکتر یونیکد را با کوتیشن تکی نمایش میدهد، مثلاً 'a'.
ماژول Char توابع محمولی (Char -> Bool) برای بررسی ویژگیهای یک کاراکتر در اختیار میگذارد: isUpper، isLower، isAlpha و isAlphaNum.
این ماژول همچنین توابعی برای تبدیل یک کاراکتر به بزرگ یا کوچک (toUpper، toLower، toLocaleUpper، toLocaleLower) و نیز تبدیل به مقدار عددی یونیکد آن (Int) و از آن، با toCode و fromCode ارائه میدهد.
نوع String نمایشی درونساخت برای دستکاری کارآمد رشتهها فراهم میکند و میتواند هر دنبالهای از کاراکترهای یونیکد را نشان دهد، مثلاً "this is an Elm string."
رشتههای چندخطی با سه کوتیشن دوتایی نوشته میشوند و میتوانند کوتیشنهای بدون escape و خطوط جدید داشته باشند.
"""
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 را میسازید.
یک شناسهی معتبر شامل صفر یا چند حرف و آندرلاین است.
اگر رشتهی خالی به تابع clean داده شود، باید رشتهی خالی برگردانده شود.
تابعی به نام clean1 پیادهسازی کنید که هر فاصله را با آندرلاین جایگزین کند. این موضوع برای فاصلههای ابتدا و انتهای رشته هم صادق است.
clean1 "my Id"
--> "my___Id"
clean2 را پیادهسازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام میداد و کاراکترهای کنترلی رایج (\n، \t و \r) را با رشتهی "[CTRL]" جایگزین کند.
clean2 "my\nId"
--> "my[CTRL]Id",
clean3 را پیادهسازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام میداد و kebab-case را به camelCase تبدیل کند.
clean3 "à-ḃç"
--> "àḂç"
clean4 را پیادهسازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام میداد و همهی رقمها را حذف کند.
clean4 "123"
--> ""
در پایان، clean را پیادهسازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام میداد و هر حرف یونانی در بازهی «α» تا «ω» را حذف کند.
clean "My Οβιεγτ Finder"
--> "My_Ο_Finder"