المسارات
/
Elixir
Elixir
/
التمارين
/
مدير النظام الألماني
مدير النظام الألماني

مدير النظام الألماني

تمرين تعلّمي

مقدمة

مصفوفات الأحرف

تُنشأ مصفوفات الأحرف باستخدام Sigil ‏~c.

~c"hello"
Note

لاحظ أن مصفوفات الأحرف في الإصدارات الأقدم من 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.

إن مطالبة الناس بالتخلي عن عميل البريد الإلكتروني القديم المفضّل لديهم معركة خاسرة، لذا تقرّر إنشاء أسماء مستعارة منقّاة لجميع حسابات البريد الإلكتروني.

1. نقّح أسماء المستخدمين الموجودة بإزالة كل ما عدا الأحرف الصغيرة

نفّذ دالة sanitize/1. يجب أن تقبل اسم المستخدم في صورة قائمة أحرف، وتُرجع اسم المستخدم بعد إزالة كل الأحرف عدا الأحرف الصغيرة.

Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"

2. اسمح بالشرطات السفلية

وسّع دالة sanitize/1. يجب ألا تحذف الشرطات السفلية من اسم المستخدم.

Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"

3. استبدل الأحرف الألمانية

توجد 4 أحرف غير موجودة في ASCII في الأبجدية الألمانية، ولكل منها بديل معروف في ASCII.

الحرف الألماني البديل في ASCII
ä ae
ö oe
ü ue
ß ss

وسّع دالة sanitize/1. يجب أن تستبدل الأحرف الألمانية وفقًا للجدول. ويمكنك أن تفترض بأمان أن جميع أسماء المستخدمين مكتوبة بالفعل بأحرف صغيرة.

Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء مدير النظام الألماني؟

سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.