JavaRush /جاوا بلاگ /Random-UR /جاوا میں ٹرنری آپریٹر

جاوا میں ٹرنری آپریٹر

گروپ میں شائع ہوا۔
ہیلو! آج کا لیکچر زیادہ لمبا نہیں ہوگا، لیکن مفید ضرور ہوگا :) ہم نام نہاد ٹرنری آپریٹر کے بارے میں بات کریں گے ۔ ٹرنری آپریٹر - 1"Ternary" کا مطلب ہے "ٹرپل"۔ یہ مشروط آپریٹر کا متبادل ہے if-else، جس سے آپ پہلے ہی واقف ہیں۔ آئیے ایک مثال دیتے ہیں۔ فرض کریں کہ ایک شخص 18+ ریٹنگ والی فلم دیکھنے کے لیے سینما جانے کا فیصلہ کرتا ہے۔ گارڈ دروازے پر اس کی عمر کی جانچ کرتا ہے: اگر وہ عمر کی حد کو پورا کرتا ہے، تو وہ اسے ہال میں داخل ہونے کی اجازت دیتا ہے؛ اگر نہیں، تو وہ اسے گھر بھیج دیتا ہے۔ آئیے ایک کلاس بنائیں Manاور اس کے ساتھ چیک کریں if-else:
public class Man {

   private int age;

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

   public int getAge() {
       return age;
   }

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

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
کنسول آؤٹ پٹ:

"Все в порядке, проходите!"
اگر ہم کنسول میں آؤٹ پٹ کو ہٹاتے ہیں، تو ہمارا ٹیسٹ اس طرح لگتا ہے:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
یہاں، حقیقت میں، سادہ منطق کام کرتی ہے: ایک شرط کی جانچ پڑتال کی جاتی ہے (عمر > = 18)۔ اس پر منحصر ہے، securityAnswerگارڈ کے جواب کے ساتھ دو تاروں میں سے ایک متغیر کو تفویض کیا جاتا ہے۔ اس طرح کے حالات، "ایک شرط - دو ممکنہ نتائج،" اکثر پروگرامنگ میں پائے جاتے ہیں۔ اس لیے ان کے لیے وہی ٹرنری آپریٹر بنایا گیا تھا۔ اس کے ساتھ، ہم اپنی تصدیق کو کوڈ کی ایک لائن تک آسان بنا سکتے ہیں:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
اس آپریٹر کا کام ایسا لگتا ہے۔ اسے ٹرنری (ٹرپل) کہا جاتا ہے کیونکہ اس کے کام میں 3 اجزاء حصہ لیتے ہیں:
  • ایک شرط ( man.getAge() >= 18)
  • دو ممکنہ نتائج ( "یہ ٹھیک ہے، آگے بڑھو!" اور "یہ فلم آپ کی عمر کے لیے موزوں نہیں ہے!" )
سب سے پہلے، کوڈ میں ایک شرط لکھی جاتی ہے، اس کے بعد سوالیہ نشان ہوتا ہے۔
man.getAge() >= 18 ?
"کیا اس شخص کی عمر 18 سال سے زیادہ ہے یا اس کے برابر؟" پہلا نتیجہ درج ذیل ہے۔ اگر حالت واپس آجاتی ہے تو یہ فائر ہوجاتا ہے true، یعنی درست ہے:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
کیا اس شخص کی عمر 18 سال سے زیادہ ہے یا اس کے برابر؟ اگر ہاں، تو متغیر کو securityAnswer قدر تفویض کریں "سب کچھ ٹھیک ہے، اندر آؤ!" . اس کے بعد " :" آپریٹر آتا ہے، جس کے بعد دوسرا نتیجہ لکھا جاتا ہے۔ اگر حالت واپس آجائے تو یہ فائر ہوجاتا ہے false، یعنی یہ غلط ہے:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
کیا اس شخص کی عمر 18 سال سے زیادہ ہے یا اس کے برابر؟ اگر ہاں، تو متغیر کو securityAnswer قدر تفویض کریں "سب کچھ ٹھیک ہے، اندر آؤ!" . اگر نہیں، تو متغیر کو securityAnswer قدر تفویض کریں "یہ فلم آپ کی عمر کے لیے موزوں نہیں ہے!" یہ وہی ہے جو ٹرنری آپریٹر کی عمومی منطق کی طرح نظر آتی ہے۔ حالت ؟ نتیجہ 1 : نتیجہ 2 ٹرنری آپریٹر - 2ویسے، شرط کے ارد گرد قوسین لگانا ضروری نہیں ہے: ہم نے زیادہ پڑھنے کی اہلیت کے لیے ایسا کیا۔ یہ ان کے بغیر کام کرے گا:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
آپ کو کیا استعمال کرنا چاہئے: if-elseیا ٹرنری آپریٹر؟ کارکردگی کے لحاظ سے زیادہ فرق نہیں ہے۔ زیادہ واضح طور پر، یہ موجود ہوسکتا ہے، لیکن یہ غیر معمولی ہے. یہاں سوال کا تعلق آپ کے کوڈ کی پڑھنے کی اہلیت سے ہے۔ پروگرامنگ میں یہ بہت اہم ہے: آپ جو کوڈ لکھتے ہیں وہ نہ صرف صحیح طریقے سے کام کرتا ہے بلکہ اسے پڑھنے میں بھی آسان ہونا چاہیے۔ سب کے بعد، یہ دوسرے پروگرامرز، آپ کے ساتھیوں کو "وراثت" میں مل سکتا ہے! اور اگر اسے سمجھنا مشکل ہے، تو یہ ان کے اور آپ کے کام کو پیچیدہ بنا دے گا - وہ ہر 5 منٹ بعد آپ کے پاس وضاحت کے لیے بھاگیں گے۔ ایک عام تجویز اس طرح لگ سکتی ہے: اگر حالت سادہ اور جانچنے میں آسان ہے، تو آپ ٹرنری آپریٹر کو بغیر کسی نقصان کے استعمال کر سکتے ہیں۔ اس طرح آپ کوڈ کی مقدار اور چیکوں کی تعداد کو کم کر دیں گے if-else، جن میں سے پہلے ہی بہت کچھ ہو سکتا ہے۔ لیکن اگر حالت پیچیدہ اور ملٹی اسٹیج ہے تو اسے استعمال کرنا بہتر ہے if-else۔ مثال کے طور پر، اس معاملے میں ٹرنری آپریٹر استعمال کرنا برا خیال ہوگا:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
تو آپ فوری طور پر نہیں سمجھ پائیں گے کہ یہاں کیا ہو رہا ہے! کوڈ کو پڑھنا بہت مشکل ہو گیا ہے۔ اور سب ایک مشکل حالت کی وجہ سے:
  • اگر کوئی شخص 18 سال سے زیادہ یا اس کے برابر ہے + اس کے پاس ٹکٹ ہے (یا مفت داخلے کے لیے کوپن ہے) + اس کے ساتھ چھوٹے بچے نہیں ہیں - تو وہ پاس ہوسکتے ہیں۔
  • اگر شرط کا کم از کم ایک حصہ غلط لوٹتا ہے، تو یہ نہیں ہو سکتا۔
یہ وہ جگہ ہے جہاں یہ واضح طور پر استعمال کرنا بہتر ہوگا if-else۔ ہاں، ہمارا کوڈ سائز میں بڑا ہوگا، لیکن یہ کئی گنا زیادہ پڑھنے کے قابل ہوگا۔ اور آپ کے ساتھیوں میں سے کوئی بھی ان کے سر کو نہیں پکڑے گا اگر وہ اس طرح کے کوڈ کے وارث ہوں :) آخر میں، میں آپ کو کتاب کی سفارش کر سکتا ہوں. لیکچر میں ہم نے کوڈ ریڈیبلٹی کے موضوع پر بات کی۔ رابرٹ مارٹن کی کلاسک کتاب "کلین کوڈ" ان کے لیے وقف ہے۔ ٹرنری آپریٹر - 3اس میں پروگرامرز کے لیے بہترین طرز عمل اور سفارشات شامل ہیں جو آپ کو نہ صرف کام کرنے بلکہ پڑھنے میں آسان کوڈ لکھنے کی اجازت دیں گی۔ JavaRush پر اس کتاب کا ایک جائزہ ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION