কোনটি আরও রক্ষণাবেক্ষণযোগ্য - যদি / অন্যথায় বা বুলিয়ান এক্সপ্রেশনের মাধ্যমে বুলিয়ান অ্যাসাইনমেন্ট হয়?


11

কোনটি আরও রক্ষণাবেক্ষণ হিসাবে বিবেচিত হবে?

if (a == b) c = true; else c = false;

অথবা

 c = (a == b);

আমি কোড কমপ্লিট সন্ধান করার চেষ্টা করেছি, কিন্তু কোনও উত্তর খুঁজে পাচ্ছি না।

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


3
দুটি সমান নয়। else c = falseআপনার প্রথমটির জন্য একটি প্রয়োজন বা ||=দ্বিতীয়টিতে অ্যাসাইনমেন্ট তৈরি করা উচিত ।

17
আমি মনে করি যে আপনাকে প্রথম ফর্মটিতে দুটি সম্পাদনা করতে হয়েছিল তা আপনার প্রশ্নের উত্তর দেয়!
জেমস

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

5
বাহ, সি # ডেভস কি সত্যিই প্রথম ফর্মটিকে গ্রহণযোগ্য বলে মনে করে? এটি ... তাদের উপর আমার বিশ্বাসকে গুরুত্বের সাথে হ্রাস করে। আমার অভিজ্ঞতায় বুলিয়ান এক্সপ্রেশনগুলির সম্পূর্ণ ভুল বোঝাবুঝিতে প্রথম ফর্মটির ব্যবহার ভারীভাবে ইঙ্গিত দেয়।
আন্দ্রেস এফ।

2
: কিছু আকর্ষণীয় রাখার শুধু এখানে অন্য কোনো বিকল্প নেইc = a==b ? true : false;
FrustratedWithFormsDesigner

উত্তর:


14

দ্বিতীয় বিকল্পটি আরও ভাল।

চতুর প্রোগ্রামিং শর্টকাটগুলি থেকে সতর্ক থাকার সুনির্দিষ্ট কারণ রয়েছে যা কোডের অভিপ্রায়কে অস্পষ্ট করে রক্ষণাবেক্ষণের ক্ষতি করে। সুতরাং, প্রশ্ন জিজ্ঞাসার জন্য আমি আপনাকে দোষ দিচ্ছি না।

যাইহোক, আমি c = (a == b);একটি চতুর কৌতুক উদাহরণ হিসাবে বিবেচনা করি না । এটি একটি সাধারণ ধারণার সরল উপস্থাপনা। আপনি পেতে পারেন হিসাবে সরাসরি-এগিয়ে।

একটি সঠিক, "রক্ষণীয়" আপনার প্রথম উদাহরণে বিন্যাস (অনুপস্থিত ধনুর্বন্ধনী এবং এক-রেখা আঁকো, যা আমি ছাড়া কি এই কোড উত্পাদ হবে একটি চালাক শর্টকাট বিবেচনা):

if (a == b)
{
    c = true; 
}
else 
{
    c = false;
}

আমার অভিজ্ঞতা হিসাবে, এই জাতীয় শব্দভাণ্ডারে সরল বুলিয়ান যুক্তি রচনা করা, ত্রুটি-প্রবণ উপায়ে "ifif" কোডের লক্ষণ। এটি আমাকে বিস্মিত করে তুলবে যে এই কোড-বেসে আরও জটিল যুক্তি কীভাবে পরিচালিত হচ্ছে।


15

প্রথমত, বুঝতে হবে যে আপনার দুটি ফর্ম সমতুল্য নয়।

if (a == b) c = true;

caসমান হলে এটি সত্যে সেট করা হবে bএবং যদি তা না হয় তবে এর মান এটি ইতিমধ্যে যা থাকবে তাই থাকবে।

c = (a == b);

caসমান হলে সত্যতে সেট করা হবে bএবং যদি তা না হয় তবে এটি মিথ্যাতে সেট করা হবে।

আপনি যদি প্রথম ফর্মের শৈলীতে দ্বিতীয় ফর্মের সমতুল্য চান তবে আপনার এটি লিখতে হবে:

if (a == b) {
  c = true;
} else c = false;

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


একেবারে ঠিক - আমি আমার প্রশ্ন আপডেট করেছি।
ব্রেট ওয়াকার

আমি দ্বিতীয় ফর্মটিকে অত্যধিক দীর্ঘ এবং জটিল বিবেচনা করি - যদি আপনি সেই প্রভাবটি চান তবে একটি বুলিয়ান অ্যাসাইনমেন্ট ব্যবহার করুন।
মনিকা পুনরায় ইনস্টল করুন - এম শ্রাইডার

11

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

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

দ্বিতীয় ফর্মটি পছন্দ করার আরেকটি কারণ হ'ল আপনি cএটি একটি একক বিবৃতিতে ঘোষণা এবং নির্ধারণ করতে পারেন

bool c = (a == b);

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


আমি দুটি লাইনে সিউডো কোড হিসাবে এক লাইনে পড়েছি
জিমি হোফা

1
" Another reason to prefer the second form is that you can declare c and assign it in a single statement" এর জন্য +1
অ্যান্ড্রেস এফ।

0

"আরও রক্ষণাবেক্ষণযোগ্য" খুব সাবজেক্টিভ হতে পারে।

আমি সাধারণত পাঠ্যযোগ্যতা এবং কোড হ্রাসের চেয়ে অভিপ্রায় পছন্দ করি। আমি মনে করি আপনি হ্রাসযুক্ত ফর্মটি ব্যবহার করে 8 টি টাইপ করা অক্ষর সংরক্ষণ করতে পারেন।

ভাষা ও সংস্কৃতিকে ভাষার চারপাশে নিয়ে যাওয়া আমার মতে 'পাঠযোগ্যতার' বৈশিষ্ট্য।

এমন সময় রয়েছে যখন ফলাফল বাইট কোডটি অনুকূলিতকরণের জন্য কোডটি হ্রাস করার জন্য পারফরম্যান্সের কারণ হতে পারে, তবে এটি কিছু প্রোফাইলের পরে সাবধানে করা উচিত।


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

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

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

1
ক্লিন বুলিয়ান এক্সপ্রেশন লেখা কোনও চালাক কৌশল নয়!
আন্দ্রেস এফ।

আমি অনুমান করি যে আপনি যদি আসলে প্রশ্নটির চেতনাকে সম্বোধন করেন এবং অন্তর্নিহিত ধারণাকে সমর্থন করার জন্য ব্যবহৃত কোনও বৌদ্ধিক উপমা না রাখেন তবে আমি আপনার মন্তব্যে আরও যোগ্যতা অর্জন করব।
জনি 1

0

দ্বিতীয়. এটি কম পুনরাবৃত্তি (শুষ্ক) আছে এবং বুঝতে কি ঘটছে সহজ, যে cকিনা বা না মান ঝুলিতে aএবং হতে bসমান।

আইএমএইচও, আরও ভাল হবে

c = a == b

আমি যেমন লিখতাম

  • 1 + 2 + 3 পরিবর্তে ((1 + 2) + 3)
  • 5 + 3 * 7 পরিবর্তে (5 + (3 * 7))

স্পষ্টত এবং তুচ্ছভাবে অপ্রয়োজনীয় কোড কোনও পুণ্য নয়। এটা বিশৃঙ্খল।


-4

নিচে ভোটারগণ, দয়া করে আমার সংশোধিত উত্তরের সাথে কী দোষ রয়েছে তা বিশদভাবে জানান।

হ্যাঁ, c = (a == b);পড়া কঠিন হতে পারে (আরও খারাপ, স্টাইলকপ অপ্রয়োজনীয় প্রথম বন্ধনী সম্পর্কে অভিযোগ করে) তবে আমি এখনও এর সরলতা পছন্দ করি a == b। অতএব, এখানে আমি যা যখন উভয় ব্যবহার করতে চান হয় aএবং bএকই আছেন:

private static bool NoPeriod
{
    get
    {
        return this.MyWaveLength == this.HerWaveLength;
    }
}

এবং তারপরে আপনি এটি করতে পারেন: this.c = this.NoPeriodপরিবর্তে:

this.c = this.MyWavelength == this.HerWaveLength;

1
সুতরাং আপনি মানে return this.MyWaveLength = this.HerWaveLength;বা return this.MyWaveLength == this.HerWaveLength;পরিবর্তে?
জেসি সি স্লিকার 21

5
কি!? c = (a == b);ত্রুটি-ঝুঁকিপূর্ণ নয়। মূল প্রশ্নের প্রথম ফর্মটি আরও ত্রুটিযুক্ত প্রবণতা হিসাবে দেখা যায় যে ওপি নিজেই বাগগুলি সমাধানের জন্য তার / তার প্রশ্নটি সম্পাদনা করে!
আন্দ্রেস এফ।

আমার ধারণা আপনার প্রস্তাবিত সমাধানটিতে একটি বাগ = বনাম ==
ওন্দ্রা

@ ওন্দ্র মোরস্কে, ধন্যবাদ ... সংকলকটি আমার জন্য এটি ধরত।
চাকরী

6
আমি স্টাইলকপটির সাথে পরিচিত নই, তবে এটি আপনাকে যদি অযথা প্রথম বন্ধনীগুলি খারাপ বলে দেয়, আপনার এটি বন্ধ করা উচিত। সংকলকের জন্য অপ্রয়োজনীয় বন্ধনীগুলি প্রয়োজনীয় নয় তবে এগুলি মানুষের চোখের জন্য খুব সুন্দর হতে পারে। আপনি যদি সি = a == খ লিখেছেন; সংকলকটি ঠিক ঠিক এটি বের করতে পারে তবে এটি মানুষের পক্ষে আরও শক্ত।
মাইকেল শ 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.