اس مضمون میں ہم عام طور پر کمپیوٹر پروگراموں اور جاوا میں لکھے گئے پروگراموں میں برانچنگ کے تصور کو دیکھیں گے۔ آئیے کنٹرول ڈھانچے کے بارے میں بات کرتے ہیں جیسے:
if-then
(یاif
)if-then-else
(یاif-else
)switch-case
برانچنگ
آئیے بنیادی تصورات سے شروع کریں۔ کوئی بھی پروگرام کمپیوٹر کے ذریعے عمل میں آنے والی کمانڈز کا مجموعہ ہوتا ہے۔ اکثر، حکموں کو ایک کے بعد ایک ترتیب وار عمل میں لایا جاتا ہے۔ تھوڑا کم اکثر (لیکن اب بھی اکثر) ایسے حالات پیدا ہوتے ہیں جب آپ کو پروگرام کمانڈز کے ترتیب وار بہاؤ کو تبدیل کرنے کی ضرورت ہوتی ہے۔ بعض اوقات، بعض شرائط پر منحصر ہے، یہ ضروری ہو سکتا ہے کہ حکموں کے ایک بلاک کو دوسرے کے بجائے عمل میں لایا جائے۔ اور جب یہ حالات بدل جائیں تو اس کے برعکس کریں۔ مثال کے طور پر، ایسی متعدد سائٹس ہیں جن پر 18 سال سے کم عمر کے افراد کے لیے جانا ممنوع ہے۔ عام طور پر، جب پہلی بار ایسے وسائل پر جاتے ہیں، تو صارف کو کسی نہ کسی شکل میں خوش آمدید کہا جاتا ہے جس میں صارف کو عمر کی حد کے بارے میں متنبہ کیا جاتا ہے اور اس کی تاریخ پیدائش درج کرنے کو کہا جاتا ہے۔ پھر، صارف کے داخل کردہ ڈیٹا پر منحصر ہے، اسے یا تو وسائل میں داخل ہونے کی اجازت ہوگی یا نہیں۔ یہ فعالیت اس کے ذریعہ فراہم کی جاتی ہے جسے عام طور پر برانچنگ کہا جاتا ہے۔ آئیے ایک اور تشبیہ دیتے ہیں۔ آئیے اپنے آپ کو سات سڑکوں کے سنگم پر تصور کریں۔ ہمیں ایک انتخاب کا سامنا ہے: بائیں یا دائیں مڑیں، یا سیدھے جائیں۔ ہمارا انتخاب کچھ شرائط پر مبنی ہے۔ ہمیں بیک وقت کئی سڑکیں لینے کا موقع بھی نہیں ملتا۔ وہ. کچھ شرائط پر منحصر ہے، ہمیں ایک سڑک کا انتخاب کرنا پڑے گا۔ برانچنگ پر بھی یہی اصول لاگو ہوتا ہے۔ اب برانچنگ کی تعریف دینے کی کوشش کرتے ہیں۔ برانچنگ ایک الگورتھمک تعمیر ہے جس میں، کسی حالت کی سچائی پر منحصر ہے، اعمال کے کئی سلسلے میں سے ایک انجام دیا جاتا ہے۔ برانچنگ کو بالکل تمام پروگرامنگ زبانوں میں لاگو کیا جاتا ہے (زیادہ تر امکان ہے)۔ جاوا پروگرامنگ زبان میں کئی نام نہاد کنٹرول تعمیرات ہیں جو آپ کو اپنے پروگرام میں برانچنگ کو لاگو کرنے کی اجازت دیتی ہیں۔ پروگرامنگ زبان میں اس طرح کی 3 تعمیرات ہیں:- آپریٹر
if-then
- آپریٹر
if-then-else
- ٹرنری آپریٹر
? :
if-else
اس مضمون میں ہم اور آپریٹرز کو دیکھیں گے switch-case
۔
پھر اگر
آپریٹرif-then
، یا if
شاید سب سے عام آپریٹر۔ اظہار "ہاں، لکھیں 1 اگر" پہلے ہی مقبول ہو چکا ہے۔ آپریٹر if
کا مندرجہ ذیل ڈھانچہ ہے:
if (bool_condition) {
statement
}
اس ڈیزائن میں:
bool_condition
ایک بولین اظہار ہے جو درست یا غلط کا اندازہ کرتا ہے۔ اس اظہار کو شرط کہتے ہیں۔statement
- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کیا جانا چاہیے اگر شرط درست ہے (bool_statement==true
)
Если (bool_condition), то {statement}
یہاں کچھ مثالیں ہیں:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
int a = scanner.nextInt();
if (a < 10) {
System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
}
}
اس پروگرام میں صارف سے کہا جاتا ہے کہ وہ اپنے اسمارٹ فون پر بیٹری چارج ہونے کا فیصد درج کرے۔ اگر 10 فیصد سے کم چارج رہ جاتا ہے، تو پروگرام صارف کو اسمارٹ فون کو چارج کرنے کی ضرورت کے بارے میں خبردار کرے گا۔ یہ سادہ ترین ڈیزائن کی ایک مثال ہے if
۔ یہ بات قابل غور ہے کہ اگر متغیر `a` 10 سے بڑا یا اس کے برابر ہے، تو کچھ نہیں ہوگا۔ پروگرام اس کوڈ پر عمل درآمد جاری رکھے گا جو اس کی پیروی کرتا ہے if
۔ یہ بھی نوٹ کریں کہ اس معاملے میں، کنسٹرکٹ میں if
عمل کرنے کے لیے صرف ایک ہی ترتیب ہے: ٹیکسٹ پرنٹ کریں، یا کچھ نہ کریں۔ یہ ایک "شاخ" کے ساتھ برانچنگ کی تبدیلی ہے۔ یہ کبھی کبھی ضروری ہوتا ہے۔ مثال کے طور پر، جب ہم خود کو غلط اقدار سے بچانا چاہتے ہیں۔ مثال کے طور پر، اگر سٹرنگ ہے تو ہم اسٹرنگ میں حروف کی تعداد نہیں جان سکتے null
۔ ذیل کی مثالیں:
public static void main(String[] args) {
String x = null;
printStringSize(x);
printStringSize("Не представляю своей жизни без ветвлений...");
printStringSize(null);
printStringSize("Ифы это так захватывающе!");
}
static void printStringSize(String string) {
if (string != null) {
System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
}
}
مرکزی طریقہ پر عمل کرنے کے نتیجے میں، کنسول میں درج ذیل آؤٹ پٹ ہوں گے:
Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
اسے چیک کرنے کی بدولت string != null
، ہم پروگرام میں غلطیوں سے بچنے کے قابل ہو گئے۔ اور ایسی صورتوں میں کچھ نہ کریں جہاں متغیر string
برابر تھا null
۔
اگر-تو-اور
اگر معمول کے معاملے میںif
پروگرام کا انتخاب ہوتا ہے: "کچھ کرو یا کچھ نہ کرو"، تو پھر if-else
کسی پروگرام کو منتخب کرنے میں یہ "ایک کام یا دوسرا کرنا" پر آتا ہے۔ "کچھ نہ کریں" کا آپشن غائب ہو جاتا ہے۔ اس قسم کی برانچنگ کے ساتھ عملدرآمد کی دو یا زیادہ اقسام (یا شاخوں کی تعداد) ہیں۔ آئیے اس معاملے پر غور کریں جب دو آپشن ہوں۔ پھر کنٹرول ڈھانچہ مندرجہ ذیل شکل رکھتا ہے:
if (bool_condition) {
statement1
} else {
statement2
}
یہاں:
bool_statement
ایک بولین اظہار ہے جو درست یا غلط کا اندازہ کرتا ہے۔ اس اظہار کو شرط کہتے ہیں۔statement1
- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کیا جانا چاہیے اگر شرط درست ہے (bool_statement==true
)statement2
- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کرنا ضروری ہے اگر شرط غلط ہے (bool_statement==false
)
Если (bool_condition), то {statement1}
Иначе {statement2}
یہاں ایک مثال ہے:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
int a = scanner.nextInt();
if (a < 10) {
System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
}
اسمارٹ فون پر بیٹری کی سطح کے بارے میں ایک ہی مثال۔ صرف اس صورت میں جب پچھلی بار پروگرام نے صرف اسمارٹ فون کو چارج کرنے کی ضرورت کے بارے میں خبردار کیا تھا، اس بار ہمارے پاس ایک اضافی اطلاع ہے۔ آئیے اس کو دیکھتے ہیں if
:
if (a < 10) {
System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
اگر a < 10
درست ہے (بیٹری لیول 10 سے کم) تو پروگرام ایک متن پرنٹ کرے گا۔ دوسری صورت میں، اگر شرط a < 10
پوری نہیں ہوتی ہے، تو پروگرام بالکل مختلف متن کو آؤٹ پٹ کرے گا۔ آئیے اپنی دوسری مثال کو بھی حتمی شکل دیں، جس میں ہم نے ایک لائن میں حروف کی تعداد ظاہر کی۔ پچھلی بار پروگرام نے کچھ آؤٹ پٹ نہیں کیا تھا اگر پاس کردہ سٹرنگ کے برابر تھی null
۔ آئیے عام کو if
اس میں تبدیل کرکے اسے ٹھیک کرتے ہیں if-else
:
public static void main(String[] args) {
String x = null;
printStringSize(x);
printStringSize("Не представляю своей жизни без ветвлений...");
printStringSize(null);
printStringSize("Ифы это так захватывающе!");
}
static void printStringSize(String string) {
if (string != null) {
System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
} else {
System.out.println("Ошибка! Переданная строка равна null!");
}
}
طریقہ کار میں ، ہم نے printStringSize
تعمیر میں if
ایک بلاک شامل کیا else
۔ اب، اگر ہم پروگرام چلاتے ہیں، تو یہ کنسول میں 2 لائنوں پر نہیں بلکہ 4 پر آؤٹ پٹ کرے گا، حالانکہ ان پٹ (طریقہ main
) پچھلی بار کی طرح ہی رہتا ہے۔ متن جو پروگرام آؤٹ پٹ کرے گا:
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
حالات اس وقت قابل قبول ہوتے ہیں جب else
ان پر عمل درآمد کے حکموں سے نہیں، بلکہ کسی اور کے ذریعے کیا جاتا ہے if
۔ پھر تعمیر مندرجہ ذیل شکل لیتا ہے:
If (bool_condition1) {
statement1
} else if (bool_condition2) {
statement2
} else if (bool_conditionN) {
statementN
} else {
statementN+1
}
اس ڈیزائن میں کئی شرائط ہیں:
- bool_condition1
- bool_condition2
- bool_conditionN
- بیان 1
- بیان 2
- بیان این
statement
میں کوڈ کی 1 یا زیادہ لائنیں ہوسکتی ہیں۔ حالات کو ایک ایک کرکے چیک کیا جاتا ہے۔ ایک بار پہلی حقیقی حالت کا تعین ہو جانے کے بعد، حقیقی حالت کے ساتھ "بندھے" حکموں کا ایک سلسلہ عمل میں لایا جائے گا۔ ان کمانڈز پر عمل درآمد کرنے کے بعد، پروگرام بلاک سے باہر نکل جائے گا if
، چاہے آگے مزید جانچ پڑتال ہو۔ اگر اوپر بیان کردہ شرائط میں سے کوئی بھی درست نہیں ہے تو "StatementN+1" کا اظہار عمل میں لایا جائے گا۔ اس تعمیر کو اس طرح پڑھا جا سکتا ہے:
Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
اس معاملے میں آخری لائن اختیاری ہے۔ آپ آخری تنہا کے بغیر بھی کر سکتے ہیں else
۔ اور پھر ڈیزائن مندرجہ ذیل شکل لے گا:
If (bool_condition1) {
statement1
} else if (bool_condition2) {
statement2
} else if (bool_conditionN) {
statementN
}
اور یہ اس طرح پڑھے گا:
Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
اس کے مطابق، اگر ان میں سے کوئی بھی شرط صحیح نہیں ہے، تو پھر کوئی حکم نافذ نہیں کیا جائے گا۔ آئیے مثالوں کی طرف چلتے ہیں۔ آئیے اسمارٹ فون پر چارج لیول کے ساتھ صورتحال پر واپس آتے ہیں۔ آئیے ایک پروگرام لکھتے ہیں جو مالک کو اس کے آلے کے چارج لیول کے بارے میں مزید تفصیل سے مطلع کرے گا:
public static void main(String[] args) {
String alert5 = "Я скоро отключусь, но помни меня бодрым";
String alert10 = "Я так скучаю по напряжению в моих жилах";
String alert20 = "Пора вспоминать, где лежит зарядка";
String alert30 = "Псс, пришло время экономить";
String alert50 = "Хм, больше половины израсходовали";
String alert75 = "Всё в порядке, заряда больше половины";
String alert100 = "Я готов к приключениям, если что..";
String illegalValue = "Такс, кто-то ввел некорректное meaning";
Scanner scanner = new Scanner(System.in);
System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
int a = scanner.nextInt();
if (a <= 0 || a > 100) {
System.out.println(illegalValue);
} else if (a < 5) {
System.out.println(alert5);
} else if (a < 10) {
System.out.println(alert10);
} else if (a < 20) {
System.out.println(alert20);
} else if (a < 30) {
System.out.println(alert30);
} else if (a < 50) {
System.out.println(alert50);
} else if (a < 75) {
System.out.println(alert75);
} else if (a <= 100) {
System.out.println(alert100);
}
}
مثال کے طور پر، اس صورت میں، اگر صارف 15 میں داخل ہوتا ہے، تو پروگرام اسکرین پر ظاہر ہوگا: "یہ یاد رکھنے کا وقت ہے کہ چارجر کہاں ہے۔" اس حقیقت کے باوجود کہ 15 کم ہے اور 30 اور 50 اور 75 اور 100، اسکرین پر آؤٹ پٹ صرف 1 ہوگا۔ آئیے ایک اور ایپلی کیشن لکھتے ہیں جو کنسول پر پرنٹ کرے گا کہ ہفتے کا کون سا دن ہے:
public static void main(String[] args) {
// Определим текущий день недели
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
if (dayOfWeek == DayOfWeek.SUNDAY) {
System.out.println("Сегодня воскресенье");
} else if (dayOfWeek == DayOfWeek.MONDAY) {
System.out.println("Сегодня понедельник");
} else if (dayOfWeek == DayOfWeek.TUESDAY) {
System.out.println("Сегодня вторник");
} else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
System.out.println("Сегодня среда");
} else if (dayOfWeek == DayOfWeek.THURSDAY) {
System.out.println("Сегодня четверг");
} else if (dayOfWeek == DayOfWeek.FRIDAY) {
System.out.println("Сегодня пятница");
} else if (dayOfWeek == DayOfWeek.SATURDAY) {
System.out.println("Сегодня суббота");
}
}
یقیناً یہ آسان ہے، لیکن نیرس متن کی کثرت آپ کی آنکھوں کو ہلکا کرتی ہے۔ ایسے حالات میں جہاں ہمارے پاس اختیارات کی ایک بڑی تعداد ہے، آپریٹر کا استعمال کرنا بہتر ہے، جس پر ذیل میں بات کی جائے گی۔
سوئچ کیس
بہت سی شاخوں کے ساتھ بولڈ کا متبادلif
آپریٹر ہے switch-case
۔ ایسا لگتا ہے کہ یہ آپریٹر کہتا ہے "لہذا، ہمارے پاس یہ متغیر ہے۔ دیکھو، اگر اس کی قیمت `x` کے برابر ہے، تو ہم یہ کرتے ہیں اور وہ، اگر اس کی قدر `y` کے برابر ہے، تو ہم اسے مختلف طریقے سے کرتے ہیں، اور اگر یہ مذکورہ بالا میں سے کسی کے برابر نہیں ہے، تو ہم صرف کرتے ہیں۔ یہ اس طرح... ” اس آپریٹر کا ڈھانچہ درج ذیل ہے۔
switch (argument) {
case value1:
statement1;
break;
case value2:
statement2;
break;
case valueN:
statementN;
break;
default:
default_statement;
break;
}
آئیے اس ڈھانچے کو مزید تفصیل سے دیکھیں۔ argument
ایک متغیر ہے جس کی قدر کا ہم فرضی مختلف اختیارات کے ساتھ موازنہ کریں گے۔ متغیر ہونا ضروری ہے final
۔ یہ کہنا بھی قابل ہے کہ آپریٹر switch
دلیل کے طور پر کسی بھی ڈیٹا کی قسم کی حمایت نہیں کرتا ہے۔ درست اقسام ذیل میں درج ہیں:
- بائٹ اور بائٹ
- مختصر اور مختصر
- int اور Integer
- چار اور کردار
- enum
- تار
case value1 (value2, valueN)
- یہ قدریں ہیں، مخصوص مستقل جن کے ساتھ ہم متغیر کی قدر کا موازنہ کرتے ہیں argument
۔ نیز، ہر کیس کمانڈز کے ایک سیٹ کی وضاحت کرتا ہے جس پر عمل درآمد کی ضرورت ہے۔ statement1
, statement2
, statementN
کمانڈز ہیں جن پر عمل درآمد کرنے کی ضرورت ہوگی اگر argument
یہ ان میں سے کسی ایک کے برابر نکلے value
۔ مثال کے طور پر، اگر argument
یہ برابر ہے value2
، تو پروگرام عمل میں آئے گا statement2
۔ default
اور default_statement
"پہلے سے طے شدہ اقدار" ہیں۔ اگر argument
یہ پیش کردہ کسی کے برابر نہیں ہے value
تو شاخ کو متحرک کیا جائے گا default
اور کمانڈ پر عمل درآمد کیا جائے گا default_statement
۔ default
اور default_statement
آپریٹر کی اختیاری صفات ہیں switch-case
۔ break
- آپ دیکھ سکتے ہیں کہ ہر کیس بلاک کے آخر میں ایک بیان ہوتا ہے break
۔ یہ آپریٹر اختیاری بھی ہے اور مختلف کیسز کے کوڈ کو الگ کرنے کا کام کرتا ہے۔ بعض اوقات مختلف معاملات میں ایک جیسے اعمال انجام دینے کی ضرورت ہوتی ہے: پھر ان معاملات کو یکجا کیا جاسکتا ہے۔ اس صورت میں، کلیدی لفظ کو break
چھوڑ دیا جاتا ہے، اور آپریٹر کی ساخت switch-case
اس طرح نظر آئے گی:
switch (argument) {
case value1:
statement1;
break;
case valueX:
case valueY:
statementXY;
break;
}
یہ بات قابل غور ہے کہ `case valueX:` اور `case valueY:` کے درمیان کوئی آپریٹر نہیں ہے break
۔ یہاں، اگر argument
اس کے برابر ہے value1
، تو اسے پھانسی دی جائے گی statement1
۔ اور اگر دلیل valueX
دونوں کے برابر ہے valueY
تو statementXY
. آئیے سمجھنے میں مشکل نظریہ کو سمجھنے میں آسان پریکٹس میں تبدیل کریں۔ آئیے آپریٹر کا استعمال کرتے ہوئے مثال کو ہفتے کے دنوں کے ساتھ دوبارہ لکھتے ہیں switch-case
۔
public static void main(String[] args) {
// Определим текущий день недели
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
switch (dayOfWeek) {
case SUNDAY:
System.out.println("Сегодня воскресенье");
break;
case MONDAY:
System.out.println("Сегодня понедельник");
break;
case TUESDAY:
System.out.println("Сегодня вторник");
break;
case WEDNESDAY:
System.out.println("Сегодня среда");
break;
case THURSDAY:
System.out.println("Сегодня четверг");
break;
case FRIDAY:
System.out.println("Сегодня пятница");
break;
case SATURDAY:
System.out.println("Сегодня суббота");
break;
}
}
اب ایک ایسا پروگرام لکھتے ہیں جو آپریٹر کا استعمال کرتے ہوئے دکھاتا ہے کہ آج کا دن ہفتے کا دن ہے یا ویک اینڈ switch-case
۔
public static void main(String[] args) {
// Определим текущий день недели
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
switch (dayOfWeek) {
case SUNDAY:
case SATURDAY:
System.out.println("Сегодня выходной");
break;
case FRIDAY:
System.out.println("Завтра выходной");
break;
default:
System.out.println("Сегодня рабочий день");
break;
}
}
میں تھوڑی وضاحت کرتا ہوں۔ اس پروگرام میں ہمیں ملتا ہے enum DayOfWeek
، جو ہفتے کے موجودہ دن کو ظاہر کرتا ہے۔ اگلا، ہم یہ دیکھتے ہیں کہ آیا ہمارے متغیر کی قدر دونوں میں سے کسی ایک dayOfWeek
کی قدر کے برابر ہے یا نہیں ۔ اگر ایسا ہے تو، پروگرام "آج چھٹی ہے" دکھاتا ہے۔ اگر نہیں، تو ہم چیک کرتے ہیں کہ آیا متغیر کی قدر کی قدر کے برابر ہے ۔ اگر ایسا ہے تو، پروگرام دکھاتا ہے "کل ایک دن کی چھٹی ہے۔" اگر اس صورت میں کوئی نہیں ہے، تو ہمارے پاس کچھ اختیارات ہیں، کوئی بھی باقی دن ایک ہفتے کا دن ہے، لہذا پہلے سے طے شدہ طور پر، اگر آج جمعہ نہیں، ہفتہ اور اتوار نہیں، تو پروگرام "آج کام کا دن ہے" دکھائے گا۔ SUNDAY
SATURDAY
dayOfWeek
FRIDAY
نتیجہ
تو، اس مضمون میں ہم نے دیکھا کہ کمپیوٹر پروگرام میں برانچنگ کیا ہے۔ ہم نے یہ بھی معلوم کیا کہ جاوا میں برانچنگ کو لاگو کرنے کے لیے کون سے کنٹرول ڈھانچے استعمال کیے جاتے ہیں۔ ہم نے اس طرح کے ڈیزائن پر تبادلہ خیال کیا:if-then
if-then-else
switch-case
GO TO FULL VERSION