المسارات
/
F#
F#
/
التمارين
/
نظيف تمامًا
نظيف تمامًا

نظيف تمامًا

تمرين تعلّمي

مقدمة

النوع char في F# هو قيمة ذات 16 بت لتمثيل أصغر مكونات النص القابلة للعنونة، وهو غير قابل للتغيير افتراضيًا.

يمكن تعريف قيم char كقيم حرفية باستخدام علامتي اقتباس مفردتين:

let ch = 'A'
// => val ch: char = 'A'

السلاسل النصية هي تسلسل من قيم char.

يمكن استرجاع char مفرد من سلسلة نصية باستخدام الفهرسة (بدءًا من الصفر):

"Exercism"[4] //  =>  'c'

التكرار على سلسلة نصية يُرجع char في كل خطوة.

يستخدم المثال التالي دالة عالية الرتبة ودالة مجهولة، لتسهيل الأمر. ستُغطى هذه لاحقًا بشكل وافٍ في المنهج، لكنها الآن في الأساس أسلوب موجز لكتابة حلقة على الأحرف في سلسلة نصية.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

كما هو موضح أعلاه، يمكن تحويل char إلى قيمة int الخاصة به. وهذا ينطبق أيضًا (في بعض الأحيان على الأقل) على أنظمة كتابة أخرى:

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

يُستخدم النوع Int16 الأساسي عند مقارنة الأحرف:

'A' < 'D'  // =>  true

أيضًا، يمكن تحويل int إلى char:

char 77  // => 'M'

تحتوي مكتبة System.Char على المجموعة الكاملة من الطرق المتوقعة للغة .NET، مثل التحويل إلى أحرف كبيرة/صغيرة:

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

التعليمات

في هذا التمرين ستُنفّذ مجموعة جزئية من الدوال المساعدة التي تساعد المطوّر على تنظيف أسماء المعرّفات.

في المهام الست ستُطوّر تدريجيًا الدالة transform لتحويل الأحرف المفردة، والدالة clean لتحويل السلاسل النصية.

يتكوّن المعرّف الصالح من صفر أو أكثر من الحروف والشرطات السفلية والشرطات وعلامات الاستفهام والإيموجي.

إذا مُرّرت سلسلة نصية فارغة إلى الدالة clean، فيجب إرجاع سلسلة نصية فارغة.

1. استبدال أي شرطات تصادفها بشرطات سفلية

نفّذ الدالة transform لاستبدال أي شرطات بشرطات سفلية.

transform '-'  // => "_"

2. إزالة كل المسافات البيضاء

أزل كل أحرف المسافات البيضاء. ويشمل ذلك المسافات البيضاء في البداية والنهاية.

transform ' '  // => ""

3. تحويل camelCase إلى kebab-case

عدّل الدالة transform لتحويل camelCase إلى kebab-case

transform 'D'  // => "-d"

4. حذف الأحرف التي تكون أرقامًا

عدّل الدالة transform لحذف أي أحرف رقمية.

transform '7'  // => ""

5. استبدال الحروف اليونانية الصغيرة بعلامات استفهام

عدّل الدالة transform لاستبدال أي حروف يونانية في النطاق من 'α' إلى 'ω'.

transform 'β' // => "?"

6. دمج هذه العمليات لتعمل على سلسلة نصية

نفّذ الدالة clean لتطبيق هذه العمليات على سلسلة نصية كاملة.

الأحرف التي تقع خارج القواعد يجب أن تمرّ دون تغيير.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

تجميع سلسلة نصية من الأحرف

سيُغطّى هذا الموضوع بتفصيل لاحقًا في المنهج.

في الوقت الحالي، قد يكون من المفيد أن تعرف أن هناك دالة ذات رتبة أعلى تُسمى String.collect تحوّل مجموعة من char إلى سلسلة نصية، باستخدام دالة توفّرها أنت.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
F# Exercism

مستعد لبدء نظيف تمامًا؟

سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.