&& এবং || যৌক্তিক নয় তবে শর্তসাপেক্ষ অপারেটরগুলি?


62

আমি এমএসডিএন সি # ডকুমেন্টেশন দ্বারা কিছুটা বিভ্রান্ত হয়েছি যা জানিয়েছে যে &এবং |এটি লজিকাল অপারেটর এবং এটি &&এবং ||শর্তসাপেক্ষ অপারেটর।

আমি ডাকতে থাক &&, ||এবং !লজিক্যাল অপারেটর, তাই আমি ভুল বলেছি নাকি?


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

উত্তর:


120

আমি এমএসডিএন সি # ডকুমেন্টেশন দ্বারা কিছুটা বিভ্রান্ত হয়েছি যা জানিয়েছে যে &এবং |এটি লজিকাল অপারেটর এবং এটি &&এবং ||শর্তসাপেক্ষ অপারেটর। আমি ডাকতে থাক &&, ||এবং !লজিক্যাল অপারেটর, তাই আমি ভুল বলেছি নাকি?

না; আপনি সঠিক।

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

সুতরাং: প্রাসঙ্গিক কর্তৃপক্ষ হ'ল সি # নির্দিষ্টকরণ, যা বিভাগ 7.11 তে উল্লেখ করেছে:

&, ^, এবং |অপারেটরদের লজিক্যাল অপারেটর বলা হয়।

এরপরে এটি বিল্ট-ইন লজিকাল অপারেটরগুলিকে আরও পূর্ণসংখ্যার, গণনা, বুলিয়ান এবং নোলার-বুলিয়ান লজিকাল অপারেটরগুলিকে আরও ভেঙে যায়। এছাড়াও ব্যবহারকারী-সংজ্ঞায়িত লজিকাল অপারেটর রয়েছে; বিশদ দেখুন।

বিভাগে 7.12 আমাদের আছে

&&এবং ||অপারেটরদের শর্তসাপেক্ষ লজিক্যাল অপারেটর বলা হয়। তাদের "শর্ট-সার্কিট" লজিকাল অপারেটরও বলা হয়।

সুতরাং তাদের সমস্ত লজিকাল অপারেটর। তাদের মধ্যে কিছু শর্তযুক্ত লজিকাল অপারেটর

শর্তাধীন লজিকাল অপারেটরগুলিকে কী শর্তযুক্ত করে ? কেউ একটি অনুমান করতে পারে যে এটি সাধারণত শর্তযুক্ত বিবৃতি ( if) বা শর্তসাপেক্ষ অভিব্যক্তি ( ? :) এ ব্যবহৃত হয়। আসল কারণটি স্পেসিফিকেশন দ্বারা দেওয়া হয়েছে:

&&এবং ||অপারেটরদের শর্তসাপেক্ষ সংস্করণ &এবং |অপারেটরদের: অপারেশন x && yঅপারেশন অনুরূপ x & yছাড়া yশুধুমাত্র মূল্যায়ন হলে xমিথ্যা নয়। অপারেশনটি অপারেশনের x || yসাথে সম্পর্কিত x | y, কেবলমাত্র সত্য না yহলে মূল্যায়ন করা xহয়।

শর্তসাপেক্ষে লজিকাল অপারেটরগুলির নামকরণ করা হয়েছে কারণ ডান হাত অপারেন্ডটি শর্তাধীনভাবে বাম হাত অপারেন্ডের মানের উপর নির্ভর করে মূল্যায়ন করা হয়।

শর্তযুক্ত লজিকাল অপারেটরগুলি শর্তাধীন অভিব্যক্তির জন্য কেবল "সিনট্যাকটিক সুগার" হিসাবে উল্লেখ করে আমরা আরও স্পষ্টভাবে দেখতে পাচ্ছি । x && yসহজভাবে লেখার আরও আনন্দদায়ক উপায় x ? y : falseএবং x || yএটি সহজভাবে লেখার আরও আনন্দদায়ক উপায় x ? true : yশর্তযুক্ত লজিক্যাল এক্সপ্রেশনগুলি আসলে শর্তাধীন অভিব্যক্তি।

শর্তাধীন লজিকাল অপারেটরের একটি ব্যবহারকারী-সংজ্ঞায়িত ফর্মও রয়েছে এবং এটি কিছুটা জটিল। বিশদ জন্য বিশদ দেখুন।

আরও পড়ার বিষয়, যদি এই বিষয়টি আপনার আগ্রহী:


3
টুইটার শর্তসাপেক্ষ অপারেটর শর্তসাপেক্ষ কারণ এটির মূল্যায়ন শব্দার্থবিজ্ঞানে শর্তযুক্ত শাখা রয়েছে।
এরিক লিপার্ট

16
আমি "শর্ট-সার্কিট অপারেটর" শব্দটি বর্ণিত অর্থে "শর্তসাপেক্ষ অপারেটর" এর চেয়ে অনেক বেশি জনপ্রিয় (এবং সম্ভবত কম দুর্বোধ্য) ছাপে আছি।
ডক ব্রাউন

15
@ ডকব্রাউন: এটি অবশ্যই জনপ্রিয়, তবে আমি সর্বদা নামটি বিভ্রান্তিকর খুঁজে পেয়েছি; এটি এমন কেউ দ্বারা তৈরি করা হয়েছে বলে মনে হয় যে কোনও ফলাফল পাওয়ার জন্য "শর্ট সার্কিট" এবং "শর্ট কাট" একই জিনিস। একটি শর্ট সার্কিট একটি বিপজ্জনক ত্রুটি যা দ্রুত বৈদ্যুতিক সিস্টেমকে ধ্বংস করতে পারে। আমরা সি # "অনিরাপদ" ব্লকটির নামকরণ করেছি "অনিরাপদ" কারণ এগুলি যদি ভুলভাবে ব্যবহার করা হয় তবে তারা বিপজ্জনক ; আসুন জিনিসগুলিকে cutesy না দিয়ে বিভ্রান্তিকর মানযুক্ত নাম দিয়ে থাকি। এমনকি আমাকে এলভিস অপারেটর থেকে শুরু করতে নাও। :-)
এরিক লিপার্ট

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

1
@ কর্টআ্যামমন: আপনি নীচের অনুচ্ছেদটি পড়তে চাইবেন যেখানে আমি কল দিয়েছি যে ব্যবহারকারী-সংজ্ঞায়িত অপারেটর শব্দার্থকতা কিছুটা আলাদা এবং আপনার বিশদটি বিশদটি দেখতে হবে।
এরিক লিপার্ট

27

সি # এ এগুলি সমস্ত লজিকাল অপারেটর।

int x = 0xABCD & 0xFF // x == 0xCD

&&এবং ||"বলা হয় শর্তাধীন লজিক্যাল অপারেটর" কারণ তারা শর্ট-সার্কিট।

bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated, 
                                     // because x == 0xEF is false

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


3
হ্যাঁ, মাইক্রোসফ্ট কর্তৃপক্ষ, তবে অনুমোদনের নথির স্পেসিফিকেশন। বিভাগ 7.12 দেখুন, শর্তাধীন লজিকাল অপারেটরগুলি
এরিক লিপার্ট

8
গল্পটির নৈতিকতা: এই অপারেটরগুলির নাম সম্পর্কে সুনির্দিষ্ট হওয়ার চেয়ে সুনির্দিষ্টভাবে বোঝা আরও গুরুত্বপূর্ণ।
রবার্ট হার্ভে

21
অপারেটররা কী করে তার উপর ফোকাস করুন এবং শব্দভান্ডারটি নিয়ে ক্ষোভ বন্ধ করুন। আরও দেখুন নেমিং ক্ষতিকর বিবেচনা
রবার্ট হার্ভে

4
+1 টি। প্রশ্নের তালিকাভুক্ত সমস্ত কিছুই কেবল অপারেটর যা এক বা দুটি এক্সপ্রেশন নেয় এবং একটি মানকে মূল্যায়ণ করে। বিশেষণগুলি হ'ল অপ্রয়োজনীয় চুল বিভাজন।
blrfl


-2

বিন্দু যে &এবং |হয় bitwise অপারেটরদের, অর্থাত তারা প্রয়োজন এবং ফলন বিট স্ট্রিং মান প্রয়োগ করা হয়েছে। এবং বিটওয়াইজ প্রোগ্রামারদের মধ্যে একটি খুব ব্যবহৃত শব্দ।

উদাহরণস্বরূপ 0xff & 0x00 == 0x00, যখন 0xff | 0x00 == 0xff

আর &&||শর্ত প্রয়োগ, এবং শর্ত স্বাভাবিক মান উত্পাদ করা হয়; অর্থাত্ trueএবং false

উদাহরণস্বরূপ true && false == false, যখন true || false == true

সুতরাং &&এবং ||এটি শর্তসাপেক্ষ অপারেটর বলা যেতে পারে , যদিও এটি প্রোগ্রামারদের মধ্যে একটি সাধারণ শব্দ নয়।

অবশ্যই, প্রতিটি সি, সি ++, জাভা এবং সি # প্রোগ্রামার এ সব জানে। তবে আমি অনুমান করি যে ভুল বোঝাবুঝি ঘটে কারণ "শর্তসাপেক্ষ অপারেটর" আমাদের প্রোগ্রামারদের দ্বারা প্রায়শই ব্যবহৃত একটি শব্দ নয়।


5
অবশ্যই, প্রতিটি সি, সি ++, জাভা এবং সি # প্রোগ্রামার এ সব জানে। এটি লিখতে খুব অভদ্র বিষয়, ওপিকে বোকামি বোঝানো। লিখে একই আমাদের প্রোগ্রামারদের , আপনি ওপি অগ্রাহ্য। দয়া করে এটি করবেন না।
ডার্কডাস্ট

1
আমি মনে করি না যে, আপনার কি পরে উত্তর কোন যোগ মান এনেছে পর এরিক Lippert এর গৃহীত উত্তর, এবং তদ্ব্যতীত প্রশ্ন বিন্দু বুঝতে না পারা অর্থে ভুল।
হুনজা জিদেক

@ ডার্কডাস্ট প্রতিটি সি, সি ++, জাভা এবং সি # প্রোগ্রামারকে সেই অপারেটরদের বোঝা উচিত। এটি অভদ্র নয় বরং সত্য
ফিল 1970

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

4
প্রিয় সবাই, আমার উত্তরটি অভদ্র মনে হলে আমি দুঃখিত। ইংরেজি 1 ম ভাষা নয় not যাই হোক না কেন, আমি কখনই বোঝাতে চাইনি যে ওপি প্রোগ্রামার ছিল না। তবে, আমি বোঝাতে চেয়েছি যে সে বা সে পড়া পাঠ্যে একটি অস্বাভাবিক নামকরণের কারণে বিভ্রান্ত হয়েছিল। আমি যা করার চেষ্টা করেছি তা হ'ল প্রোগ্রামের খণ্ডগুলির দ্বারা অস্বাভাবিক নামকরণকে স্পষ্ট করা।
হিলটন ফার্নান্দিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.