ভিবি.এনইটি-তে কি শর্তসাপেক্ষে টের্নারি অপারেটর রয়েছে?


446

পার্লে (এবং অন্যান্য ভাষায়) একটি শর্তসাপেক্ষ টেরিনারি অপারেটর এর মত প্রকাশ করা যেতে পারে:

my $foo = $bar == $buz ? $cat : $dog;

ভিবি.এনইটি তে কি একই রকম অপারেটর রয়েছে?


13
টেরিনারি অপারেটর হ'ল যে কোনও অপারেটর যা তিনটি অপারেন্ড নেয়, অনেকটা বাইনারি অপারেটরের মতো দু'জন এবং অ্যানারি অপারেটর একটি নেয়। ?: অপারেটর কোনও সংজ্ঞা নয়, টের্নে অপারেটরের একটি নির্দিষ্ট উদাহরণ।
জুবা

উত্তর:


597

সংস্করণ উপর নির্ভর করে। IfVB.NET 2008 সালে অপারেটর একটি তিন অপারেটর (সেইসাথে একটি নাল মিলন অপারেটর) হয়। এটি সবেমাত্র চালু হয়েছিল, ২০০৮ এর আগে এটি উপলভ্য ছিল না। এখানে আরও কিছু তথ্য: ভিজ্যুয়াল বেসিক যদি ঘোষণা হয়

উদাহরণ:

Dim foo as String = If(bar = buz, cat, dog)

[Edit]

২০০৮ এর আগে এটি ছিল IIfযা Ifউপরে বর্ণিত অপারেটরের সাথে প্রায় একই রকম কাজ করেছিল ।

উদাহরণ:

Dim foo as String = IIf(bar = buz, cat, dog)

15
২০০৮ এর আগে এটি আইআইএফ ছিল, যা আপনার লিঙ্কে বর্ণিত ইফ অপারেটরের সাথে প্রায় একইভাবে কাজ করেছিল।
জুবা

128
... গুরুত্বপূর্ণ পার্থক্যটির সাথে যে আইআইফ () একটি ক্রিয়াকলাপ হওয়ায় সর্বদা ফলস্বরূপ এবং বিকল্প উভয়ই মূল্যায়ন করে, যখন নতুন যদি কেবল তাদের মধ্যে একটির মূল্যায়ন করে।
গ্রেগ হিউগিল

6
এর অর্থ কী? যদি (শর্ত, সত্য অংশ, মিথ্যা অংশ)। আমি কি কসরত করতে পারি?
kbvishnu

10
আমি একটি বিশাল সি লোক, তবে আমি এই সিনট্যাক্সটি প্রচলিত টার্নারি অপারেটরের চেয়ে আরও পরিষ্কার পাই।
ক্রাশ করুন

11
আরেকটি গুরুত্বপূর্ণ পার্থক্য: Iifসর্বদা টাইপের একটি বস্তু প্রদান করে Object, যেখানে If(bool, obj, obj)বিকল্পটি কঠোরভাবে প্রকারের সাথে টাইপ-চেকিংয়ের অনুমতি দেয়। ( Dim var As Integer = Iif(true, 1, 2)বিকল্পটি কঠোরভাবে সংকলন করবেন না কারণ আপনি কেবল সহজেই লিখতে Dim var As Integer = Iif(true, new Object(), new Object())পারেন। আপনি Dim var As Integer = If(true, 1, 2)যদিও বিকল্পটি দিয়ে কঠোরভাবে লিখতে পারেন , কারণ এটি
প্রত্যাশিত

78

iif সর্বদা ভিবিতে উপলব্ধ ছিল, এমনকি ভিবি 6 তেও।

Dim foo as String = iif(bar = buz, cat, dog)

এটি সত্যিকারের অপারেটর নয়, তবে মাইক্রোসফ্টের একটি ফাংশন name ভিজুয়ালবাসিক নেমস্পেস।


31
আইআইএফ যদিও কেবল একটি টেরিনারি অপারেটরের নিকটবর্তী - যার অর্থ আপনি এটি প্রতিটি অবস্থাতে এটি ব্যবহার করতে পারবেন না যে আপনি যদি অন্য কোনও (বা তৃতীয় অপারেটর) করতেন। উদাহরণস্বরূপ, মান = Iif (1 = 1, 0, 1/0) উড়ে যাবে, তবে মান = যদি (1 = 1, 0, 1/0) না হয় ...
বীপ বীপ

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

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

2
আইআইএফ একটি নিয়মিত পদ্ধতি কল এবং সমস্ত পরামিতি মূল্যায়ন করে। এটি তিনটি নয়। Se dotnetslackers.com/VB_NET/…
লসম্যানোস

3
আমি যেমন বলেছি, এটি সত্যিকারের অপারেটর নয়, এবং vb6 শর্ট সার্কিট মূল্যায়ন সমর্থন করে না তাই এটি সর্বদা লাইনটিতে সমস্ত ক্রিয়াকলাপকে মূল্যায়ন করে।
ক্রিস এরিকসন

23

() যদি নিকটতম সমতুল্য হয় তবে আপনি যদি "বিকল্প স্ট্রাইক অফ" সেট করে থাকেন তবে অন্তর্নিহিত রূপান্তরগুলি সম্পর্কে সতর্ক থাকুন

উদাহরণস্বরূপ, যদি আপনার সাবধান না হয় তবে আপনি এর মতো কিছু চেষ্টা করার প্রলোভন পেয়ে যেতে পারেন:

Dim foo As Integer? = If( someTrueExpression, Nothing, 2)

"Foo" কে 0 এর মান দেবে!

আমি মনে করি '?' সি # তে অপারেটরের সমতুল্য সংকলন ব্যর্থ হবে


8
কেবল সম্পূর্ণতার জন্য, এই অভিব্যক্তিটি লেখার আরও ভাল উপায় Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
মার্ক হার্ট

9
নোট করুন যে এটির সাথেও ঘটে Option Strict On। কারণটি হ'ল Nothingভিবি.নেট সি-এর default(T)চেয়ে সমান null
হেইনজি

1
আর কারো জন্য দ্বারা ধাঁধা Integer?এটা nullable মানে - দেখুন stackoverflow.com/questions/3628757/make-an-integer-null
AjV Jsy

1
যেহেতু নালাগুলি ধরণের জন্য অন্তর্নিহিত রূপান্তরটিতে আটকে যায় - এই উত্তরটি কেন এবং এই উত্তরটি এমন কাজের জন্য দেখুন যা প্রত্যাবর্তনের আগে যুক্তিটি ছুঁড়ে ফেলে ( CType(Nothing, DateTime?)।
কাইলমিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.