تُشكّل الأحرف والسلاسل النصية الأساس لتمثيل النصوص في 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."
تُمثَّل السلاسل النصية متعددة الأسطر بثلاث علامات اقتباس مزدوجة، ويمكن أن تحتوي على علامات اقتباس وأسطر جديدة غير مُهرَّبة.
"""
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 تدريجيًا على مدى 5 مهام.
يتكوّن المعرّف الصالح من صفر أو أكثر من الحروف والشرطات السفلية.
إذا مُرّرت سلسلة نصية فارغة إلى الدالة 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"
سجّل في Exercism لتتعلّم وتتقن Elm عبر 28 مفهومًا110 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.