অপারেটর হিসাবে 'এবং' বনাম 'ও&'


297

আমি একটি কোডবেস যেখানে ডেভেলপারদের ব্যবহার করার সিদ্ধান্ত নিয়েছি ANDএবং ORপরিবর্তে &&এবং ||

আমি জানি যে অপারেটরদের অগ্রাধিকারের মধ্যে পার্থক্য রয়েছে ( &&আগে যায় and), তবে প্রদত্ত কাঠামোর সাথে ( যথাযথভাবে PrestaShop ) এটি কোনও কারণ স্পষ্টভাবে নয়।

আপনি কোন সংস্করণ ব্যবহার করছেন? এর andচেয়ে বেশি পাঠযোগ্য &&? নাকি কোনও পার্থক্য নেই?


1
নোটটি ~বিট-ওয়াইজ নট অপারেটর এবং লজিক্যাল নয়। ;-)
গম্বো

2
হ্যা আমি জানি. খারাপ অভ্যাস :) . এটি কিছুটা আশ্চর্যের বিষয় যে পিএইচপি-তে 'এবং', 'বা' এবং 'এক্সওর' রয়েছে, তবে 'নেই' নেই, তাই না?
ts।

1
@ts: সঠিক উত্তরটি এখানে আর Bemrose দ্বারা উপলব্ধ অন্যতম stackoverflow.com/questions/2803321/and-vs-as-operator/...
মার্কো Demaio

4
! যৌক্তিক নয় অপারেটর
রেজার ঝড়

2
পছন্দ করুন সেই সময়টি অবশ্যই উপলব্ধি করা উচিত। দেখে মনে হচ্ছে
লুক্কায়িত

উত্তর:


662

আপনি যদি ব্যবহার করেন ANDএবং OR, অবশেষে আপনি এরকম কিছু দ্বারা বিভক্ত হয়ে যাবেন:

$this_one = true;
$that = false;

$truthiness = $this_one and $that;

কি $truthinessসমান অনুমান করতে চান ?

যদি আপনি বলেন false... বাজেট, দুঃখিত, ভুল!

$truthinessউপরে মান আছে true। কেন? তুলনায় =একটি উচ্চতর নজির আছে and। অন্তর্নিহিত অর্ডারটি দেখানোর জন্য প্রথম বন্ধনী যুক্ত করা আরও পরিষ্কার করে তোলে:

($truthiness = $this_one) and $that

আপনি যদি প্রথম কোড উদাহরণের &&পরিবর্তে ব্যবহার andকরেন তবে এটি প্রত্যাশিত এবং কার্যকরভাবে কাজ করবে false

নীচের মন্তব্যে যেমন আলোচনা হয়েছে, এটিও সঠিক মান অর্জন করতে কাজ করে, কারণ বন্ধনীগুলির চেয়ে অগ্রাধিকার রয়েছে =:

$truthiness = ($this_one and $that)

134
+1: পিএইচপি ডকুমেন্টেশনে এটি উচ্চস্বরে এবং স্পষ্ট করা উচিত, বা পিএইচপি এই অপারেটরগুলিকে পরিবর্তন করে একই নজির দেওয়া উচিত বা and orএকবারে সবার জন্য ছাড় দেওয়া উচিত। আমি অনেক লোককে ভেবে দেখেছি তারা ঠিক একই জিনিস এবং এখানে উত্তরগুলি আরও প্রশংসাপত্র রয়েছে।
মার্কো ডেমাইও

11
প্রকৃতপক্ষে, অন্যান্য ভাষাগুলিতে (উদাহরণস্বরূপ, পার্ল এবং রুবি) একই ধরণের পার্থক্য সহ এই রূপগুলি রয়েছে তাই পিএইচপি-তে সমান প্রাধান্য দিয়ে এই মান (যদিও এটি প্রাথমিকভাবে হতে পারে তা বিস্মৃত হওয়া) থেকে বিচ্যুত হওয়া বোধগম্য নয়। টন পিএইচপি অ্যাপ্লিকেশনগুলির পিছনে সামঞ্জস্যের কথা উল্লেখ না করা।
ম্লাদেন জাব্লানোভিć

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

2
আমি ভুল লাইন খুঁজে পেতে 3 মিনিট সময় কাটিয়েছি: $ এই = সত্য , :( এবং $ সত্যতা = ($ এটি এবং $ যে) সম্পর্কে কী; এটি আমার জন্য আরও ভাল দেখাচ্ছে :)
দিমিত্রি কোজমেনকো

6
আমি দিমিত্রি-র সাথে একমত - ব্রেইন মূল্যায়নকে প্রথম বন্ধনে আবদ্ধ করা কোডের উদ্দেশ্যটি পরিষ্কার করতে সহায়তা করে। আমি মনে করি যে অপারেটর এবং এটির কার্যকারিতা বর্তমানে বিদ্যমান হিসাবে এটি অন্যান্য ভাষার সাথে মূল্যবান এবং সামঞ্জস্যপূর্ণ, ভাষাটি বোঝা প্রোগ্রামারের কাজ।
জন z

43

এটি কীভাবে ব্যবহৃত হচ্ছে তার উপর নির্ভর করে এটি প্রয়োজনীয় এবং এমনকি কার্যকরও হতে পারে। http://php.net/manual/en/language.operators.logical.php

// "||" has a greater precedence than "or"

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;

তবে বেশিরভাগ ক্ষেত্রে এটি বিকাশকারী স্বাদের জিনিসগুলির মতো বেশি বলে মনে হয়, এর প্রতিটি ঘটনার মতোই আমি @ @ সরফ্রজের মতো কোডআইগনিটার কাঠামোয় দেখেছি mentioned


2
এটি উল্লেখ করার মতো যে যদি সেই অভিব্যক্তিটি বৃহত্তর স্টেটমেন্টের অংশ হয় তবে "সত্য" উপেক্ষা করা হয় না। কেসটি বিবেচনা করুন if ($f = false or true) $f = true;- ফলাফলটি হবে $fযা শেষ পর্যন্ত সত্য হয়ে যায়, কারণ অভিব্যক্তিটি সামগ্রিকভাবে সত্য হিসাবে মূল্যায়ন করে।
ক্রিস ব্রাউন

1
না, আপনি কেবল পরে ভেরিয়েবলটি ওভাররোট করেন। অভিব্যক্তিটি এখনও মিথ্যা হিসাবে মূল্যায়ন করা হয়, তারপরে আপনি এটিকে পরের লাইনে সত্য দিয়ে মুছে ফেলেন।
r3wt

2
আসলে, তিনি ঠিক বলেছেন। প্রথমে $fমিথ্যা নির্ধারিত হয় - তবে শর্তটি সত্যের সাথে মূল্যায়ন করে, সুতরাং তারপরে $fওভাররাইট করা হয়। যদি শর্তটিকে মিথ্যা হিসাবে মূল্যায়ন করা $fহয় তবে কখনই কোনওভাবে ওভাররাইট করা হবে না।
ahouse101

বিকাশকারীদের তাদের নিজস্ব স্বাদ অনুসরণ করা উচিত বলে পরামর্শ দেওয়া হাস্যকর। একই কোড বজায় রাখার চেষ্টা করছেন এমন অন্য কোনও বিকাশকারীর দুঃস্বপ্ন ভুলে যান, কোডটি নিজেই লিখেছিলেন এমন বিকাশকারী লিখিত যে কোনও কোডে অর্থপূর্ণ ভুল করতে থাকবে কারণ সে তার চেয়ে andবেশি পছন্দ করেছে &&, যেখানে andকেবল কিছু পরিস্থিতিতে &&প্রত্যাশার মতো কাজ করে এবং সকলের প্রত্যাশায় কাজ করে পরিস্থিতিতে।
এডিটিসি

13

সুরক্ষার জন্য, আমি সর্বদা আমার তুলনাগুলি বন্ধনীরূপে রাখি এবং সেগুলির বাইরে রাখি। এইভাবে, আমাকে অপারেটরের অগ্রাধিকারের উপর নির্ভর করতে হবে না:

if( 
    ((i==0) && (b==2)) 
    || 
    ((c==3) && !(f==5)) 
  )

29
ব্যক্তিগতভাবে আমি মনে করি অতিরিক্ত অপ্রয়োজনীয় বন্ধনী যুক্ত করা আপনার যা প্রয়োজন ঠিক তা না করে পড়া আরও বিভ্রান্তিকর করে তোলে। উদাহরণস্বরূপ, আমি মনে করি এটি পড়তে অনেক সহজ: যদি (($ i == 0 && $ b == 2) || ($ সি == 3 && $ f! = 5))
রোবি

4
আমি মনে করি এটি কোডের সবচেয়ে সুন্দর টুকরো যা আমি সারাদিন দেখেছি। ভাল করেছ.
আরএম-ভান্ডা

পিএইচপি হ'ল বর্ণিত ভাষা হওয়ায় আপনি যদি আপনার কোডে অপ্রয়োজনীয় শ্বেতস্পেস বা নতুন লাইন ব্যবহার না করেন তবে দ্রুত চলে run আপনি যদি সংকলিত ভাষায় একই কাজ করেন তবে এটি কেবল সংকলন করতে আরও বেশি সময় লাগবে তবে এটি রানটাইমের ক্ষেত্রে কার্যকর হবে না। আমার অর্থ এই নয় যে এটি একবার করা একটি পার্থক্য চিহ্নিত করবে কিন্তু পুরো অ্যাপ্লিকেশনটিতে পিএইচপি + জাভাস্ক্রিপ্ট ব্যবহার করে উদাহরণের মতো লিখেছিল ... নিশ্চিতভাবে বোঝার সময় আরও বড় হবে। ব্যাখ্যা: হোয়াইটস্পেস এবং নতুন লাইনগুলিকে উপেক্ষা করা হলেও এগুলি উপেক্ষা করার জন্য তাদের পরীক্ষা করতে হবে। এটি ব্যাখ্যা করা ল্যাংগুলিতে রানটাইম এবং সংকলিতগুলি সংকলনের সময় ঘটে happens
জোয়েলবনেটআর 19

@ জোয়েলবনেটআর যদি আপনি পিএইচপি ওপ্যাচে ব্যবহার করেন বা লোডের সময় সম্পর্কে আপনার উদ্বেগ অপ্রাসঙ্গিক। আমি আশা করি এটি ছাড়া
কেউই

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

11

অগ্রাধিকারটি && এবং ( এবং এর চেয়ে & এর চেয়ে বেশি অগ্রাধিকার রয়েছে) এর মধ্যে পার্থক্য রয়েছে , এটি এমন কিছু যা টের্নারি অপারেটরের সাথে মিলিত হয়ে বিভ্রান্তি সৃষ্টি করে। এই ক্ষেত্রে,

$predA && $predB ? "foo" : "bar"

একটি ফিরে আসবে স্ট্রিং যেহেতু

$predA and $predB ? "foo" : "bar"

একটি বুলিয়ান ফিরে আসবে ।


10

যেহেতু আপনি এটি শর্ত বরাদ্দে ব্যবহার করতে পারেন তার andচেয়ে কম প্রাধান্য রয়েছে =:

if ($var = true && false) // Compare true with false and assign to $var
if ($var = true and false) // Assign true to $var and compare $var to false

2

আমাকে "এবং" - "&&" - "এবং" এর মধ্যে পার্থক্যটি ব্যাখ্যা করতে দিন।

"&&" এবং "এবং" উভয়ই যৌক্তিক AND অপারেশন এবং তারা একই কাজ করে তবে অপারেটরের নজিরটি আলাদা।

কোনও অপারেটরের অগ্রাধিকার (অগ্রাধিকার) নির্দিষ্ট করে "কীভাবে" এটি দুটি এক্সপ্রেশনকে এক সাথে আবদ্ধ করে। উদাহরণস্বরূপ, 1 + 5 * 3 এক্সপ্রেশনটিতে উত্তরটি 16 এবং 18 নয়, কারণ গুণ ("*") অপারেটরের সংযোজন ("+") অপারেটরের চেয়ে উচ্চতর অগ্রাধিকার রয়েছে।

একক ক্রিয়াকলাপে এগুলিকে একত্রে মিশ্রিত করা, এমন কিছু ক্ষেত্রে আপনাকে অপ্রত্যাশিত ফলাফল দিতে পারে যা আমি সবসময় && ব্যবহার করার পরামর্শ দিই, তবে এটি আপনার পছন্দ।


অন্যদিকে "&" হ'ল কিছুটা দিকের এবং অপারেশন । এটি পূর্ণসংখ্যার মানের মধ্যে নির্দিষ্ট বিটের মূল্যায়ন ও হেরফের জন্য ব্যবহৃত হয়।

উদাহরণস্বরূপ আপনি যদি (14 এবং 7) করেন তবে ফলাফলটি 6 হবে।

7   = 0111
14  = 1110
------------
    = 0110 == 6

1

আপনি কোন সংস্করণ ব্যবহার করছেন?

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

'ও' এর চেয়ে 'এবং' বেশি পঠনযোগ্য?

এটি কি আপনার কাছে আরও পাঠযোগ্য । উত্তরটি হ্যাঁ এবং অপারেটরের চারপাশের কোড এবং প্রকৃতপক্ষে ব্যক্তি এটি পড়া ব্যক্তি সহ অনেকগুলি বিষয়ের উপর নির্ভর করে না!

|| পার্থক্য আছে কি?

হ্যাঁ. এর জন্য এবং বিটওয়াইজ অপারেটরগুলির জন্য লজিকাল অপারেটরগুলি দেখুন ।||~


0

আমার ধারণা এটি স্বাদের বিষয়, যদিও (ভুল করে) এগুলিকে মিশ্রিত করা কিছু অনাকাঙ্ক্ষিত আচরণের কারণ হতে পারে:

true && false || false; // returns false

true and false || false; // returns true

সুতরাং, && এবং ব্যবহার করে || তাদের পক্ষে সর্বোচ্চ অগ্রাধিকার পাওয়ার জন্য এটি নিরাপদ। পঠনযোগ্যতার ক্ষেত্রে কী, আমি বলব যে এই অপারেটরগুলি যথেষ্ট সর্বজনীন।

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

var_dump(true and false || false); // bool(false)

$a = true and false || false; var_dump($a); // bool(true)

কারণ $a === trueহ'ল কারণ, অ্যাসাইনমেন্ট অপারেটরের কোনও যৌক্তিক অপারেটরের চেয়ে অগ্রাধিকার রয়েছে, যেমন ইতিমধ্যে অন্যান্য উত্তরে খুব ভালভাবে ব্যাখ্যা করা হয়েছে।


16
এটি সত্য নয়, তারা সকলেই মিথ্যা প্রত্যাবর্তন করে।
জে

0

এখানে একটি সামান্য পাল্টা উদাহরণ:

$a = true;
$b = true;
$c = $a & $b;
var_dump(true === $c);

আউটপুট:

bool(false)

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


0

অ্যাসাইনমেন্ট অপারেশন ifছাড়াই বিবৃতি ব্যবহার করে অন্য একটি দুর্দান্ত উদাহরণ =

if (true || true && false); // is the same as:
if (true || (true && false)); // TRUE

এবং

if (true || true AND false); // is the same as:
if ((true || true) && false); // FALSE

কারণ ANDএকটি নিম্নতর প্রাধান্য আছে এবং এইভাবে ||একটি উচ্চতর প্রাধান্য আছে।

এই ক্ষেত্রে ভিন্ন true, false, falseএবং true, true, false। সম্প্রসারিত উদাহরণের জন্য https://ideone.com/lsqovs দেখুন ।

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