সি # পদ্ধতিতে রিটার্ন ভেরিয়েবলগুলি ঘোষণা করে বনাম সরাসরি মূল্য ফেরানো


17

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

পরেরটির পক্ষে যুক্তিটি হ'ল এটি কোনও বিকাশকারীকে কলটি ফেরত দেওয়ার আগে কোডটির ফিরে আসার আগে কোডটির ডিবাগিংয়ের পদ্ধতিটি ডিবাগিংয়ের অনুমতি দেয় যার ফলে কোডটি বোঝা আরও সহজ হয়: এটি বিশেষত সত্য যেখানে পদ্ধতি কলগুলি ডেইজি-চেইনযুক্ত are

কোন দক্ষতা সবচেয়ে কার্যকর এবং / বা আমাদের অন্য একের চেয়ে এক স্টাইল গ্রহণ করার অন্য কোনও কারণ রয়েছে তা সম্পর্কে কি কোনও গাইডলাইন রয়েছে?

ধন্যবাদ

    private bool Is2(int a)
    {
        return a == 2;
    }

    private bool Is3(int a)
    {
        var result = a == 3;
        return result;
    }

11
দুটি উদাহরণই অভিন্ন আইএলকে সংকলন করবে। আপনি দ্বিতীয় উদাহরণটি চাওয়ার একমাত্র কারণ হ'ল ডিবাগিংয়ের উদ্দেশ্যে বা যদি আপনি resultএটি ফেরত দেওয়ার আগে আপনাকে ব্যবহার করতে হয়।
ChrisF

1
আর একটি কারণ হতে পারে কারণ ফলাফলটি গণনা করা এবং এটি ফেরত দেওয়ার মধ্যে আপনাকে অন্য কিছু করা দরকার।
tmadmers

1
@ ক্রিসএফ, আসলে তারা আমার জন্য একই আইএল সংকলন করে না (অতিরিক্ত stloc.0এবং ldloc.0দ্বিতীয় সংস্করণে রয়েছে)। তবে আমি মনে করি এটি কেবলমাত্র ডিবাগ মোডে ঘটে। এবং এটি এখানে যাইহোক সত্যিই গুরুত্বপূর্ণ নয়।
সুইভ

@ এসভিক - ঠিক আছে - আমার "রিলিজ মোডে" যোগ করা উচিত ছিল;)
ক্রিসএফ

1
যেহেতু আপনি এবং মাঝে মাঝে (ব্রেভিটির জন্য) এমন কিছু লিখতে পারেন যা দেখতে দেখতে: a = b = c;এবং a == b == c, আমি এমন কিছু লেখা এড়াতে চাই যা আপনি দেখতে a = b == cপারছেন বলে মনে হয়। আমি যখন প্রথম কোডটির মতো একটি লাইন দেখেছি তখন কী চলছে তা নির্ধারণ করতে কয়েক সেকেন্ড সময় নিয়েছিল। এই কোডটি দাঁড়িয়ে ছিল। আমি চারদিকে প্রথম a == 3বন্ধন চাপতে চাই, তবে স্টাইলকপ এটি পছন্দ করে না - এক নম্বর সংস্করণ ব্যবহার করার একটি ভাল কারণ। অন্য কিছু: এটি মূলত ল্যাম্বডা a => (a == 3)। ইতিমধ্যে স্ফীতিত তুচ্ছ ফাংশনে কোডের একটি লাইন কেন যুক্ত করবেন?
চাকরি

উত্তর:


7

কারণ আমি ভিজ্যুয়াল স্টুডিও, সিটিআরএল-আরভি (বা সিটিআরটিএলটি-অল্ট-ভি, যদি আপনি পুনরায় ভাগ করুন / ইন্টেলিজিজ কী বাইন্ডিং ব্যবহার করেন) দিয়ে রিশার্পার ব্যবহার করি তবে আপনার প্রথম উদাহরণটি আপনার দ্বিতীয় উদাহরণে পরিণত হয়। সুতরাং আমি যখন ডিবাগ করতে চাই তখন আমি তা সহজেই করতে পারি। এবং যদি আমি এটি পিছনে রাখতে ভুলে যাই তবে আমার খারাপ লাগবে না কারণ Ctrl-RI এটিকে পড়তে আরও সহজ করার জন্য এটি আবার ঠিক রেখে দেবে।

সিরিয়াসলি, আরও গুরুত্বপূর্ণ বিষয় নিয়ে তর্ক করতে আপনার সময় নষ্ট করুন। আপনার অগ্রণী ধনুর্বন্ধনী বা স্পেস বনাম ট্যাবগুলি কোথায় রাখবেন তা পছন্দ করুন।


5
আমি আমার বিতর্কগুলিকে অদৃশ্য চরিত্রগুলির বিষয়ে পছন্দ করতে পছন্দ করি ...
কেওসপ্যান্ডিয়ন

দুর্দান্ত টিপ, ছেলেরা! এখন আমরা ক্রমাগত একে অপরের কোডকে আগের চেয়ে আরও দ্রুত পুনরায় ফ্যাক্টর করতে পারি। এটি সম্ভবত এটির সাথে আলোচনার চেয়ে আরও বেশি সময় সাশ্রয় করবে! :)
pb01

@ পিডিআর কি সিটিআরএল + আরভি কেবল পুনরায় ভাগ করে নেওয়ার সাথে কাজ করে? বা এটি কোনও ধরণের কাস্টম কিবাইন্ড? এটা আমার জন্য কাজ করে না।
জেন দো

@ জেনাডো: আমি এটি দেখে অবাক হয়ে গেলাম যে এটি একটি রিশপার রিফ্যাক্টরিং এবং ভিএস এর সমতুল্য নেই। উত্তর সংশোধন করা হয়েছে। এর জন্যে দুঃখিত.
পিডিআর

জয়ের জন্য @ চাওসপ্যান্ডিয়ন ইউ + 200 বি!
জেসি সি স্লিকার

20

ব্যক্তিগতভাবে আমি প্রথম উদাহরণটি সহজভাবে পড়তে পেলাম। আপনি এখনও রিটার্ন স্টেটমেন্টে ব্রেক পয়েন্ট সেট a == 2করে এবং ওয়াচ উইন্ডোতে যুক্ত করে বা দ্রুত ঘড়ি ব্যবহার করে এটি ডিবাগ করতে পারেন ।

তবে এটি সত্যই ব্যক্তিগত পছন্দের বিষয়। উভয় সংস্করণ ঠিক আছে।


8
বিরতি পয়েন্ট স্থাপন সহজ করার জন্য কোড পড়তে আরও শক্তিশালী করে +1 কাজগুলি ভুলভাবে রাহুল imho
জে কে করছে।

ওয়াচ উইন্ডো বা মধ্যবর্তী উইন্ডো সবসময় এই সমস্যার সমাধান হয় না, কারণ কখনও কখনও এক্সপ্রেশনটি থ্রেডটি চালানোর প্রয়োজন হয়।
JustAnotherUserYouMayKnowOrNN

@ জাস্টঅনথর ইউজারমায় কেউকনওর নোট: হ্যাঁ ব্রেকপয়েন্টের মধ্যে থেকেই ডিবাগ উইন্ডোতে একটি বার্তা মুদ্রণের সম্ভাবনা রয়েছে। ব্রেকপয়েন্টে ডান ক্লিক করুন এবং "যখন হিট করুন ..." নির্বাচন করুন।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

এছাড়াও অভিব্যক্তিটির পার্শ্ব-প্রতিক্রিয়া থাকতে পারে, এটি আবার চালানো সমস্যার কারণ হতে পারে। ফলাফলের সাথে আরও ভাল স্টিক।
JustAnotherUserYouMayKnowOrN

1
আপনি ইতিমধ্যে রিটার্নের উপর ঘোরাঘুরি করার সময় কেন ডিবাগারগুলি কেবল আপনাকে একটি মান দেখতে দেয় না? দেখে মনে হচ্ছে এটি ঠিক সেখানে স্ট্যাকের মধ্যে রয়েছে।
candied_orange

10

কোডটি যেমন আপনার উদাহরণের মতো সহজেই পঠনযোগ্য তখন কোনও যৌক্তিক ক্রিয়াকলাপের ফলাফল হিসাবে ফিরে আসাতে কোনও ভুল নেই return a == 2। তবে, যদি রিটার্ন মানটি আরও জটিল বিবৃতি হয় বা এর মতো দেখতে লাগে looks

return a > 2? doOptionA().getResult() > makeDecision("greaterThan2") : doOptionB().getResult() == makeDecision("lessThan2");

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


2

যেমন একটি সাধারণ উদাহরণে, হয় একটি ঠিক আছে।

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


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