আমি শর্তাধীন লজিকাল অপারেটরগুলির উপর সি # ভাষা স্পেসিফিকেশন পড়েছি ||
এবং &&
এটি সংক্ষিপ্ত-সার্কিট লজিকাল অপারেটর হিসাবেও পরিচিত। আমার কাছে এটি অস্পষ্ট বলে মনে হয়েছিল যে এগুলি নুলযোগ্য বুলিয়ানগুলির জন্য বিদ্যমান ছিল, অর্থাত অপারেন্ড টাইপ Nullable<bool>
(এছাড়াও লিখিত bool?
), তাই আমি এটি অ-গতিশীল টাইপ করে চেষ্টা করেছি:
bool a = true;
bool? b = null;
bool? xxxx = b || a; // compile-time error, || can't be applied to these types
এটি প্রশ্নের নিষ্পত্তি বলে মনে হয়েছিল (আমি স্পেসিফিকেশনটি স্পষ্টভাবে বুঝতে পারি না, তবে ভিজ্যুয়াল সি # সংকলকটির বাস্তবায়নটি সঠিক বলে ধরেছিলাম, এখন আমি জানতাম)।
যাইহোক, আমি dynamic
পাশাপাশি বাঁধাইয়ের সাথে চেষ্টা করতে চেয়েছিলাম । সুতরাং আমি পরিবর্তে এটি চেষ্টা করেছিলাম:
static class Program
{
static dynamic A
{
get
{
Console.WriteLine("'A' evaluated");
return true;
}
}
static dynamic B
{
get
{
Console.WriteLine("'B' evaluated");
return null;
}
}
static void Main()
{
dynamic x = A | B;
Console.WriteLine((object)x);
dynamic y = A & B;
Console.WriteLine((object)y);
dynamic xx = A || B;
Console.WriteLine((object)xx);
dynamic yy = A && B;
Console.WriteLine((object)yy);
}
}
অবাক করা ফলাফল এটি ব্যতিক্রম ছাড়াই চলে।
ঠিক আছে, x
এবং y
অবাক হওয়ার মতো কিছু নেই, তাদের ঘোষণাগুলি উভয় সম্পত্তি পুনরুদ্ধার করতে পরিচালিত করে, এবং ফলস্বরূপ মানগুলি প্রত্যাশার মতো হয়, x
হয় true
এবং y
হয় null
।
কিন্তু জন্য মূল্যায়ন xx
এর A || B
কোন বাঁধাই-টাইম ব্যতিক্রম নেতৃত্ব, এবং শুধুমাত্র সম্পত্তি A
পড়তে হয়নি B
। কেন এমন হয়? আপনি যেমন বলতে পারেন, আমরা B
পাগল বস্তুর মতো ফিরিয়ে দিতে গিটারটি পরিবর্তন করতে পারি, পছন্দ করি "Hello world"
এবং xx
এখনও true
আবদ্ধ-সমস্যা ছাড়াই মূল্যায়ন করব ...
মূল্যায়ন A && B
(জন্য yy
) এছাড়াও কোন বাধ্যবাধকতা-সময় ত্রুটি বাড়ে। এবং এখানে উভয় সম্পত্তি অবশ্যই পুনরুদ্ধার করা হয়। এটি রান-টাইম বাইন্ডার দ্বারা অনুমোদিত কেন? যদি প্রত্যাবর্তিত বস্তুটি B
একটি "খারাপ" অবজেক্টে পরিবর্তিত হয় (যেমন একটিstring
), একটি বাধ্যতামূলক ব্যতিক্রম ঘটে।
এটা কি সঠিক আচরণ?(আপনি কীভাবে অনুমান করতে পারেন?)
আপনি চেষ্টা যদি B
প্রথম প্রতীক হিসাবে, উভয় B || A
এবং B && A
(রানটাইম দপ্তরী ব্যতিক্রম দিতে B | A
এবং B & A
সবকিছু অ শর্ট-সার্কিট অপারেটরদের সঙ্গে স্বাভাবিক কাজ জরিমানা |
এবং &
)।
(ভিজ্যুয়াল স্টুডিও ২০১৩ এর সি # সংকলক, এবং রানটাইম সংস্করণ। নেট ৪.২.২ দিয়ে চেষ্টা করা হয়েছে)
Nullable<Boolean>
সাথে জড়িত হওয়ার কোনও দৃষ্টান্ত নেই , কেবলমাত্র বক্সযুক্ত বুলিয়ানদের হিসাবে বিবেচনা করা হয়dynamic
- এর সাথে আপনার পরীক্ষাটিbool?
অপ্রাসঙ্গিক। (অবশ্যই, এটি সম্পূর্ণ উত্তর নয়, কেবল একটির জীবাণু))