VB.NET এ এবং AndAlso এর মধ্যে পার্থক্য কী?


উত্তর:


380

Andঅপারেটর উভয় পক্ষই মূল্যায়ণ যেখানে AndAlsoমূল্যায়ন ডান দিকে যদি এবং কেবল যদি বাম পাশে সত্য।

একটি উদাহরণ:

If mystring IsNot Nothing And mystring.Contains("Foo") Then
  ' bla bla
End If

উপরের একটি ব্যতিক্রম ছুঁড়ে যদি mystring = Nothing

If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
  ' bla bla
End If

এই এক ব্যতিক্রম ছুঁড়ে না।

সুতরাং আপনি যদি সি # বিশ্ব থেকে এসে থাকেন তবে আপনি AndAlsoযেমন ব্যবহার করেন তেমন ব্যবহার করা উচিত &&

এখানে আরও তথ্য: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso- এবং-orelse/


2
"আরও তথ্য" লিঙ্কটি নষ্ট হয়ে গেছে। এখানে নতুন ইউআরএল রয়েছে: প্যানোপটিকসেন্ট্রাল.না.২০০৩
০৮/১18

12
তাদের পরিবর্তে "অ্যান্ডথেন" নির্বাচন করা হয়নি কেন কেউ জানেন? আমি মনে করি এটি আরও স্বজ্ঞাত হবে।
২৩:৩6 তে tmight

7
আমি সবসময় ভেবেছিলাম এটি স্বজ্ঞাত ছিল। AndAlso বোঝাতে চাইবে যে এটি উভয়ই পরীক্ষা করে চলেছে এবং এটি অন্যভাবে হওয়া উচিত! সুতরাং কেন এই জাতীয় জিনিসগুলি পরীক্ষা করতে আমাকে এসওতে আসতে হবে (হ্যাঁ আমি এসি # লোক)। আপনাকে "এবং AndAlso এর মধ্যে পার্থক্য" এর মতো প্রশ্নও জিজ্ঞাসা করতে হবে না। অনেক অ্যান্ডস! আমার ইংরেজি শিক্ষক আমাকে মেরে
রবিন ফরাসী

3
যে কোনও সময় আমি অরলেস ব্যবহার করি আমি সবসময় সাউথ পার্কের কথা ভাবি "অন্যথায় কী?" "হুবহু"
রবিন ফরাসী

1
@ তাত্পর্যপূর্ণ অনুমান যে এটি আরও বিভ্রান্তির কারণ Thenহবে কারণ এটি তার নিজস্ব মূলশব্দ ।
বিনকি

29

Andঅপারেটর, চালিয়ে যাওয়ার আগে বিবৃতিতে সব শর্ত পরীক্ষা যেহেতু Andalso অপারেটর যদি তা জানেন শর্ত মিথ্যা বন্ধ হবে হবে। উদাহরণ স্বরূপ:

if x = 5 And y = 7

X 5 এর সমান কিনা এবং y এর সমান 7 হয় কিনা তা পরীক্ষা করে থাকে, যদি উভয়ই সত্য হয় তবে অবিরত থাকবে।

if x = 5 AndAlso y = 7

X এর সমান 5 হয় কিনা তা পরীক্ষা করে যদি এটি না হয় তবে y 7 হয় কিনা তা যাচাই করে না, কারণ এটি জানে যে শর্তটি ইতিমধ্যে মিথ্যা। (একে শর্ট সার্কিট বলা হয়))

প্রথম অংশটি সত্য না হলে স্পষ্টভাবে দ্বিতীয় অংশটি পরীক্ষা না করার কোনও কারণ থাকলে সাধারণত লোকেরা শর্ট সার্কিট পদ্ধতি ব্যবহার করে, যেমন যদি এটি পরীক্ষা করা হয় তবে এটি ব্যতিক্রম ছুঁড়ে মারবে। উদাহরণ স্বরূপ:

If Not Object Is Nothing AndAlso Object.Load()

যদি এটি ব্যবহার করা Andপরিবর্তে AndAlso, এটা এখনও করার চেষ্টা করবে Object.Load()এমনটি যদি সম্ভবও হয় nothing, যা একটি ব্যতিক্রম নিক্ষেপ করবে।


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

1
প্রথমত, আন্দালসো মূলত 'রানটাইম সাশ্রয় করতে' ব্যবহার করা হয় না, এটি হতাশ। দ্বিতীয়ত, দ্বিতীয় যুক্তিটি কিছু উপকারী 'পার্শ্ব প্রতিক্রিয়া' সম্পাদন করা কুৎসিত-গাধা খারাপ অভ্যাস।
টর হগেন

2
আপনি তর্ক করতে পারবেন না যদিও এটি 'রানটাইম এ সঞ্চয় করে না'। এবং আমি এমন পরিস্থিতি খুঁজে পেয়েছি যেখানে পার্শ্ব প্রতিক্রিয়াগুলি আসলে কুৎসিত-গাধা খারাপ অভ্যাস নয়।
এড মার্টি

1
"সাধারণত লোকেরা স্পষ্টভাবে দ্বিতীয় অংশটি পরীক্ষা না করার কোনও কারণ থাকলে শর্ট সার্কিট পদ্ধতি ব্যবহার করে" আর্ম, বাট? আমি আশা করব লোকেরা শর্ট সার্কিট ব্যবহার করবে যদি না তাদের কারণ না থাকে! পুরানো and/ কারও কারও orকাছে কারণ না থাকলে সেগুলি ব্যবহার করা উচিত নয় - যার মধ্যে আমি মনে করি বৈধ ব্যক্তিরা খুব কম এবং এর মধ্যে খুব কম। ডিফল্টরূপে বেশিরভাগ অন্যান্য ভাষা শর্ট সার্কিটের একটি কারণ রয়েছে: সম্ভাব্য ব্যয়বহুল এক্সপ্রেশনগুলি যখন কোনও কিছুই অবদান না করে তখন মূল্যায়ন না করে ফলাফলের ধারণাটি ধরে রাখে। পরিস্থিতিতে স্ট্যাশিং পার্শ্ব প্রতিক্রিয়াগুলি ভাল, পাশের চোখের হওয়া উচিত। তবে এটি আমার মতামত ...
আন্ডারস্কোর_১

20

মজার বিষয় হ'ল উত্তরগুলির মধ্যে যেটি উল্লেখ করা হয়নি Andএবং Orভিবি.এনইটি তে বিট অপারেটর রয়েছে OrElseএবং AndAlsoতারা কঠোরভাবে বুলিয়ান অপারেটর are

Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5

দ্রষ্টব্য : একটি শূন্য নয় পূর্ণসংখ্যার বিবেচনা করা হয় true; Dim e = not 0সেট হবে eথেকে -1প্রদর্শক Notএকটি বিট অপারেটর।

||এবং &&(গ # সংস্করণ OrElseএবং AndAlso) গত মূল্যায়ন অভিব্যক্তি যা হবে আসতে 3এবং 5যথাক্রমে। এটি v || 5আপনাকে যখন সি # তে আইডিয়মটি ব্যবহার করতে দেয় 5তখন কখন (বা একটি পূর্ণসংখ্যা) vহয় nullবা এক্সপ্রেশনটির 0মান এবং vঅন্যথায় এর মান হিসাবে দেয় । শব্দার্থের পার্থক্যটি ভিবি.এনইটি অফ গার্ড অফ সি-র মধ্যে একটি সি # প্রোগ্রামারকে ছুঁড়ে ফেলতে পারে কারণ এই "ডিফল্ট মান আইডিয়ম" ভিবি.নেটে কাজ করে না।

সুতরাং, প্রশ্নের উত্তর দিতে : ব্যবহার করুন Orএবং Andবিট ক্রিয়াকলাপের জন্য (পূর্ণসংখ্যা বা বুলিয়ান)। ব্যবহারের OrElseএবং AndAlso"শর্ট সার্কিট" একটি অপারেশনে সময় বাঁচাতে, অথবা এটি মূল্যায়নের পূর্বে মূল্যায়ন বৈধতা পরীক্ষার জন্য। If valid(evaluation) andalso evaluation thenঅথবাif not (unsafe(evaluation) orelse (not evaluation)) then

বোনাস: নিম্নলিখিতটির মান কত?

Dim e = Not 0 And 3

আমি মনে করি আপনি বিভ্রান্ত ||এবং &&সঙ্গে ছিল ??। যদিও এমন ভাষা রয়েছে যেখানে ||অ-মিথ্যা মানটি ফিরিয়ে দেবে, সি # তাদের মধ্যে একটি নয়, এবং একটি ফেরত দেয় bool(উত্তোলনযোগ্য অপারেটর অপারেটরগুলি বাদ দিয়ে, যেখানে আপনি Nullable<bool>ফলাফল পাবেন)
বেন ভয়েগট


13

পার্শ্ব প্রতিক্রিয়াগুলি খারাপ বলে all সমস্ত লোকের জন্যই: এক জায়গায় দুটি পার্শ্ব প্রতিক্রিয়া থাকা ভাল এমন জায়গায় দুটি ফাইলের বিষয়বস্তু পড়তে হবে।

While File1.Seek_Next_Row() And File2.Seek_Next_Row()
    Str1 = File1.GetRow()
    Str2 = File2.GetRow()
End While

Andশর্তটি যাচাই করে প্রতিবার সারি ব্যবহার করা হয় তা নিশ্চিত করে ব্যবহার করে। যদিও AndAlsoশেষের লাইনটি পড়তে পারে File1এবং File2গ্রাসকৃত লাইন ছাড়াই ছেড়ে যেতে পারে ।

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


5

এটি সম্পর্কে চিন্তা করার এক সহজ উপায় হ'ল এমনকি সরল ইংরেজীও ব্যবহার করা

If Bool1 And Bool2 Then
If [both are true] Then


If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then

3
কোড কোডের চেয়ে ইংরাজী আরও বিভ্রান্তিকর কারণ এটিতে কোনও অনুমান নেই!
বিনকি

5

AndAlso অনেকটা And এর মতো এবং এটি সি #, সি ++ ইত্যাদির মতো && এর মতো কাজ করে except

পার্থক্যটি হ'ল যদি প্রথম ধারা (AndAlso এর আগে একটি) সত্য হয় তবে দ্বিতীয় ধারাটি কখনই মূল্যায়ন করা হয় না - যৌগিক যৌক্তিক প্রকাশটি "শর্ট সার্কিট" হয়।

এটি কখনও কখনও খুব দরকারী, যেমন একটি এক্সপ্রেশন যেমন:

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

পুরানো এবং উপরের এক্সপ্রেশনটিতে মাইওবিজে নਾਲ থাকলে একটি নালারফেরান এক্সেক্সপশন নিক্ষেপ করবে।


5

স্ট্যাক ওভারফ্লো প্রশ্নটিও দেখুন: আমি কি সর্বদা AndAlso এবং OrElse অপারেটর ব্যবহার করা উচিত?

এছাড়াও: যাঁরা Andঅভিব্যক্তিটির ডান দিকের আপনার প্রয়োজনীয় পার্শ্ব-প্রতিক্রিয়াটি ব্যবহার করেছেন উল্লেখ করার জন্য একটি মন্তব্য :

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


3

উপরের উত্তরগুলি ছাড়াও, AndAlso শর্ট সার্কিট হিসাবে পরিচিত একটি কন্ডিশনার প্রক্রিয়া সরবরাহ করে। অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজে vb.net এর মতই এই কার্যকারিতাটি নির্মিত হয় এবং অযৌক্তিক মূল্যায়নগুলি কেটে দীর্ঘ অবস্থার বিবৃতিতে যথেষ্ট কার্যকারিতা বৃদ্ধি সরবরাহ করতে পারে।

অন্য অনুরূপ শর্তটি হল ওড়েল শর্ত যা বাম শর্তটি মিথ্যা হলে কেবল সঠিক শর্তটি পরীক্ষা করে দেখাবে, এইভাবে সত্যিকারের শর্তটি পাওয়া যাওয়ার পরে অযৌক্তিক অবস্থার চেকগুলি কেটে ফেলা হয়।

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


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

"উপরের উত্তরগুলি ছাড়াও, অ্যান্ডলস শর্ট সার্কিট হিসাবে পরিচিত একটি কন্ডিশনার প্রক্রিয়া সরবরাহ করে।" এই একের উপরে প্রতিটি উত্তর শর্ট সার্কিটের দিকে মনোনিবেশ করে। : পি তবে ভাল বর্ণনা এবং সুপারিশ।
আন্ডারস্কোর_ডি

1

আমাদের বেশিরভাগের জন্য অরলেস এবং অ্যান্ডলস কয়েকটি বিভ্রান্তিকর ব্যতিক্রম (1% এরও কম যেখানে আমাদের ও ও এন্ড ব্যবহার করতে পারে) বাদ দিয়ে কৌশলটি করবে।

লোকেরা তাদের বুলিয়ান লজিকগুলি প্রদর্শন করে এবং এটিকে রকেট বিজ্ঞানের মতো দেখানোর দ্বারা চালিত না হওয়ার চেষ্টা করুন।

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


0

কোড দিয়ে নয় শব্দ দিয়ে বুঝতে:

কেস ব্যবহার করুন:
"এবং" দিয়ে সংকলকটি সমস্ত শর্তাদি পরীক্ষা করবে যদি আপনি পরীক্ষা করে থাকেন যে কোনও বস্তু "কিছুই না" হতে পারে এবং তারপরে আপনি তার বৈশিষ্ট্যগুলির মধ্যে একটি পরীক্ষা করছেন তবে আপনার রান টাইম ত্রুটি হবে।
তবে AndAlso এর সাথে প্রথম "মিথ্যা" শর্তে এটি পরেরটি পরীক্ষা করবে যাতে আপনার কোনও ত্রুটি না হয়।

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