একটি বিবৃতিতে বুলিয়ান


144

স্কুল অ্যাসাইনমেন্টে ভেরিয়েবলটি সত্য বা মিথ্যা কিনা তা যাচাই করে দেখে আমি আজ কোড সম্পর্কে একটি মন্তব্য পেয়েছি।

আমি যে কোডটি লিখেছিলাম তা হ'ল এইরকম:

var booleanValue = true;

function someFunction(){
    if(booleanValue === true){
        return "something";
    }
}

তারা বলেছিল যে এটি লিখতে ভাল / আরও ভাল ছিল:

var booleanValue = true;

function someFunction(){
    if(booleanValue){
        return "something";
    }
}

"=== সত্য" অংশ সম্পর্কে আমি যে মন্তব্যটি পেয়েছি তা হ'ল এটির প্রয়োজন হয়নি এবং বিভ্রান্তি তৈরি করতে পারে।

তবে আমার ধারণা হ'ল ভেরিয়েবলটি বুলিয়ান বা না তা যাচাই করা ভাল, বিশেষত যেহেতু জাভাস্ক্রিপ্টটি একটি স্বচ্ছল ভাষা।

দ্বিতীয় উদাহরণে একটি স্ট্রিং এছাড়াও "কিছু" ফিরে আসবে;

সুতরাং আমার প্রশ্ন; ভবিষ্যতে "=== সত্য" অংশটি শিথিল করা কি আরও ভাল, বা ভেরিয়েবলের প্রকারটিও পরীক্ষা করা ভাল অভ্যাস।

সম্পাদনা: আমার "বাস্তব" কোডে বুলিয়ান প্রতিনিধিত্ব করে যে কোনও চিত্র মুছে ফেলা হয়েছে কি না, সুতরাং বুলভ্যালুতে থাকা একমাত্র মানটি সত্য বা মিথ্যা।

উদাহরণস্বরূপ 0 এবং 1 এর পরিবর্তনশীল হওয়া উচিত নয়।


4
এটি ব্যবহারযোগ্য পাঠযোগ্য এবং ভাল অনুশীলন ===
পিয়াস দে

2
+1 এর জন্য === true। বিভ্রান্তি এড়ানো !!
গাশু

1
@ গ্যাশু [0] === trueমূল্যায়নকে মিথ্যা বলে বিবেচনা করুন ।
রেস্টিংরোবট

1
@ জ্লেঞ্জ এটা করা উচিত নয়? দয়া করে ব্যাখ্যা করুন
গাশু

আমি এর দ্বারা যা বোঝাতে চেয়েছি তা হ'ল আপনি যদি কেবল "সত্যবাদী" অস্তিত্বের জন্য যাচাই করতে চেয়েছিলেন তবে উক্ত বিবৃতিটি ব্যর্থ হবে, যদিও সত্যের কাছে মূল্যায়ন করা উচিত ([0] সত্যের কাছে মূল্যায়ন করা হলেও ধরণের রূপান্তর ছাড়াই নয়)। এটি আপনার বিবৃতি দিয়ে কী অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে। === trueযখন শর্তটি ঠিক সমান হয় তা নিশ্চিত করার দরকার হলে ব্যবহার করুন true
রেস্টিংরবোট

উত্তর:


222

প্রথমত, ঘটনাগুলি:

if (booleanValue)

ifকোনও শূন্য নম্বরের সংখ্যা, কোনও খালি খালি স্ট্রিং মান, কোনও অবজেক্ট বা অ্যারে রেফারেন্স ইত্যাদি booleanValueঅন্তর্ভুক্তের সত্যতার মানটির জন্য বিবৃতিটি সন্তুষ্ট করবে true...

অন্য দিকে:

if (booleanValue === true)

এটি ঠিক সমান ifহলে শর্তটি পূরণ করবে । অন্য কোনও সত্য মান এটি সন্তুষ্ট করবে না।booleanValuetrue

অন্যদিকে আপনি যদি এটি করেন:

if (someVar == true)

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

এটি কতটা বিভ্রান্তিকর হতে পারে তার উদাহরণ হিসাবে:

var x;

x = 0;
console.log(x == true);   // false, as expected
console.log(x == false);  // true as expected

x = 1;
console.log(x == true);   // true, as expected
console.log(x == false);  // false as expected

x = 2;
console.log(x == true);   // false, ??
console.log(x == false);  // false 

মানটির জন্য 2, আপনি ভাবেন যে 2এটি সত্যবাদী মান তাই এটি তুলনামূলকভাবে তুলনামূলকভাবে তুলনা করবে trueতবে জোর করে কীভাবে কাজ করে তা নয় isn't এটি ডান হাতের মানকে রূপান্তর করছে বাম হাতের মানের ধরণের সাথে মেলে যাতে এটির trueসংখ্যায় রূপান্তর হয় 1তাই এটি তুলনা করছে 2 == 1যা সম্ভবত আপনি সম্ভবত যা ইচ্ছা করেছেন তা নয়।

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


সুতরাং, এটি সত্যিকারের জন্য প্রত্যাশিত মানগুলির উপর নির্ভর করে booleanValueএবং আপনি কোডটি কীভাবে কাজ করতে চান তা নির্ভর করে । আপনি যদি আগে থেকেই জানেন যে এটির কেবল কোনও মান trueবা falseমূল্য থাকবে তবে তা স্পষ্ট করে এর সাথে তুলনা করুন

if (booleanValue === true)

এটি কেবল অতিরিক্ত কোড এবং অপ্রয়োজনীয় এবং

if (booleanValue)

আরও কমপ্যাক্ট এবং তর্কযোগ্যভাবে ক্লিনার / আরও ভাল।

যদি অন্যদিকে, আপনি কী জানেন কী booleanValueনা এবং আপনি এটি পরীক্ষা করতে চান যদি এটি trueঅন্য কোনও স্বয়ংক্রিয় ধরণের রূপান্তর অনুমোদিত না হয়ে থাকে তবে তা পরীক্ষা করতে চান , তবে

if (booleanValue === true)

শুধুমাত্র একটি ভাল ধারণা নয়, তবে প্রয়োজনীয়।


উদাহরণস্বরূপ, আপনি .on()jQuery এর প্রয়োগের দিকে তাকান , এটির একটি alচ্ছিক রিটার্ন মান রয়েছে। যদি কলব্যাকটি ফিরে আসে falseতবে jQuery স্বয়ংক্রিয়ভাবে ইভেন্টটির প্রচার বন্ধ করবে। এই নির্দিষ্ট ক্ষেত্রে, যেহেতু jQuery এর একমাত্র স্টপ প্রসারণ যদি চায় falseএল, তারা ফেরত মান সুনির্দিষ্টভাবে জন্য চেক === falseকারণ তারা করতে চান না undefinedবা 0বা ""বা অন্য কিছু এছাড়াও তুলনা সন্তুষ্ট স্বয়ংক্রিয়ভাবে হবে টাইপ-ধর্মান্তরিত মিথ্যাতে।

উদাহরণস্বরূপ, এখানে jQuery ইভেন্ট হ্যান্ডলিং কলব্যাক কোড:

ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );

if ( ret !== undefined ) {
     event.result = ret;
     if ( ret === false ) {
         event.preventDefault();
         event.stopPropagation();
     }
 }

আপনি দেখতে পারেন যে jQuery স্পষ্টভাবে খুঁজছেন ret === false

তবে, jQuery কোডে আরও অনেক জায়গা রয়েছে যেখানে কোডের ইচ্ছা অনুসারে একটি সহজ চেক উপযুক্ত। উদাহরণ স্বরূপ:

// The DOM ready check for Internet Explorer
function doScrollCheck() {
    if ( jQuery.isReady ) {
        return;
    }
    ...

আমি কিছুক্ষণের জন্য এই প্রশ্নটি নিয়ে ভাবছিলাম, তবে কারও কাছে জিজ্ঞাসার সন্ধান করার সুযোগ পাইনি। আপনি যদি একবার খেয়াল করতে পারেন আমি প্রশংসা করব। stackoverflow.com/questions/32615466/…
মিমি

এই উত্তর সম্পূর্ণ সঠিক নয়। 'x == সত্য' অ-শূন্য সংখ্যাগুলির জন্য সত্য হবে না।
তিমোহ

@ টিমোহ - আপনার মন্তব্য আমি বুঝতে পারি না। Jsfiddle.net/jender00/89h8d8tm দেখুন ।
jਫਰ00

1
আমি কেবল এটিই বলতে চাই যে 'যদি (x)' 'তবে' (যদি (x == সত্য)) 'তেমন নয় তবে আপনি নিজের উত্তরের প্রথম অনুচ্ছেদে লিখেছিলেন। 'if (x)' স্পষ্টভাবে 'x' কে এর বুলিয়ান উপস্থাপনায় রূপান্তর করবে। 'if (x == সত্য)' ইকোস্ক্রিপ্ট অ্যাবস্ট্রাক্ট তুলনা করুন অ্যালগরিদম ব্যবহার করবে। আপনি লিখেছেন যে 'যদি (x == সত্য)' কোনও শূন্য নম্বরের বা খালি খালি স্ট্রিং বা কোনও বস্তুর জন্য সত্য হবে। এটা ঠিক ভুল। আমি যদি 1 এর পরিবর্তে 2 দিয়ে আপনার উদাহরণ চালনা করি তবে এটি কার্যকর হবে না।
তিমোহ

2
@ টিমোহ - আমি আপনার বক্তব্য দেখছি উত্তর সংশোধন করা হয়েছে এবং স্পষ্ট করা হয়েছে এবং আমি ধরণের জবরদস্তির উপর একটি উদাহরণ যুক্ত করেছি যার সাথে দেখানো হয়েছে যে এটি কীভাবে অপ্রত্যাশিত জিনিসগুলি করতে পারে।
jender00

40

আপনি যদি লিখেন if(x === true):, এটি কেবলমাত্র x = সত্য

আপনি যদি লিখেন: if(x)এটি যে কোনও এক্সের ক্ষেত্রে সত্য হবে : '' (খালি স্ট্রিং), মিথ্যা, নাল, অপরিজ্ঞাত, 0, ন্যান।


(খালি স্ট্রিং), মিথ্যা, নাল,
অপরিজ্ঞাত

ভুলে যাবেন না NaNএবং -0
হাইকাম

8

সমতলে "যদি" ভেরিয়েবলটি একটি বুলিয়ানকে জোর করা হবে এবং এটি বস্তুর উপরে বুলিয়ান ব্যবহার করে:

    Argument Type   Result

    Undefined       false
    Null            false
    Boolean         The result equals the input argument (no conversion).
    Number          The result is false if the argument is +0, 0, or NaN;
                    otherwise the result is true.
    String          The result is false if the argument is the empty 
                    String (its length is zero); otherwise the result is true.
    Object          true.

তবে === এর সাথে তুলনা করার ক্ষেত্রে কোনও ধরণের জবরদস্তি নেই, সুতরাং জবরদস্তি ছাড়াই এগুলি অবশ্যই সমান।

আপনি যদি বলছেন যে অবজেক্টটি বুলিয়ানও নাও হতে পারে তবে আপনাকে কেবল সত্য / মিথ্যা বাদ দিয়ে আরও কিছু বিবেচনা করতে হবে।

if(x===true){
...
} else if(x===false){
....
} else {
....
}

5

এটি আপনার ব্যবহারের উপর নির্ভর করে। এটির প্রকারটিও পরীক্ষা করে নেওয়া বুদ্ধিমান হতে পারে তবে এটি যদি কেবল একটি পতাকা হয় তবে তা তা নয়।


===তুলনা জাভাস্ক্রিপ্টের এই মাতব্বরী সঞ্চালন করে না। সুতরাং ওপির কোডটি কার্যকরভাবে পতাকার প্রকারটি পরীক্ষা করে। মানটি বুলিয়ান এবং সত্য হলেই এটি সফল হয়।
জেসি হ্যালেট

আমাকে পুনরায় চাপ দিন। যদি আপনি জানেন যে এটি সত্য বা মিথ্যা হতে চলেছে তবে তাতে কিছু আসে যায় না।
ভেন

5

সাধারণভাবে, এটি বাদ দেওয়া এটি পরিষ্কার এবং সহজ === true

তবে জাভাস্ক্রিপ্টে সেসব বক্তব্য আলাদা।

if (booleanValue)যদি চালানো হবে booleanValueহয় truthy - ছাড়া আর কিছু 0, false, '', NaN, null, এবং undefined

if (booleanValue === true)যদি booleanValueঠিক সমান হয় তবে মৃত্যুদন্ড কার্যকর করা হবে true


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

@ অ্যালডানাক্স: উফ্; আমি বলতে চাইছি ''
এসএলএক্স

4

পরিচয় (===)অপারেটরটি (==)কোনও ধরণের রূপান্তর সম্পন্ন না করে সমতা অপারেটরের সাথে একইরকম আচরণ করে এবং প্রকারগুলি সমান হিসাবে বিবেচিত হওয়ার জন্য একই হওয়া উচিত।


আপনার শেষ বাক্যটি ভুল। আপনার দুটি বিবৃতি চেষ্টা করুন if (booleanValue)এবং if (booleanValue==true)কখন booleanValueহয় 2। এই দুটি বিবৃতি আপনাকে একই ফল দেয় না।
jender00

মজাদার. আমি আপনার জন্য এটি গ্রহণ করব। আমি ওবিজেসি / সি / সি ++ বিশ্বে চিন্তা করছিলাম, জেএসে আমি ধরে নিচ্ছি যে আপনি সঠিক আছেন, যেহেতু জেএসে ডেটা ধরণের পরিবর্তন করা যেতে পারে এবং 2 == সত্য যদি তা হয় তবে তার পরিমাণ মাপবে না।
অ্যাপোলো সফটওয়্যার

1
এই নির্দিষ্ট উদাহরণের জন্য আমার উত্তর উপরে দেখুন। এটি জাভাস্ক্রিপ্টটি বিভিন্ন ধরণের দুটি মানের তুলনা করার জন্য কীভাবে স্বয়ংক্রিয় ধরণের রূপান্তরটি করে তা ব্যবহার করে।
jender00

3

যেহেতু চেক করা মানটি Booleanকম কোডিংয়ের জন্য সরাসরি এটি ব্যবহার করা পছন্দ করে এবং এটি একইভাবে হয়==true


2

যেহেতু আপনি ইতিমধ্যে স্পষ্টরূপে বুল হিসাবে সূচনা করেছিলেন, তাই আমি মনে করি ===অপারেটরের প্রয়োজন নেই।


2

যদি ভেরিয়েবলটি কেবল বুলিয়ান মানগুলি গ্রহণ করতে পারে তবে এটি সংক্ষিপ্ততর সিনট্যাক্স ব্যবহার করা যুক্তিসঙ্গত।

এটি সম্ভাব্য অন্যান্য ধরনের নিয়োগ করা করতে পারেন, এবং আপনি পার্থক্য প্রয়োজন trueথেকে 1বা "foo", তাহলে আপনি ব্যবহার করা আবশ্যক === true


2

আমি মনে করি আপনার যুক্তিটি সঠিক। তবে অনুশীলনে আমি দেখতে পেয়েছি যে ===তুলনাটি বাদ দেওয়া অনেক বেশি সাধারণ । আমি মনে করি যে এর জন্য তিনটি কারণ রয়েছে:

  1. এটি সাধারণত প্রকাশের অর্থ যোগ করে না - এটি এমন ক্ষেত্রে যেখানে মান যে কোনওভাবেই বুলিয়ান হিসাবে পরিচিত।
  2. যেহেতু জাভাস্ক্রিপ্টে টাইপ-অনিশ্চয়তার অনেক বড় বিষয় রয়েছে, যখন কোনও অপ্রত্যাশিত undefinedবা nullমান পাওয়া যায় তখন কোনও ধরণের চেক জোর করে আপনাকে কামড় দেয় । প্রায়শই আপনি কেবল চান যে এই জাতীয় ক্ষেত্রে আপনার পরীক্ষাটি ব্যর্থ হয়। (যদিও আমি "ব্যর্থ দ্রুত" নীতিবাক্যের সাথে এই দৃষ্টিভঙ্গির ভারসাম্য রক্ষার চেষ্টা করি)।
  3. জাভাস্ক্রিপ্ট প্রোগ্রামাররা প্রকারের সাথে দ্রুত এবং শিথিল খেলতে পছন্দ করে - বিশেষত বুলিয়ান অভিব্যক্তিগুলিতে - কারণ আমরা পারি।

এই উদাহরণ বিবেচনা করুন:

var someString = getInput();
var normalized = someString && trim(someString);  
// trim() removes leading and trailing whitespace

if (normalized) {
    submitInput(normalized);
}

আমি মনে করি যে এই জাতীয় কোডটি অস্বাভাবিক নয়। এটা তোলে ক্ষেত্রে যেখানে পরিচালনা getInput()আয় undefined, null, অথবা একটি খালি স্ট্রিং। দুটি বুলিয়ান মূল্যায়নের কারণে submitInput()কেবল তখনই ডাকা হয় যদি প্রদত্ত ইনপুটটি এমন একটি স্ট্রিং থাকে যেখানে শ্বেতস্থান অক্ষর থাকে।

জাভাস্ক্রিপ্টে &&এটির প্রথম যুক্তি সত্যবাদী হলে এটি মিথ্যা বা তার দ্বিতীয় তর্ক যুক্ত হলে এটি প্রথম যুক্তিকে ফিরিয়ে দেয়; তাই normalizedহতে হবে undefinedযদি someStringঅনির্দিষ্ট করা হয় এবং তাই ঘোষণা। তার মানে যে উপরের বুলিয়ান এক্সপ্রেশনগুলির কোনও ইনপুট আসলে বুলিয়ান মান নয় values

আমি জানি যে প্রচুর প্রোগ্রামার যারা এই জাতীয় কোডটি দেখে দৃ strong় টাইপ-চেকিং ক্রিংজে অভ্যস্ত। তবে নোট করুন যে শক্তিশালী টাইপিংয়ের প্রয়োগের জন্য সম্ভবত স্পষ্টত চেক nullবা undefinedমানগুলির প্রয়োজন হবে, যা কোডকে বিশৃঙ্খলা করবে। জাভাস্ক্রিপ্ট এ যে প্রয়োজন হয় না।


1

এটি নির্ভর করে। যদি আপনি উদ্বিগ্ন হন যে আপনার পরিবর্তনশীলটি এমন কিছু হিসাবে শেষ হতে পারে যা সত্যের দিকে সমাধান করে। তারপরে হার্ড চেক করা জরুরি must অন্যথায় এটি আপনার উপর নির্ভর করে। যাইহোক, আমি সন্দেহ করি যে সিনট্যাক্সটি যে whatever == TRUEকেউ জানত যে তারা কী করছে conf


1

জাভাস্ক্রিপ্টে বুলিয়ান ধারণাটি মোটামুটি অস্পষ্ট। এই বিবেচনা:

 var bool = 0 
 if(bool){..} //evaluates to false

 if(//uninitialized var) //evaluates to false

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



1

বুলিয়ান অবজেক্টের সাথেও পরীক্ষা করা যেতে পারে, যদি আপনার কোনও বস্তুর পরীক্ষা করার প্রয়োজন হয় error={Boolean(errors.email)}

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