লুপগুলি ভেঙে ফেলার জন্য আপনার কাছে তিনটি (বা তাই) বিকল্প রয়েছে।
ধরুন আপনি মোট সংখ্যা 1000 এর চেয়ে বেশি না হওয়া পর্যন্ত সংখ্যার যোগফল চান You আপনি চেষ্টা করুন
var sum = 0
for (i <- 0 to 1000) sum += i
আপনি (যোগফল> 1000) থামাতে চান ব্যতীত।
কি করো? বিভিন্ন বিকল্প আছে।
(1 ক) এমন কিছু কনস্ট্রাক্ট ব্যবহার করুন যাতে শর্তযুক্ত যেটি আপনি পরীক্ষা করে includes
var sum = 0
(0 to 1000).iterator.takeWhile(_ => sum < 1000).foreach(i => sum+=i)
(সতর্কতা - এটি কীভাবে পরীক্ষা নিরীক্ষণ এবং ভবিষ্যদ্বাণী মূল্যায়নের সময় আন্তঃবাহিত হয় তার বিশদগুলির উপর নির্ভর করে এবং সম্ভবত অনুশীলনে ব্যবহার করা উচিত নয়!)।
(1 খ) স্কালায় একটি নতুন পদ্ধতি লেখার পক্ষে কতটা সহজ, তার সুবিধা নিয়ে লুপের পরিবর্তে লেজের পুনরাবৃত্তি ব্যবহার করুন:
var sum = 0
def addTo(i: Int, max: Int) {
sum += i; if (sum < max) addTo(i+1,max)
}
addTo(0,1000)
(1 সি) কিছুক্ষণ লুপ ব্যবহার করে ফিরে যান
var sum = 0
var i = 0
while (i <= 1000 && sum <= 1000) { sum += 1; i += 1 }
(2) একটি ব্যতিক্রম নিক্ষেপ।
object AllDone extends Exception { }
var sum = 0
try {
for (i <- 0 to 1000) { sum += i; if (sum>=1000) throw AllDone }
} catch {
case AllDone =>
}
(২ এ) স্কেলে ২.৮++ তে এটি scala.util.control.Breaks
সিনট্যাক্স ব্যবহার করে ইতিমধ্যে প্রাক প্যাকেজড যা দেখতে অনেকটা সি / জাভা থেকে আপনার পরিচিত পুরানো বিরতির মতো দেখাচ্ছে:
import scala.util.control.Breaks._
var sum = 0
breakable { for (i <- 0 to 1000) {
sum += i
if (sum >= 1000) break
} }
(3) কোডটি একটি পদ্ধতিতে রাখুন এবং রিটার্ন ব্যবহার করুন।
var sum = 0
def findSum { for (i <- 0 to 1000) { sum += i; if (sum>=1000) return } }
findSum
আমি ভাবতে পারি এমন কমপক্ষে তিনটি কারণে এটি ইচ্ছাকৃতভাবে খুব সহজ নয়। প্রথমত, বৃহত কোড ব্লকে, "চালিয়ে যাওয়া" এবং "ব্রেক" বিবৃতিগুলিকে উপেক্ষা করা সহজ মনে হয় বা আপনি সত্যের চেয়ে কম বা বেশি ভেঙে ফেলেছেন বা এমন দুটি লুপ ভাঙতে হবে যা আপনি করতে পারবেন না সহজেই যাই হোক না কেন - সুতরাং কার্যকর ব্যবহারের সুবিধার্থে এর সমস্যা রয়েছে এবং সুতরাং আপনার কোডটি অন্যরকমভাবে গঠনের চেষ্টা করা উচিত। দ্বিতীয়ত, স্কালায় এমন সমস্ত ধরণের বাসা রয়েছে যা আপনি সম্ভবত খেয়ালও করেন না, তাই যদি আপনি জিনিসগুলি ভেঙে ফেলতে পারেন তবে আপনি সম্ভবত বিস্মিত হবেন যে কোড প্রবাহটি কোথায় শেষ হয়েছে (বিশেষত বন্ধ হওয়ার সাথে)। তৃতীয়ত, স্কালার বেশিরভাগ "লুপ" আসলে স্বাভাবিক লুপ নয় - এগুলি এমন পদ্ধতি কল যা তাদের নিজস্ব লুপ রয়েছে,লুপ লাইক, "ব্রেক" এবং এর মতো কী করা উচিত তা জানার একটি ধারাবাহিক উপায় নিয়ে আসা শক্ত। সুতরাং, ধারাবাহিকভাবে থাকতে, বুদ্ধিমানের কাজটি হ'ল কোনও "ব্রেক" না হওয়া।
দ্রষ্টব্য : আপনি এখানে sum
স্থান পরিবর্তন করার পরিবর্তে মানটি ফিরিয়ে দেন সেখানে এইগুলির কার্যকরী সমতা রয়েছে । এগুলি হ'ল আরও বুদ্ধিমান স্কেলা। তবে যুক্তিটি একই রয়ে গেছে remains ( return
হয়ে যায় return x
ইত্যাদি)।