সি এবং কিছু অনুরূপ ভাষায়, সমতার জন্য বুলিয়ান অভিব্যক্তিগুলির তুলনা করা falseবা trueএকটি বিপজ্জনক অভ্যাস।
সি-তে কোনও স্কেলার এক্সপ্রেশন (সংখ্যাসূচক বা পয়েন্টার) বুলিয়ান প্রসঙ্গে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ একটি ifবিবরণের শর্ত হিসাবে । সি নিয়মটি হ'ল if (cond)সমান if (cond != 0)- অর্থাৎ শূন্যটি মিথ্যা, এবং কোনও শূন্য নয় মান সত্য। যদি condপয়েন্টার ধরণের 0হয় তবে নাল পয়েন্টার ধ্রুবক হিসাবে গণ্য করা হয়; if (ptr)মানে if (ptr != NULL)।
এই যে মানে
if (cond)
এবং
if (cond == true)
একই জিনিস মানে না । প্রথমটি সত্য যদি condশূন্য হয় না; দ্বিতীয়টি কেবলমাত্র যদি এটির সমান হয় trueতবে সিতে (যদি আপনার কাছে থাকে তবে #include <stdbool.h>) সহজ 1।
উদাহরণস্বরূপ, isdigit()ঘোষিত <ctype.h>ফাংশনটি একটি intমান প্রদান করে, 0যদি আর্গুমেন্টটি একটি অঙ্ক হয়, যদি এটি শূন্য হয় না। এটি 42শর্তটি সত্য কিনা তা নির্দেশ করে ফিরে আসতে পারে। তুলনা 42 == trueব্যর্থ হবে।
এটি ঘটে যা 0একমাত্র মান হিসাবে মিথ্যা বলে বিবেচিত হয়, সুতরাং সমতার সাথে তুলনা falseকাজ করবে; if (!cond)এবং if (cond == false)একই জিনিস। তবে আপনি যদি এর সদ্ব্যবহার করতে চলেছেন তবে আপনাকে মনে রাখতে হবে যে তুলনা করা falseঠিক আছে, এবং তুলনা করা trueঠিক নয়। সবচেয়ে খারাপ বিষয়, তুলনা করা বেশিরভাগ সময়true কাজ করবে (উদাহরণস্বরূপ, সাম্য এবং সম্পর্কযুক্ত অপারেটররা সর্বদা হয় হয় হয় বা হয় )। এর অর্থ হ'ল এটি ব্যবহার করে আপনি যে কোনও বাগ প্রবর্তন করেন তা ট্র্যাক করা কঠিন হতে পারে। (চিন্তা করবেন না, আপনি কোনও গুরুত্বপূর্ণ ক্লায়েন্টকে কোডটি ডেমো করার সাথে সাথে তারা প্রদর্শিত হবে))01
সি ++ এর কিছুটা আলাদা বিধি রয়েছে; উদাহরণস্বরূপ, এর boolধরণটি ভাষাতে আরও দৃ tight়ভাবে সংহত হয় এবং টাইপে if (cond)রূপান্তরিত condহয় bool। তবে প্রভাবটি (বেশিরভাগ ক্ষেত্রে) একই রকম।
অন্য কয়েকটি ভাষায় যাকে বলা যেতে পারে তাকে আরও ভাল আচরণ করা বুলিয়ান বলা যেতে পারে, যেমন cond == trueএবং cond == false(বা সিনট্যাক্স যা কিছু ঘটে) নিরাপদ। তবুও, আমি যে প্রতিটি ভাষা দেখেছি তার একটি notবা !অপারেটর রয়েছে; এটি সেখানে রয়েছে, যাতে আপনি এটি ব্যবহার করতে পারেন। আমার মতে, এর cond == falseপরিবর্তে !condবা not condনা ব্যবহার করা পঠনযোগ্যতা উন্নত করে। (এটি সত্য যে !চরিত্রটি এক নজরে দেখা শক্ত হতে পারে; আমি !এটিকে এড়ানোর জন্য মাঝে মাঝে কোনও স্থান যোগ করি ))
এবং প্রায়শই আপনি সমস্যাটি এড়াতে পারেন এবং কোডটি কিছুটা পুনরায় সাজিয়ে স্বচ্ছতার উন্নতি করতে পারেন । উদাহরণস্বরূপ, পরিবর্তে:
if (!cond) {
do_this();
}
else {
do_that();
}
আপনি লিখতে পারেন:
if (cond) {
do_that();
}
else {
do_this();
}
এটি সর্বদা ভাল নয়, তবে এটি যেখানে সুযোগ রয়েছে তা সন্ধান করতে ক্ষতি করে না।
সংক্ষিপ্তসার: সি এবং সি ++ তে সাম্যতা তুলনা করে trueএবং falseএটি বিপজ্জনক, মাত্রাতিরিক্ত ভার্বোস এবং দুর্বল স্টাইলে। অন্যান্য অনেক ভাষায়, এই ধরনের তুলনাগুলি বিপজ্জনক নাও হতে পারে, তবে তারা এখনও মাত্রাতিরিক্ত ভার্জোজ এবং দুর্বল স্টাইল।