تُنشأ مصفوفات الأحرف باستخدام Sigil ~c.
~c"hello"
لاحظ أن مصفوفات الأحرف في الإصدارات الأقدم من Elixir كانت تُمثَّل بالشكل 'hello' باستخدام علامات الاقتباس المفردة.
رغم أنها تبدو شبيهة جدًا بالسلاسل النصية، فإن نوعي البيانات مختلفان تمامًا عن بعضهما. مصفوفة الأحرف هي مصفوفة من الأعداد الصحيحة. تُمثّل هذه الأعداد قيم Unicode لحرف معيّن، وتُعرف أيضًا بنقاط الترميز.
[65, 66, 67]
# => ~c"ABC"
يمكنك أن تسبق الحرف بـ ? للحصول على نقطة الترميز الخاصة به.
?A
# => 65
[?:, ?)]
# => ~c":)"
ولأن مصفوفات الأحرف هي مصفوفات، يمكنك التعامل معها كما تتعامل مع أي مصفوفة أخرى، باستخدام الاستدعاء الذاتي ومطابقة الأنماط.
[first_letter | _] = ~c"cat"
first_letter
# => 99
يمكنك دمج مصفوفتين باستخدام ++.
~c"hi" ++ ~c"!"
# => ~c"hi!"
كلما كانت المصفوفة الأولى أطول، صار الدمج أبطأ، لذا تجنّب الإلحاق المتكرر بمصفوفات ذات طول اعتباطي.
caseبنية 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. يجب أن تقبل اسم المستخدم في صورة قائمة أحرف، وتُرجع اسم المستخدم بعد إزالة كل الأحرف عدا الأحرف الصغيرة.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
وسّع دالة sanitize/1. يجب ألا تحذف الشرطات السفلية من اسم المستخدم.
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
توجد 4 أحرف غير موجودة في ASCII في الأبجدية الألمانية، ولكل منها بديل معروف في ASCII.
| الحرف الألماني | البديل في ASCII |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
وسّع دالة sanitize/1. يجب أن تستبدل الأحرف الألمانية وفقًا للجدول. ويمكنك أن تفترض بأمان أن جميع أسماء المستخدمين مكتوبة بالفعل بأحرف صغيرة.
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.