1. অভিব্যক্তি বনাম বিবৃতি

জাভাতে, এটি দুটি বিভাগের মধ্যে পার্থক্য করতে সহায়ক: বিবৃতি এবং অভিব্যক্তিএকটি বিবৃতি সাধারণত কার্যকর করা বলা হয় , যখন একটি অভিব্যক্তিকে মূল্যায়ন করা হয় । কিন্তু এটি সবচেয়ে গুরুত্বপূর্ণ জিনিস নয়।

একটি বিবৃতি এবং একটি অভিব্যক্তি মধ্যে প্রধান পার্থক্য হল যে একটি অভিব্যক্তি মূল্যায়ন একটি ফলাফল আছে . এবং এই ফলাফলের একটি টাইপ আছে, এবং এটি একটি ভেরিয়েবলের সাথে বরাদ্দ করা যেতে পারে বা অন্য কোন এক্সপ্রেশনে ব্যবহার করা যেতে পারে।

উদাহরণ:

কোড মন্তব্য
int x; বিবৃতি
(a < 10) অভিব্যক্তি যার ধরনboolean
i++; iএক্সপ্রেশন যার ধরন ভেরিয়েবলের প্রকারের মতই
x = 5; xএক্সপ্রেশন যার ধরন ভেরিয়েবলের প্রকারের মতই

এবং এই আমাদের কি দেয়?

প্রথমত, আমরা এই সত্যের সুবিধা নিতে পারি যে অনেকগুলি বিবৃতি আসলে এক্সপ্রেশন (অর্থাৎ তারা একটি মানকে মূল্যায়ন করে)। উদাহরণস্বরূপ, এই মত কোড কাজ করবে:

কোড মন্তব্য
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

দ্বিতীয়ত, যদি আমরা চাই, আমরা একটি অভিব্যক্তি মূল্যায়নের ফলাফল উপেক্ষা করতে পারি।

কোড কোড যেখানে আমরা ফলাফল উপেক্ষা করি:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

আমরা একটি অভিব্যক্তি মূল্যায়নের ফলাফলকে উপেক্ষা করি, উদাহরণস্বরূপ, যদি অভিব্যক্তিতে কিছু কার্যকর করা জড়িত থাকে এবং এই ক্রিয়াটি আমাদের কাছে গুরুত্বপূর্ণ, ফলাফল নিজেই নয়।


2. টার্নারি অপারেটর

এই লাইফ হ্যাকটি ইতিমধ্যে আগেরটির চেয়ে আরও আকর্ষণীয়। জাভা একটি বিশেষ টারনারি অপারেটর আছে . এর সিনট্যাক্স কিছুটা বিবৃতির সিনট্যাক্সের অনুরূপ if-else:

Condition ? Expression 1 : Expression 2;

শর্ত সত্য হলে , এক্সপ্রেশন 1 মূল্যায়ন করা হয়, অন্যথায় এক্সপ্রেশন 2 মূল্যায়ন করা হয়। শর্তটি একটি প্রশ্ন চিহ্ন দ্বারা অনুসরণ করা হয় , এবং দুটি অভিব্যক্তি কোলন দ্বারা পৃথক করা হয় ।

টারনারি অপারেটর এবং একটি স্টেটমেন্টের মধ্যে প্রধান পার্থক্য if-elseহল যে টারনারি অপারেটর হল একটি এক্সপ্রেশন, যার মানে আমরা কিছুতে এর ফলাফল নির্ধারণ করতে পারি।

উদাহরণস্বরূপ, ধরুন আমরা ন্যূনতম দুটি সংখ্যা গণনা করতে চাই। টারনারি অপারেটর ব্যবহার করে, এই কোডটি দেখতে এরকম হবে:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

অথবা, ধরুন আপনাকে কিছু শর্তের উপর নির্ভর করে একটি ভেরিয়েবলে বিভিন্ন মান নির্ধারণ করতে হবে। তুমি এটা কিভাবে করলে?

if-elseএকটি বিকল্প একটি বিবৃতি ব্যবহার করা হয় :

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

দ্বিতীয় বিকল্পটি হল টারনারি অপারেটর ব্যবহার করা , অর্থাৎ, if-elseবিবৃতির জন্য সংক্ষিপ্ত বিবরণ:

int age = 25;
int money = age > 30 ? 100 : 50;

সুতরাং কোনটি ব্যবহার করা ভাল - একটি if-elseবিবৃতি বা টারনারি অপারেটর ? কার্যকর করার গতির ক্ষেত্রে, খুব বেশি পার্থক্য নেই। এটি কোড পঠনযোগ্যতার আরও একটি বিষয়। এবং এটি একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়: কোডটি কেবল সঠিকভাবে কাজ করবে না, তবে অন্যান্য প্রোগ্রামারদের জন্যও পড়তে হবে।

সবচেয়ে সহজ নিয়ম হল: যদি কোডটি এক লাইনে ফিট হয় , তাহলে টারনারি অপারেটর ব্যবহার করুন ; কিন্তু যদি এটি এক লাইনে ফিট না হয়if-else , তাহলে একটি বিবৃতি ব্যবহার করা ভাল ।



3. বাস্তব সংখ্যার তুলনা করা

পূর্বে উল্লিখিত হিসাবে, আপনি প্রকৃত সংখ্যাগুলি ধরতে এবং তাদের তুলনা করতে পারবেন না। অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া সৃষ্টি করে, কিছু উল্লেখযোগ্য সংখ্যা বাতিল হওয়ার সম্ভাবনা সবসময় থাকে।

এজন্য একটি সময়-পরীক্ষিত পদ্ধতি রয়েছে। যদি দুটি বাস্তব সংখ্যা খুব ছোট মানের দ্বারা পৃথক হয়, তবে তাদের সমান হিসাবে বিবেচনা করা যেতে পারে। উদাহরণ:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

কিন্তু এই সব সম্পর্কে আমাদের চিন্তা করতে হবে না, যেহেতু সংখ্যার মধ্যে পার্থক্যটি নেতিবাচক হতে পারে। সুতরাং এই পদ্ধতির কাজ করার জন্য, আপনাকে কেবল সংখ্যার মধ্যে পার্থক্য নয়, সংখ্যার মধ্যে পার্থক্যের পরম মান তুলনা করতে হবে:|a-b|

জাভা একটি সংখ্যার পরম মান গণনা করার জন্য একটি পদ্ধতি আছে: Math.abs():

int m = Math.abs(value);

ফলস্বরূপ, আমাদের উপরের উদাহরণের সংশোধন করা সংস্করণটি এইরকম দেখাবে:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");