مسیرها
/
Go
Go
/
تمرین‌ها
/
ربات مهمانی
ربات مهمانی

ربات مهمانی

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

مقدمه

پکیج

در Go، یک برنامه در قالب پکیج‌ها سازمان‌دهی می‌شود. «پکیج» مجموعه‌ای از فایل‌های منبع است که در یک پوشه‌ی یکسان قرار دارند. همه‌ی فایل‌های منبع در یک پوشه باید در بالای فایل، نام پکیج یکسانی داشته باشند. طبق قرارداد، نام پکیج‌ها همان نام پوشه‌ای است که در آن قرار دارند.

package greeting

Go یک کتابخانه‌ی استاندارد گسترده از پکیج‌ها ارائه می‌دهد که می‌توانید با استفاده از کلیدواژه‌ی import در برنامه‌تان به کار ببرید. پکیج‌های کتابخانه‌ی استاندارد با نامشان وارد می‌شوند.

package greeting

import "fmt"

سپس به پکیج واردشده با نام پکیج ارجاع داده می‌شود:

world := "World"
fmt.Sprintf("Hello %s", world)

Go بر اساس نحوه‌ی اعلان یک مورد تعیین می‌کند که آیا کد موجود در پکیج‌های دیگر می‌تواند آن را فراخوانی کند یا نه. برای اینکه یک تابع، نوع، متغیر، ثابت یا فیلد struct از بیرون قابل مشاهده باشد (که به آن «صادرشده» می‌گویند)، نام باید با حرف بزرگ شروع شود.

package greeting

// Hello is a public function (callable from other packages).
func Hello(name string) string {
    return "Hello " + name
}

// hello is a private function (not callable from other packages).
func hello(name string) string {
    return "Hello " + name
}

قالب‌بندی رشته

Go پکیجی داخلی به نام fmt (پکیج قالب‌بندی) ارائه می‌دهد که توابع متنوعی برای دستکاری قالب ورودی و خروجی در اختیار می‌گذارد. پرکاربردترین تابع Sprintf است که با استفاده از فعل‌هایی مانند %s مقادیر را درون یک رشته جای‌گذاری می‌کند و همان رشته را برمی‌گرداند.

import "fmt"

food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco

در Go، مقادیر اعشاری به‌راحتی با فعل‌های Sprintf قالب‌بندی می‌شوند: %g (نمایش فشرده)، %e (نمایی) یا %f (غیرنمایی). هر سه فعل امکان کنترل عرض میدان و موقعیت عددی را فراهم می‌کنند.

import "fmt"

number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32

فهرست کامل فعل‌های موجود را می‌توانید در مستندات پکیج قالب‌بندی ببینید.

fmt توابع دیگری هم برای کار با رشته‌ها دارد، مانند Println که صرفاً آرگومان‌های دریافتی را در کنسول چاپ می‌کند و Printf که ورودی را پیش از چاپ، همانند Sprintf قالب‌بندی می‌کند.

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

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

1. به مهمان تازه‌ی مهمانی خوش‌آمد بگویید

تابع Welcome را طوری پیاده‌سازی کنید که با استفاده از اسم داده‌شده پیام خوش‌آمدگویی برگرداند:

Welcome("Christiane")
// => Welcome to my party, Christiane!

2. به مهمان تازه‌ای که امروز تولدش است خوش‌آمد بگویید

تابع HappyBirthday را طوری پیاده‌سازی کنید که با استفاده از اسم و سن داده‌شده‌ی شخص، پیام تولد برگرداند. متأسفانه برنامه‌نویس کمی خودنمایی می‌کند، بنابراین ربات باید دانش خود را درباره‌ی تولد هر مهمان به نمایش بگذارد.

HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!

3. نشان دادن مسیر

تابع AssignTable را برای نشان دادن مسیر پیاده‌سازی کنید. این تابع باید ۵ پارامتر بگیرد.

  • اسم مهمان تازه‌ای که باید به او خوش‌آمد گفت (string)
  • شماره‌ی میز (int)
  • اسم فردی که کنارش می‌نشینید (string)
  • جهتی که میز در آن قرار دارد (string)
  • فاصله تا میز (float64)

قالب دقیق نتیجه را در مثال زیر می‌بینید.

ربات شماره‌ی میز را در قالب ۳ رقمی ارائه می‌دهد. اگر عدد کمتر از ۳ رقم باشد، صفرهای اضافی به ابتدای آن اضافه می‌شود تا ۳ رقمی شود (مثلاً 3 به 003 تبدیل می‌شود). ربات فاصله‌ی میز را هم ذکر می‌کند. خوشبختانه فقط با دقتی که به ۱ رقم محدود است.

AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

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

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم165 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.