== সত্যের বাইরে একটি বড় চুক্তি করেন?


105

আমার এক সহকর্মী আছেন যারা নিয়মিত লিখেছেন:

if (someBool == true)

এটা আমাকে দেয়াল চালায়! আমি কি এটির একটি বড় চুক্তি করব বা কেবল এটি ফেলে দেব?


12
আমি সুস্পষ্ট if (some_flag == true)কিন্তু অন্তর্নিহিত if (is_something)বা পছন্দ if (has_something)। পরিবর্তনশীল নামগুলি নোট করুন।
ফ্রেডওভারফ্লো

69
আপনার সহকর্মীকে মনে করিয়ে দিন যে প্রকারটিও someBool == trueবুলিয়ান, সুতরাং একই যুক্তির দ্বারা এটি হওয়া উচিত if ((someBool == true) == true)
মাইক সিমুর

2
@ জিএসটো: আমি মনে করি আপনি এটি জানেন তবে পিএইচপি-তে আপনি কোনও কিছুকে "কাস্ট" করার জন্য এটি করতে পারেন এবং এটি আসলে কার্যকর হতে পারে।
জিনাক করুন

2
@ zneak বা আপনি পরিষ্কার এবং ব্যবহার হতে পারে $var = (bool) some_expression। এবং বেশিরভাগ ক্ষেত্রে, এমনকি পিএইচপি গতিশীলভাবে প্রয়োজনীয় রূপান্তরগুলি করবে বলে কিছু যায় আসে না।
waiwai933

4
সর্বদা ধ্রুবকটি প্রথমে পরীক্ষা করুন, (সত্য == কিছু কিছু), যদি আপনি দুর্ঘটনাক্রমে == পরিবর্তে = টাইপ করেন তবে [হ্যাঁ আমি মজা করছি!]
স্টিভেন এ। লো

উত্তর:


126

এটি কেবল অনর্থক কোড, জীবন বা মৃত্যু নয়। যাহোক....

এটি যদি অনেক someBoolকিছু হয়ে থাকে তবে নামকরণ কীভাবে করা হচ্ছে তাতে সমস্যা হতে পারে । একটি ভাল নাম এর প্রয়োজনীয়তা অপসারণের দিকে অনেক বেশি এগিয়ে যেতে পারে==true

if(IsSomeCondition)

অথবা

if(hasCondition)

অথবা

if(somethingExists)

উদাহরণ স্বরূপ.


এটি আমার কাছে সবচেয়ে সত্য বাজে। স্বচ্ছতা এবং নামকরণের শিল্প সম্পর্কে এটি সমস্ত, মূল বাক্য গঠনটি তেমন খারাপ নয় তবে এটি আরও ভাল কোডের সঠিক পথ।
টিজেবি

2
আমাকে মার! যথাযথ নামকরণ ব্যতীত, আরও সংকুচিত সমতার বিষয়টি মোটেই বোঝা যায় না।
ট্রয় হান্ট

4
someBool == trueস্বচ্ছতার জন্য আমাকে বেশ কয়েকবার লিগ্যাসি কোড ব্যবহার করতে হয়েছিল । তবে আমি যদি স্ক্র্যাচ থেকে লিখি তবে আমি সেই অনুযায়ী চলকের নাম রাখি এবং ব্যবহার করিif (isSomething)
নিমক্যাপ

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

আমি সম্মতি জানাই, এটি পাঠযোগ্যতা সম্পর্কে সমস্ত কিছু। যদি ভেরিয়েবলগুলি ভাল নামকরণ করা হয় তবে আপনার এটির দরকার নেই। যদি অভিব্যক্তিটি এর সাথে আরও ভালভাবে পড়তে হয় তবে আমি "== সত্য" এর পক্ষে যেতে পারি, আপনি যদি (= (!)) "পরিবর্তে" (কুৎসিত) "" এর পরিবর্তে "== মিথ্যা" ব্যবহার করেন তবে এটিও সামঞ্জস্যপূর্ণ।
রনি ব্রেন্ডেল

71

যখন আমি দেখি someBool == true, আমি সাহায্য করতে পারি না তবে অনুভব করতে পারি না যে প্রোগ্রামার মূল্যায়নের ধারণাকে অভ্যন্তরীণ করে নি , যা একটি দুর্দান্ত মৌলিক ঘাটতি।

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

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


আমি এত তাড়াতাড়ি অভ্যাসের এটিকে খড়ি করব না। আমি পেশাদার প্রোগ্রামারদের মুখ থেকে কিছু সত্যই চমকপ্রদ জিনিস শুনেছি। সাধারণত grokkers, এক দ্বারা তারপরে খুব শীঘ্রই অনুসৃত "এই কিভাবে হয়নি কখনও কাজ?"
ড্যাশ-টম-ব্যাং

12
মূল্যায়ন সম্পর্কে আন্তরিকভাবে সম্মত হন। উপলক্ষে আমি ভাবছিলাম, "এটি কোথায় থামবে?" যদি ((((X == সত্য) == সত্য) == সত্য) = মিথ্যা!) // ইত্যাদি ...
yawmark

1
কখনও কখনও আমি লিখতাম if (c == true) return true; else return false;, তবে 99% সময় (1% সেখানে থাকায় আমি কখনই নিশ্চিত হতে পারি না যে আমি কিছু মিস করি না) আমি তাত্ক্ষণিকভাবে লক্ষ্য করব এবং পুরো জিনিসটি প্রতিস্থাপন করব return c। আমি আশা করি বেশিরভাগ দক্ষ প্রোগ্রামাররা যদি তাদের কেরিয়ারের শুরুতে অভ্যাসটি গড়ে তোলে তবে তাদের অনুরূপ কিছু করা উচিত। আমি যা আশা করব না তা হ'ল ডাব্লুটিএফ সাড়া।
মিথ্যা রায়ান

1
ওহ ছেলে, ভাবনার শিল্প। আমি আক্ষরিকভাবে এইটি গত সপ্তাহে আমাদের কোডবেজে এসেছি। if (!someCondition) { someCondition = false; }আমি কিছু (এর, অনেক) রিডানড্যান্সির সাথে সাথে আমাদের কোডে কিছু অসম্ভবতা দেখেছি, তবে এইটি এত সহজ ছিল যে কেউ ভাবতে পেরে এতটাই উদ্বেগজনক হয়েছিল যে এটি আসলে কেউ লিখেছিল। একাধিকবার, এমনকি।
অ্যান্টনি পেগ্রাম

1
কেবলমাত্র নোট করুন যে আমি কয়েকটি কেস দেখেছি if(x) x=true;যার মধ্যে অপ্রয়োজনীয় ঘটনা ছিল না, বরং এর পরিবর্তে x=!!x;(x থেকে 0/1 স্বাভাবিককরণ)
জেকেরিয়ান

58

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

বিকল্পভাবে আপনি এই পদ্ধতির চেষ্টা করতে পারেন:
আপনি: আপনি বুলিয়ানদের মূল্যায়নের জন্য নিম্নলিখিত কোড কনভেনশনটি ব্যবহার শুরু করতে পারেন?

if (someBool==true)&&(true==true) {}

তাদের: আমরা কেন এটি করব? এই বিবৃতিটির দ্বিতীয়ার্ধটি অনর্থক, এটি সর্বদা সত্যের কাছে মূল্যায়ন করবে।

আপনি: জর্জের দ্বারা, আপনি ঠিক বলেছেন। বোকা আমাকে। আসুন কেবল তখন সমস্ত অপ্রয়োজনীয় সংস্করণ ছাড়াই। কেমন?

if (someBool) {}

6
হ্যাঁ, রাজি। এটি নির্বোধ, কিন্তু আপনি আপনার লড়াই বাছাই করতে হবে, এবং এই কোডটি সত্যই আপনার সহকর্মী এটি করবে তা করছে। এটি একটি অ-উল্লেখ করে "আপনার সাথে কী ঘটছে ?!" ধরণের উপায়, তারপর এটি ফেলে দিন। যদিও তারা যদি মত বিষ্ঠা কাছে শুরু "যদি (! SomeBool = সত্য)" বা "যদি (! SomeBool == সত্য)" অথবা অন্য সব convolutions, যে একটি যুদ্ধ অবচয় মূল্য .... হতে পারে
BlairHippo

3
(কিছুবুল == মিথ্যা) কীভাবে এর চেয়ে খারাপ (কিছুবাউল == সত্য)?
FinnNk

5
true=trueকম্পাইল না করে, আপনি করতে পারবেন না দায়িত্ব অর্পণ করা true;-)
fredoverflow

1
আমি অভ্যস্ত হয়েছি if(somebool == false)বা করেছি !=, তবে সর্বদা মিথ্যা এবং সত্য নয়। আমি এটিকে অপ্রয়োজনীয় বলে মনে করি, তবে কোডিং মানটি যেহেতু if()একটি ফাংশনের মতো দেখতে প্যাকেজগুলির মধ্যে হোয়াইটস্পেস বলে মনে হচ্ছে এটি পড়তে আমাকে সহায়তা করে। নিজে থেকে, একটি বুল একটি বুল, তবে if (somePointer)উড়ে যায় না; আমি পছন্দ করি if (somePointer != NULL)যেহেতু একটি পয়েন্টারটি বুল নয়।
ড্যাশ-টম-ব্যাং

5
এটি পঠনযোগ্যতা সম্পর্কে, অযৌক্তিক বা (মাইক্রো) -রূপায়ন সম্পর্কে নয়
রনি ব্রেন্ডেল

45

আমি মনে করি যে, যদি আপনার সহকর্মীদের কাছে এতটা তুচ্ছ কিছু হয় তবে আপনার সবচেয়ে বড় সমস্যাটি হওয়া উচিত you


5
ঠিক আছে, পরিপূর্ণতার জন্য প্রচেষ্টা করা ভাল তবে অবশ্যই আরও বড় মাছ ভাজা রয়েছে
TJB

3
আমি মনে করি আপনি আলোচনার যোগ্য প্রতিটি সমস্যা সম্পর্কে এটি বলেছেন।
ডেভ ভ্যান ডেন এয়েণ্ডে

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

42

আপনার অবশ্যই এই খারাপ অভ্যাসটি বন্ধ করা উচিত। আলতো করে ...

দ্বিগুণ সমান চিহ্নগুলি লিখতে ভুলে যাওয়া সহজ, কোডটি রূপান্তরিত করে:

if (someBool = true)

উদাহরণস্বরূপ সি # এ এটি কেবল একটি সতর্কতা তৈরি করবে, ত্রুটি নয়। সুতরাং আপনি যদি সতর্কতাগুলিকে ত্রুটি হিসাবে বিবেচনা না করেন তবে কোডটি চলবে, ভেরিয়েবলটিকে সত্যে সেট করুন এবং সর্বদা শর্তটি প্রবেশ করান।


6
এটি কোনও প্রাসঙ্গিক যুক্তি নয়। আপনি যদি এ জাতীয় ভাষায় কাজ করে থাকেন তবে আপনি সত্যটিকে অন্যদিকে সরিয়ে নিতে পারেন। প্রশ্নটি একেবারে সত্যকে অন্তর্ভুক্ত করবেন কিনা তা নিয়ে।
ক্যাম

8
@ ক্যাম: পয়েন্টটি মিস করছি আপনি। পিছনে যুক্তি আমি প্রস্তাব করছি না।
গুফা

15
@ ক্যাম - এটি কখন সমস্যা হতে পারে তার একটি বাস্তব বিশ্বের উদাহরণ দিচ্ছেন তিনি। আমি বলবো এটি বেশ প্রাসঙ্গিক।
কেওসপ্যান্ডিয়ন

1
@ গুফা ক্যাম ঠিক ঠিক আছে। এটি যদি ব্লকগুলিতে == (যে কোনও টাইপ) ব্যবহার বন্ধ করার কারণ নয় is
রনি ব্রেন্ডেল

2
@ রনি: না, এটি কোনও প্রকারের সাথে ঘটতে পারে না (যদি না ভাষা আসলে কোনও শর্ত হিসাবে কোনও প্রকারের অনুমতি দেয়)। বিবৃতিটি if (answer = 42) {}কেবল সংকলন করে না কারণ অভিব্যক্তিটি মুল নয়।
গুফা 14

21

আমি আপনার সাথে একমত, কিন্তু আমি এখানে শয়তানের উকিল খেলতে যাচ্ছি:


ভাষা এবং ভেরিয়েবলের নামের উপর নির্ভর করে x == সত্য উপযুক্ত:

অবিচ্ছেদ্য ধরণের জন্য স্ট্যাটিক টাইপিং এবং টাইপ জবরদস্তি সহ একটি ভাষার নিম্নলিখিত পরিস্থিতি বিবেচনা করুন:

if (actionsAllowed){
    //do actions, since they are allowed
    //...
}

কোডটির এই বিভাগটি পড়ছেন এমন কেউ যদি তাত্ক্ষণিকভাবে বুঝতে না পারে যে ক্রিয়াকলাপ অনুমোদিত হয় এমন একটি বুলিয়ান ভেরিয়েবল - এটি কোনও পূর্ণসংখ্যারও হতে পারে, অনুমোদিত কর্মের সংখ্যাটি উপস্থাপন করে। সুতরাং == সত্য যোগ করে, এটি স্পষ্ট হয়ে যায় যে এক্স একটি বুলিয়ান, এবং কোনও বুলিয়ানের সাথে কোনও পূর্ণসংখ্যা জোর করা হয় না:

if (actionsAllowed == true){
    //do actions, since they are allowed
    //...
}

13
পঠনযোগ্যতা == গুডথিং
Muad'Dib

5
যদি ((পঠনযোগ্যতা == গুডহিং)) == সত্য) ...
জোয়েলফ্যান

1
বুল ইজগডথিং = পঠনযোগ্যতা? সত্য: (কোডিংস স্ট্যান্ডার্ডস? সত্য: (অভ্যন্তরীণঅফকনসেপ্ট? সত্য: মিথ্যা));
জনক

17
সুতরাং ভেরিয়েবলটির নতুন নামকরণ করুন actionsAreAllowed
গ্রীম পেরো

9
লেখার মাধ্যমে if (x) { ...আপনি ইতিমধ্যে জোর দিয়ে গেছেন যে xএটি একটি বুলিয়ান বা বুলিয়ান রূপান্তরিত। আপনি যাকে বলছেন তা অপ্রাসঙ্গিক।
ড্যানিয়েল আরউইকার

15

অযোগ্য বুলগুলি সম্পর্কে কী?

bool? MyFlag = null;

if (MyFlag == true)
    ;  

if (MyFlag)  // error, doesn't compile!
    ; 

যদি (মাইফ্লাগ.ভ্যালু)
জনক

1
সমস্ত ভাষায় অবিরাম বুল থাকে না এবং যাঁরা করেন তাদের অনেকগুলিই আপনার দ্বিতীয় নির্মাণটিকে গ্রহণ করবে।
অপরাহ্ন zneak

1
@ জোহ্যাঙ্ক: "যদি (মাইফ্ল্যাগ.ভ্যালু)" আপনি যা চান তা সত্যিই না করতে পারে কারণ এটি মাইফ্ল্যাজ নাল থাকলে (যা আপনি মাইফ্লেগ.হ্যাসভ্যালু পরীক্ষা করে পরীক্ষা করতে পারেন) যদি এটি ব্যতিক্রম করতে পারে।
লুডোভিচ চবন্ত

4
এটাই আমার পোষ্যক্ষেত্রগুলি নালাগুলি বুলস সহ :) :)
জারোদ ডিকসন

3
bool,? isValid = নাল; যদি (ইসভেদ ?? মিথ্যা);
স্কোলিমা

11

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

বলা হচ্ছে, আমি == trueশর্তাধীন বিবৃতি যোগ করার কোনও সমস্যা দেখছি না । প্রকৃতপক্ষে, == falseনেতিবাচক অবস্থার জন্য পরীক্ষা করার সময় আমি একটি নেতৃস্থানীয় বিস্মৃতিবোধের বিপরীতে হিসাবে ব্যবহার করার অভ্যাসে আছি । আমি মনে করি এটি আরও পাঠযোগ্য।

যদি কোনও প্রতিষ্ঠিত সম্মেলন হয় তবে আমি বলি পরিবর্তনের কারণ না থাকলে এটি অনুসরণ করুন। যাইহোক, এটি সম্পর্কে একটি বড় দুর্গন্ধ উত্থাপন মূল্যবান নয়।


1
আপনার ভাষার উপর নির্ভর করে, কিছু ভ্যালু সম্ভবত এটি সত্যের সাথে মূল্যায়ন করলেও সত্যের সমতুল্য হতে পারে না। উদাহরণস্বরূপ, (9 == True)পাইথনে মিথ্যাতে মূল্যায়ন করা হয় এবং আমি সি ++ তেও একইরকম কল্পনা করব।
ড্যাশ-টম-ব্যাং

কোড অঞ্চলগুলি এবং নেতৃস্থানীয় আন্ডারস্কোরগুলি আমাকে লোকের মুখে ঘুষি মারতে চায়।
MGOwen

11

স্বীকারোক্তি। আমি লোক। লজ্জা, লজ্জা। এটি আমি কীভাবে শিখেছি, এবং এটিই আমার মাথায় কীভাবে "অটো ফর্ম্যাট" হয়। আমি যখন জোলের পছন্দের সিনট্যাক্সটি ব্যবহার করি তখনই যখন বুল ভেরিয়েবলটির "ক্রিয়াকলাপ" এর মতো একটি ক্রিয়াপদ রয়েছে। আমার ক্রিয়াটি প্রয়োজন, এটি "হয়", "" পারে "," "করিয়াছে," হোক না কেন আমার ক্রম "সমান" প্রদানের জন্য == প্রয়োজন। আমি কখনও এই অভ্যাসটি ভাঙতে পারি না, তাই আপনি যদি রাস্তায় আমাকে 'হ্যালো' না বলে থাকেন তবে আমি বুঝতে পারি।


7
এটি কোনও খারাপ জিনিস নয়। প্রকৃত পাঠ্যের মতো পড়া কোডটি অন্তর্নিহিত ফু এর চেয়ে অনেক ভাল। পড়ার যোগ্যতার জন্য সেই অভ্যাসটি রাখুন।
রনি ব্রেন্ডেল

11

আমাকে "বুলিয়ান পাগলামি কোড" এর মতো মনে করিয়ে দিন

if(someBool == true)
   otherBool = false;
else
   otherBool = true

পরিবর্তে:

 otherBool = !someBool

এটি মজার বিষয়, আমাকে এমন একটি ব্যবস্থা বজায় রাখতে হয়েছিল যা এই সমস্ত জায়গায় ছড়িয়ে পড়েছিল। এটা আমাকে উন্মাদ করে দিয়েছে।
Tjaart

8

ব্যক্তিগতভাবে, আমি সি ভিত্তিক ভাষায় "না" বলার উপায়টি দৃ strongly়ভাবে অপছন্দ করি। সেই ছোট্ট বিস্ময়বোধক চিহ্নটি উপেক্ষা করা খুব সহজ।

তাই আমি এটি পুরোপুরি লিখুন:

if (someCondition == false) {

কিছুক্ষণ পড়ার পরে, আমি খুব সাথে প্রতিসামগ্রী চাই

if (someCondition == true) {

সুতরাং এটির !পরিবর্তে সি এর একটি শৈল্পিক বিবেচনা করুন not


3
সি ++ আসলে হয়েছেnot অপারেটর, এবং তাই সি আছে (একবার আপনি স্ট্যান্ডার্ড হেডার অন্তর্ভুক্ত <iso646.h>)। আপনাকে না চান তাহলে (অথবা করা যাবে না) এই হেডার ব্যবহার করুন (অথবা যদি আপনি জাভা বা C # সঙ্গে আটকে করছি), আমি বিস্ময়বোধক চিহ্ন পরে একটি স্পেস নির্বাণ সুপারিশ: if (! condition)। এটি এটিকে কিছুটা স্পষ্ট করে তোলে।
কনরাড রুডলফ

1
আমি জাভা করি notএকটি বিকল্প নয়।

6

এটি ভাষার উপর নির্ভর করে তবে এটি সাধারণত একটি খারাপ ধারণা ...

সি তে, এটি কখনই করবেন না । এমন একটি পরিস্থিতি খুঁজে পাওয়া খুব সহজ যেখানে আপনি যে মানটি পরীক্ষা করছেন এটি মিথ্যা নয় (শূন্য নয়), তবে এটি "সত্য" হিসাবে সংজ্ঞায়িত একক মানের সমানও নয়।

রুবিতে, এটি কেবল তখনই করুন যদি আপনি বুলিয়ান সত্য ব্যতীত সমস্ত কিছুতে ব্যর্থ হতে চান এমন বিষয়ে নিশ্চিত হন।

সি ++ এবং একটি বুল টাইপ সহ অন্যান্য স্থিত ভাষায়, এটি অতিরিক্ত কাজ নয়, এবং আপনি =পরিবর্তে ভুল টাইপ করলে প্রোগ্রামিং ত্রুটি ==বা মন্তব্যে উল্লিখিত হিসাবে প্রচারের ত্রুটিগুলি হতে পারে।


প্রকৃতপক্ষে, ভাষাগুলিতে যেখানে অ্যাসাইনমেন্ট অপারেটর একটি মান প্রদান করে ... সি ++ এর মতো ... if (b == true) {কেবলমাত্র অতিরিক্ত কাজ নয়। এটি কিছুটা ঝুঁকিপূর্ণও কারণ আপনি দুর্ঘটনাক্রমে নির্ধারিত হতে trueপারে b
স্টিফেন সি

4
এটি কেবল সি ++ এ অপ্রয়োজনীয় নয়, এটি বিপজ্জনক। আপনি যদি লিখেন if (b == true), এবং bএটি একটি বুল নয়, ধরণের রূপান্তরগুলি ভুল পথে চলে। এ boolএকটি অবিচ্ছেদ্য প্রকার যা সাধারণত 1 মান সহ একটি উপযুক্ত অবিচ্ছেদ্য প্রকারে প্রচারিত হয় যদি আপনি লিখেন, বলুন, int b(2); if (b == true)তবে প্রকারে জোর করা না হয়ে তুলনার উদ্দেশ্যে 1 মান দিয়ে 1 trueহয়ে যায় যা সঠিক ফলাফল দেয়। intbbool
ডেভিড থর্নলি

@ ডেভিডথর্নলি, আপনার সংকলকটিতে সতর্কতা চালু করুন। ত্রুটি হিসাবে সতর্কবার্তা ট্রিটিং ভাল আত্মরক্ষামূলক প্রোগ্রামিং কৌশল বদলে এড়ানো ==
অ্যাবিক্স

5

তোর কি খারাপ লাগছে? কেমন:

if(someCondition) {
  return true;
} else {
  return false;
}

2
ছেলে কতবার আমি এই দেখেছি। এটি রিশ্যার্পারের মতো কোনও সরঞ্জামের জন্য ভাল কেস তৈরি করে।
কাজ

হ্যাঁ - আপনি যদি ক্লোড ভাড়া নেন, তবে রিশার্পার কিনুন।
কर्क ব্রডহર્স্ট

4

আমি পছন্দ করি

if (bVal)

অথবা

if (!bVal)

খুব, তবে আমি আশঙ্কা করি যে এটি আনার ফলে লোকেরা প্রসন্ন হবে, তাই আমার পরামর্শটি এটি ভুলে যাওয়া। দুঃখিত!


4
যে সব ভালবাসা পবিত্র, যতদিন এটা হিসাবে না if (!bNotVal) বা if (bNotVal)এমনকি প্রথম স্থানে। নামগুলিতে উঘ নেতিবাচক বিষয়গুলি পড়তে আরও শক্ত করে তোলে।
ড্যাশ-টম-ব্যাং

2
আমি এমন একটি দেবকে জানতাম যিনি নট কানেক্টেড নন; যদি (isNotConnected == সত্য) ...
ইয়াহ

4

আপনার তাকে বলা উচিত যে তিনি এটি ভুল করছেন।

এর

যদি (সত্য == কিছু শান্ত) {

}

যদি সে কখনও ভুলে যায় = তবে সে তার লেখার রীতিতে বড় সমস্যায় পড়ে।


3

কেমন

if (x == "true")

কেন এটি একটি STRING ?!


আমি ঠিক কিছু লিগ্যাসি পিএইচপি কোডে কাজ করছি এবং মাঝে মাঝে আমি এর মতো কিছু পাই if(preg_match('/title/', implode($_POST))){। পিএইচপি, যথেষ্ট বলেছে, আমার আরও ভাল চাকরি খুঁজে পাওয়া দরকার।
কিও

4
হ্যাঁ, আমি এটিও দেখতে পাচ্ছি (x == "1") তবে এটি সাধারণত ডিবি ডিজাইনের ক্ষেত্রে হয়।
atfergs

xব্যবহারকারীর ইনপুট (কনফিগারেশন ফাইল বা ওয়েব পরিষেবা, উদাহরণস্বরূপ) থেকে এলে আমি অনুরূপ নির্মাণ ব্যবহার করেছি । যাইহোক, আমি সাধারণত অন্যান্য সত্য মানগুলিকে অনুমতি দিই, তাই এটি আরও বেশি পছন্দ হয়ে যায়if x.lower().strip() in ["true", "yes", "on", "1"]
এ্যাসওয়াল্ড


3

আমি কোড লিখি যে!

এখানে কেন:

"যদি ব্লা == সত্য" বাক্যটির মতো পড়ে, যেখানে "যদি ব্লাফ" অনেক ক্ষেত্রে দেখা যায় না। আসল কোডটি পড়ার সময় এটি কেবল ভুল শোনাচ্ছে।

এছাড়াও সংকলকটি যদি ব্লকগুলি অ্যাসাইনমেন্ট সম্পর্কে সতর্ক করে, সুতরাং == সত্য ব্যবহারে কোনও বিপদ নেই। (এটিকে বিভ্রান্ত করে =)

এছাড়াও ছেলেরাও যারা "== সত্য" লিখেন না, সেই "! ()" ব্যবহার করুন "== মিথ্যা"? আমি এটি সত্যিই কুৎসিত মনে। এবং যদি আপনি "== মিথ্যা" ব্যবহার করেন তবে সত্যটি যাচাইয়ের দুটি স্বতন্ত্র উপায়ের পরিবর্তে এটি "== সত্য" ব্যবহারের সাথে কেবলমাত্র সামঞ্জস্যপূর্ণ।


3
আপনি বলছেন "যদি ব্লে" শব্দের মতো পড়েন না ... তার মানে আপনার ভেরিয়েবলটির সঠিক নামকরণ করা হয়নি ... এতে কী সমস্যা আছে: যদি (ইউজারহ্যাসআরাইটস) ডুসামিংথিং ()
জোয়েলফ্যান

"অনেক ক্ষেত্রে". হ্যাঁ তুমিই ঠিক. পুনরায় নামকরণও ঠিক আছে। "যদি (কিউবিজেট :: গ্রহণড্রোপস () == সত্য)" দিয়ে আপনার নাম পরিবর্তন করার সম্ভাবনা নেই। সম্ভবত এটির নামকরণ করা ভাল হবেএসেপ্টড্রপস () ... এটি কোনও ঝামেলা খুব বেশি (এবং কোনও এপিআইতে এই বাদ দেওয়া-বিধিটি ব্যবহার করে ধারাবাহিক হওয়া অসম্ভব), সুতরাং অন্যান্য "== যাই হোক না কেন" -আইফিসের সাথে সামঞ্জস্য থাকা, আমি দৃ strongly়ভাবে এটি বাদ না দেওয়ার পরামর্শ দিচ্ছি, সুতরাং এটি "চেহারা" আলাদা নয়, এইভাবে সামঞ্জস্যপূর্ণ দেখায়।
রনি ব্রেন্ডেল

3

মনে রাখবেন আপনি একটি দলের অংশ হিসাবে কাজ করছেন, সুতরাং আপনার এই জিনিসগুলি একসাথে কাজ করা দরকার। "অন্যের সাথে সুন্দর নাটক" প্রাথমিক বিদ্যালয়ের পরেও একটি গুরুত্বপূর্ণ ব্যক্তিত্বের বৈশিষ্ট্য :)


2

সাধারণত '== সত্য' বাদ যাবে, তবে এটি আপনার দলের কোডিং মানগুলিতে অন্তর্ভুক্ত না করা পর্যন্ত এটি আলোচনা করা এক মিনিটও কমই মূল্যবান।


3
এছাড়াও, যদি এটি দলের কোডিং মানগুলিতে থাকে তবে আপনার ট্রিবিয়া থেকে এই জাতীয়তা থেকে মুক্তি পাওয়ার জন্য আপনার সত্যিকারের মানগুলি পুনরায় মূল্যায়ন করতে হবে।
জনএফএক্স

একমত! যদিও
সেক্ষেত্রে

2

যদিও আমি প্রধানত সি # বিকাশকারী হিসাবে সম্মত, আমি বলতে পারি না এটি সর্বদা ক্ষেত্রে। উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে, === টাইপ কোলেসেসেন্স সম্পাদন করবে। সুতরাং ভার x = 3 ধরে তারপর:

if(x) --> true

যখন

if (x === true) --> false

আমি অনুমান করি এটি == এর থেকে আলাদা, যেহেতু জেএসে আমি (x == সত্য) ব্যবহার না করে তবে কিছু ভাবতে চাই।

এই ধরণের স্পর্শটি অন্য একটি বিষয় যা আমার অফিসে উঠে এসেছে:

bool b = false;

সি # তে, বুল বি; যথেষ্ট হবে এবং কে মিথ্যা বলে চিহ্নিত করবে । তবে উপরের লাইনটি লেখার জন্য এটি আরও স্পষ্ট এবং কোনওভাবেই অপ্টিমাইজেশনের সময় সংকলকটি ছিঁড়ে ফেলা উচিত।

সুতরাং আমি অনুমান করি আমার বক্তব্যটি হ'ল এটি সর্বদা এতটা স্পষ্ট নয় যেটি ভাল অনুশীলন এবং এটির প্রচুর পরিমাণ পছন্দ এবং সেইসাথে ভাষার বৈশিষ্ট্যগুলি / কুইর্কগুলিতে উত্সাহিত হয়।


bool b;bক্ষেত্র হলে কেবল মিথ্যাতে সূচনা করে । আপনাকে অবশ্যই স্থানীয় ভেরিয়েবলগুলি সুস্পষ্টভাবে আরম্ভ করতে হবে।
ম্যাথু ফ্ল্যাশেন

+1 সম্মত হয়েছে। অন্যান্য (স্ক্রিপ্টিং) ভাষার ক্ষেত্রেও এটি একই সমস্যা। আপনি বুলিয়ান trueবা কেবল "সত্য" এর জন্য পরীক্ষা করতে চান তবে আপনাকে অবশ্যই স্পষ্ট করতে হবে । উদাহরণস্বরূপ, কোনও খালি খালি স্ট্রিং বিবেচনা করা হয় == trueতবে === trueকিছু ভাষায় নয়।
মার্টিন উইকম্যান

2

হ্যাঁ হ্যাঁ, তবে ভেরিয়েবলটি যদি অযোগ্য হয়? (Bool,?)

কিছু ভাষায় (সি #) 'সত্য' এর সাথে কাস্ট বা তুলনা করা প্রয়োজন।

bool? isAccepted = true;

if((bool)isAccepted)
{...}

if(isAccepted == true)
{...}

2

অল্প বয়স্করা বিধিগুলি জানেন তবে পুরানো ব্যতিক্রমগুলি জানেন;)

সর্বশেষে C#, আপনি যদি কারও সাথে কাজ করে থাকেন null-able boolতবে আপনাকে তা করতে হবে:

bool? x = null;
bool? y = true;
bool? z = false;
if (x == true || y == true || z == true) {
    // That was the only way that is reasonably readable that I know of
    // to accomplish this expression.
}

যদি ট্রিস্টেট কোনও সমস্যা না হয় তবে সাধারণত true/ এর সাথে কোনও কিছুর তুলনা করার কারণ থাকতে হবে না True। যাইহোক, ইন Pythonএবং বেশ কয়েকটি অন্যান্য ভাষায় C/C++আপনি ifএকটি নন-বিউল এক্সপ্রেশনতে পারফরম্যান্স করতে পারেন । এই ভাষার পূর্ণসংখ্যা, পয়েন্টার, তালিকাগুলি ইত্যাদিকে সত্য বা মিথ্যা হিসাবে ব্যাখ্যা করার জন্য অনন্য নিয়ম রয়েছে। একসময় আপনি এটি চান না। উদাহরণস্বরূপ, এই পাইথন স্নিপেটে:

x = True
y = 'abcdef'
z1 = x and y
z2 = (x == True) and (y == True)

এখানে zহওয়া উচিত True, তবে z2হওয়া উচিত False। এখন, একটি Clojureভাষা এটি আরও একটি উপায়ে পৌঁছেছে - সেখানে andফাংশনটি অগত্যা ক এর সাথে মূল্যায়ন করে না bool, তবে এটি ifএটি পরিচালনা করতে পারে।

ভাষা নির্বিশেষে, যে কোনও সময় আপনি নিজেকে কোনও কিছুর সাথে তুলনা করতে দেখেন Trueবা Falseসম্ভবত এটি মন্তব্য করার মতো।


প্রথম সমস্যাটি ভয়াবহ ভেরিয়েবলের নাম ব্যবহার করে একটি মিথ্যা প্রমাণ আইএমও থেকে শুরু হয়েছিল। ধরুন X, Y, Z নামকরণ হয়েছে notExceptButHasX, exceptNotButIsntY, doNotUnlessIsExceptZ? কীভাবে এটি আপনার সমস্যার পাঠযোগ্যতার জন্য তৈরি করে? X, Y, Z "isEnabled" মত কিছু নামে ছিল, "isEffective", "hasProperty", তারপরে আপনার বিবৃতি হয়ে isEnabled || isEffective || hasPropertyযা অনেক বেশী তুলনায় চেয়ে পাঠযোগ্য trueবা false
টমাস

1

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

এই কোডিং শৈলীর কারণে আমি গত বছর খুব সূক্ষ্ম ত্রুটির মুখোমুখি হয়েছি যা সনাক্ত করা খুব কঠিন কারণ কারও চোখ এ জাতীয় নির্মাণের জন্য চকচকে করে। আপনি ভাববেন, "কীভাবে ভুল হতে পারে?" এটি "(var)" বা "(! Var)" এর মতো সুস্পষ্ট বোঝার এক্সপ্রেশনগুলির ক্ষেত্রেও সত্য, যে আপনি তাদের আচরণ যাচাই না করেই তাদের পড়েন বা কোড করেন।

সুতরাং কোডবেজে এই জাতীয় বাগের অস্তিত্ব হ্রাস করতে আমি কয়েকটি কোডিং মানক চালু করেছি এবং ভবিষ্যতে এই সূক্ষ্ম বাগগুলি দুর্ঘটনাক্রমে কমে যাওয়ার সম্ভাবনা রয়েছে।

  1. সমস্ত অভিব্যক্তি অবশ্যই তাদের উদ্দেশ্য অনুযায়ী প্যারেন্থাইজ করা উচিত।
  2. সমস্ত বুলিয়ান পরীক্ষা অবশ্যই "যেমনবুল! = মিথ্যা" এর মতো নেতিবাচকভাবে প্রকাশ করা উচিত।

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


1
সত্য / মিথ্যা ব্যতীত অন্য কিছু হতে সক্ষম এমন কিছু পুলকে রাখা খারাপ কোডিং অনুশীলন।
অ্যাটাকিংহোব

@ অ্যাটাকিংহোব, এটি কোনও ভাষায় বুলিয়ান ধরণের না থাকার এবং / অথবা কোনও শ্রেণি ব্যবহার না করে সঠিক আচরণটি দিতে চাইলে একটি সমস্যার মধ্যে পড়ে।
Huperniketes

1

এটি অ্যাকশনস্ক্রিপ্ট 2 এ সর্বদা ব্যবহার করতে হয়েছিল (স্বীকারোক্তি এখন একটি মৃত ভাষা), কারণ:

var something:Boolean = org.black.box.unknown.ThisMightNotExistYet();

// this is slightly ambiguous
if(something)
{
}

// because if you allow undefined you might actually mean
if(false != something)
{
}

// which can mean something different than
if(true == something)
{
}

// and comparing against what you actually MEAN is less script than
if(undefined != value && value)
{
}

সুতরাং সুনির্দিষ্ট হওয়া প্রায় সর্বদা সেরা ছিল।


1

আমি রাজী. এটি একটি অপ্রয়োজনীয় নির্মাণ, বিশেষত শক্তিশালী টাইপ করা ভাষায়।

বুলিয়ানগুলির অপর অপব্যবহার যোগ করার জন্য, আমি জাভাস্ক্রিপ্টে এই ধরণের নির্মাণকাজ বেশ কয়েকবার খুঁজে পেয়েছি, (বিশেষত কিছু স্প্যাগেটির মতো দৈত্য কার্য, যেমন 100+ লাইনে রয়েছে):

//create the variable, not initializing it
var flag;
//...
//assing a value to the var, by the example 
flag=$("mycheckbox").selected;
//...

//and at the moment of use it:
if(flag!=true) {
   //code to execute when the checkbox is unchecked
}

দেখে মনে হচ্ছে, এই ভাষায় একটি কঠোর ধরণের সংজ্ঞা না থাকার কারণে কিছু প্রোগ্রামাররা false|undefinedমানগুলি নিয়ে গোলমাল করতে পছন্দ করেন না ।


1

আমার এক সহকর্মী আছে যার এই জাতীয় কোড থাকবে:

if(something == true)

এবং তারপরে, কোনও ধরণের পরীক্ষা / ডিবাগিংয়ের জন্য, তিনি এই ব্লকটি কল করতে চান না তাই তিনি এটিকে এতে পরিবর্তন করবেন:

if(something == true && false)

এবং তারপরে মাঝে মাঝে সে এটিকে পরিবর্তন করবে:

if(false)

সবচেয়ে খারাপ বিষয়টি হ'ল, এই ধরণের ডিবাগিং উপলক্ষে আমার উপর ছড়িয়ে পড়ে এবং অন্য বিকাশকারীদের পড়ার পক্ষে এটি খারাপ!


0

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

(যা বলা হচ্ছে, এটি আমাকে সত্যই বিরক্ত করবে - তবে এটি থেকে কোনও বড় চুক্তি করার পক্ষে যথেষ্ট নয়)।


0

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


0

কেমন:

int j = 1;
for (int i=1; i>=j; i++) ...

হ্যাঁ, আমি এটি দেখেছি।

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