চেষ্টার মধ্যে থেকে ফিরে আসা কি খারাপ অভ্যাস অবশেষে অবরুদ্ধ?


128

তাই আমি আজ সকালে কিছু কোড পেলাম যা দেখতে এইরকম দেখাচ্ছে:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

এখন এই কোডটি সূক্ষ্মভাবে সংকলন করে এবং এটি যেমনটি করা উচিত ঠিক তেমন কাজ করে তবে এটি চেষ্টা করেই কোনও ব্লকের মধ্যে থেকে ফিরে আসা ঠিক বোধ করে না, বিশেষত যদি কোনও যুক্ত থাকে তবে।

আমার মূল বিষয়টি হ'ল শেষ পর্যন্ত যদি এর নিজস্ব একটি ব্যতিক্রম ছুঁড়ে দেয় তবে কী ঘটে? আপনি একটি রিটার্ন ভেরিয়েবল পেয়েছেন তবে তার সাথে ডিল করার ব্যতিক্রমও আছে ... তাই আমি চেষ্টা ব্লকের মধ্যে থেকে ফিরে আসার বিষয়ে অন্যেরা কী ভাববে তা জানতে আগ্রহী?


13
এই শৈলীর একটি সুবিধা হ'ল আপনাকে ব্লকের xবাইরে ঘোষণা করতে হবে না try। আপনি এর ঘোষণাকে এর ব্যবহারের কাছে রাখতে পারেন।
ডেভিড আর ট্রিবল

উত্তর:


169

না, এটি একটি খারাপ অভ্যাস নয়। ফেলে returnযেখানে এটা জ্ঞান পাঠযোগ্যতা এবং maintainability উন্নতি করে এবং আপনার কোড বুঝতে সহজ করে তোলে। finallyকোনও returnবিবৃতি সম্মুখীন হলে ব্লকটি কার্যকর হবে বলে আপনার যত্ন নেওয়া উচিত নয় ।


19

শেষ পর্যন্ত মৃত্যুদন্ড কার্যকর করা হবে যাই হোক না কেন, এটি কোনও ব্যাপার নয়


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


14

ব্যক্তিগতভাবে, আমি এই জাতীয় কোডিং এড়াতে পারি কারণ পরিশেষে বিবৃতি দেওয়ার আগে রিটার্নের বিবৃতি দেখার মতো মনে হয় না।

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

সুতরাং, আমি কোডটি এমনভাবে সাজিয়ে দেব যাতে রিটার্নের বিবৃতি সর্বদা শেষের বিবৃতিগুলির পরে উপস্থিত হয়।


9

এটি আপনার প্রশ্নের উত্তর দিতে পারে

আসলেই কি ঘটে যায় try রিটার্ন এক্স; } অবশেষে {x = নাল; } বিবৃতি?

এই প্রশ্নটি পড়া থেকে মনে হচ্ছে আপনার যদি শেষ পর্যন্ত বিবৃতিতে আরও একটি চেষ্টা করে কাঠামো তৈরি করতে পারে তবে আপনি যদি মনে করেন এটি ব্যতিক্রম হতে পারে। সংকলকটি কখন মানটি ফেরত দেবে তা নির্ধারণ করবে।

এটি বলেছিল, আপনার কোডটি যেকোনভাবে পুনর্গঠন করা ভাল তাই এটি আপনাকে পরবর্তী সময়ে বিভ্রান্ত না করে বা অন্য কেউ যারা এ সম্পর্কে অবহিতও হতে পারে।


হুমমম খুব ইন্টারেস্টিং। সুতরাং এর অর্থ এটি নিরাপদ তবে এর অর্থ কি এড়ানো উচিত?
লমএক্সএক্স

3
ব্যক্তিগতভাবে আমি মনে করি এটি আপনার কোডের পঠনযোগ্যতাটিকে কিছুটা কঠিন করে তোলে এবং কোডটি গঠনের জন্য আমাকে অন্য কোনও উপায় বের করার জন্য এটিই যথেষ্ট ছিল। তবে সত্যিই এটি কেবল ব্যক্তিগত পছন্দ।
স্পেন্সার রুপোর্ট

3
আমি আপনার ব্যক্তিগত পছন্দের সাথে একমত হতে চাই :)
লমএক্সএক্স

আমি মনে করি রিটার্নটি যেখানেই আছে ঠিক আছে। পদ্ধতিটি মানটি ফিরিয়ে দেবে, যদি না কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হয়; শেষ পর্যন্ত ক্লিনআপ কোডে ব্যতিক্রম দেখা দেয় কিনা তা বিবেচনা করে না doesn't
লরেন্স ডল

লক্ষ্য করুন পরিশেষে থেকে ফিরে উপর বিধিনিষেধ নেই না (কিন্তু আমি মনে করি সীমাবদ্ধতা ভালো হয় - C # এর যশ) জাভা উপস্থিত রয়েছে।
লরেন্স ডল

5

কার্যত কোনও পার্থক্য নেই।

তবে এটি না করার একটি কারণ রয়েছে। বেশ কয়েকটি প্রস্থান পয়েন্ট সহ দীর্ঘতর পদ্ধতিগুলি প্রায়শই পড়তে এবং বিশ্লেষণ করা আরও বেশি কঠিন are তবে সেই আপত্তিটি ক্যাচ এবং অবশেষে ব্লকগুলির চেয়ে রিটার্নের স্টেটমেন্টের সাথে আরও বেশি কিছু করতে পারে।


আমি এটিকে চ্যালেঞ্জ
জানাব

3

আপনার উদাহরণে উভয় উপায়ে সমতুল্য, কম্পাইলার একই কোডটি উত্পন্ন করলে আমি অবাক হব না। অবশেষে ব্লকে যদি কোনও ব্যতিক্রম ঘটে থাকে তবে আপনি একই বিষয় হ'ল আপনি রিটার্নের স্টেটমেন্টটিকে ব্লক বা এর বাইরে রেখেছেন কিনা।

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

আমি মনে করি রিটার্নের বিবৃতিটি এত সুন্দরভাবে শেষ বিবৃতি হিসাবে রাখা হয়েছে, অন্যরা এসে পদ্ধতিটির অন্যান্য অংশগুলিতে একাধিক রিটার্নের বিবৃতি ছিটিয়ে নেওয়ার সম্ভাবনা কম থাকে।

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