المسارات
/
C#
C#
/
التمارين
/
حبيبا المدرسة الثانوية
حبيبا المدرسة الثانوية

حبيبا المدرسة الثانوية

تمرين تعلّمي

مقدمة

تنسيق السلاسل النصية

توجد آليتان رئيسيتان لتنسيق السلاسل النصية في C#/.NET: استخدام String.Format() وإقحام السلاسل النصية.

التنسيق المركّب

تأخذ String.Format() سلسلة نصية (يُشار إليها في التوثيق باسم التنسيق المركّب) تتكوّن من نص ثابت وعناصر نائبة (تُعرف في التوثيق بعناصر التنسيق)، ومن عدد متغيّر من الوسائط. وتُحلّ القيمة المُرجَعة كلَّ عنصر تنسيق باستخدام الوسيط المقابل، ثم تدمج القيم المُحلّة مع النص الثابت.

string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

تُعرف هذه الآلية تقنيًا باسم التنسيق المركّب.

إقحام السلاسل النصية

تبدأ السلاسل النصية المُقحَمة بالرمز $ وتتضمّن تعبيرات تُقيَّم وقت التشغيل محصورةً بين أقواس معقوفة. وصيغة عنصر التنسيق هي: $"{<interpolationExpression>}". وهي تغني عن الحاجة إلى قائمة وسائط منفصلة. وتُكافئ نتيجتها من الناحية الوظيفية آلية String.Format().

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

عناصر التنسيق

النص الواقع بين الأقواس، سواء أكان عنصرًا نائبًا في حالة التنسيق المركّب أم تعبيرًا مُقحَمًا في حالة إقحام السلاسل النصية، يُعرف باسم عنصر التنسيق.

يمكن أن يتكوّن عنصر التنسيق من ثلاثة أجزاء على الأكثر. الجزء الأول هو التعبير الإلزامي أو العنصر النائب للوسيط كما في مثال الكود أعلاه. وإضافة إلى ذلك، هناك محاذاة اختيارية (تُقدَّم بفاصلة ",") و_سلسلة تنسيق نصية_ اختيارية (تُقدَّم بنقطتين ":").

{<interpolationExpression>[,<alignment>][:<formatString>]}

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

تحدّد سلسلة التنسيق النصية شكل النص الناتج، مثل ما إذا كان ينبغي تضمين فواصل الآلاف في عدد، أو ما إذا كان ينبغي إخراج جزء التاريخ فقط من كائن DateTime.

يوضّح الكود التالي عرض جزء البيانات من كائن DateTime وعدد عشري بالصيغة الأُسّية.

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

string.Format(
    "I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
    loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

يوجد تنسيق قياسي وتنسيق مخصّص لكلٍّ من الأعداد والتواريخ. ولا يوجد فرق جوهري بين التنسيق المخصّص و_القياسي_ سوى أنك تستطيع تركيب سلاسل تنسيق نصية مخصّصة من حروف التنسيق.

الثقافة

لكل خيط ثقافة افتراضية Thread.CurrentThread.CurrentCulture مغلَّفة في نسخة من CultureInfo. وتحدّد ثقافة الخيط كيفية تنسيق التواريخ والأعداد وفق الاختلافات الإقليمية، مثل الفرق في صيغة التاريخ المعتادة بين المملكة المتحدة DD/MM/YYYY والولايات المتحدة MM/DD/YYYY.

تُطبّق CultureInfo الواجهة IFormatProvider التي يمكن تمريرها إلى بعض التحميلات الزائدة لـ String.Format(). ويمكن استخدام ذلك لتجاوز ثقافة الخيط.

السلاسل النصية الحرفية

تسمح السلاسل النصية الحرفية بكتابة سلاسل تمتد على عدة أسطر. وتُقدَّم بعلامة @.

string str = @"
See no wretched
quotes everywhere
";

التعليمات

في هذا التمرين، ستساعد حبيبين من المدرسة الثانوية على التعبير عن حبهما على وسائل التواصل الاجتماعي.

1. اعرض اسمي الثنائي مفصولين بقلب

يرجى تنفيذ طريقة HighSchoolSweethearts.DisplaySingleLine() الثابتة لتستقبل اسمين وتعرضهما مفصولين بقلب. يجب أن يكون النص المنسّق بعرض 61 محرفًا، مع وجود القلب في منتصف السلسلة النصية.

جميع الأسماء مضمونة لتتسع بسهولة ضمن عرض السطر.

HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => "                  Lance Green ♡ Pat Riley                    "

2. اعرض الأحرف الأولى للثنائي داخل قلب من فن الرسم النصي (ASCII)

نفّذ طريقة HighSchoolSweethearts.DisplayBanner() الثابتة، والتي تعرض مجموعتي الأحرف الأولى مفصولتين بعلامة زائد.

HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
     ******       ******
   **      **   **      **
 **         ** **         **
**            *            **
**                         **
**     L. G.  +  P. R.     **
 **                       **
   **                   **
     **               **
       **           **
         **       **
           **   **
             ***
              *

3. يجب أن نجعل طلاب التبادل الألمان يشعرون بأنهم في وطنهم باستخدام تصريحات تراعي الإعدادات المحلية.

نفّذ طريقة HighSchoolSweethearts.DisplayGermanExchangeStudents() الثابتة لعرض تاريخ بدء العلاقة والمدة الزمنية لطلاب التبادل الألمان لدينا.

HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء حبيبا المدرسة الثانوية؟

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