النوع 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، فيجب إرجاع سلسلة نصية فارغة.
نفّذ الدالة transform لاستبدال أي شرطات بشرطات سفلية.
transform '-' // => "_"
أزل كل أحرف المسافات البيضاء. ويشمل ذلك المسافات البيضاء في البداية والنهاية.
transform ' ' // => ""
عدّل الدالة transform لتحويل camelCase إلى kebab-case
transform 'D' // => "-d"
عدّل الدالة transform لحذف أي أحرف رقمية.
transform '7' // => ""
عدّل الدالة transform لاستبدال أي حروف يونانية في النطاق من 'α' إلى 'ω'.
transform 'β' // => "?"
نفّذ الدالة clean لتطبيق هذه العمليات على سلسلة نصية كاملة.
الأحرف التي تقع خارج القواعد يجب أن تمرّ دون تغيير.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
سيُغطّى هذا الموضوع بتفصيل لاحقًا في المنهج.
في الوقت الحالي، قد يكون من المفيد أن تعرف أن هناك دالة ذات رتبة أعلى تُسمى String.collect تحوّل مجموعة من char إلى سلسلة نصية، باستخدام دالة توفّرها أنت.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.