مسیرها
/
Elm
Elm
/
تمرین‌ها
/
تمیز و برق‌زده
تمیز و برق‌زده

تمیز و برق‌زده

تمرین یادگیری

مقدمه

رشته

کاراکترها و رشته‌ها پایه‌ی نمایش متن در 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 داده شود، باید رشته‌ی خالی برگردانده شود.

1. جایگزینی فاصله‌ها با آندرلاین

تابعی به نام clean1 پیاده‌سازی کنید که هر فاصله را با آندرلاین جایگزین کند. این موضوع برای فاصله‌های ابتدا و انتهای رشته هم صادق است.

clean1 "my   Id"
    --> "my___Id"

2. جایگزینی کاراکترهای کنترلی با رشته‌ی حروف بزرگ "[CTRL]"

clean2 را پیاده‌سازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام می‌داد و کاراکترهای کنترلی رایج (\n، \t و \r) را با رشته‌ی "[CTRL]" جایگزین کند.

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

3. تبدیل kebab-case به camelCase

clean3 را پیاده‌سازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام می‌داد و kebab-case را به camelCase تبدیل کند.

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

4. حذف رقم‌ها

clean4 را پیاده‌سازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام می‌داد و همه‌ی رقم‌ها را حذف کند.

clean4 "123"
    --> ""

5. حذف حروف کوچک یونانی

در پایان، clean را پیاده‌سازی کنید تا همان کاری را انجام دهد که تابع قبلی انجام می‌داد و هر حرف یونانی در بازه‌ی «α» تا «ω» را حذف کند.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elm Exercism

آماده‌اید تمیز و برق‌زده را شروع کنید؟

در Exercism ثبت‌نام کنید تا Elm را همراه با 28 مفهوم110 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.