next এবং break যেন কীওয়ার্ড রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজের অংশ, তাই আপনি যদি রুবির সম্পূর্ণ বোঝাপড়া চান তবে আপনাকে জানতে হবে এগুলো কীভাবে কাজ করে।
এগুলো কী জন্য ব্যবহার হয়?
রুবিতে আমাদের সব ধরনের লুপ রয়েছে।
যেমন:
- while
- until
- each
একটি লুপ লিখার সময় আপনি একটি ইটারেশন স্কিপ করতে চাইতে পারেন, অথবা লুপটা আগে সমাপ্ত করতে চাইতে পারেন।
সেটাই হলো যেখানে next এবং break কীওয়ার্ডগুলো কাজে লাগে!
চলুন জানি কীভাবে ব্যবহার করবেন।
রুবি Next কীওয়ার্ড (Skip Iteration)
next কীওয়ার্ড আপনাকে একটি ইটারেশন স্কিপ করতে দেয়।
উদাহরণ:
মান লিন আপনি স্ট্রিং কাউন্ট করছেন।
এবং যেকোনো কারণহেতু আপনি সাইজ ৪ এর স্ট্রিংগুলো কাউন্ট করতে চান না।
আপনি এইভাবে করতে পারেন:
strings = ["one", "two", "four", "five"] strings.inject(0) do |sum, str| next if str.size == 4 sum + str.size end # nil
এই কোডটি কাজ করবে না।
আপনি nil পাবেন।
কেন?
কারণ next ডিফল্টভাবে nil রিটার্ন করে, ঠিক return কে রিটার্ন ভ্যালু ছাড়া কল করার মত।
আপনি যেন জানেন…
inject ব্যবহার করলে ব্লকে রিটার্ন হওয়া শেষ মান নেয় এবং সেটি পরবর্তী ইটারেশনের প্রথম আর্গুমেন্ট হয়ে যায়।
অন্য কথায়, sum হয়ে যায় nil।
সমাধান?
next লাইনটি এভাবে পরিবর্তন করুন:
next sum if str.size == 4
এটি next কে sum এর মান রিটার্ন করিয়ে দেয়।
যদি পারফরম্যান্স হাইয়েস্ট প্রায়োরিটি না হয় (প্রায়শই নয়), তবে আপনি অ্যারে প্রি-ফিল্টার করে next ব্যবহার না করার চেষ্টা করতে পারেন।
অথচ ভালো:
strings = ["one", "two", "four", "five"]
strings.inject(0) { |sum, str| str.size == 4 ? sum : sum + str.size } # 6
এটি একটি টার্নারি অপারেটর।
আমি মনে করি রুবি আপনাকে next ব্যবহার না করার জন্য যথেষ্ট টুল দিয়েছে।
সেগুলো ব্যবহার করুন!
রুবি Break কীওয়ার্ড (Exit Loop Early)
break কীওয়ার্ড next এর মত, কিন্তু এটি লুপকে শেষ করে এবং একটি মান রিটার্ন করে, শুধু একটি ইটারেশন স্কিপ করার বদলে।
এটি একটি লুপ থেকে আর্লি রিটার্নের জন্য ব্যবহার করা যেতে পারে।
কেন না
returnকীওয়ার্ড ব্যবহার করবেন? কারণ এটি করেন্ট মেথড থেকে এক্সিট করবে, শুধু লুপ থেকে নয়।
অথবা একটি আনকন্ডিশনাল লুপ শেষ করতে।
এভাবে:
count = 0 loop do break if count == 10 puts count count += 1 end
এটি ০ থেকে ৯ পর্যন্ত সংখ্যার একটি লিস্ট প্রিন্ট করে।
একটি ভালো অপশন হলো times মেথড, upto মেথড, বা রেঞ্জ প্লাস each মেথড ব্যবহার করা।
উদাহরণ:
0.upto(9).each(&method(:puts))
এই &method(:puts) শুধু puts কে প্রতিটি নম্বরের জন্য কল করার একটি শর্টকাট।
বিভ্রান্তি এড়ানো: Next রুবি মেথড হিসেবে
শুধু কোন কিছু কীওয়ার্ড হিসেবে আছে বলে সেটি মেথড নামে ব্যবহার করা যাবে না এমন নয়।
রুবিতে কিছু ক্লাস next কে একটি মেথড হিসেবে ইমপ্লিমেন্ট করে।
String এবং Integer এর মত।
উদাহরণ:
1.next # 2
ফলাফল অসাধারণ নয়, ঠিক না?
এটা কেমন:
"zz".next # "aaa"
এট একটু আরও আকর্ষণীয়!
এটি কীভাবে কাজ করে?
প্রতিটি ক্লাস তার নিজস্ব ভার্সনের next ইমপ্লিমেন্ট করে, যেটিতে নেক্সট ভ্যালুর লজিক থাকে।
Integers এর জন্য, এটি শুধু +1।
Strings এর জন্য, এটি লাস্ট ক্যারেক্টারকে এক বাড়ায় (অ্যালফাবেটে নেক্সট / নম্বরের জন্য +1), তারপর যদি কেরিওভার হয় (9 -> 0, z -> a), তবে বামপাশের নেক্সট ক্যারেক্টারকে বড়ায়।
সারসংক্ষেপ
আপনি রুবিতে next এবং break কীওয়ার্ড সম্পর্কে শিখেছেন, কীভাবে সেগুলো আপনাকে ইটারেশন স্কিপ করতে বা লুপ আগে শেষ করতে সাহায্য করে।
এখন আপনার পালা, আপনার রুবি স্কিল প্র্যাক্টিস করুন 🙂
পড়ার জন্য ধন্যবাদ!