مسیرها
/
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 یک فرهنگ پیش‌فرض دارد: Thread.CurrentThread.CurrentCulture که در نمونه‌ای از CultureInfo جای گرفته است. فرهنگ thread تعیین می‌کند که تاریخ‌ها و اعداد با توجه به تفاوت‌های منطقه‌ای چگونه قالب‌بندی شوند؛ مثلاً تفاوت قالب رایج تاریخ میان بریتانیا (DD/MM/YYYY) و ایالات متحده (MM/DD/YYYY).

CultureInfo رابط IFormatProvider را پیاده‌سازی می‌کند که می‌توان آن را به برخی از سربارگذاری‌های String.Format() فرستاد. از این کار می‌توان برای بازنویسی فرهنگ thread استفاده کرد.

رشته‌های واژه‌به‌واژه

رشته‌های واژه‌به‌واژه امکان نوشتن رشته‌های چندخطی را فراهم می‌کنند. این رشته‌ها با @ معرفی می‌شوند.

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

دستورالعمل‌ها

در این تمرین، به دلداده‌های دبیرستانی کمک می‌کنید تا عشق‌شان را در شبکه‌های اجتماعی اعلام کنند.

1. نمایش اسم زوج که با یک قلب از هم جدا شده‌اند

لطفاً متد ایستای HighSchoolSweethearts.DisplaySingleLine() را پیاده‌سازی کنید تا دو اسم بگیرد و آن‌ها را با یک قلب از هم جدا کرده نمایش دهد. متن قالب‌بندی‌شده باید ۶۱ نویسه پهنا داشته باشد و قلب در مرکز رشته قرار بگیرد.

تضمین می‌شود که همه‌ی اسم‌ها به‌راحتی در پهنای خط جا می‌شوند.

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

2. نمایش حروف اول اسم زوج در قلب اسکی‌آرت

متد ایستای 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.