স্কেলে চেক না করা ব্যতিক্রমগুলির জন্য সিদ্ধান্ত


17

জাভা প্রোগ্রামার হিসাবে আমি সবসময় চেক না করা ব্যতিক্রমগুলির সমালোচনা করেছি। বেশিরভাগ প্রোগ্রামাররা এটিকে পরে কোড তৈরি করার জন্য স্বাচ্ছন্দ্যে কোডিংয়ের এন-রুট হিসাবে ব্যবহার করে। এছাড়াও পরীক্ষিত ব্যতিক্রমগুলি সহ প্রোগ্রামগুলি (অপরিশোধিত হলেও) চেক করা ব্যতীত অংশগুলির তুলনায় অনেক শক্ত।

আশ্চর্যজনকভাবে স্কালায় চেকড ব্যাতিক্রম বলে কিছু নেই। সমস্ত জাভা চেক করা এবং চেক করা সমস্ত স্কালায় চেক করা নেই।

এই সিদ্ধান্তের পেছনে অনুপ্রেরণা কী? আমার জন্য এটি কোনও বাহ্যিক কোড ব্যবহার করার সময় বিভিন্ন ধরণের সমস্যার উদ্বোধন করে। এবং যদি সুযোগক্রমে ডকুমেন্টেশনগুলি দুর্বল হয় তবে এর ফলাফল কিল হয় L


11
জাভা প্রোগ্রামার হিসাবে আমি সর্বদা পরীক্ষিত ব্যতিক্রমগুলির সমালোচনা করেছি। অপরিচ্ছন্ন কোড কখনও মজবুত হয় না
মাইকেল বর্গওয়ার্ট

উত্তর:


28

চেক করা ব্যতিক্রমগুলি বেশিরভাগ ক্ষেত্রে ব্যর্থতা হিসাবে বিবেচিত হয়। নোট করুন যে জাভা তৈরি হওয়ার পরে কোনও ভাষা তৈরি হয়নি। দেখুন http://www.artima.com/intv/handcuffs2.html , http://googletesting.blogspot.ru/2009/09/checked-exceptions-i-love-you-but-you.html , HTTP: / /www.mindview.net/Etc/Dissusussion/CheckedExferences ইত্যাদি

বিশেষত, তারা আপত্তিজনক নয় (কেবল ফিরে যাওয়া বাদ দিয়ে) throws Exception )।

Scala আপনি একটি ভাল বিকল্প আছে: যেমন আগমন মানের জন্য বীজগাণিতিক ধরনের ব্যবহার Option[T], Either[Exception, T], আপনার নিজের টাইপ যখন আপনি হ্যান্ডেল নির্দিষ্ট ক্ষেত্রে ব্যবহারকারী চান (যেমন পরিবর্তে

def foo: Int // throws FileNotFoundException, IllegalStateException

তোমার আছে

sealed trait FooResult
case class Success(value: Int) extends FooResult
case class FileNotFound(file: File) extends FooResult
case object IllegalState extends FooResult

def foo: FooResult

এবং গ্রাহককে এখন সমস্ত ফলাফল পরিচালনা করতে হবে)

বহিরাগত কোডটি মোকাবেলার জন্য যা ব্যতিক্রম ছুঁড়ে ফেলেছে, আপনার আছে scala.util.control.exceptionবা scala.util.Try(স্কেলা ২.১০ দিয়ে শুরু হবে)।


4
কখনই বুঝতে পারেনি বেশিরভাগ লোক চেক করা ব্যতিক্রমগুলি: আর্গুমেন্টটি পরিচালনা করে না । বেশিরভাগ লোকেরা ভাল বিকাশকারী হয় না। আমি গ্যারান্টি দিচ্ছি যে বেশিরভাগ বিকাশকারীরা যেভাবেই ত্রুটির ফলাফল পরিচালনা করতে যাবেন না। আসলে, try..catchচেয়ে অনেক বেশি পঠনযোগ্য if। এর চেয়ে বেশি আমি আরও নিশ্চয়তা দিতে পারি যে সেই একই বিকাশকারীরা কোডটি লিখতে যাচ্ছেন না যা ত্রুটির ফলাফল দেয় - স্কালায় খুব জটিল - আপনি যখনই চান কোনও ফাংশন থেকেও ফিরতে পারবেন না (ঠিক পাস্কালের মতো)
পাইজুসন

5
আমি আপনাকে বিভ্রান্তিকর মন্তব্য এবং প্রমাণের অভাবে দেখতে পেয়েছি, @ পিয়াস। Scala সালে নির্বাচন করে অপশন রিটার্ন টাইপ হিসাবে প্যাটার্ন ম্যাচিং মধ্যে বদলে ফল করার সম্ভাবনা রয়েছে এমন বিবৃতি। কিছু না পরিবর্তে আর কোনও কিছু প্রত্যাবর্তন সেই স্টাইলে কিছু তুচ্ছ, জটিল নয়। কম ক্লুফুল ডেভেলপাররা ফাংশনগুলি লিখতে পছন্দ করবেন না যা বীজগণিতের ধরণের প্রত্যাবর্তন করে তবে এটি ভিন্ন জিনিস। অবশেষে, আপনি যখনই চান কোনও ফাংশন থেকে ফিরে আসতে পারবেন না - কেবল অসত্য।
ব্রুস

7

জাভাতে চেক করা ব্যতিক্রমগুলি খুব খারাপ জিনিস নয়। অবশ্যই এডিটিগুলি স্কালার পক্ষে আরও ভাল বিকল্প হতে পারে তবে জাভাতে, চেক করা ব্যতিক্রমগুলি তাদের স্থান এবং পরিপাটি কোড আর্গুমেন্ট কেবল নির্বুদ্ধিহীন, যতই ব্লগ এটির পুনরাবৃত্তি করুক না কেন। এটি মূলত বলেছে যে আপনার সিস্টেমে ঘটতে পারে এমন গুরুতর এবং সম্ভবত মেরামতযোগ্য পরিস্থিতিতে আপনি আনন্দের সাথে উপেক্ষা করা উচিত, কারণ স্ক্রু টাইপ সিস্টেম, সুন্দর কোডটি আপনার সিস্টেমকে স্বয়ংক্রিয়ভাবে শক্তিশালী করে তোলে। এ জাতীয় যুক্তি আরও ব্যাখ্যা করে যে কেন এত বেশি জাভা কোডার স্বেচ্ছায় তাদের কোডগুলি এক্সএমএলগুলিতে সরিয়ে দেয় (স্প্রিং, মাভেন ইত্যাদি । যদিও আমি এখানে সুন্দর অংশটি মিস করি )।

এম। ওডারস্কির নীচে http://www.scala-lang.org/old/node/8787.html প্রদত্ত স্কেলে চেক ব্যাতিক্রমের অভাবের কারণটি আশ্চর্যজনকভাবে পৃথক এবং বোধগম্য।

পরীক্ষিত ব্যতিক্রমগুলির সাথে সমস্যাগুলি তালিকাটিতে মানচিত্রের পদ্ধতি দ্বারা সর্বোত্তমভাবে প্রদর্শিত হয়:

def map[B](f: A => B): List[B]

@ থ্রো দিয়ে মানচিত্রটি কীভাবে টীকা দেবেন? মানচিত্রে যদি একটি @ থ্রো টীকাটি না পাওয়া যায় তবে সম্ভবত আপনি এটিকে @ থ্রোযুক্ত কোনও ফাংশনটি পাস করতে পারবেন না। এটি মানচিত্রটি যেভাবে ব্যবহার করা যেতে পারে তার জন্য জটিল বাধা এবং পার্থক্যের পরিচয় দেয়। জিনিসগুলি আরও ভাল হতে পারে যদি আমরা কোনওভাবে সেই ম্যাপটি বর্ণনা করতে পারি যে তার ফাংশন আর্গুমেন্টটি ছুঁড়ে ফেলেছে এমন সমস্ত ব্যতিক্রম ছুঁড়ে ফেলে। এমন কিছু এফেক্ট সিস্টেম রয়েছে যা এটি প্রকাশ করতে পারে তবে এখন পর্যন্ত প্রতিটি নোটেশন আমি দেখতে পেয়েছি।

লুকাস রাইটজ লাইটওয়েট এফেক্ট সিস্টেমগুলিতে কিছু গবেষণা করছেন যা সংক্ষিপ্ত এবং সুনির্দিষ্ট উপায়ে মানচিত্রের ধরণ এবং অন্যান্য সাধারণ ক্রিয়াকলাপটি প্রকাশ করতে ব্যবহৃত হতে পারে। এটি গবেষণা, সুতরাং বর্তমানে আমরা কোন্ ডিগ্রি সাফল্য পাব এবং এর কতটুকু স্কালায় রাখা যেতে পারে তা এখনও অস্পষ্ট। আদর্শভাবে, আমরা এটি কোনও সময়ে anচ্ছিক টাইপ সিস্টেম হিসাবে যুক্ত করতে সক্ষম হব। তবে কংক্রিটের পূর্বাভাস দেওয়া খুব তাড়াতাড়ি।

চিয়ার্স

নিশ্চিত নয় তবে আমি মনে করি জাভা 8 ল্যাম্বডাসও চেক করা ব্যতিক্রমগুলিতে সীমাবদ্ধ।জেডিকে 8 ( java.util.function.*) এর বেশিরভাগ (সমস্ত?) নতুন কার্যকরী ইন্টারফেসের পদ্ধতিগুলি চেক করা ব্যতিক্রমগুলিও ঘোষণা করে না।


2

আপনি যদি দক্ষতা অর্জন করতে চান তবে আপনাকে হাল ছেড়ে দিতে হবে .. যথার্থতা / নিয়ন্ত্রণ <- এর জন্য আমার আরও ভাল শব্দ দরকার।

স্ক্যালাল যতটা বিমূর্ততা যায় শীর্ষে অবস্থিত। যদি স্কালার একটি লক্ষ্য বিরক্তিকর বয়লারপ্লেট কোড থেকে মুক্তি পেয়ে থাকে তবে জাভা ব্যতিক্রম হ্যান্ডলিংটি দেখার জন্য একটি স্পষ্ট জায়গা। আপনি যদি জাভাতে দ্রুত কোডটি লিখতে চান তবে আপনার চেক করা ব্যতিক্রমগুলি যতক্ষণ না আঘাত করবে ততক্ষণ পর্যন্ত তা ছুঁড়ে ফেলুনmain() এবং কার্যকরভাবে ।

আপনি যা জিজ্ঞাসা করছেন আমি ঠিক তা পেয়ে যাচ্ছি কিনা তা আমি জানি না তবে এটি আমার মতে সর্বাধিক সুস্পষ্ট কারণ।

ঠিক আছে, আমি কিছুটা তাকাতে পেরেছি এবং কেউ চেক ব্যতিক্রমগুলির ট্র্যাজেডি সম্পর্কে লিখেছেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.