مسیرها
/
Go
Go
/
تمرین‌ها
/
پرنده‌نگر
پرنده‌نگر

پرنده‌نگر

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

مقدمه

نحوه‌ی نگارش کلی

«حلقه‌ی For» یکی از رایج‌ترین دستورها برای اجرای مکرر یک منطق است. در Go از کلیدواژه‌ی for، یک هدر و یک «بلوک کد» تشکیل شده است که بدنه‌ی حلقه را در بر می‌گیرد و داخل آکولاد قرار می‌دهد. هدر از ۳ مؤلفه تشکیل شده است که با نقطه‌ویرگول ; از هم جدا می‌شوند: مقداردهی اولیه، شرط و پسین.

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • مؤلفه‌ی مقداردهی اولیه کدی است که فقط یک بار پیش از شروع حلقه اجرا می‌شود.
  • مؤلفه‌ی شرط باید عبارتی باشد که به یک «مقدار منطقی» ارزیابی می‌شود و کنترل می‌کند که حلقه چه زمانی باید متوقف شود. کد داخل حلقه تا زمانی که این شرط به «درست» ارزیابی شود اجرا می‌شود. به محض اینکه این عبارت به «غلط» ارزیابی شود، دیگر هیچ تکرار دیگری از حلقه اجرا نمی‌شود.
  • مؤلفه‌ی پسین کدی است که در پایان هر تکرار اجرا می‌شود.

توجه: برخلاف زبان‌های دیگر، هیچ پرانتزی () دور سه مؤلفه‌ی هدر وجود ندارد. در واقع، قرار دادن چنین پرانتزی یک خطای کامپایل است. با این حال، آکولادهای { } که بدنه‌ی حلقه را در بر می‌گیرند همیشه لازم هستند.

حلقه‌ی For: یک مثال

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

for i := 1; i < 10; i++ {
  fmt.Println(i)
}

این حلقه اعداد 1 تا 9 (شامل 9) را چاپ می‌کند. تعریف گام معمولاً با یک دستور افزایش یا کاهش انجام می‌شود، همان‌طور که در مثال بالا نشان داده شده است.

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

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

1. تعیین تعداد کل پرنده‌هایی که تا اینجا شمرده‌اید

بیایید تحلیل داده‌ها را با یک نگاه کلی شروع کنیم. ببینید از زمانی که ثبت‌هایتان را شروع کرده‌اید، در مجموع چند پرنده شمرده‌اید.

تابعی به اسم TotalBirdCount پیاده‌سازی کنید که یک «اسلایس» از intها می‌گیرد؛ این اسلایس شمار پرنده‌های هر روز را در خود دارد. تابع باید تعداد کل پرنده‌هایی را که شمرده‌اید برگرداند.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34

2. محاسبه‌ی تعداد پرنده‌های بازدیدکننده در یک هفته‌ی مشخص

حالا که درک کلی‌ای از شمار پرنده‌هایتان پیدا کرده‌اید، می‌خواهید تحلیلی دقیق‌تر انجام دهید.

تابعی به اسم BirdsInWeek پیاده‌سازی کنید که یک اسلایس از شمار پرنده‌های هر روز و شماره‌ی یک هفته را می‌گیرد.

این تابع تعداد کل پرنده‌هایی را که در آن هفته‌ی مشخص شمرده‌اید برمی‌گرداند. می‌توانید فرض کنید هفته‌ها همیشه به‌طور کامل ثبت می‌شوند.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12

3. اصلاح یک اشتباه در شمارش

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

فهمیدید که این پرنده همیشه یک روز در میان در باغ شما به سر می‌برد.

دقیقاً نمی‌دانید در فاصله‌ی آن روزها کجا بود، اما مطمئناً در باغ شما نبود.

شهود پرنده‌نگری‌تان هم به شما می‌گوید که این پرنده در اولین روزی که در فهرست‌تان ثبت کرده‌اید، در باغ شما بوده است.

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

birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

آماده‌اید پرنده‌نگر را شروع کنید؟

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