For-Each Loop
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- For-each Loop Enhanced For Loop
یک ساختار کنترلی در جاوا است که در Java 5 معرفی شد و راه سادهتری برای پیمایش یا Iterate عناصر آرایهها و کالکشنهایی مانند List و Set فراهم میکند.
- Traverse
به معنای پیمایش یا عبور از تکتک عناصر یک ساختار داده، مانند آرایه، از ابتدا تا انتها است.
- Collection
چارچوبی در جاوا است که مجموعهای از اشیا را در خود ذخیره میکند. ساختارهایی مانند List و Set از جمله کالکشنهایی هستند که حلقه for-each بهخوبی با آنها کار میکند.
- Infinite Loop
حلقهای است که شرط پایان آن هیچگاه برقرار نمیشود و برنامه در آن گیر میکند. این مورد یکی از خطرات استفاده نادرست از حلقه for معمولی است.
- Index
شماره جایگاه هر عنصر در آرایه است. در حلقه for-each مستقیماً با Index سروکار نداریم، اما در حلقههای قدیمی برای دسترسی به عناصر، استفاده از آن الزامی است.
موارد مصاحبه ای
- تفاوت اصلی حلقه
forمعمولی وfor-eachدر چیست؟
حلقه for معمولی دارای سه بخش Initial Value، Condition و Step است و با ایندکس کار میکند. اما for-each مستقیماً به مقدار خود عنصر دسترسی دارد و سینتکس سادهتری ارائه میدهد.
- مزایای استفاده از
for-eachنسبت به حلقههای قدیمی چیست؟
استفاده از for-each باعث کوتاهتر و خواناتر شدن کد یا Concise Code میشود. همچنین احتمال بروز خطای ArrayIndexOutOfBoundsException را حذف میکند و از ایجاد حلقههای بینهایت یا Infinite Loops جلوگیری میکند.
- چه زمانی نباید از حلقه
for-eachاستفاده کرد؟
زمانی که به ایندکس عناصر نیاز داریم، زمانی که میخواهیم عناصر را یکیدرمیان یا با گامهای خاص پیمایش کنیم، یا زمانی که قصد داریم آرایه را از انتها به ابتدا پیمایش کنیم.
- آیا حلقه
for-eachاز نظر پرفورمنس با حلقه معمولی برابر است؟
حلقه for-each مقدار بسیار کمی بار اضافی یا Overhead دارد. این تفاوت در آرایهها یا کالکشنهای بسیار بزرگ و حساس به زمان، ممکن است اثر ناچیزی روی کارایی ایجاد کند.
- آیا در حلقه
for-eachامکان تغییر ساختار کالکشن وجود دارد؟
خیر. هنگام پیمایش با for-each نمیتوان بهراحتی عناصر را حذف یا ساختار کالکشن را تغییر داد. اگر به ایندکس یا کنترل مستقیم روی عناصر نیاز باشد، بهتر است از حلقه معمولی استفاده شود.
سناریو کاربردی
در این آموزش، یک آرایه از اعداد صحیح با نام int[] numbers تعریف شده است.
برای چاپ کردن این اعداد، ابتدا از حلقه for قدیمی استفاده شد که نیاز به تعریف متغیر i و کنترل طول آرایه داشت.
سپس همین عملیات با for-each انجام شد. ساختار این حلقه بهصورت زیر است:
for (int n : numbers)
در اینجا جاوا بهصورت خودکار در هر مرحله، یکی از اعضای آرایه را برمیدارد و در متغیر n قرار میدهد. سپس میتوان عملیاتی مانند چاپ کردن یا محاسباتی مثل n + 2 را روی آن انجام داد؛ بدون اینکه نیازی به مدیریت ایندکس یا تعداد تکرارها باشد.
بیشتر بدانید
- IDE Tip
در محیط IntelliJ IDEA، اگر یک حلقه for معمولی بنویسید، خود IDE با یک هشدار یا Warning پیشنهاد میدهد که آن را بهصورت خودکار به Enhanced For Loop تبدیل کنید.
- Code Cleanliness
استفاده از for-each باعث میشود کد تمیزتر شود و نگهداری یا Maintenance آن سادهتر باشد؛ زیرا پیچیدگیهای مربوط به مدیریت شمارنده یا Counter حذف میشود.
- ساختار سینتکس
برای نوشتن راحتتر این حلقه، ابتدا نام آرایه یا کالکشن را بعد از علامت دو نقطه : بنویسید. سپس در سمت چپ، نوع دادهای که از آن خارج میشود را مشخص کنید.
