المسارات
/
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." تُمثَّل السلاسل النصية متعددة الأسطر بثلاث علامات اقتباس مزدوجة، ويمكن أن تحتوي على علامات اقتباس وأسطر جديدة غير مُهرَّبة.

"""
    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، فيجب إرجاع سلسلة نصية فارغة.

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 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.