Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

For-Each Loop

📖توضیحات درس

🎥 این ویدیو قسمت هشتاد و ششم از بوت‌کمپ رایگان جاواست. 📚 Java Modern Features – آشنایی با for-each Loop در جاوا در این جلسه می‌ریم سراغ for-each loop یا همون enhanced for که از Java 5 به جاوا اضافه شده 🔁 با اینکه for-each جزو فیچرهای خیلی مدرن محسوب نمی‌شه، اما به‌خاطر کاربرد زیادش، داخل پلی‌لیست Java Modern Features قرار گرفته تا راحت‌تر بتونی پیداش کنی 📌 در این ویدیو، هم مباحث تئوری و هم استفاده عملی از for-each رو کامل بررسی کردیم و تفاوتش رو با حلقه for معمولی دیدیم 👀 یاد می‌گیری کِی استفاده از for-each انتخاب خوبیه و کِی بهتره سراغ for کلاسیک بری. 🧠 در این جلسه یاد می‌گیریم: 🔹 for-each چیست و چرا به جاوا اضافه شد 🔹 مرور حلقه for معمولی برای مقایسه 🔄 نحوه استفاده از for-each در آرایه‌ها و کالکشن‌ها ✅ مزایای for-each مثل خوانایی و سادگی کد ⚠️ معایب و محدودیت‌های for-each 🔁 جمع‌بندی نهایی و مرور نکات مهم 💡 بعد از دیدن این ویدیو، می‌تونی آگاهانه تصمیم بگیری که در پروژه‌ها و حتی مصاحبه‌های فنی، از کدوم نوع حلقه استفاده کنی. 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، داخل گروه بپرس؛ خودم یا مربی‌های گروه راهنماییت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا 📘 آموزش جاوا به‌صورت پروژه‌محور برای یادگیری عمیق و ورود به بازار کار
00:14:45🎯رایگان

📄جزوه

مفاهیم کلیدی

  • For-each Loop (Enhanced For Loop) یک ساختار کنترلی در جاوا (معرفی شده در Java 5) که راه ساده‌تری برای پیمایش (Iterate) عناصر آرایه‌ها و کالکشن‌ها (مانند List و Set) فراهم می‌کند.

  • Traverse به معنای پیمایش یا عبور از تک‌تک عناصر یک ساختار داده (مانند آرایه) از ابتدا تا انتها است.

  • Collection چارچوبی در جاوا که مجموعه‌ای از اشیاء را در خود ذخیره می‌کند؛ مانند List و Set که حلقه for-each به خوبی با آن‌ها کار می‌کند.

  • Infinite Loop حلقه‌ای که شرط پایان آن هیچ‌گاه برقرار نمی‌شود و برنامه در آن گیر می‌کند؛ یکی از خطرات استفاده نادرست از حلقه for معمولی.

  • Index شماره جایگاه هر عنصر در آرایه که در حلقه for-each مستقیماً با آن سر و کار نداریم، اما در حلقه‌های قدیمی برای دسترسی به عناصر الزامی است.

موارد مصاحبه ای

  • تفاوت اصلی حلقه for معمولی و for-each در چیست؟ حلقه for معمولی دارای سه بخش (Initial value، Condition، Step) است و با ایندکس کار می‌کند، اما 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) حذف می‌شود.

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