مسیرها
/
Crystal
Crystal
/
تمرین‌ها
/
عشق دبیرستانی
عشق دبیرستانی

عشق دبیرستانی

تمرین یادگیری

مقدمه

String چندین «متد» دارد که با آنها می‌توان رشته‌ها را دستکاری کرد. این متدها روی خود رشته فراخوانی می‌شوند و اغلب به‌صورت زنجیره‌ای پشت سر هم قرار می‌گیرند تا چند عملیات روی یک رشته انجام دهند.

در ادامه فهرستی از رایج‌ترین متدها آمده است. برای دیدن فهرست کامل متدها، مستندات API مربوط به String را ببینید.

String#upcase & String#downcase

متد upcase یک رشته‌ی جدید برمی‌گرداند که در آن همه‌ی «کاراکتر»ها به حروف بزرگ تبدیل شده‌اند.

"hello".upcase
# => "HELLO"

متد downcase یک رشته‌ی جدید برمی‌گرداند که همه‌ی کاراکترهایش به حروف کوچک تبدیل شده‌اند.

"HELLO".downcase
# => "hello"

String#sub & String#gsub

Crystal متدهایی برای جایگزین کردن بخش‌هایی از یک رشته دارد. به اینها sub («جانشانی») و gsub (جانشانی سراسری) می‌گویند.

این متدها می‌توانند یک رشته، کاراکتر یا «عبارت باقاعده» را به‌عنوان آرگومان اول و یک رشته یا کاراکتر را به‌عنوان آرگومان دوم بگیرند. آرگومان اول بخشی از رشته است که جایگزین می‌شود و آرگومان دوم جایگزین‌کننده است. Char و عبارت باقاعده در مفاهیم بعدی توضیح داده می‌شوند.

متد sub اولین رخداد آرگومان اول را با آرگومان دوم جایگزین می‌کند.

"hello".sub("l", "r")
# => "herlo"

متد gsub مثل sub کار می‌کند، با این تفاوت که همه‌ی رخدادهای آرگومان اول را با آرگومان دوم جایگزین می‌کند.

"hello".gsub("l", "r")
# => "herro"

String#chomp & String#strip

از chomp و strip می‌توان برای حذف کاراکترهای ناخواسته از یک رشته استفاده کرد.

متد chomp به‌طور پیش‌فرض آخرین کاراکترهای \r، \n یا \r\n را از یک رشته حذف می‌کند. اگر این متد با یک آرگومان فراخوانی شود، مقدار داده‌شده را از انتهای رشته حذف می‌کند، البته اگر آن مقدار واقعاً در انتهای رشته وجود داشته باشد.

"hello\n".chomp
# => "hello"

"hello".chomp("llo")
# => "he"

متد strip به‌طور پیش‌فرض همه‌ی فضای سفید را از ابتدا و انتهای یک رشته حذف می‌کند. اگر این متد با یک آرگومان فراخوانی شود، آن آرگومان را از ابتدا و انتهای رشته حذف می‌کند، البته اگر آن آرگومان واقعاً در ابتدا یا انتهای رشته وجود داشته باشد.

" hello ".strip
# => "hello"

String#index

از متد index می‌توان برای یافتن «اندیس» یک کاراکتر در یک رشته استفاده کرد. متد index یک String، Char یا عبارت باقاعده را به‌عنوان آرگومان می‌گیرد. می‌تواند یک آرگومان دوم اختیاری هم بگیرد تا اندیسی که جست‌وجو از آن شروع می‌شود را مشخص کند. متد index اندیس اولین رخداد آرگومان را برمی‌گرداند.

"hello".index("l")
# => 2

"hello".index("l", 3)
# => 3

String#delete_at

می‌توانید از متد delete_at برای حذف یک کاراکتر از یک رشته استفاده کنید. متد delete_at یک اندیس را به‌عنوان آرگومان می‌گیرد و کاراکتر موجود در آن اندیس را حذف می‌کند.

"hello".delete_at(0)
# => "ello"

"hello".delete_at(3)
# => "helo"

String#insert

از متد insert می‌توان برای درج یک رشته در اندیسی مشخص استفاده کرد. متد insert یک اندیس را به‌عنوان آرگومان اول و یک رشته را به‌عنوان آرگومان دوم می‌گیرد. متد insert یک رشته‌ی جدید برمی‌گرداند که آرگومان دوم در آن اندیس درج شده است.

"hello".insert(0, "h")
# => "hhello"

"hello".insert(3, "l")
# => "helllo"

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

در این تمرین قرار است به دلدادگان دبیرستانی کمک کنید تا عشقشان را در شبکه‌های اجتماعی ابراز کنند و با حرف اول اسمشان یک قلب ASCII بسازند:

❤ J.  +  M. ❤

1. پاک‌سازی اسم

متد HighSchoolSweetheart.clean_up_name را پیاده‌سازی کنید. این متد باید یک اسم بگیرد و همه‌ی کاراکترهای - را از آن حذف کند و با یک فاصله جایگزین کند. همچنین باید فضای خالی ابتدا و انتهای اسم را هم حذف کند.

HighSchoolSweetheart.clean_up_name("Jane-Ann")
# => "Jane Ann"

2. گرفتن حرف اول اسم

متد HighSchoolSweetheart.first_letter را پیاده‌سازی کنید. این متد باید یک اسم بگیرد و حرف اول آن را برگرداند. حتماً از HighSchoolSweetheart.clean_up_name که در مرحله‌ی قبلی تعریف کردید دوباره استفاده کنید.

HighSchoolSweetheart.first_letter("Jane")
# => "J"

3. قالب‌بندی حرف اول به شکل سرواژه

متد HighSchoolSweetheart.initial را پیاده‌سازی کنید. این متد باید یک اسم بگیرد و حرف اول آن را بزرگ و همراه با یک نقطه در ادامه‌اش برگرداند. حتماً از HighSchoolSweetheart.first_letter که در مرحله‌ی قبلی تعریف کردید دوباره استفاده کنید.

HighSchoolSweetheart.initial("Robert")
# => "R."

4. قرار دادن سرواژه‌ها داخل قلب

متد HighSchoolSweetheart.pair را پیاده‌سازی کنید. این متد باید دو اسم بگیرد و سرواژه‌ها را همراه با قلب‌های ایموجی در اطرافش برگرداند. حتماً از HighSchoolSweetheart.initial که در مرحله‌ی قبلی تعریف کردید دوباره استفاده کنید.

HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis")
# => "❤ B.  +  R. ❤"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Crystal Exercism

آماده‌اید عشق دبیرستانی را شروع کنید؟

در Exercism ثبت‌نام کنید تا Crystal را همراه با 26 مفهوم142 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.