সুতরাং এটি একটি তাত্ত্বিক প্রশ্ন বেশি। সি ++ এবং ভাষাগুলি (এর মধ্যে) সরাসরি এটির উপর ভিত্তি করে (জাভা, সি #, পিএইচপি) প্রথম অপারেন্ডে বেশিরভাগ বাইনারি অপারেটরগুলির ফলাফল নির্ধারণের জন্য শর্টকাট অপারেটর রয়েছে , যেমন
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
তবে যখন আমি বুলিয়ান এক্সপ্রেশনটি টগল করতে চাই তখন আমি সর্বদা নিজেকে এমন কিছু লিখতে দেখি
a = !a;
a
একটি দীর্ঘ অভিব্যক্তি মত যখন বিরক্তিকর হয়ে ওঠে।
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(হ্যাঁ, ডেমিটারের আইন, আমি জানি)।
তাই আমি ভাবছিলাম, এমন কি কোনও ভাষা আছে যা ইউনারি বুলিয়ান টগল অপারেটরের সাথে আমাকে a = !a
এক্সপ্রেশনটি পুনরাবৃত্তি না করে সংক্ষেপণ করতে দেয় a
, উদাহরণস্বরূপ
!=a;
// or
a!!;
আসুন ধরে নেওয়া যাক আমাদের ভাষার একটি যথাযথ বুলিয়ান টাইপ রয়েছে (যেমন bool
সি ++ তে) এবং এটি a
সেই ধরণের (সুতরাং কোনও সি-স্টাইল নয় int a = TRUE
)।
আপনি যদি কোনও নথিভুক্ত উত্সটি খুঁজে পেতে পারেন তবে আমি জানতে আগ্রহী যে যেমন সি ++ ডিজাইনাররা bool
কোনও বিল্ট-ইন টাইপের হয়ে ওঠার পরে সেইরকম অপারেটর যুক্ত করার বিষয়টি বিবেচনা করেছেন এবং যদি তাই হয় তবে তারা কেন এটির বিরুদ্ধে সিদ্ধান্ত নিয়েছিল।
(দ্রষ্টব্য: আমি জানি যে কিছু লোক মতামত হল যে নিয়োগ ব্যবহার করা উচিত নয় হয়
=
এবং যে ++
এবং +=
দরকারী অপারেটার কিন্তু নকশা সংক্রান্ত ত্রুটিগুলি নয়; এলইটি শুধু অনুমান আমি কেন তারা bools প্রসারিত করবে না তাদের এবং ফোকাস নিয়ে খুশি নই)।
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
যদিও রয়েছে, যা কোনও কারণে আমি এর চেয়ে বেশি স্বজ্ঞাত বলে মনে করি ^= true
।
void Flip(bool& Flag) { Flag=!Flag; }
আপনার দীর্ঘ অভিব্যক্তি সংক্ষিপ্ত করে।