CodeGym /جاوا بلاگ /Random-UR /جاوا ٹرنری آپریٹر
John Squirrels
سطح
San Francisco

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

گروپ میں شائع ہوا۔
ہائے! آج کا سبق زیادہ لمبا نہیں ہوگا، لیکن یہ ضرور مفید ہوگا :) ہم نام نہاد ٹرنری آپریٹر کے بارے میں بات کرنے جا رہے ہیں ۔ ٹرنری آپریٹر - 1ٹرنری کا مطلب ہے " تین حصوں پر مشتمل "۔ یہ کنٹرول فلو اسٹیٹمنٹ کا متبادل ہے if-elseجس سے آپ پہلے ہی مل چکے ہیں۔ آئیے ایک مثال دیتے ہیں۔ فرض کریں کہ کسی نے آر ریٹیڈ فلم میں جانے کا فیصلہ کیا ہے (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