ডাবল পাইপ অপারেটর ( ||
) কী?
ডাবল পাইপ অপারেটর ( ||
) লজিকাল OR
অপারেটর । ইন বেশির ভাগ ভাষায় এটি নিম্নলিখিত পদ্ধতিতে কাজ করে:
- যদি প্রথম মান হয়
false
তবে এটি দ্বিতীয় মানটি পরীক্ষা করে। যদি এটি হয় তবে এটি true
ফিরে আসে true
এবং যদি তা থাকে তবে false
তা ফিরে আসে false
।
- যদি প্রথম মান হয় তবে
true
এটি সর্বদা ফিরে আসে true
, দ্বিতীয় মানটি যাই হোক না কেন।
সুতরাং মূলত এটি এই ফাংশনটির মতো কাজ করে:
function or(x, y) {
if (x) {
return true;
} else if (y) {
return true;
} else {
return false;
}
}
আপনি এখনও বুঝতে না পারলে এই টেবিলটি দেখুন:
| true false
------+---------------
true | true true
false | true false
অন্য কথায়, এটি তখনই মিথ্যা হয় যখন উভয় মান মিথ্যা হয়।
এটি জাভাস্ক্রিপ্টে কীভাবে আলাদা?
জাভাস্ক্রিপ্টটি কিছুটা আলাদা, কারণ এটি একটি স্বচ্ছভাবে টাইপ করা ভাষা । এই ক্ষেত্রে এর অর্থ হ'ল আপনি ||
বুলিয়ান নয় এমন মান সহ অপারেটর ব্যবহার করতে পারেন । যদিও এটি কোনও তাত্পর্যপূর্ণ নয়, আপনি উদাহরণস্বরূপ একটি ফাংশন এবং একটি অবজেক্ট সহ এই অপারেটরটি ব্যবহার করতে পারেন:
(function(){}) || {}
সেখানে কি হয়?
মানগুলি বুলিয়ান না হলে, জাভাস্ক্রিপ্ট বুলিয়ানকে অন্তর্নিহিত রূপান্তর করে । এর মানে যদি মান falsey (যেমন 0
, ""
, null
, undefined
(এছাড়াও দেখুন জাভাস্ক্রিপ্ট সকল falsey মান , এটা বলে গণ্য হবে)) false
; অন্যথায় এটি হিসাবে চিকিত্সা করা হয় true
।
সুতরাং উপরের উদাহরণটি দেওয়া উচিত true
, কারণ খালি ফাংশন সত্য। ভাল, এটা না। এটি খালি ফাংশন প্রদান করে। এর কারণ জাভাস্ক্রিপ্টের ||
অপারেটরটি শুরুতে লিখেছিলাম বলে কাজ করে না। এটি নিম্নলিখিত পদ্ধতিতে কাজ করে:
- তাহলে প্রথম মান falsey , এটা ফেরৎ দ্বিতীয় মান ।
- তাহলে প্রথম মান truthy , এটা ফেরৎ প্রথম মান ।
অবাক? আসলে এটি প্রচলিত ||
অপারেটরের সাথে "সামঞ্জস্যপূর্ণ" । এটি নিম্নলিখিত ফাংশন হিসাবে লেখা যেতে পারে:
function or(x, y) {
if (x) {
return x;
} else {
return y;
}
}
যদি আপনি সত্যবাদী মান হিসাবে পাস করেন তবে x
এটি প্রত্যাবর্তন করবে, এটি x
সত্যবাদী মান। সুতরাং আপনি যদি পরবর্তীকালে এটি ব্যবহার করেন if
:
(function(x, y) {
var eitherXorY = x || y;
if (eitherXorY) {
console.log("Either x or y is truthy.");
} else {
console.log("Neither x nor y is truthy");
}
}(true/*, undefined*/));
আপনি পেতে "Either x or y is truthy."
।
যদি x
মিথ্যা ছিল, eitherXorY
হবে y
। এই ক্ষেত্রে আপনি "Either x or y is truthy."
যদি y
সত্যবাদী হন; অন্যথায় আপনি পাবেন "Neither x nor y is truthy"
।
আসল প্রশ্ন
এখন, যখন আপনি জানেন যে ||
অপারেটর কীভাবে কাজ করে, আপনি সম্ভবত তার x = x || y
অর্থ কী তা বোঝাতে পারেন। যদি x
সত্যবাদী হয়, x
বরাদ্দ করা হয় x
, তাই আসলে কিছুই হয় না; অন্যথায় y
নির্ধারিত হয় x
। এটি সাধারণত ফাংশনে ডিফল্ট পরামিতিগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়। যাইহোক, এটি প্রায়শই একটি খারাপ প্রোগ্রামিং অনুশীলন হিসাবে বিবেচিত হয় , কারণ এটি আপনাকে প্যারামিটার হিসাবে একটি মিথ্যা মান (যা অগত্যা নয় undefined
বা null
) পাস করতে বাধা দেয় । নিম্নলিখিত উদাহরণ বিবেচনা করুন:
function badFunction(/* boolean */flagA) {
flagA = flagA || true;
console.log("flagA is set to " + (flagA ? "true" : "false"));
}
এটি প্রথম দর্শনে বৈধ দেখায়। তবে, আপনি যদি প্যারামিটার false
হিসাবে পাস করেন তবে কী হবে flagA
(যেহেতু এটি বুলিয়ান, অর্থাত্ হতে পারে true
বা false
)? এটা হয়ে যাবে true
। এই উদাহরণে, সেট flagA
করার কোনও উপায় নেই false
।
এটা একটা ভালো ধারণা স্পষ্টভাবে কি না চেক করতে হবে flagA
হয় undefined
যে মত:
function goodFunction(/* boolean */flagA) {
flagA = typeof flagA !== "undefined" ? flagA : true;
console.log("flagA is set to " + (flagA ? "true" : "false"));
}
যদিও এটি দীর্ঘতর, এটি সর্বদা কাজ করে এবং এটি বোঝা সহজ।
আপনি ডিফল্ট ফাংশন প্যারামিটারগুলির জন্য ES6 সিনট্যাক্সটিও ব্যবহার করতে পারেন তবে নোট করুন যে এটি পুরানো ব্রাউজারগুলিতে (IE এর মত) কাজ করে না। এইসব ব্রাউজার সমর্থন করতে চান তাহলে আপনি আপনার কোড transpile উচিত হট্টগোল ।
এমডিএন-তে লজিকাল অপারেটরগুলিও দেখুন ।
falsy
, শুধু নাundefined
। আমি কতবার দেখেছিdoWeDoIt = doWeDoIt || true
, আমাকে কাঁদতে যথেষ্ট। (যেমনdoWeDoIt
এখন আর হবে নাfalse
)