কেন ব্যবহার করুন!


59

এই প্রশ্নের একটি মন্তব্য: একটি পদ্ধতি মিথ্যা ফেরত কিনা তা যাচাই করা হচ্ছে: অস্থায়ী পরিবর্তনশীলকে ফলাফল বরাদ্দ করুন, বা পদ্ধতি আহ্বান সরাসরি শর্তাধীন? শর্ত পরীক্ষা করার সময় আপনার !booleanপরিবর্তে ব্যবহার করা উচিত বলেছে boolean == false। কেন? আমার boolean == falseকাছে ইংরেজিতে অনেক বেশি প্রাকৃতিক এবং আরও স্পষ্ট। আমি যদি ক্ষমাপ্রার্থী এটি যদি কেবল স্টাইলের বিষয় হয় তবে আমি ভাবছিলাম যে এই পছন্দটির কোনও কারণ আছে কিনা !boolean?


28
এটি লিখতে খাটো।
জেনন

39
এটি করার মতো boolean == true: এটির কোনও মানে নেই। ifবিবৃতিগুলির ভিতরে প্রকাশগুলি কেবল এটিই : এক্সপ্রেশন। যদি কোনও বুলিয়ান এক্সপ্রেশনটিতে ইতিমধ্যে কিছু মূল্যায়ন করে, আপনি কেন এটির মূল্যায়ন করতে বাধ্য করার জন্য একটি চেক যুক্ত করবেন?
ম্যাক্সপাম

10
@zzzzBov: উম, না সর্বাধিক (সি-স্টাইল) প্রোগ্রামাররা এটি করে না।
আমারা

9
@zzzzBov: আপনার মন্তব্য অস্পষ্ট। আপনি যদি বোঝাতে চেয়েছিলেন যে !boolean_variableবেশিরভাগ সি প্রোগ্রামাররা এটি করে তবে আমি সম্মত।
কিথ থম্পসন

29
এবং আরও গুরুত্বপূর্ণ, কীভাবে কেউ লিখতে চায় না boolean != true?

উত্তর:


153

যখন আমি লাইনের মতো একটি লাইন দেখি, তখন আমি if (!lateForMeeting())এটি "মিলনের জন্য দেরী না হলে" হিসাবে পড়েছিলাম , যা বুঝতে সোজা-সরাসরি বোঝা যায়, এর বিপরীতে if (lateForMeeting() == false)আমি "" সাক্ষাত করতে দেরি করা সত্য যদি ভুল হয় তবে "

এগুলির অর্থ একরকম, তবে পূর্ববর্তীটি সমান ইংরেজি বাক্যটি কীভাবে তৈরি করা হবে তার কাছাকাছি।


27
+1 পাইথনে আপনি আসলে লিখেছেন if not late_for_meeting:)
ফুনেহে

42
আমি যুক্তি দিচ্ছি যে "যদি ___ মিথ্যা হয়" যদি "যদি না হয় ___" এর চেয়ে বেশি স্বাভাবিক লাগে তবে ___ এর নামটির উন্নতির প্রয়োজন improvement
মাইক ডিসিমোন

12
পার্লে আপনি লিখতে পারেনunless late_for_meeting
হেনরিক রিপা

4
@ হেনরিক্রিপা: মনে হচ্ছে পার্লের যে কোনও কিছুই আপনি টাইপ করতে পারেন আইনী কোড। আপনি যা চান তা কি না তা অন্য প্রশ্ন;)
অ্যাডাম রবিনসন

4
@ এ-কিউব দিয়ে শুরু করার মতো পদ্ধতি আমার নেই। পরিবর্তে, আমার কাছে একটি পদ্ধতি বলা হত done()। ডাবল নেগেটিভ খারাপ।
কেবিএ

97

লেখা == falseএবং == trueনিরর্থক। এটিও নির্বিচারে চূড়ান্তভাবে নেওয়া যেতে পারে। লিখতে শুরু করলে

if (condition == false) { ... }

তাহলে কেন হবে না

if ((condition == false) == true) { ... }

বা কেন হবে না

if ((someExp == anotherExp) == true) { ... }

এই গল্পটির conditionনৈতিকতাটি হ'ল যদি বুলিয়ান এক্সপ্রেশন হয় তবে আপনাকে যুক্ত করার দরকার নেই == false; অপারেটর !এটি কি জন্য হয়;)


এই ভেবে দেখিনি!
ইএলএল

51
== falseঅপ্রয়োজনীয় নয়, এর চেয়ে আরও বেশি ভার্বোজ !। OTOH, নিরর্থক == true
dan04

4
@ dan04 আপনি ঠিক বলেছেন যাইহোক, আমি যে অর্থে এটি বোঝাতে চেয়েছি এটি একটি খারাপ ধারণা থেকে যায়। (exp1 != exp2)বনাম বিবেচনা করুন ((exp1 == exp2) == false)। স্বীকার করা যায়, এগুলি কনফিগার করা দৃশ্যাবলী, তবে তবুও আপনার প্রায় কখনও সত্য বা মিথ্যা স্পষ্ট তুলনা লিখতে হবে না। আপনার যেমন অপারেটর ব্যবহার করা উচিত !=, তেমনি আপনারও ব্যবহার করা উচিত !
আন্দ্রেস এফ।

26
@ ডান04: ভাষাটি ইতিমধ্যে প্রস্তাব দিলে তা অনর্থক !
ডেডএমজি

5
@ ডান04: আপনি যে কোনও সময় লিখবেন bool_expression == bool_literal, তা অনর্থক == ...। আপনি সত্য বা মিথ্যা পরীক্ষা করছেন তা অপ্রাসঙ্গিক। এটি কেবলমাত্র ফলাফল / বিকল্প ব্লকের ক্রম পরিবর্তন in আন্দ্রেসের উদাহরণগুলি এই বিষয়টিকে পুরোপুরি চিত্রিত করে। বেশিরভাগ আধুনিক সংকলকগুলি অপ্রয়োজনীয়তাটিকে অপ্টিমাইজ করবে, তবে এটি এখনও অপ্রয়োজনীয়।
লস ম্যাজেস্টে

70

সি এবং কিছু অনুরূপ ভাষায়, সমতার জন্য বুলিয়ান অভিব্যক্তিগুলির তুলনা করা falseবা trueএকটি বিপজ্জনক অভ্যাস।

সি-তে কোনও স্কেলার এক্সপ্রেশন (সংখ্যাসূচক বা পয়েন্টার) বুলিয়ান প্রসঙ্গে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ একটি ifবিবরণের শর্ত হিসাবে । সি নিয়মটি হ'ল if (cond)সমান if (cond != 0)- অর্থাৎ শূন্যটি মিথ্যা, এবং কোনও শূন্য নয় মান সত্য। যদি condপয়েন্টার ধরণের 0হয় তবে নাল পয়েন্টার ধ্রুবক হিসাবে গণ্য করা হয়; if (ptr)মানে if (ptr != NULL)

এই যে মানে

if (cond)

এবং

if (cond == true)

একই জিনিস মানে না । প্রথমটি সত্য যদি condশূন্য হয় না; দ্বিতীয়টি কেবলমাত্র যদি এটির সমান হয় trueতবে সিতে (যদি আপনার কাছে থাকে তবে #include <stdbool.h>) সহজ 1

উদাহরণস্বরূপ, isdigit()ঘোষিত <ctype.h>ফাংশনটি একটি intমান প্রদান করে, 0যদি আর্গুমেন্টটি একটি অঙ্ক হয়, যদি এটি শূন্য হয় না। এটি 42শর্তটি সত্য কিনা তা নির্দেশ করে ফিরে আসতে পারে। তুলনা 42 == trueব্যর্থ হবে।

এটি ঘটে যা 0একমাত্র মান হিসাবে মিথ্যা বলে বিবেচিত হয়, সুতরাং সমতার সাথে তুলনা falseকাজ করবে; if (!cond)এবং if (cond == false)একই জিনিস। তবে আপনি যদি এর সদ্ব্যবহার করতে চলেছেন তবে আপনাকে মনে রাখতে হবে যে তুলনা করা falseঠিক আছে, এবং তুলনা করা trueঠিক নয়। সবচেয়ে খারাপ বিষয়, তুলনা করা বেশিরভাগ সময়true কাজ করবে (উদাহরণস্বরূপ, সাম্য এবং সম্পর্কযুক্ত অপারেটররা সর্বদা হয় হয় হয় বা হয় )। এর অর্থ হ'ল এটি ব্যবহার করে আপনি যে কোনও বাগ প্রবর্তন করেন তা ট্র্যাক করা কঠিন হতে পারে। (চিন্তা করবেন না, আপনি কোনও গুরুত্বপূর্ণ ক্লায়েন্টকে কোডটি ডেমো করার সাথে সাথে তারা প্রদর্শিত হবে))01

সি ++ এর কিছুটা আলাদা বিধি রয়েছে; উদাহরণস্বরূপ, এর boolধরণটি ভাষাতে আরও দৃ tight়ভাবে সংহত হয় এবং টাইপে if (cond)রূপান্তরিত condহয় bool। তবে প্রভাবটি (বেশিরভাগ ক্ষেত্রে) একই রকম।

অন্য কয়েকটি ভাষায় যাকে বলা যেতে পারে তাকে আরও ভাল আচরণ করা বুলিয়ান বলা যেতে পারে, যেমন cond == trueএবং cond == false(বা সিনট্যাক্স যা কিছু ঘটে) নিরাপদ। তবুও, আমি যে প্রতিটি ভাষা দেখেছি তার একটি notবা !অপারেটর রয়েছে; এটি সেখানে রয়েছে, যাতে আপনি এটি ব্যবহার করতে পারেন। আমার মতে, এর cond == falseপরিবর্তে !condবা not condনা ব্যবহার করা পঠনযোগ্যতা উন্নত করে। (এটি সত্য যে !চরিত্রটি এক নজরে দেখা শক্ত হতে পারে; আমি !এটিকে এড়ানোর জন্য মাঝে মাঝে কোনও স্থান যোগ করি ))

এবং প্রায়শই আপনি সমস্যাটি এড়াতে পারেন এবং কোডটি কিছুটা পুনরায় সাজিয়ে স্বচ্ছতার উন্নতি করতে পারেন । উদাহরণস্বরূপ, পরিবর্তে:

if (!cond) {
    do_this();
}
else {
    do_that();
}

আপনি লিখতে পারেন:

if (cond) {
     do_that();
}
else {
    do_this();
}

এটি সর্বদা ভাল নয়, তবে এটি যেখানে সুযোগ রয়েছে তা সন্ধান করতে ক্ষতি করে না।

সংক্ষিপ্তসার: সি এবং সি ++ তে সাম্যতা তুলনা করে trueএবং falseএটি বিপজ্জনক, মাত্রাতিরিক্ত ভার্বোস এবং দুর্বল স্টাইলে। অন্যান্য অনেক ভাষায়, এই ধরনের তুলনাগুলি বিপজ্জনক নাও হতে পারে, তবে তারা এখনও মাত্রাতিরিক্ত ভার্জোজ এবং দুর্বল স্টাইল।


প্রকৃত দরকারী প্রযুক্তিগত ব্যাখ্যা সহ এটির একটি উত্তর হওয়ার জন্য +1।
মাইক নাকিস

আমি এখনও প্রোগ্রামিং ভাষা নির্বিশেষে এইভাবেই ভাবি আমি সর্বদা == trueএটি অনিরাপদ বলে ধরে নিই । ভাল মনে হয়।
12 12'6 এ Dervall

1
@ ডারভাল: এমন কিছু ধরে নেওয়া যা কেবল সহজ নয়। কয়েকটি ভাষায় কয়েকটি কর্নার কেস রয়েছে যেখানে বুলিয়ানদের সমতার তুলনা কেবল নিরাপদই নয় তবে যথাযথভাবে যথাযথ, উদাহরণস্বরূপ হাস্কেল-এ, যার দ্বিদ্বন্দ্বী টাইপের অনুক্রম সহ একটি শক্তিশালী অন্তর্নিহিত-কাস্ট-ফ্রি টাইপ সিস্টেম রয়েছে, (==True) . fএটি স্পষ্ট করে লিখতে পারে আমরা -> Boolরিটার্ন-পলিমারফিক ফাংশনটি ইনস্ট্যান্টেশন চাই f। এটি এর চেয়ে পরিষ্কার not . not . fএবং এর চেয়ে কম বিশ্রী (f :: a -> Bool)
বাম

এছাড়াও, pred(x)==pred(y)বুল-ফিরতি ফাংশনের মতো জিনিসগুলি করা অবশ্যই যথাযথ pred। বিকল্পটি pred(x)? pred(y) : !pred(y)যা আপনি সম্মত হবেন তা খুব কমই গ্রহণযোগ্য।
বাম

1
@ লেফট্রাউন্ডাউবাউইট: এটি ঠিক আছে যদি আপনি তা জানেন pred(x)এবং pred(y)সত্যকে বোঝাতে একই মান ব্যবহার করেন যা কিছু ভাষায় নিরাপদ অনুমান যা অন্য ভাষায় নয়। সিতে, উদাহরণস্বরূপ, আপনি লিখতে পারেন !!pred(x) == !!pred(y)
কিথ থম্পসন

13

যদি আপনার condition == falseপক্ষে প্রকৃতপক্ষে "ইংরেজিতে আরও প্রাকৃতিক" হন তবে আমি অবশ্যই ধরে নেব যে আপনি কোনও স্থানীয় বক্তা নন। অন্যথায় আমি এটি ব্যাখ্যা করতে পারি না, কারণ কেউ এর মতো কথা বলেন না:

রোদ যদি জ্বলছে মিথ্যা আমি ঘরেই থাকি।

এর সাথে তুলনা করুন

রোদ না জ্বলে আমি ঘরে থাকি।

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

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

if (! condition) { … }

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


13

দুটি কার্যকরভাবে অভিন্ন, তাই কোনটি ব্যবহার করা স্বাদের বিষয় taste

আমি যে বড় কারণটি ব্যবহার == falseকরি তা !হ'ল কোডটি দেখার সময় আমি এটি খুঁজে পেয়েছি যে এটি উপেক্ষা করা খুব সহজ।

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


যদি অপারেটরটির নাম notপাস্কলে নামকরণ করা হত তবে আমি মনে করি না এটি কোনও সমস্যা হয়ে উঠত।


5
এই কারণে, একটি মেডিকেল ডিভাইস সফ্টওয়্যারটির জন্য আমি একটি সি ++ প্রকল্পে কাজ করেছি যার একটি কোডিং স্ট্যান্ডার্ড ছিল যা এই একই কারণে (এটিকে সামনে দাঁড় করানোর জন্য) == falseপরিবর্তে আদেশ দেওয়া !হয়েছিল। তবে ব্যবহারের কোনও প্রয়োজন ছিল না == true, তাই কোনও শূন্যবিহীন মান এখনও এটির মতো কাজ করেছিল।
tcrosley

12
আমি এই যুক্তিটি সর্বদা স্বতঃস্ফূর্তভাবে খুঁজে পেয়েছি - সি / সি ++ / সি # / জাভা / ইত্যাদি অন্যান্য জায়গাগুলিতে রয়েছে যেখানে কোনও একক অক্ষর দেখতে ব্যর্থ হওয়া কোডের ব্যাখ্যাতে একইরকম গুরুত্বপূর্ণ প্রভাব ফেলেছে; আউট singling "!" একমাত্র খারাপটি আমার কাছে বোঝায় না।
বেভান

5
@ বিভান আপাতদৃষ্টিতে আপনাকে এখনও কাটা যায়নি।

1
যদিও আমি একমত যে উপেক্ষা !করা সম্ভবত এই ধরণের সবচেয়ে ঝামেলাজনক ভুল, এটি আইএমওকে লেখার অভ্যাস করার পরিবর্তে ==falseআরও ভাল ইউনিট পরীক্ষা লেখার অভ্যাস না করা উচিত ।
বাম দিকের বাইরে

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

7

আমি যখন দেখি তখন var == falseসর্বদা ভাবছি যে varদুটি বুলিয়ানা (যেমন, উদাহরণস্বরূপ, একটি maybeএবং একটি undefinedপাশাপাশি এবং trueএবং falseবা আইইইই 1164 এর নয়টি মানের মতো কিছু ) সহ একটি যুক্তিযুক্ত ধরণের কিনা wonder


8
তৃতীয় মানটি সাধারণত "ফাইল খুঁজে পাওয়া যায় না"। thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
গ্রকি

6

কারণ কখনও কখনও আপনি লিখতে পারেন boolean = false(স্পষ্ট ত্রুটি সহ) এবং false == booleanপ্রাকৃতিক বলে মনে হচ্ছে না (এটি যত ভাল অভ্যাসই হোক না কেন)


অনেক দিন আগে যখন আমি প্রথম প্রোগ্রামিং শুরু করি, আমার এক পরামর্শদাতা পরামর্শ দিয়েছিলেন যে আমি এ জাতীয় if( INVALID_HANDLE_VALUE == hFile )জিনিস এড়াতে অভ্যাস করার চেষ্টা করব। এইভাবে যদি আপনি পিছলে যায় এবং দুজনের পরিবর্তে একটি সমান চিহ্ন ব্যবহার করে তবে আপনি একটি সংকলক ত্রুটি পাবেন। স্পষ্টতই এটি কেবল তখনই কাজ করে যখন বাম-অনুভূতিটি একটি ধ্রুবক হয় তবে এটি আমাকে গণনার চেয়ে বেশি মাথা-ব্যথা বাঁচিয়েছে।
ড্রয় চ্যাপিন

আপনি যদি কোনও স্ট্যাটিক বিশ্লেষণ সরঞ্জাম ব্যবহার করেন তবে এটি আপনাকে আরও কয়েকগুণ বেশি মাথা ব্যথা সাশ্রয় করতে পারে এবং আপনি প্রকৃতি hFile==INVALID_HANDLE_VALUE রচনাকে পুনরুদ্ধার করতে সক্ষম হন ।
Gqqnbig

4

if (!boolean_variable)অনুবাদ if the condition is not true

if (boolean == false)অনুবাদ if the condition not false is true। কারণ এটি বিপরীত যুক্তিযুক্ত, এটি বোঝা শক্ত।


3
সত্য মানে সত্য নয়। বুলিয়ান মানে বুলিয়ার মূল্যের উপর নির্ভর করে মিথ্যা বা সত্য নয়, যা নিজেই যৌক্তিক বিপরীত ion
এসরোবিন্স

1
@ এস রবিন্স আমি বুলিয়ান ভেরিয়েবলের বুলিয়ান এর বোকামি নামটি পাই। উদাহরণস্বরূপ কিছু isVisibleভাল উদাহরণ হতে পারে। তারপরে if (!isVisible)তার অর্থ হবে যদি দৃশ্যমান না হয় - যা তখন বোঝা সহজ if (isVisible==false), যা একটি বিপরীত যুক্তি। আশা করি এটি এখন আরও পরিষ্কার হয়ে গেছে। অথবা, আমি আপনার মন্তব্য ভুল বুঝেছি?
BЈовић

2

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

এটি বলা হচ্ছে, আমি বিশ্বাস করি যে নতুন সংকলকগণ এটি থেকে দূরে সরে যায়, সুতরাং এটির সাথে যাওয়া ঠিক হবে।


মেশিন কোড তৈরি করা কম্পাইলারের কাজ, উচ্চ-স্তরের ভাষার প্রোগ্রামার নয় ...
সিভিএন

Reasonsতিহাসিক কারণে, এক পদ্ধতি অন্য পদ্ধতির চেয়ে বেশি পছন্দ হওয়ার কারণগুলির মধ্যে এটি খুব ভাল কারণ হতে পারে।
লেগোলাস

1

কর্মক্ষেত্রে আমি প্রায়শই বুলিয়ানদের সাথে ডিল করি যা শূন্য হতে পারে তাই আমি প্রায়শই এই কেসটি কোড করব

if (value != null && value == true){
    //do something
}

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

আমি সত্যিই এক উপায় বা অন্যভাবে যত্নশীল না।


4
তা হলে value == trueএটি শালীন নয় তা পরীক্ষা করার কোনও কারণ নেই। যদি value == nullএটি প্রথমে যদি বিবৃতিটি ট্রিগার না করে তবে if (value)পর্যাপ্ত পরিমাণে হওয়া উচিত।
zzzzBov

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

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

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

2
@ WUHoUnited, মানটি শূন্য হলেও, value == trueযথেষ্ট হবে।
zzzzBov

1

আপনি যখন সত্যিকারের শর্তটি পরীক্ষা করছেন, ঠিক if (condition)তখনই তা করা বোধগম্য হয় , বিশেষত যখন আপনি 'is' দিয়ে শুরু করে বুলিয়ান ভেরিয়েবলের নামকরণের কনভেনশনটি প্রয়োগ করেন: if (isOpen)পুরোপুরি পরিষ্কার এবং ব্যবহার != falseঅপ্রয়োজনীয় হবে।

একটি সি / সি ++ / জাভা / ইত্যাদির জন্য। প্রোগ্রামার, এর অর্থ '!' অপারেটর সম্পূর্ণরূপে একীভূত হয়, আমরা যখন এটি দেখি তখন আমাদের মনে স্বয়ংক্রিয়ভাবে 'না' থাকে। সুতরাং থাকা আমার জন্য if (!isOpen)যেমন পরিষ্কার if (_NOT_ isOpen)। তবে আপনি যথেষ্ট পরিচিত নন, সি / সি ++ এ আপনি একটি ম্যাক্রো তৈরি করতে পারেন #define _NOT_ !। তবে আমাকে বিশ্বাস করুন, কয়েক বছর পরে এটি সম্পূর্ণ অপ্রয়োজনীয়।

এ ছাড়া, বুলিয়ান মূল্যবোধগুলির সাথে আক্ষরিক সাথে তুলনা না করে পরীক্ষা করা সর্বদা পছন্দনীয়। উদাহরণস্বরূপ, এটি পরীক্ষা করা বিপজ্জনক if (x == true)কারণ একটি বুলিয়ান মানটি শূন্য না হলে সত্য হিসাবে বিবেচিত হয়, এবং আক্ষরিক সত্যটির একটি নির্দিষ্ট মান থাকে, তাই x 'সত্য' হতে পারে (যেমন ননজারো) এবং তবুও তুলনাটি মিথ্যা হিসাবে মূল্যায়ন করা হয় (কারণ এটি ২ টি রয়েছে এবং আক্ষরিক সত্যটি, বলুন, ১।) অবশ্যই এটি মিথ্যাটির সাথে তুলনার ক্ষেত্রে প্রযোজ্য নয়, তবে আপনি যদি সত্যের পরীক্ষার সময় এটি ব্যবহার করেন না, তবে কেন এটি মিথ্যা পরীক্ষার সময় ব্যবহার করবেন?


আপনার প্রস্তাবিত সি ++ ম্যাক্রো তৈরি করার দরকার নেই সি ++ ইতিমধ্যে 'না' বোঝে। সম্পর্কিত: stackoverflow.com/questions/2393673/c-and-or-not-xor-keywords
frozenkoi

এটি সত্য, তবে এটি কেবল সি ++ 0 এক্স স্ট্যান্ডার্ডের জন্য একটি কীওয়ার্ড। তার আগে, এটি ছিল কেবল অন্য ম্যাক্রো।
ফ্যাবিও সেকোনলো

0

আকার বিষয়ে ;)

মিশ্র অভিব্যক্তিগুলিতে এটি পড়া সহজ:

boolean1 = false
boolean2 = true

p ! boolean1 and ! boolean2
p boolean1 == false and boolean2 == false

এবং রুবির জন্য বিশেষ উদাহরণ যেখানে এটি একটি বড় পার্থক্য:

boolean = nil
p ! boolean         #-> true
p boolean == false  #-> false

শূন্য নয়, তবে এটি সত্যও নয়।


0

আমার অভিজ্ঞতা এবং আমার অনুসন্ধানের উত্তরগুলির ভিত্তিতে যা আপনি লিঙ্ক করেছেন।

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


0

আপনি যদি আপনার ভেরিয়েবলটির নাম সঠিকভাবে রেখে থাকেন তবে !booleanতা স্বাভাবিক। এটি not booleanযে কোনও প্রোগ্রামারকে মানসিকভাবে কোড পড়ার পক্ষে পর্যাপ্ত, এমন কেউ পড়তে পারে ।


0

কিছু লোকের জন্য, যত তাড়াতাড়ি একটি অর্থ আরও ভাল প্রকাশ করা হয়।

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

হচ্ছে! (ভাষা যখন এটির অনুমতি দেয় তখন আমি প্রকৃতপক্ষে একটি পছন্দ করি) ডানদিকের সামনের দিকে খুব শীঘ্রই এই অবস্থার জন্য ইংরেজী 'না' পেয়ে যায়।

এই ইস্যুটি এমন untilভাষাগুলি ব্যবহার করে যা এটি সমর্থন করে, যেমন জিনিস সম্পূর্ণ না হওয়া পর্যন্ত 'সাধারণ জিনিস' করুন consideration অন্যরা যেমন বলে, প্রাকৃতিক ভাষার প্রকাশই লক্ষ্য। আমি উপরে "সূর্য জ্বলছে" উদাহরণটি পছন্দ করি।


0

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

আমি কোথাও ভাবতে পারি না if (!variable)(বা if not variableআপনার ভাষার উপর নির্ভর করে সমপরিমাণ ) নিরাপদ নয়, উদাহরণস্বরূপ , if self.is_ready() == False: ...যদি আজ বা ভবিষ্যতে self.is_ready()প্রত্যাবর্তন হয় তবে অজগরটিতে নিরাপদ নয় None, এটি করার জন্য এটি সম্পূর্ণ যুক্তিসঙ্গত জিনিস হবে ইঙ্গিত করুন যেহেতু Noneএটি প্রস্তুত ছিল না ঠিক তেমনি মিথ্যা False

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