আমরা retry কীওয়ার্ডের ওপর কথা বলেছিলাম এক্সেপশনের পর রিট্রাই করার সময় আলোচনা করলে। এর কম-পরিচিত কাউন্টারপার্ট redo একইভাবে কাজ করে, কিন্তু পুরো ব্লকের বদলে লুপ ইটেরেশন রি-রান করে।
redo কীওয়ার্ড
যেমন আমরা পূর্ববর্তী Academy আর্টিকেলে শিখেছিলাম, retry আপনাকে একটি ব্লকে কোডের টুকরো রিট্রাই করতে দেয়:
begin
puts "Iteration"
raise
rescue
retry
end
এই উদাহরণটি কনসোলে "Iteration" শব্দটি প্রিন্ট করে এক্সেপশন রেইজ করার আগে। রescue ব্লক এক্সিকিউট হয়, যা retry কল করে এবং ব্লকটি আবার শুরু থেকে শুরু করে। এর ফলে আমাদের প্রোগ্রাম অসীমitaire Iteration প্রিন্ট করে। redo কীওয়ার্ড আপনাকে একই ইফেক্ট অর্জন করতে দেয় যখন লুপ ব্যবহার করছেন। এটি সिचুয়েশনগুলোতে উপকারী যেখানে আপনাকে ইটারেট করার সময় রিট্রাই করতে হয়।
10.times do |i|
puts "Iteration #{i}"
redo if i > 2
end
এটি প্রিন্ট করবে:
$ ruby redo.rb
Iteration 0
Iteration 1
Iteration 2
Iteration 3
Iteration 3
Iteration 3
...
লক্ষ্য করুন ইটেরেশন কাউন্ট একই থাকে? এটি এক্সিকিউশনকে লুপের শুরুতে ফিরিয়ে আনবে। এই কোডের ভেরিয়েন্ট retry ব্যবহার করে একই আউটপুট প্রিন্ট করবে:
10.times do |i|
begin
puts "Iteration #{i}"
raise if i > 2
rescue
retry
end
end
আপনি redo ব্যবহার করতে পারেন একটি লুপে রিট্রাই ইমপ্লিমেন্ট করতে। পরবর্তী উদাহরণে আমাদের একটি জব কিউ আছে। সেগুলো হয় :success বা :failure রিটার্ন করে। আমরা একই লুপ ইটেরেশন রি-রান করব যতক্ষণ না জব সাকসেসফুল হয়।
[job_1, job_2, job_3, job_4].each do |job|
redo unless job.call == :success
end
রুবি ১.৮
retry এবং redo-এর আচরণ রুবি ১.৮ এবং ১.৯-এর মধ্যে পরিবর্তিত হয়েছে। সেগুলো আগে লুপের ইটেরেশন রিস্টার্ট করত, কিন্তু দুটো ভিন্নভাবে। ১.৯ থেকে, retry শুধু begin/rescue ব্লকের সাথে কাজ করে এবং redo শুধু লুপের ভিতরে কাজ করে।
next কীওয়ার্ড
আপনি যদি লুপের পরবর্তী ইটেরেশনে যেতে চান, বর্তমানটির শুরুতে ফিরে যাওয়ার বদলে, আপনি next ব্যবহার করতে পারেন।
10.times do |i|
puts "Iteration #{i}"
next if i > 2
puts "Iteration done"
end
এটি প্রিন্ট করবে:
$ ruby next.rb
Iteration 0
Iteration done
Iteration 1
Iteration done
Iteration 2
Iteration done
Iteration 3
Iteration 4
...
দেখুন কীভাবে ইটেরেশন কাউন্ট ইনক্রিমেন্ট হতে থাকে? অধিকাংশ কেসে next ব্যবহার করা আপনি চান। redo-কে তাকান যদি আপনার একটি লুপ প্রয়োজন যা এক্সাক্টলি একটি নির্দিষ্ট সংখ্যক বার চলে বা একটি অ্যারে ইটারেট করার সময় এরর হ্যান্ডলিং প্রয়োজন।
আমরা আশা করি লুপে ইটেরেশন রি-ডু করার বিষয়ে আপনি কিছু নতুন শিখেছেন এবং এই আর্টিকেল (অথবা AppSignal Academy সিরিজের অন্য যেকোনো আর্টিকেল) সম্পর্কে আপনার মতামত জানতে চাই। দয়া করে আপনি কী ভাবেন সেটা আমাদের জানাতে বা আপনার যেকোনো রুবি বিষয় আছে যা আপনি আরও শিখতে চান সেটা জানাতে সংকোচ করবেন না।