সি এবং কিছু অনুরূপ ভাষায়, সমতার জন্য বুলিয়ান অভিব্যক্তিগুলির তুলনা করা 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
কাজ করবে (উদাহরণস্বরূপ, সাম্য এবং সম্পর্কযুক্ত অপারেটররা সর্বদা হয় হয় হয় বা হয় )। এর অর্থ হ'ল এটি ব্যবহার করে আপনি যে কোনও বাগ প্রবর্তন করেন তা ট্র্যাক করা কঠিন হতে পারে। (চিন্তা করবেন না, আপনি কোনও গুরুত্বপূর্ণ ক্লায়েন্টকে কোডটি ডেমো করার সাথে সাথে তারা প্রদর্শিত হবে))0
1
সি ++ এর কিছুটা আলাদা বিধি রয়েছে; উদাহরণস্বরূপ, এর 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
এটি বিপজ্জনক, মাত্রাতিরিক্ত ভার্বোস এবং দুর্বল স্টাইলে। অন্যান্য অনেক ভাষায়, এই ধরনের তুলনাগুলি বিপজ্জনক নাও হতে পারে, তবে তারা এখনও মাত্রাতিরিক্ত ভার্জোজ এবং দুর্বল স্টাইল।