«حلقهی For» یکی از رایجترین دستورها برای اجرای مکرر یک منطق است. در Go از کلیدواژهی for، یک هدر و یک «بلوک کد» تشکیل شده است که بدنهی حلقه را در بر میگیرد و داخل آکولاد قرار میدهد.
هدر از ۳ مؤلفه تشکیل شده است که با نقطهویرگول ; از هم جدا میشوند: مقداردهی اولیه، شرط و پسین.
for init; condition; post {
// loop body - code that is executed repeatedly as long as the condition is true
}
توجه: برخلاف زبانهای دیگر، هیچ پرانتزی () دور سه مؤلفهی هدر وجود ندارد.
در واقع، قرار دادن چنین پرانتزی یک خطای کامپایل است.
با این حال، آکولادهای { } که بدنهی حلقه را در بر میگیرند همیشه لازم هستند.
مؤلفهی مقداردهی اولیه معمولاً یک متغیر شمارنده را آماده میکند. شرط بررسی میکند که حلقه باید ادامه یابد یا متوقف شود. مؤلفهی پسین هم معمولاً شمارنده را در پایان هر تکرار افزایش میدهد.
for i := 1; i < 10; i++ {
fmt.Println(i)
}
این حلقه اعداد 1 تا 9 (شامل 9) را چاپ میکند.
تعریف گام معمولاً با یک دستور افزایش یا کاهش انجام میشود، همانطور که در مثال بالا نشان داده شده است.
شما پرندهنگر پرشوری هستید که پیگیری میکنید چند پرنده به باغتان آمدهاند. معمولاً پرندهها را با علامتگذاری در دفترچهای میشمارید، اما برای اینکه کار کردن با دادههایتان بهتر شود، شمار پرندههای هفتههای گذشته را دیجیتالی کردهاید.
بیایید تحلیل دادهها را با یک نگاه کلی شروع کنیم. ببینید از زمانی که ثبتهایتان را شروع کردهاید، در مجموع چند پرنده شمردهاید.
تابعی به اسم TotalBirdCount پیادهسازی کنید که یک «اسلایس» از intها میگیرد؛ این اسلایس شمار پرندههای هر روز را در خود دارد.
تابع باید تعداد کل پرندههایی را که شمردهاید برگرداند.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34
حالا که درک کلیای از شمار پرندههایتان پیدا کردهاید، میخواهید تحلیلی دقیقتر انجام دهید.
تابعی به اسم BirdsInWeek پیادهسازی کنید که یک اسلایس از شمار پرندههای هر روز و شمارهی یک هفته را میگیرد.
این تابع تعداد کل پرندههایی را که در آن هفتهی مشخص شمردهاید برمیگرداند. میتوانید فرض کنید هفتهها همیشه بهطور کامل ثبت میشوند.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12
متوجه شدید که در تمام مدتی که میخواستید پرندهها را پیگیری کنید، پرندهای وجود داشت که در گوشهای دورافتاده از باغ پنهان شده بود.
فهمیدید که این پرنده همیشه یک روز در میان در باغ شما به سر میبرد.
دقیقاً نمیدانید در فاصلهی آن روزها کجا بود، اما مطمئناً در باغ شما نبود.
شهود پرندهنگریتان هم به شما میگوید که این پرنده در اولین روزی که در فهرستتان ثبت کردهاید، در باغ شما بوده است.
با توجه به این اطلاعات تازه، تابعی به اسم FixBirdCountLog بنویسید که یک اسلایس از پرندههای شمردهشده در هر روز را به عنوان آرگومان میگیرد و پس از اصلاح اشتباه شمارش، همان اسلایس را برمیگرداند.
birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]