true
যদি আপনি false
ব্যর্থতায় ফিরে না যান তবে সাফল্যে ফিরে আসার কোনও কারণ নেই । ক্লায়েন্ট কোড দেখতে কেমন হবে?
if (result = tryMyAPICall()) {
// business logic
}
else {
// this will *never* happen anyways
}
এই ক্ষেত্রে, কলারের যেভাবেই হোক ট্রাই-ক্যাচ ব্লক প্রয়োজন, তবে তারপরে তিনি আরও ভাল করে লিখতে পারেন:
try {
result = tryMyAPICall();
// business logic
// will only reach this line when no exception
// no reason to use an if-condition
} catch (SomeException se) { }
সুতরাং true
রিটার্ন মান কলারের জন্য সম্পূর্ণ বেআইনী। সুতরাং শুধু পদ্ধতি রাখুন void
।
সাধারণভাবে, ব্যর্থ মোডগুলি ডিজাইন করার জন্য তিনটি উপায় রয়েছে।
- সত্য / মিথ্যা প্রত্যাবর্তন
- ব্যবহারের
void
, থ্রো (চেক করা) ব্যতিক্রম
- একটি মধ্যবর্তী ফলাফল অবজেক্ট ফিরে ।
ফিরে true
/false
এটি বেশ কয়েকটি পুরানো, বেশিরভাগ সি স্টাইলের এপিআইতে ব্যবহৃত হয়। ডাউনসাইডগুলি ওভিভিউস, কী ভুল হয়েছে তা আপনার কোনও ধারণা নেই। পিএইচপি বেশিরভাগ ক্ষেত্রে এটি করে, এর ফলে কোড তৈরি হয়:
if (xyz_parse($data) === FALSE)
$error = xyz_last_error();
বহু-থ্রেডযুক্ত প্রসঙ্গে, এটি আরও খারাপ।
ব্যতিক্রম ছোঁড়া (চেক করা)
এটি করার একটি দুর্দান্ত উপায়। কিছু সময়ে, আপনি ব্যর্থতা আশা করতে পারেন। জাভা সকেট দিয়ে এটি করে। প্রাথমিক ধারণাটি একটি কল সফল হওয়া উচিত, তবে প্রত্যেকেই জানেন যে নির্দিষ্ট ক্রিয়াকলাপ ব্যর্থ হতে পারে। তাদের মধ্যে সকেট সংযোগ রয়েছে। সুতরাং কলার ব্যর্থতাটি পরিচালনা করতে বাধ্য হয়। এটি একটি দুর্দান্ত নকশা, কারণ এটি নিশ্চিত করে যে কলার আসলে ব্যর্থতা পরিচালনা করে এবং কলরটিকে ব্যর্থতা মোকাবেলার জন্য একটি মার্জিত উপায় দেয়।
রিটার্ন রেজাল্ট অবজেক্ট
এটি হ্যান্ডেল করার আরও একটি দুর্দান্ত উপায়। এটি প্রায়শই পার্সিং বা কেবল এমন জিনিসগুলির জন্য ব্যবহৃত হয় যা বৈধ হওয়া দরকার।
ValidationResult result = parser.validate(data);
if (result.isValid())
// business logic
else
error = result.getvalidationError();
কলার জন্য ভাল, পরিষ্কার যুক্তি।
দ্বিতীয় কেসটি কখন ব্যবহার করবেন এবং কখন তৃতীয়টি ব্যবহার করবেন তা নিয়ে কিছুটা বিতর্ক রয়েছে is কয়েকজন বিশ্বাস করেন যে ব্যতিক্রম হওয়া উচিত ব্যতিক্রমী এবং যে আপনি মনের মধ্যে ব্যতিক্রম সম্ভাবনা সঙ্গে ডিজাইন করা উচিত নয়, এবং প্রায় কাছাকাছি সবসময় তৃতীয় অপশন ব্যবহার করবে। এটা ঠিক আছে. তবে আমরা জাভাতে ব্যতিক্রমগুলি পরীক্ষা করেছি, তাই আমি সেগুলি ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না । আমি মৌলিক অনুমানটি যখন কলটি সফল হওয়া উচিত (সকেট ব্যবহার করার মতো) তখন আমি পরীক্ষিত ক্রয়গুলি ব্যবহার করি , তবে ব্যর্থতা সম্ভব হয় এবং আমি তৃতীয় বিকল্পটি ব্যবহার করি যখন কলটি খুব অস্পষ্ট হয়ে গেলে কলটি সাফল্য লাভ করতে পারে (যেমন ডেটা বৈধকরণের মতো)। তবে এ সম্পর্কে বিভিন্ন মতামত রয়েছে।
আপনার ক্ষেত্রে, আমি void
+ সাথে যাব Exception
। আপনি ফাইল আপলোডটি সফল হওয়ার প্রত্যাশা করবেন এবং এটি কখনই ব্যতিক্রমী হয়। কিন্তু কলকারী সেই ব্যর্থতা মোডটি পরিচালনা করতে বাধ্য হন এবং আপনি কোনও ব্যতিক্রম ফিরে আসতে পারেন যা সঠিকভাবে বর্ণনা করে যে কী ধরণের ত্রুটি ঘটেছে।