জাভা ব্যতিক্রম প্রত্যয় ব্যতিক্রম


19

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

আমি কেন এটি ভাল অনুশীলন তা বুঝতে চাইছি।

আমি ইতিমধ্যে প্রশ্নটি দেখেছি এবং পড়ে দেখেছি কেন ব্যতিক্রমগুলি সাধারণত শ্রেণীর নামে প্রত্যয় ব্যতিক্রম হয়

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

যদি আমরা পূর্ববর্তী প্রশ্ন থেকে উদাহরণগুলি নিই - জাভাতে কি সত্যিই FileNoFoundকোনও ব্যতিক্রম নয় যে নামটির সাথে ক্লাস থাকতে পারে ? যদি সেখানে থাকতে পারে, তবে এটি Exceptionকি এটির সাথে অনুশীলনের পরোয়ানা দেয় ?

গ্রহের গ্রহের গ্রন্থে দ্রুত পদক্ষেপের দিকে তাকালে Exception, নিশ্চিত যে, তাদের বেশিরভাগেরই ব্যতিক্রম প্রত্যয় রয়েছে, তবে কয়েকটি ব্যতিক্রম রয়েছে। javassistএটি এমন একটি লাইব্রেরির উদাহরণ যা প্রত্যয় ব্যতীত কয়েকটি ব্যতিক্রম রয়েছে বলে মনে হয় - যেমন BadByteCode,BadHttpRequest ইত্যাদি etc.

BouncyCastle মত ব্যতিক্রম সঙ্গে অন্য লিবিব হয় CompileError

আমি এই বিষয়ে সামান্য তথ্য দিয়ে কিছুটা প্রায় গুগল করেছি।


2
"সমস্ত ব্যতিক্রম কি একটি Exceptionপ্রত্যয় বহন করবে , বা আমাদের ব্যতিক্রম ব্যতিক্রমগুলির জন্য ব্যতিক্রম করা উচিত?" ;)
টিডামার

2
আসলে ত্রুটি ব্যতিক্রমের মতো (আউট অফ মেমরিরির দেখুন) তবে সেগুলি এমন জিনিসগুলির জন্য বোঝানো হয়েছে যা থেকে পুনরুদ্ধার করা কঠিন (যাতে আপনি প্রায়শই তাদের সাথে ডিল করেন না)
ratchet freak

1
এছাড়াও, আমি শুনেছি যে একটি সাধারণ নিয়ম হিসাবে 'ক্লাসগুলি বিশেষ্য হওয়া উচিত এবং পদ্ধতিগুলি ক্রিয়া (ক্রিয়া) হওয়া উচিত'। FileNotFound ArrayIndexOutOfBoundsএবং OutOfMemoryআরও পর্যবেক্ষণ / বিবরণ হয়, কিন্তু তারপর বিশেষ্য প্রয়োগ করা হয় Exception
মাইক দ্য লাইয়ার

উত্তর:


27

ল্যান্ডির উত্তরটি উত্তম, তবে ব্যাকরণগত উত্তরও রয়েছে। ক্লাস নাম বিশেষ্য হওয়া উচিত । "আউটআফ মেমরি" কী? "ফাইলনোটফাউন্ড" কী? আপনি যদি "ব্যতিক্রম" বিশেষ্য হিসাবে বিবেচনা করেন তবে বর্ণনাকারী এটি বিশেষণ হিসাবে উল্লেখ করা হয়। এটি কেবল কোনও নয় Exception, এটি একটি FileNotFoundException। আপনার একটি ধরার দরকার নেইOutOfMemory"নীল" কেনার জন্য আপনার দোকানে যাওয়ার চেয়ে আর কোনও ।

আপনি যদি আপনার কোডটি বাক্য হিসাবে পড়ে থাকেন তবে এটিও প্রদর্শিত হবে: " Tryকরছেন ... এবং catch OutOfMemory Exceptions"


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

1
@ গ্রেগ0ire - আপনার "এটি একটি পাবেন" হিসাবে আপনার চেষ্টা করা উচিত OutOfMemoryException। এটি বলেছিল, আমাদের কাছে পিন নম্বর এবং এটিএম মেশিন রয়েছে, সুতরাং একটি OOM ব্যতিক্রম এমন অস্বাভাবিক হবে না ।
ববসন

আমি মনে করি আপনি এখানে যে পয়েন্টটি তৈরি করছেন তা সত্যই সেরা (নাম বিরোধগুলির বিষয়ে একটি নামপ্লেসকে ধন্যবাদ, কমপক্ষে পিএইচপি তে) ধরে না। এগুলি সম্পর্কে আমার আরও কিছু বলার আছে এবং শীঘ্রই একটি উত্তর পোস্ট করব।
গ্রেগ টায়ার

সম্পন্ন! আপনি কি মনে করেন?
গ্রেগ টায়ার

@ সাবসন আমি কিংডম অফ ননস পড়ার পরামর্শ দিচ্ছি । বিশেষ্য হওয়ার জন্য আমাদের দরকার নেই। কেন "আপনি একটি পাবেন OutOfMemoryExceptionযখন এটি সহজভাবে হতে পারে" আপনি " হয় মেমোরির পরিমাণ"? আমরা ব্যবহার করি না Classপ্রত্যয় ( DogClass, CatClass, XmlReaderClass, ...)।
ম্যাথিউ নাপোলি

6

আমি মনে করি ব্যতিক্রম (এবং ত্রুটিগুলি এবং তাত্ত্বিকভাবে অন্যান্য Throwableগুলি) ইন্টারফেস বা এনামগুলি (যা সাধারণত প্রত্যয় হিসাবে ব্যবহৃত হয় না) এর থেকে পৃথক: তাদের সাধারণত খুব স্পষ্ট এবং সীমিত উদ্দেশ্য থাকে, তারা বিশেষায়িত ভাষা নির্মাণের সাথে ব্যবহার করা হয় ( try, catch, throw,throws ) এবং বিশেষ নিয়ম অনুসরণ (যেমন, অবারিত ব্যতিক্রম বনাম চেক করা কোন জেনেরিক্স)। একটি উপায়ে তারা কেবল ক্লাসই নয় যেগুলি ব্যতিক্রম হিসাবে ব্যবহৃত হবে তা নয়, তবে একটি ব্যতিক্রম প্রক্রিয়া যা ক্লাসগুলির মাধ্যমে প্রয়োগ করা হয়।

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


1
আমার সাথে স্ব-বিরোধী মনে হচ্ছে। যদি ব্যতিক্রমগুলি বিশেষ হয় এবং বিশেষ উপায়ে ব্যবহৃত হয় এবং তাই স্পষ্টতই স্বীকৃত হয় তবে আপনার জন্য কেন একটি ভিজ্যুয়াল ক্লু প্রয়োজন?
মাইকেল বর্গওয়ার্ট

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

আপনি Throwableজাভাতে নন- গুলি ফেলে দিতে পারবেন না । তবে আপনি ব্যতিক্রম সাথে মোকাবিলা করতে পারে না শুধুমাত্র মধ্যে try- catch-settings, যেমন যখন আপনি জটিল অবজেক্টের জন্য বৈধতা কিছু করতে আপনি ব্যতিক্রম সংগ্রহ পারে (যখন আপনি জানতে চান সব সংশ্লিষ্ট সমস্যা, না শুধুমাত্র প্রথম এক)। এই জাতীয় ক্ষেত্রে আপনার সচেতন হওয়া উচিত যে আপনি উদাহরণস্বরূপ আপনার তালিকায় থাকা জিনিসগুলি আবার ফেলে দিতে পারেন, সুতরাং তাদের ValidationIssueপরিবর্তে অর্থাৎ কল করা খারাপ হবে ValidationException
ল্যান্ডেই

0

তবে এটিও মনে হয় যে সবাই এটি করে এবং এটি অনুশীলন বলে মনে হয়।

হ্যাঁ, প্রত্যেকে এটি বাস্তবে করে, তাই এটি একটি অনুশীলন, তবে এটি এখনও ভাল? বেশ কিছু লোক প্রশ্ন করছে যে:

  • http://mnapoli.fr/approaching-coding-style-rationally// (ব্যতিক্রম প্রত্যয় § প্রসঙ্গ: পিএইচপি)
  • লিঙ্কযুক্ত ভিডিও, https://vimeo.com/album/2661665/video/74316116 (53:00 এ যান, প্রসঙ্গে: পিএইচপি), নিবন্ধটি অনুপ্রাণিত করে এবং এই বিষয়টিকে তোলে যে প্রতিবার আপনি যখন ব্যতিক্রম ব্যবহার করেন, আপনার একটি কীওয়ার্ড থাকে এটি ইতিমধ্যে এটি কাছাকাছি একটি ব্যতিক্রম দেখায়
  • http://verraes.net/2013/10/?vs-in-class-names/ দেখায় যে @ بابসনের উত্তরের বিবৃতিটি কীভাবে পরম হতে পারে না এবং এটি এমন বিন্দুটিকে তোলে যে কখনও কখনও প্রয়োগের জন্য প্রত্যয়টি ভাল হয় বা অবকাঠামো স্তরের ব্যতিক্রম এবং কখনও কখনও আপনার আরও সঠিক এবং অর্থপূর্ণ কিছু প্রকাশ করতে এই দীর্ঘ প্রত্যয়টি নেওয়া অক্ষরগুলি সংরক্ষণ করার চেষ্টা করা উচিত। আপনি যদি এমন কোনও ভাষা ব্যবহার করেন যেখানে সংস্কৃতিটি ব্যবসায়ের বিধি লঙ্ঘনের জন্য ব্যতিক্রমগুলি ব্যবহার করে তবে এই বিন্দুটি কেবল তখনই অর্থবোধ করে।
  • আপনি যে এসও লিঙ্কটি সরবরাহ করেছেন তা নাম দ্বন্দ্ব সম্পর্কে পয়েন্ট দেয় তবে এখন, আমাদের নামস্থান আছে, তাই না?

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

আপনার ভাষায় প্রতিটি ভাষার ভিত্তিতে ভিন্নতা থাকতে পারে: অজগর সম্পর্কে এই থ্রেডটি দেখুন: গসমোর-থ্রেডস / লিস্টস / প্যাথথন / পিপথন / 6৯6627 । পিএইচপি এবং পাইথন স্পষ্টভাবে পারফরম্যান্স-ফোকাসড নয়, কারণ জাভা (যা পারফরম্যান্স-ফোকাসড, ডান?) এর সাথে কেন এই পার্থক্য রয়েছে? আপনার ব্যবসার নিয়ম লঙ্ঘন সঠিকভাবে পরিচালনা করতে ডান পর্যায়ে আসার আগে যদি আপনার কল স্ট্যাকটি পেরোনোর ​​জন্য বেশ কয়েকটি স্তর থাকে তবে ব্যতিক্রমগুলি সেরা আইএমও। এটি রিটার্নের ধরণগুলিকে আরও সামঞ্জস্যপূর্ণ করে তোলে (আপনি সর্বদা একই ধরণের প্রত্যাবর্তন করেন, মিথ্যা বা সত্য নয়)। আমি আমার উত্তরটি অ্যাকাউন্টে এডিট করব
গ্রেগ টায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.