برچسب اسم

برچسب اسم

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

مقدمه

nil

nil واژه‌ای انگلیسی به معنای «هیچ» یا «صفر» است. در Elixir، nil یک مقدار ویژه است که به معنای نبودِ یک مقدار است.

# I do not have a favorite color
favorite_color = nil

در زبان‌های برنامه‌نویسی دیگر، ممکن است مقادیر null یا none نقش مشابهی داشته باشند.

if

علاوه بر cond، Elixir ماکروی if/2 را هم فراهم می‌کند که وقتی لازم است فقط یک شرط را بررسی کنید، به کار می‌آید.

if/2 یک شرط و دو گزینه می‌پذیرد. اگر شرط درست‌نما باشد گزینه‌ی اول را برمی‌گرداند و اگر شرط غلط‌نما باشد گزینه‌ی دوم را.

age = 15

if age >= 16 do
  "You are allowed to drink beer in Germany."
else
  "No beer for you!"
end

# => "No beer for you!"

می‌توان یک عبارت if را در یک خط هم نوشت. به ویرگولِ بعد از شرط دقت کنید.

if age > 16, do: "beer", else: "no beer"

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

درست‌نما و غلط‌نما

در Elixir، همه‌ی انواع داده وقتی در یک بافت «منطقی» (مانند یک عبارت if) قرار می‌گیرند، به یک مقدار درست‌نما یا غلط‌نما ارزیابی می‌شوند. همه‌ی داده‌ها درست‌نما به حساب می‌آیند به‌جز false و nil. به‌ویژه، رشته‌های خالی، عدد صحیح 0 و لیست‌های خالی همگی در Elixir درست‌نما به حساب می‌آیند.

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

در این تمرین کدی می‌نویسید که برای کارمندان کارخانه نشان اسم چاپ می‌کند. هر کارمند یک شناسه، یک اسم و یک اسم دپارتمان دارد. برچسب نشان کارمندان به این شکل قالب‌بندی می‌شود: "[id] - name - DEPARTMENT".

1. چاپ نشان برای یک کارمند

تابع NameBadge.print/3 را پیاده‌سازی کنید. این تابع باید یک id، یک name و یک department بگیرد و برچسب نشان را با اسم دپارتمان به‌صورت حروف بزرگ برگرداند.

NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"

2. چاپ نشان برای یک کارمند جدید

به دلیل یک ایراد عجیب در سیستم رایانه‌ای، گاهی کارمندان جدید هنگام شروع کار در کارخانه هنوز شناسه ندارند. چون همراه داشتن نشان الزامی است، یک نشان موقت بدون پیشوند شناسه دریافت می‌کنند.

تابع NameBadge.print/3 را گسترش دهید. وقتی id وجود ندارد، باید نشانی بدون آن چاپ کند.

NameBadge.print(nil, "Robert Johnson", "Procurement")
# => "Robert Johnson - PROCUREMENT"

3. چاپ نشان برای صاحب کارخانه

حتی صاحب کارخانه هم باید همیشه یک نشان همراه داشته باشد. اما صاحب کارخانه دپارتمان ندارد. در این حالت، برچسب باید به‌جای اسم دپارتمان "OWNER" را چاپ کند.

تابع NameBadge.print/3 را گسترش دهید. وقتی department وجود ندارد، فرض کنید که نشان به صاحب کارخانه تعلق دارد.

NameBadge.print(204, "Rachel Miller", nil)
# => "[204] - Rachel Miller - OWNER"

توجه کنید که ممکن است صاحب کارخانه هم کارمند جدیدی باشد.

NameBadge.print(nil, "Rachel Miller", nil)
# => "Rachel Miller - OWNER"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elixir Exercism

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

در Exercism ثبت‌نام کنید تا Elixir را همراه با 58 مفهوم168 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.