ভিজ্যুয়াল বেসিকটিতে স্টেটমেন্টের IIf
পরিবর্তে ফাংশনটি ব্যবহার করার সময় পারফরম্যান্সের পার্থক্য রয়েছে If
?
ভিজ্যুয়াল বেসিকটিতে স্টেটমেন্টের IIf
পরিবর্তে ফাংশনটি ব্যবহার করার সময় পারফরম্যান্সের পার্থক্য রয়েছে If
?
উত্তর:
ভিবিতে নিম্নলিখিত If
বিবৃতি রয়েছে যা প্রশ্নটি উল্লেখ করে, আমি মনে করি:
' Usage 1
Dim result = If(a > 5, "World", "Hello")
' Usage 2
Dim foo = If(result, "Alternative")
প্রথম মূলত সি # 'গুলি তিন শর্তসাপেক্ষ অপারেটর এবং দ্বিতীয় তার একসঙ্গে বেড়ে ওঠা অপারেটর (আগমন result
যদি না এটা Nothing
যে ক্ষেত্রে বিনিময়ে, "Alternative"
)। If
এইভাবে প্রতিস্থাপন করা হয়েছে IIf
এবং পরেরটি অপ্রচলিত।
সি # এর মতো, ভিবি'র শর্তসাপেক্ষ If
অপারেটর শর্ট সার্কিট, সুতরাং আপনি এখন নিরাপদে নিম্নলিখিতটি লিখতে পারেন যা IIf
ফাংশনটি ব্যবহার করে সম্ভব নয় :
Dim len = If(text Is Nothing, 0, text.Length)
If
এখন IIf
পর্যন্ত ফাংশনের চেয়ে বেশি দক্ষ ।
That's all you need to know, really
জ্ঞান ভাগ করে নেওয়ার জন্য উত্সর্গীকৃত কোনও ওয়েবসাইটের পক্ষে অনুকূল মনোভাব বলে মনে হয় না;)
IIf()
সত্য এবং মিথ্যা উভয় কোড চালায়। সংখ্যাগত কার্যবিধির মতো সাধারণ জিনিসের জন্য, এটি কোনও বড় বিষয় নয়। তবে কোডের জন্য যে কোনও প্রক্রিয়াকরণের প্রয়োজন, আপনি চক্রটি নষ্ট করছেন এমন শর্তটি নষ্ট করছেন যা সম্ভবত পার্শ্ব প্রতিক্রিয়া সৃষ্টি করে।
কোড চিত্র:
Module Module1
Sub Main()
Dim test As Boolean = False
Dim result As String = IIf(test, Foo(), Bar())
End Sub
Public Function Foo() As String
Console.WriteLine("Foo!")
Return "Foo"
End Function
Public Function Bar() As String
Console.WriteLine("Bar!")
Return "Bar"
End Function
End Module
ফলাফল:
Foo!
Bar!
এছাড়াও, আইআইএফ-এর সাথে আর একটি বড় সমস্যা হ'ল এটি আসলে যুক্তিগুলিতে থাকা কোনও ফাংশনকে কল করবে [1], সুতরাং আপনার যদি নীচের মতো পরিস্থিতি থাকে:
string results = IIf(Not oraData.IsDBNull(ndx), oraData.GetString(ndx), string.Empty)
এটি আসলে একটি ব্যতিক্রম ছুঁড়ে ফেলবে, যা বেশিরভাগ লোকেরা মনে করেন না যে ফাংশনটি প্রথমবার দেখলে এটি কাজ করে। এটি অ্যাপ্লিকেশনটিতে বাগগুলি ঠিক করতে খুব শক্ত কিছুকেও ডেকে আনতে পারে।
[১] আইআইএফ ফাংশন - http://msdn.microsoft.com/en-us/library/27ydhh0d(VS.71).aspx
আইফার পরিবর্তে টাইপ আনফারেন্স মেকানিজমটি সঠিকভাবে ব্যবহার করতে অপশন ব্যবহার করুন (অপশন ইনফার অন)
এই উদাহরণে, কীওয়ার্ডগুলি স্ট্রিং হিসাবে স্বীকৃত যখন আমি ব্যবহার করি:
Dim Keywords = If(String.IsNullOrEmpty(SelectedKeywords), "N/A", SelectedKeywords)
অন্যথায়, এটি একটি অবজেক্ট হিসাবে স্বীকৃত:
Dim Keywords = IIf(String.IsNullOrEmpty(SelectedKeywords), "N/A", SelectedKeywords)
এই লোকটির মতে , আইআইএফ যদি / ততক্ষণ 6x পর্যন্ত সময় নিতে পারে। ওয়াইএমএমভি
সর্বোপরি, পঠনযোগ্যতা সম্ভবত এই ক্ষেত্রে পারফরম্যান্সের চেয়ে বেশি পছন্দ করা উচিত। আইআইএফ যদি আরও দক্ষ ছিল, তবে লক্ষ্য শ্রোতার কাছে এটি কেবল সহজ পাঠযোগ্য হবে (আমি ধরে নিই যে আপনি ভিজ্যুয়াল বেসিকটিতে কাজ করছেন কিনা, আপনি চান যে অন্যান্য প্রোগ্রামাররা আপনার কোডটি সহজেই পড়তে সক্ষম হবে, যা ভিবি'র সবচেয়ে বড় वरदान ... এবং যা আমার মতে IIF এর মত ধারণার সাথে হারিয়ে গেছে)।
এছাড়াও, "আইআইএফ একটি ফাংশন, বনাম আইএফ ভাষার 'সিনট্যাক্সের অংশ হওয়া' ... যা আমার কাছে বোঝায় যে, সত্যই, যদি দ্রুততর হয় ... তবে যদি আর কিছু না হয় তবে সরাসরি বিবৃতি সিদ্ধ করা যায় ওপোকোডগুলির একটি ছোট সেটটিতে ফাংশনে পাওয়া যুক্তিটি সম্পাদনের জন্য মেমরির অন্য কোনও জায়গায় যেতে হবে। এটি একটি ট্রাইট পার্থক্য, সম্ভবত, তবে লক্ষণীয়।
আমি বিশ্বাস করি যে ইফ এবং আইআইএফ এর মধ্যে প্রধান পার্থক্য:
যদি (পরীক্ষা [বুলেটিয়ান], স্টেটমেন্ট 1, স্টেটমেন্ট 2) এর অর্থ হল পরীক্ষার মান অনুসারে হয় সেটেন্ট 1 বা স্টেটমেন্ট 2 কার্যকর করা হবে (কেবলমাত্র একটি বিবৃতি কার্যকর হবে)
ডিম ইজম = আইআইএফ (পরীক্ষা [বুলেটিয়ান], স্টেটমেন্ট ১, স্টেটমেন্ট ২) এর অর্থ উভয় বিবৃতি কার্যকর হবে তবে পরীক্ষার মান অনুসারে এর মধ্যে একটি মান (অবজেক্ট) -এর মান প্রদান করবে।
সুতরাং যদি বিবৃতিগুলির মধ্যে একটি ব্যতিক্রম ছুঁড়ে ফেলে তবে এটি (IIF) এ তা ফেলে দেবে তবে (যদি) শর্তটি তার মানটি ফেরত দেয় তবে এটি এটি ফেলে দেবে।
... কেন এটি 6x হিসাবে বেশি সময় নিতে পারে, উইকির পরিমাণটি:
কারণ আইআইএফ একটি লাইব্রেরি ফাংশন, এটি সর্বদা একটি ফাংশন কলের ওভারহেডের প্রয়োজন হবে, যেখানে শর্তসাপেক্ষ অপারেটর সম্ভবত ইনলাইন কোড তৈরি করবে।
অপরিহার্যভাবে আইআইএফ সি ++ / সি # তে একটি টার্নারি অপারেটরের সমতুল্য, সুতরাং / আপনি যদি চান তা যদি বিবৃতি টাইপ করে তবে এটি আপনাকে কিছু সুন্দর 1 লাইন দেয়। আপনি যদি চান তবে এটি মূল্যায়নের জন্য একটি ফাংশনও দিতে পারেন।
সেই ফাংশন গুলো আলাদা! সম্ভবত আপনার কেবল আইএফ স্টেটমেন্ট ব্যবহার করা দরকার। আইআইএফ সর্বদা ধীর থাকবে কারণ এটি উভয় ফাংশনই করবে এবং এটি স্ট্যান্ডার্ড আইএফ স্টেটমেন্টটি করবে।
আপনি যদি ভাবছেন যে কেন আইআইএফ ফাংশন রয়েছে, তবে এটি ব্যাখ্যা হতে পারে:
Sub main()
counter = 0
bln = True
s = iif(bln, f1, f2)
End Sub
Function f1 As String
counter = counter + 1
Return "YES"
End Function
Function f2 As String
counter = counter + 1
Return "NO"
End Function
সুতরাং এর পরে কাউন্টারটি 2 হবে, তবে কেবলমাত্র "হ্যাঁ" হবে। আমি জানি যে এই কাউন্টার স্টাফটি অকেজো, তবে কখনও কখনও এমন ফাংশন রয়েছে যেগুলি চালানোর জন্য আপনার উভয়ের প্রয়োজন হবে, আইএফ সত্য বা মিথ্যা কিনা তা বিবেচনা করে না, এবং কেবলমাত্র তার একটির থেকে আপনার ভেরিয়েবলের জন্য মান নির্ধারণ করুন।
IIf()
এইভাবে ব্যবহার করা কেবল আপনার কোড পড়ে লোকজনকে বিভ্রান্ত করছে।
IIf
।