CodeGym /Java Blog /এলোমেলো /টার্নারি অপারেটর
John Squirrels
লেভেল 41
San Francisco

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

এলোমেলো দলে প্রকাশিত
ওহে! আজকের পাঠটি খুব দীর্ঘ হবে না, তবে এটি অবশ্যই কার্যকর হবে :) আমরা তথাকথিত টারনারি অপারেটর সম্পর্কে কথা বলতে যাচ্ছি । টারনারি অপারেটর- ০১ জনTernary মানে " তিনটি অংশের সমন্বয়ে গঠিত "। এটি if-elseনিয়ন্ত্রণ প্রবাহ বিবৃতির একটি বিকল্প যা আপনি ইতিমধ্যেই পূরণ করেছেন। একটা উদাহরণ দেওয়া যাক। ধরুন কেউ একটি R-রেটেড মুভিতে যাওয়ার সিদ্ধান্ত নিয়েছে (17 বছরের কম বয়সী একজন সহকারী অভিভাবক বা প্রাপ্তবয়স্ক অভিভাবক প্রয়োজন)। উশার দরজায় তার বয়স পরীক্ষা করে: যদি সে বয়স পরীক্ষা পাস করে তবে তাকে প্রবেশের অনুমতি দেওয়া হয়; না হলে তাকে বাড়িতে পাঠানো হয়। আসুন একটি ক্লাস ঘোষণা করি এবং একটি বিবৃতি Personব্যবহার করে এটি পরীক্ষা করি :if-else

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
কনসোল আউটপুট:

"Everything is in order. Come in!"
যদি আমরা কনসোল আউটপুট মুছে ফেলি, তাহলে আমাদের চেকটি এইরকম দেখায়:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
যুক্তিটি এখানে খুবই সহজ: একটি শর্ত চেক করা হয়েছে (বয়স >= 18) ফলাফলের উপর ভিত্তি করে, ভেরিয়েবলটিকে usherResponseউশারের প্রতিক্রিয়া সহ দুটি স্ট্রিংয়ের একটি বরাদ্দ করা হয়েছে। এই ধরনের পরিস্থিতি ("একটি শর্ত - দুটি সম্ভাব্য ফলাফল") প্রোগ্রামিংয়ে অত্যন্ত সাধারণ। আর সেজন্যই টারনারি অপারেটর তৈরি করা হয়েছে। কোডের একটি লাইনে আমাদের চেক সহজ করতে আমরা এটি ব্যবহার করতে পারি:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
এই অপারেটর কিভাবে কাজ করে তা এখানে। এটিকে টারনারি অপারেটর বলা হয়, কারণ এতে 3টি উপাদান জড়িত:
  • একটি শর্ত ( person.getAge() > 18)
  • দুটি সম্ভাব্য ফলাফল ( "সবকিছু ঠিক আছে। ভিতরে আসুন!" এবং "এই চলচ্চিত্রটি আপনার বয়সের জন্য উপযুক্ত নয়!" )
প্রথমে, আমরা শর্ত লিখি, তারপরে একটি প্রশ্নবোধক চিহ্ন।

person.getAge() > 18 ?
"এই ব্যক্তির বয়স কি 18 বছরের বেশি?" তারপর আমরা প্রথম মান লিখি । এই মানটি ব্যবহার করা হয় যদি শর্তটি মূল্যায়ন করেtrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
এই ব্যক্তির বয়স কি 18 বছরের বেশি? যদি হ্যাঁ, usherResponse ভেরিয়েবল সেট করুন "সবকিছু ঠিক আছে। ভিতরে আসুন!" এরপর আসে " :" চিহ্ন এবং দ্বিতীয় মান । এই মানটি ব্যবহার করা হয় যদি শর্তটি মূল্যায়ন করেfalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
এই ব্যক্তির বয়স কি 18 বছরের বেশি? যদি হ্যাঁ, usherResponse ভেরিয়েবল সেট করুন "সবকিছু ঠিক আছে। ভিতরে আসুন!" . যদি না হয়, "এই ফিল্মটি আপনার বয়সের জন্য উপযুক্ত নয়!usherResponse " সাধারণভাবে, টারনারি অপারেটরের যুক্তি দেখতে কেমন তা এখানে। শর্ত? ফলাফল 1 : ফলাফল 2 টার্নারি অপারেটর - 2 যাইহোক, শর্তের চারপাশে বন্ধনীর প্রয়োজন নেই: আমরা বৃহত্তর পাঠযোগ্যতার জন্য সেগুলি যুক্ত করেছি। এটি তাদের ছাড়া কাজ করে:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
তাই আপনি কি ব্যবহার করা উচিত? একটি if-elseবিবৃতি বা তির্যক অপারেটর? কর্মক্ষমতা পরিপ্রেক্ষিতে, কোন পার্থক্য নেই. আরো সঠিকভাবে, হয়তো আছে, কিন্তু এটা নগণ্য। এখানে সবচেয়ে বড় বিবেচনা হল আপনার কোডের পঠনযোগ্যতা। আপনি যে কোডটি লেখেন তা অবশ্যই সঠিকভাবে কাজ করবে না, পড়তেও সহজ হবে । সর্বোপরি, এটি অন্যান্য প্রোগ্রামারদের দ্বারা "উত্তরাধিকারসূত্রে" হতে পারে, আপনার সহকর্মীরা! যদি এটি বোঝা কঠিন হয় তবে এটি তাদের এবং আপনার কাজকে জটিল করে তুলবে (তারা প্রতি 5 মিনিটে ব্যাখ্যার জন্য আপনার কাছে ছুটে আসবে)। সাধারণ সুপারিশ হল: যদি শর্তটি সহজ এবং সহজে যাচাই করা হয়, তাহলে আপনি ক্ষতি ছাড়াই টারনারি অপারেটর ব্যবহার করতে পারেন। এটি আপনাকে কোডের পরিমাণ এবং সংখ্যা কমাতে দেয়if-elseবিবৃতি (এবং ইতিমধ্যে তাদের প্রচুর থাকতে পারে)। কিন্তু যদি অবস্থা জটিল হয় এবং একাধিক ধাপ জড়িত থাকে, তাহলে একটি if-elseবিবৃতি ব্যবহার করা ভালো। উদাহরণস্বরূপ, একটি টারনারি অপারেটর ব্যবহার করা এই ক্ষেত্রে একটি খারাপ ধারণা হবে:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
এখানে কি ঘটছে তা অবিলম্বে স্পষ্ট নয়! কোড পড়া খুব কঠিন হয়ে গেছে. এবং সমস্ত জটিল অবস্থার কারণে:
  • যদি কারো বয়স 18 বছরের বেশি হয়, তার টিকিট থাকে (বা বিনামূল্যের পাস), এবং কোনো ছোট বাচ্চা না থাকে, সে আসতে পারে।
  • যদি শর্তের একটি অংশও মিথ্যা হয়, তবে সে পারবে না।
এখানে এটা পরিষ্কারভাবে ব্যবহার করা ভাল if-else. হ্যাঁ, আমাদের কোড বড় হবে, কিন্তু এটি অনেক বেশি পাঠযোগ্য হবে। এবং আপনার সহকর্মীরা এই কোডের উত্তরাধিকারী হলে পামের মুখোমুখি হবেন না :) অবশেষে, আমি আপনার জন্য একটি ভাল সুপারিশ করতে পারি। আমরা পাঠের সময় কোড পঠনযোগ্যতা স্পর্শ করেছি। রবার্ট মার্টিনের বই "ক্লিন কোড", যা একটি ক্লাসিক হয়ে উঠেছে, এই বিষয়ে উত্সর্গীকৃত। টার্নারি অপারেটর - 4 জনএটি প্রোগ্রামারদের জন্য সর্বোত্তম অনুশীলন এবং সুপারিশগুলি একত্রিত করে, যা আপনাকে কোড লিখতে সাহায্য করবে যা শুধুমাত্র কার্যকরী নয়, সহজে পঠনযোগ্যও।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION