কম্পিউটার টিউটোরিয়াল

রুবির redo, retry, এবং next শিখুন: লুপ কন্ট্রোল এবং এক্সেপশন হ্যান্ডলিং

আমরা 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 সিরিজের অন্য যেকোনো আর্টিকেল) সম্পর্কে আপনার মতামত জানতে চাই। দয়া করে আপনি কী ভাবেন সেটা আমাদের জানাতে বা আপনার যেকোনো রুবি বিষয় আছে যা আপনি আরও শিখতে চান সেটা জানাতে সংকোচ করবেন না।

  1. C-এ ভেরিয়েবল এবং কীওয়ার্ড

  2. ম্যাকে Undo এবং Redo করার পদ্ধতি

  3. RuboCop দিয়ে রুবি কোড কোয়ালিটি উন্নত: লিন্টিং ও অটো-ফরম্যাটিং

  4. রুবি লগিং মাস্টারি: Logger এবং Lograge-এ এক্সপার্ট গাইড