রুবির একটি সাধারণ সমস্যা হল আপনি ত্রুটির বার্তা পান, যাকে প্রযুক্তিগত ভাষায় আমরা বলি "ব্যতিক্রম"৷
এই ব্যতিক্রমগুলি প্রত্যাশিত হতে পারে৷ , যেমন একটি ফাইল যা কখনও কখনও উপলব্ধ হতে পারে কিন্তু অন্যগুলিতে অনুপস্থিত, অথবা একটি API যা কিছু বিধিনিষেধের কারণে সাময়িকভাবে উপলব্ধ, অথবা সেগুলি অপ্রত্যাশিত হতে পারে .
আজ আপনি প্রত্যাশিত ত্রুটিগুলি পরিচালনা করতে শিখবেন৷
৷কিভাবে?
ঠিক আছে, আমি আপনাকে রুবিতে "শুরু" এবং "উদ্ধার" এর সাথে পরিচয় করিয়ে দিই, ত্রুটির অবস্থা পরিচালনার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ কীওয়ার্ড৷
তারা কিভাবে কাজ করে?
প্রথমে আপনাকে কিছু বুঝতে হবে।
আপনার রুবি প্রোগ্রামগুলি চালানোর সময় একাধিক পয়েন্টে একটি ত্রুটি ট্রিগার করতে পারে৷
উদাহরণ অন্তর্ভুক্ত :
- অবিদ্যমান ফাইল পড়ার চেষ্টা করা হচ্ছে।
- একটি সংখ্যাকে শূন্য দিয়ে ভাগ করা।
- আপনি যে ওয়েব সার্ভারের সাথে কাজ করছেন তার একটি পুরানো SSL শংসাপত্র রয়েছে৷ ৷
যখন একটি ত্রুটি ঘটে… রুবি অবিলম্বে ক্র্যাশ হয় না!
আপনি ত্রুটি থেকে পুনরুদ্ধার করার একটি সুযোগ পাবেন . আমরা একে "ব্যতিক্রম পরিচালনা" বলি।
আপনার কোডে ত্রুটি পুনরুদ্ধার বাস্তবায়নের জন্য রুবি আপনাকে কয়েকটি কীওয়ার্ড দেয়। এই কীওয়ার্ডগুলি হল begin &rescue .
আসুন জেনে নেই কিভাবে সেগুলো ব্যবহার করতে হয়!
রুবি ব্যতিক্রমগুলি কীভাবে পরিচালনা করবেন
আপনি কিভাবে এই ব্যতিক্রমগুলি পরিচালনা করবেন?
আপনি একটি begin দিয়ে ব্যতিক্রম উত্থাপনকারী কোডটিকে মোড়ানো করতে পারেন / rescue ব্লক।
এটি কিভাবে কাজ করে...
প্রথম বিভাগ (begin ), আপনি চালাতে যাচ্ছেন এমন কোড আছে এবং এটি একটি ব্যতিক্রম বাড়াতে পারে।
উদাহরণ :
begin
IO.sysopen('/dev/null')
rescue
# ...
end
এখানে আমরা sysopen দিয়ে একটি ফাইল খোলার চেষ্টা করছি . আমরা যদি ফাইলটি খুলতে না পারি তাহলে একটি ব্যতিক্রম উত্থাপিত হয়৷
rescue ব্যবহার করার এটাই উপযুক্ত সময় কীওয়ার্ড!
এই কীওয়ার্ড ব্যবহার করে আপনি বলতে পারেন যে আপনি কি ঘটতে চান যখন একটি ব্যতিক্রম উত্থাপিত হয়। তাই ব্যর্থতার মোড আপনার নিয়ন্ত্রণে।
উদাহরণ :
begin
IO.sysopen('/dev/null')
rescue
puts "Can't open IO device."
end
আপনি এই ত্রুটিটি লগ করতে চান এবং হয়ত কোনো ধরনের ডিফল্ট মান প্রদান করতে চান।
করবেন না। উপেক্ষা করুন। ত্রুটি।
একাধিক ব্যতিক্রম উদ্ধার করা
আপনাকে জানতে হবে যে rescue একটি ঐচ্ছিক যুক্তি নেয়।
এই যুক্তি কি?
এই যুক্তি হল ব্যতিক্রম শ্রেণী যেটা থেকে আপনি উদ্ধার করতে চান।
আপনি কোন কোড চালাচ্ছেন তার উপর এটি নির্ভর করে।
IO এর জন্য :
- এটি
Errno::ENOENTহতে পারে একটি অনুপস্থিত ফাইলের জন্য - বা
Errno::EACCESঅনুমতি ত্রুটির জন্য
সেরা অংশ?
আপনি একই শুরু/উদ্ধার ব্লকে একাধিক ব্যতিক্রম পরিচালনা করতে পারেন।
এরকম :
begin
IO.sysopen('/dev/null')
rescue Errno::ENOENT
puts "File not found."
rescue Errno::EACCES
puts "Insufficient permissions, not allowed to open file."
end
আপনি যদি একাধিক ব্যতিক্রমের জন্য একই কাজ করতে চান…
আপনি এটি করতে পারেন৷ :
begin
IO.sysopen('/dev/null')
rescue Errno::ENOENT, Errno::EACCES
puts "There was an error opening the file."
end
আসুন শিখতে থাকি!
ব্লক এবং পদ্ধতির ভিতরে ব্যতিক্রমগুলি কীভাবে উদ্ধার করবেন
আপনাকে সবসময় begin ব্যবহার করতে হবে না কীওয়ার্ড।
এমন কিছু ক্ষেত্রে আছে যেখানে আপনি এটি ছেড়ে দিতে পারেন৷
৷কোথায়?
ভিতরের পদ্ধতি এবং ব্লক।
উদাহরণ :
def get_null_device
IO.sysopen('/dev/null')
rescue Errno::ENOENT
puts "Can't open IO device."
end
পদ্ধতির সংজ্ঞা নিজেই begin এর কাজ করে , তাই আপনি এটি বাদ দিতে পারেন।
আপনি ব্লক দিয়েও এটি করতে পারেন।
উদাহরণ :
["a.txt", "b.txt", "c.txt"].map do |f|
IO.sysopen(f)
rescue Errno::ENOENT
puts "Can't open IO device: #{f}."
end
এখন, rescue ব্যবহার করার আরও একটি উপায় আছে begin ছাড়া কীওয়ার্ড .
দেখা যাক কিভাবে কাজ করে।
ইনলাইন রেসকিউ বোঝা এবং কেন এটি বিপজ্জনক
আপনি rescue ব্যবহার করতে পারেন ইনলাইন।
কিছু বিরল পরিস্থিতিতে, আপনি এই ব্যতিক্রম পরিচালনার ফর্মটিকে দরকারী বলে মনে করতে পারেন৷
এখানে একটি উদাহরণ আছে :
["a.txt", "b.txt", "c.txt"].select { |f| File.open(f) rescue nil }.map(&:size)
এটি আপনাকে শুধুমাত্র বিদ্যমান ফাইলগুলি খুলতে এবং যেগুলি নেই সেগুলিকে উপেক্ষা করতে দেয়৷
৷ফলস্বরূপ, আপনি বিদ্যমান ফাইলগুলির আকার পাবেন৷
৷ব্যতিক্রম ছাড়াই উত্থাপিত হচ্ছে।
এটা কেন?
ঠিক আছে, এটি আপনাকে আপনার সমস্ত কোড এক লাইনে রাখতে দেয়৷
এটি সম্পর্কে।
rescue এই ফর্মটি ব্যবহার করার সময় একটি "লুকানো বিপদ" আছে কারণ আপনি StandardError থেকে ক্রমবর্ধমান সব ব্যতিক্রম পাচ্ছেন .
যা সবচেয়ে ব্যতিক্রম।
সেটা ভালো নয় কেন?
কারণ তাদের একটি বিস্তৃত নির্বাচনের পরিবর্তে শুধুমাত্র নির্দিষ্ট ব্যতিক্রমগুলি পরিচালনা করা ভাল।
এটি নিজের থেকে ভুল লুকানো এড়িয়ে যায়!
লুকানো ত্রুটিগুলি সমস্ত ধরণের অদ্ভুত আচরণ এবং ডিবাগ করার জন্য কঠিন সমস্যা হতে পারে৷
সারাংশ
আপনি রুবিতে ত্রুটি, মৌলিক ব্যতিক্রম পরিচালনা এবং rescue সম্পর্কে শিখেছেন / begin কীওয়ার্ড।
অনুগ্রহ করে এই নিবন্ধটি শেয়ার করুন যদি আপনি এটি সহায়ক বলে মনে করেন 🙂
পড়ার জন্য ধন্যবাদ!