ورود

View Full Version : مبتدی: حالت for each برای حلقه for



قله بلند
جمعه 13 آذر 1388, 18:32 عصر
با سلام
مطلب زیر در مورد شکل for-each از حلقه for است. من اصلاً از آن سر در نمی آورم و دلیلی وجود چنین مزیتی را برای for درک نمی کنم:
for(type int-var:colection) statement-blockمثلاً nums به عنوان کلکسیون و مثلاً متغیری از نوع int به عنوان متغیری که از 1 تا 5 را پویش می کند تا به تک تک عناصر nums دسترسی پیدا کند.
int nums[]={1,2,3,4,5};
for(int x:nums)…ولی اصلاً چیزی از آن نفهمیدم.

persianshadow
جمعه 13 آذر 1388, 19:40 عصر
زبان برنامه‌نویسی مثل یک جعبه ابزار هست انواع پیچ‌گوشتی‌ها ،‌انبردست‌ها و وسایل دیگه داخلشه

شما می‌تونید همه کارها رو با یه پیچ‌گوشتی انجام بدی ولی چه بهتر که برای باز کردن پیچ‌ها در سایزهای

مختلف اول پیچ‌گوشتی‌های با سایز‌های مختلف داشته باشی و دوم از اون‌ها استفاده کنی.

جاوا این دو خاصیت رو اینجوری داره :

1 - ابزارهای مختلفی رو آماده کرده.

2- سعی می‌کنه با آموزش مناسب افراد رو ترغیب به استفاده از ابزار مختلف کنه.

خب این سبک از حلقه for هم به همین مناسبت هست وگرنه شما با یک حلقه for معمولی هم می‌تونید

به مقادیر یک آرایه دسترسی داشته باشید.کدهای زیر رو برای همین آرایه شما نوشتم :





int nums[]={1,2,3,4,5};
for(int i:nums){System.out.println(i);}







int nums[]={1,2,3,4,5};
for(int i=0; i< nums.length; i++) {

System.out.println(nums[i]);

}


خب به نظر شما کدوم بهتره ؟ نظر من اینه که کد اول کار کد دوم رو سریعتر و خواناتر انجام میده

ولی شما می‌تونید کد دوم رو هم بنویسید هیچ اجباری نیست.

قله بلند
جمعه 13 آذر 1388, 23:28 عصر
ForEach.java:6: ';' expected.
for(int i:nums)دقیقاً در کدی که نوشته ام، for(int i:nums) در خط 6 قرار دارد و یک فلش می رود زیر دو نقطه و خطای خط بالاتر را نشان می دهد. به همین خاطر من هم فکر کردم که شاید اصولاً این کد دارای اشکال است که منجر به پرسیدن سوال شد.
راستی من از jdk1.2 استفاده می کنم.

قله بلند
شنبه 14 آذر 1388, 10:40 صبح
سلام
من یک سرچی در اینترنت کردم. نسخه 1.3 از توسعه دهنده جاوا نیز از همین روش استفاده می کند ولی نسخه 1.2 را پیدا نکردم. شاید اصلاً در jdk1.2 چنین قابلیتی تعریف نشده است. متن خطا را هم سرچ کردم ولی چیزی پیدا نکردم. حالا نمی دانم جوابی برایش وجود دارد یا اصلاً این قضیه منتفی است.

cups_of_java
شنبه 14 آذر 1388, 11:23 صبح
دوست عزیز نمی دونم شما چطوری نسخه 1.2 رو پیدا کردی و داری استفاده می کنی. نسخه فعلی قابل استفاده 1.6 ( یا همون Java 6) هست. ضمنن حلقه های foreach از نسخه 1.5 در جاوا معرفی شدند. پس شما نمی تونید در نسخه های قدیمی تر از اون ازش استفاده کنید.

قله بلند
شنبه 14 آذر 1388, 14:46 عصر
با سلام
جناب cups_of_java ، ممنون از اینکه مشکلم رو حل کردید. من فقط می خوام پایه رو یاد بگیرم بعد برم سراغ نسخه های پیشرفته تر.

M.nikdehghan
دوشنبه 04 فروردین 1393, 20:59 عصر
سلام
کسی می تونه قسمت foreach در این کد برای من توضیح بده؟


()myShapesCollection.stream
(filter(e -> e.getColor() == Color.RED.
;((()forEach(e -> System.out.println(e.getName.

cups_of_java
سه شنبه 05 فروردین 1393, 11:56 صبح
سلام
کسی می تونه قسمت foreach در این کد برای من توضیح بده؟


()myShapesCollection.stream
(filter(e -> e.getColor() == Color.RED.
;((()forEach(e -> System.out.println(e.getName.


این کد داره از Lambda Expression ها که توی جاوا 8 به زبان اضافه شدن استفاده می کنه. مثل زبان های جاوا اسکریپت و ... حالا تو جاوا هم شما می تونید توابعی رو درجا تعریف کنید و پاس کنید به بقیه توابع.
یکی از ساده ترین و معروف ترین کاربرد این ها این هست که شما به جای نوشتن حلقه، یک تابع که قراره توی حلقه برای هر عنصر اجرا بشه رو می نویسی و پاس می کنی به یک متد دیگه (به نام forEach) مثلن و این تابع forEach هست که اون تابع شما رو برای تک تک عناصر لیست اجرا می کنه.
اینجا رو ببین (http://viralpatel.net/blogs/lambda-expressions-java-tutorial/)



//Old way:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
for(Integer n: list) {
System.out.println(n);
}

//New way:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
list.forEach(n -> System.out.println(n));


//or we can use :: double colon operator in Java 8
list.forEach(System.out::println);







در واقع این کد داره از stream API هم استفاده می کنه که توی جاوا 8 اضافه شده. شما یه لیست رو وقتی با تابع stream() به کلاس Stream تبدیل می کنی کلی توابع بدرد بخور برای فیلتر کردن و نگاشت کردن و ... ها دستت میاد که ازشون استفاده کنی.

این سبک برنامه نویسی بیشتر سبک تابعگرا یا Functional هست که توی جاوا هم اضافه شده و قدرت بسیار بالایی داره چون با حجم کد کمتری کارای بیشتری می تونی انجام بدی.

M.nikdehghan
پنج شنبه 07 فروردین 1393, 17:31 عصر
مرسی :لبخندساده: خیلی کامل بود.