حلقه For each
حلقه For each چیست؟
حلقه For each (یا For-each) گونهای از حلقه ها در زبان های برنامه نویسی است که برای پیمایش مجموعه ای از عناصر (نظیر عناصر موجود در یک آرایه) به کار میرود.
دستورات بدنه در حلقه های For each به جای اینکه به تعداد دفعات مشخصی اجرا شوند، به ازای هر عنصر موجود در مجموعه یک مرتبه تکرار میشوند. در این نوع حلقه ها، برخلاف حلقه های For از شمارنده خبری نیست بلکه در آنها از متغیری هم نوع با عناصر مجموعه کمک گرفته میشود که در هر تکرار از حلقه، نمایانگر عنصر جاری در آن مجموعه خواهد بود.
در قطعه کد زیر که به زبان جاوا نوشته شده است نحوه استفاده از این نوع حلقه ها برای پیمایش عناصر موجود در یک آرایه عددی نمایش داده شده است. متغیر number در هر تکرار از حلقه معادل با یکی از عناصر آرایه numbers میباشد و چنانکه مشاهده میکنید از همان نوع عناصر آرایه (یعنی int) تعریف شده است.

مزایا و محدودیت های حلقه For each
هر چند با در نظر گرفتن تعداد اعضای موجود در مجموعه و همین طور اندیس شروع عناصر میتوان عمل پیمایش مجموعه را با کمک یک حلقه For نیز انجام داد اما در مورد استفاده از حلقه های For each حداقل دو مزیت را میتوان در نظر گرفت. مزیت اول اینکه به کار بردن این حلقه ها از بروز خطاهای مربوط به تعیین کران ها (که ممکن است در حلقه های For رخ دهد) جلوگیری میکند (به خصوص در مورد خطاهای رایجی موسوم به Off-by-one Error که در آن به اشتباه کران های حلقه یک واحد کم یا زیاد تعیین میشود – این نوع خطاها معمولا در اثر عواملی نظیر عدم توجه به اندیس آغازین مجموعه ها در زبان مورد استفاده و همچنین استفاده نادرست از نماد ≤ به جای < یا بالعکس اتفاق میافتد). علاوه بر این، حلقه های For each در مقایسه با حلقه های معادل For به بهبود خوانایی کد نهایی کمک میکنند.
قطعه کد زیر، پیاده سازی مثال قبلی را با کمک حلقه For استاندارد نمایش میدهد. متغیر i (شمارنده) در هر تکرار از حلقه به اندیس کنونی عنصر مربوطه در آرایه numbers اشاره میکند و در هر تکرار یک واحد به آن افزوده میشود. بنابراین به هنگام چاپ نتیجه در خروجی، به جای مقدار متغیر i از مقدار numbers[i] استفاده شده است. همانطور که مشاهده میکنید قطعه کد بالا در مقایسه با نمونه زیر نه تنها خواناتر است بلکه احتمال خطای کدنویسی را نیز کاهش میدهد.

در کنار مزایایی که گفته شد لازم است تأکید کنیم حلقه های For each غالبا در مواردی مناسب هستند که قرار است تمام عناصر موجود در مجموعه مورد پیمایش قرار گیرند. به عبارت بهتر در این حلقه ها همواره طول گام همان عدد 1 رو به جلو خواهد بود. با این حال در این نوع حلقه ها هم میتوانید از دستورات ویژهای (نظیر دستور continue و break در جاوا) که برای ادامه حلقه از تکرار بعدی و خروج زودهنگام از حلقه تدارک دیده شده است استفاده کنید.
پیوندهای پیشنهادی تک دیک