Clojure:
ত্রুটিগুলি পরিচালনা করা
কিভাবে:
ক্লোজার, এর লিস্প পূর্বসূরীদের মতো, এরর ডিলিং এর জন্য এক্সেপশনের উপর নির্ভর করে। এখানে দেখানো হচ্ছে যে জিনিসগুলি খারাপ দিকে চলে গেলে আপনি কি করেন।
এক্সেপশন থ্রো করা সোজা:
(throw (Exception. "Oops! কিছু ভুল হয়ে গেছে।"))
এক্সেপশন ক্যাচ করা, আপনি এটা অনেক সময় করবেন:
(try
;; ঝুঁকিপূর্ণ কোড
(/ 1 0)
(catch ArithmeticException e
(println "শূন্য দিয়ে ভাগ করা যায় না!"))
;; finally ব্লক যে কোন অবস্থায় চালানো হয়
(finally
(println "ক্লিন-আপ কোড এখানে যায়।")))
উপরের ক্যাচ ব্লকের জন্য নমুনা আউটপুট:
শূন্য দিয়ে ভাগ করা যায় না!
ক্লিন-আপ কোড এখানে যায়।
এক্সেপশনগুলি সম্পর্কে সমৃদ্ধ প্রসঙ্গ প্রদানের জন্য ex-info
এবং ex-data
ব্যবহার করা:
(try
;; একটি কাস্টম এক্সেপশন ঘটানো
(throw (ex-info "কাস্টম এরর" {:type :custom-failure}))
(catch Exception e
;; আমাদের কাস্টম এক্সেপশন থেকে ডেটা বের করা
(println (ex-data e))))
নমুনা আউটপুট:
{:type :custom-failure}
গভীর ডুব
ক্লোজারে এরর হ্যান্ডলিং এর গল্পটি অন্যান্য লিস্প বা এমনকি জাভা থেকে (যা থেকে এটি try-catch
মেকানিজম উত্তরাধিকার স্বরূপ পায়) ব্যাপকভাবে আলাদা নয়। এটি ব্যবহারিক; এক্সেপশন ব্যবহার করা প্রধান পথ, ঠিক জাভার মতো, তবে ক্লোজার সমৃদ্ধ এরর ডেটার জন্য ex-info
এবং ex-data
সহ ফাংশনাল ফ্লেভার প্রদান করে।
ক্লোজারে এরর হ্যান্ডলিং এর বিকল্প হিসেবে মনের নির্মাণ, যেমন cats
লাইব্রেরি থেকে either
মনাড, অথবা চ্যানেল-ভিত্তিক এরর প্রোপাগেশনের জন্য core.async ব্যবহার করা হয়। তবে, এগুলি আরো জটিল এবং নির্দিষ্ট পরিস্থিতিতে ব্যবহৃত হয়।
ঐতিহাসিকভাবে, প্রোগ্রামিং ভাষায় এরর হ্যান্ডলিং সাধারণ স্ট্যাটাস রিটার্ন থেকে আধুনিক ভাষায় আরো উচ্চতর এক্সেপশন হ্যান্ডলিং মেকানিজমে বিকাশ পেয়েছে। ক্লোজার সাধারণতা এবং ফাংশনাল প্রোগ্রামিং এর একটি স্পর্শ অপশন করে, পুরোনো এবং নতুনের মিশ্রণ করে।
দেখুন ও
- ক্লোজারের এক্সেপশন নির্দেশিকা: https://clojure.org/guides/exceptions
- আরও ফাংশনাল প্রোচেসগুলির জন্য “Cats” লাইব্রেরি: https://github.com/funcool/cats
- অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এর জন্য “Core.async”: https://github.com/clojure/core.async