Charlists با استفاده از سیگیل ~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!"
هرچه فهرست اول طولانیتر باشد، چسباندن کندتر انجام میشود؛ پس از افزودن پیاپی به فهرستهایی با طول دلخواه خودداری کنید.
case یک ساختار کنترل جریان است که به ما امکان میدهد یک مقدار مشخص را با الگوهای زیادی مقایسه کنیم. بندهای یک عبارت 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"
شما به عنوان مدیر سیستم در یک شرکت بزرگ در مونیخ آلمان کار میکنید. یکی از مسئولیتهای شما مدیریت حسابهای ایمیل است.
شکایتهایی را از افراد شنیدهاید که میگویند نمیتوانند به آقای Müller ایمیل بفرستند. خیلی زود متوجه میشوید که بیشتر شرکت از یک کلاینت ایمیل قدیمی استفاده میکند که müller@firma.de را به دلیل کاراکتر غیر ASCII به عنوان یک نشانی ایمیل معتبر نمیشناسد.
گفتن به مردم که کلاینت ایمیل قدیمی محبوبشان را کنار بگذارند، نبردی شکستخورده است. پس تصمیم میگیرید برای همهی حسابهای ایمیل، نامهای مستعار پاکسازیشده بسازید.
تابع 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"