سلام! اڄ اسان جاوا ۾ جمپ آپريٽرز بابت ڳالهائينداسين:
return
break
continue
goto
if
) ۽ لوپس ( for
، while
وغيره). ڪنٽرول ڍانچي جي اضافي ۾، هڪ پروگرام جي لڪير تي عملدرآمد جمپ بيانن سان تبديل ٿي سگهي ٿو. اهي ذميوار آهن پروگرام جي عمل کي هڪ مخصوص هنڌ ڏانهن منتقل ڪرڻ، جيڪو انحصار ۽ مخصوص بيان تي منحصر آهي. اچو ته چار آپريٽرن مان هر هڪ تي هڪ ويجهي نظر رکون.
واپسي
اهو اهو آپريٽر آهي جيڪو نون ايندڙن کي اڪثر گهڻو ڪري پهرين کان واقف ٿي ويندا آهن. بيانreturn
اهو طريقو ختم ڪري ٿو جنهن ۾ ان کي سڏيو ويو آهي، ۽ پروگرام جي عمل کي واپسي واري هنڌ ڏانهن موٽائي ٿو جتان طريقو سڏيو ويو هو. ان return
جا ٻه روپ آهن:
- فوري طور تي طريقيڪار جي عمل کي ختم ڪري ٿو.
- طريقي جي عمل کي فوري طور تي ختم ڪري ٿو ۽ طريقي جي نتيجي ۾ ڪجهه قدر واپس ڪري ٿو.
return;
return value; // где value — некоторое возвращаемое meaning
اهي طريقا جيڪي هڪ قدر واپس ڪن ٿا انهن ۾ گهٽ ۾ گهٽ هڪ آپريٽر هجڻ گهرجي جنهن جي واپسي جي قيمت جي ضمانت آهي، ۽ لازمي طور تي واپسي جي قيمت کان سواءِ return
آپريٽر نه هجڻ گهرجي . return
اچو ته هيٺيان مثال ڏسو:
public int sum(int a, int b) {
return a + b;
}
public String getGreetings(String name) {
return "Hello " + name;
}
public int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
طريقن ۾ جيڪي قيمت واپس نه ڪندا آھن (طريقو void
)، اھو قابل قبول آھي، پر گھربل نه آھي، گھٽ ۾ گھٽ ھڪڙي بيان کي return
واپسي جي قيمت کان سواء، ۽ ھڪڙي بيان کي return
واپسي جي قيمت سان نه. اچو ته ان کي هيٺ ڏنل مثالن سان ڏسو:
public void print(String s) {
// наличие return в void методах не обязательно
System.out.println(s);
}
//Метод выведет в консоль число, если оно нечетное
public void printIfOdd(int number) {
if (number % 2 == 0) {
// Если число четное, метод завершит свою работу
// Наличие return в void методах опционально
return;
}
System.out.println(number);
}
// Метод выведет в консоль наибольшее meaning из массива
private void printMaxInArray(int[] array) {
if (array == null || array.length == 0) {
/*
Если массив пуст, метод завершит свою работу.
Иногда полезно проверять подобным образом аргументы метода вначале и прерывать выполнение метода, если аргументы не подходят для дальнейшей корректной работы
*/
System.out.println("Empty array");
return;
}
int max = array[1];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
System.out.println(max);
}
ليبل
break
۽ آپريٽرز کي ڏسڻ کان اڳ continue
، مان جاوا ۾ ليبل بابت ڳالهائڻ چاهيندس. اهو ضروري آهي ڇو ته ڪجهه حالتن ۾، break
۽ آپريٽر continue
استعمال ڪيا ويندا آهن ليبل سان گڏ. پر پهرين، سوال جو جواب ڏيڻ جي ڪوشش ڪريو ته ڇا هي ڪوڊ گڏ ڪندو:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
هڪ ليبل ڪوڊ جو هڪ نالي وارو ٽڪرو آهي. ليبل پاڻ کي ڪا به ڪارڪردگي مهيا نٿو ڪري. هي ڪوڊ ۾ هڪ بک مارڪ وانگر آهي جيڪو پروگرامر بعد ۾ استعمال ڪرڻ جو ارادو رکي ٿو. ڪوڊ ۾ هڪ ليبل بلڪل سادو بيان ڪيو ويو آهي - نالي ۽ ڪولن ذريعي. مثال طور:
labelName:
outerLoop:
printing:
anyWordYouLike:
public static void main(String[] args) {
definePrintName:
System.out.println("Таблица Умножения");
loop1:
for (int i = 1; i <= 10; i++) {
loop2:
for (int j = 1; j <= 10; j++) {
System.out.printf("%4d", i * j);
}
System.out.println();
}
}
طريقي جي پيداوار main
هن ريت ٿيندي:
Таблица Умножения
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Process finished with exit code 0
مٿي ڏنل مثال ۾ definePrintName
، loop1:
۽ loop2:
ليبل آهن. loop1:
۽ loop2:
"نشان" ٻه چڪر - بيروني ۽ اندروني. اسان هيٺ ڏنل سيڪشن ۾ ليبل استعمال ڪرڻ تي نظر ڪنداسين. ساڳئي وقت ۾، جيڪڏهن توهان جواب ڏنو ته "نه" سوال جو ڇا هي ڪوڊ مرتب ڪندو:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
ان کي ٻيهر جواب ڏيڻ جي ڪوشش ڪريو، IDE استعمال ڪندي.
ٽوڙڻ
آپريٽرbreak
ٻن ڪيسن ۾ استعمال ٿيندو آهي:
- هڪ سوئچ-ڪيس بلاڪ ۾ ڪنهن به عمل جي شاخ کي مڪمل ڪرڻ لاء.
- لوپ جي عمل ۾ مداخلت ڪرڻ.
break labelName; // Синтаксис оператора с меткой
break; // Синтаксис оператора без метки
سوئچ ڪيس بلاڪ ۾، آپريٽر break
بغير ليبل استعمال ڪيو ويندو آهي:
public static void main(String[] args) {
int dayOfWeekInt = 4;
String dayOfWeek;
switch (dayOfWeekInt) {
case 1:
dayOfWeek = "Monday";
break;
case 2:
dayOfWeek = "Tuesday";
break;
case 3:
dayOfWeek = "Wednesday";
break;
case 4:
dayOfWeek = "Thursday";
break;
case 5:
dayOfWeek = "Friday";
break;
case 6:
dayOfWeek = "Saturday";
break;
case 7:
dayOfWeek = "Sunday";
break;
default:
dayOfWeek = "Неизвестный день";
break;
}
System.out.println("Сегодня " + dayOfWeek);
}
لوپس ۾، هڪ بيان break
استعمال ڪيو ويندو آهي وڌيڪ ورهاڱي کي روڪڻ لاءِ ڪجهه شرطن جي ملڻ کان پوءِ. اهو اڪثر ڪري ڳولهي سگهجي ٿو جڏهن توهان کي ترتيب ڏيڻ جي ضرورت آهي هڪ صف ذريعي يا عناصر جي گڏ ڪرڻ ۽ ان ۾ ڪجهه عنصر ڳوليو جيڪو ضروري شرطن کي پورو ڪري. اچو ته هن مثال تي غور ڪريو. اسان وٽ هڪ صف آهي ۽ اسان کي اهو طئي ڪرڻ جي ضرورت آهي ته صف ۾ منفي عناصر شامل آهن:
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
for (int i = 0; i < a.length; i++) {
if (a[i] < 0) {
/*
Как только найдется
хотя бы один отрицательный элемент,
мы прервем цикл с помощью
оператора break, потому что
мы выяснor то, что нас интересовало,
и дальнейший перебор элементов не имеет смысла.
*/
arrayHasNegativeElements = true;
break;
}
}
اچو ته ساڳئي مثال کي مختلف لوپس سان ڏسو. سائيڪل for-each
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
for (int number : a) {
if (number < 0) {
arrayHasNegativeElements = true;
break;
}
}
}
سائيڪل while
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
int counter = 0;
while (counter < a.length) {
if (a[counter] < 0) {
arrayHasNegativeElements = true;
break;
}
counter ++;
}
}
سائيڪل do-while
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
int counter = 0;
do {
if (a[counter] < 0) {
arrayHasNegativeElements = true;
break;
}
counter ++;
} while (counter < a.length);
}
لوپس ۾ بيان جو ٻيو مثال break
هڪ لامحدود لوپ ۾ مداخلت ڪرڻ آهي جڏهن ڪجهه شرطن کي پورا ڪيو وڃي. هتي هڪ پروگرام جو هڪ مثال آهي جيڪو صارف پاران داخل ڪيل لائن کي ڏيکاري ٿو جيستائين صارف لفظ "اسٽاپ" داخل نه ڪري:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line;
while (true) {
line = scanner.nextLine();
if ("stop".equals(line)){
/*
Прерываем бесконечный цикл,
при достижении
определенного условия
*/
break;
}
System.out.println("Пользователь ввел: " + line);
}
}
break
اچو ته هڪ ليبل سان گڏ آپريٽر استعمال ڪرڻ تي غور ڪريو . هڪ ليبل سان مداخلت ڪيترن ئي چڪرن سان ڪيسن ۾ استعمال ڪيو ويندو آهي، ان کان علاوه، هڪ ٻئي جي اندر اندر رکيل آهي. انهي حالت ۾، هڪ چڪر (يا سڀ چڪر) هڪ ليبل سان نشان لڳل آهي. اڳيون، آپريٽر، break
گڏوگڏ ليبل کي اشارو ڪندي، مطلوب چڪر ۾ مداخلت ڪري ٿو. اچو ته هڪ مثال تي غور ڪريون جنهن ۾ اسان کي سمجهڻ جي ضرورت آهي ته ڇا هڪ منفي عنصر آهي، پر صف ۾ نه، پر ميٽرڪس ۾:
public static void main(String[] args) {
int[][] a = {
{1, 2, 3},
{-412, 12, 0},
{1223, 474, -54}
};
boolean hasNegative = false;
searchNegative:
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] < 0) {
/*
Если использовать break без метки,
тогда прервется вложенный цикл for,
но внешний продолжит выполнять свои итерации
и поиск продолжится.
Поэтому мы "помечаем" внешний цикл меткой `searchNegative`
и прерываем внешний цикл оператором break совместно с нужной меткой.
*/
hasNegative = true;
break searchNegative;
}
}
}
}
تسلسل
آپريٽرcontinue
وٽ پڻ ٻه روپ آهن - ليبل سان ۽ بغير:
continue; // форма оператора без метки
continue labelName; // форма оператора с меткой
آپريٽر جي برعڪس break
، جيڪو لوپ جي سڀني باقي ورهاڱي ۾ مداخلت ڪري ٿو، آپريٽر continue
موجوده ورهاڱي ۾ مداخلت ڪري ٿو ۽ ايندڙ کي شروع ڪرڻ جو سبب بڻائيندو آهي. اهو ڪارائتو ٿي سگهي ٿو جيڪڏهن توهان عناصر تي ڪجهه آپريشن ڪرڻ جي ضرورت آهي جيڪي ڪجهه شرطن کي پورو ڪن ٿا. اچو ته چئون ته اسان وٽ هڪ اسٽرنگ آهي ۽ اسان اکر "m" سان شروع ٿيندڙ لفظن جو تعداد ڳڻڻ چاهيون ٿا:
public static void main(String[] args) {
String sentence = "Мама мыла раму";
String[] words = sentence.split(" ");
int mWordsCount = 0;
for (int i = 0; i < words.length; i++) {
if ( ! words[i].toLowerCase().startsWith("м")) {
/*
Если слово не начинается с буквы м,
то текущая итерация прервется и цикл
ПРОДОЛЖИТ выполнение со следующей итерации
*/
continue;
}
mWordsCount ++;
}
System.out.println("Кол-во слов, начинающихся с буквы М в предложении: " + "[" + sentence + "] = " + mWordsCount);
}
ھن ڪوڊ تي عمل ڪرڻ کان پوءِ ڪنسول ۾ ھيٺيون ٻاھر نڪرندو:
Кол-во слов, начинающихся с буквы М в предложении: [Мама мыла раму] = 2
continue
ليبل سان گڏ آپريٽر پڻ استعمال ڪيو ويندو آهي جڏهن عناصر مٿان ٻيهر ورجائي. اچو ته تصور ڪريون هڪ ميٽرڪس جنهن ۾ اسان کي ناڪاري عنصرن سان قطارن جو تعداد ڳڻڻ جي ضرورت آهي:
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
rowsLoop:
// Проходим по каждой строке
for (int[] arr : a) {
for (int number : arr) {
if (number < 0) {
/*
Если в текущей строке найдется
хотя бы 1 отрицательный элемент,
тогда мы увеличим переменную счетчик,
и с помощью оператора continue rowsLoop
прервем текущую итерацию внешнего цикла и
принудительно начнем следующую
*/
rowsWithNegativeElementsCount ++;
continue rowsLoop;
}
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
هن ڪوڊ جي پيداوار ٿي ويندي:
Rows With Negative Elements Count = 3
اهو چوڻ جي قابل آهي ته آپريٽرز break
، continue
۽ return
ساڳئي ڪارڪردگي حاصل ڪرڻ لاء مختلف طريقن سان استعمال ڪري سگھجن ٿيون. تنهن ڪري، توهان آخري مثال ٻيهر لکي سگهو ٿا ۽ continue
استعمال ڪريو break
:
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
for (int[] arr : a) {
for (int number : arr) {
if (number < 0) {
rowsWithNegativeElementsCount ++;
break;
}
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
ليبل جي وچ ۾ break
۽ فرق اهو آهي جيڪو لوپ جي ورهاڱي کي مڪمل ڪري ٿو جنهن ۾ اهو لکيل آهي. ۽ هڪ ليبل سان، ليبل سان نشان لڳل چڪر جي موجوده تکرار کي ڇڏي ٿو. ڪجھ حالتن ۾، توھان ھڪڙي کي ٻئي سان تبديل ڪري سگھو ٿا، ۽ پروگرام جي ڪارڪردگي ۾ سڀ ڪجھ ساڳيو رھندو. اسان ان بابت ڳالهائينداسين جيڪو چونڊڻ لاءِ بهترين آهي (اسپائلر: ڪوڊ پڙهڻ جي صلاحيت) هيٺ. آپريٽر کي تبديل ڪري سگهجي ٿو نه رڳو هڪ ليبل سان، پر پڻ . بس ان کان اڳ توھان کي گھربل لوپ ھڪڙي الڳ طريقي سان منتقل ڪرڻ جي ضرورت آھي. continue
break
continue
break
continue
return
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
for (int[] arr : a) {
if (arrayHasNegativeElements(arr)) {
rowsWithNegativeElementsCount ++;
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
static boolean arrayHasNegativeElements(int[] array) {
for (int number : array) {
if (number < 0) {
return true;
}
}
return false;
}
ساڳي شيء لکڻ جا ڪيترائي طريقا. جنهن کي چونڊڻ لاء؟ صنعتي پروگرامنگ ۾، اهو مسئلو ڪوڊ کي سمجهڻ جي آسانيء سان فيصلو ڪيو ويو آهي. جيترو سادو لکجي، اوترو بهتر. وڌيڪ nested loops، وڌيڪ ڏکيو اهو ڪوڊ سمجهڻ آهي. خاص طور تي جيڪڏهن لوپ مختلف نشانين سان نشان لڳل آهن، جيڪي مداخلت ۽ تسلسل ۾ استعمال ڪيا ويا آهن ( break
۽ continue
). جيڪڏهن اهو ممڪن آهي ته ٽيگ استعمال نه ڪيو وڃي، اهو ڪرڻ بهتر آهي. ٻي صورت ۾، ممڪن طور تي واضح ۽ خوبصورت لکڻ جي ڪوشش ڪريو.
وڃ
ڪجھ پروگرامنگ ٻولين ۾ ھڪڙو آپريٽر آھيgoto
. عام طور تي اهو ڪوڊ ايگزيڪيوشن کي ليبل سان نشان لڳل پروگرام جي ڪجهه حصي ڏانهن منتقل ڪري ٿو. پر جاوا ۾ goto
، ھڪڙو چئي سگھي ٿو، اھو آھي ۽ اھو نه آھي. اچو ته ان جو اندازو لڳايو. جاوا ۾ لفظن جي لسٽ ۾ لفظ شامل آھي goto
. بهرحال، هي بيان نشان لڳل آهي جيئن استعمال نه ڪيو ويو آهي. حقيقت اها آهي ته جيمس گوسلنگ، جاوا ٻولي جو خالق، شروعات ۾ JVM ۾ آپريٽر جي مدد شامل ڪئي goto
. بهرحال، اها خاصيت بعد ۾ ڪٽي وئي. انهن مان هڪ سبب اهو آهي ته ڪوڊ جا بلاڪ جيڪي آپريٽر تي مشتمل هوندا هئا، goto
ايترا پڙهڻ لائق نه هوندا هئا جيئن ڪوڊ جا بلاڪ جيڪي ساڳيا ڪم سرانجام ڏين پر بغير goto
، پر متبادل طريقن سان ( break
،، continue
ڪوڊ بلاڪ کي طريقن ۾ رکڻ). اتي، حقيقت ۾، ٻيا هئا، جهڙوڪ:
- ڪوڊ پڙهڻ ۽ سمجهڻ ۾ مشڪل جنهن ۾ آپريٽر شامل آهن
goto
؛ - کمپائلر لاءِ پيچيده ڪوڊ جي اصلاح (۽ ڪڏهن ڪڏهن ناممڪن)؛
- ڪوڊ ۾ ذيلي غلطيون پيدا ڪرڻ جو امڪان وڌائڻ.
goto
ڪافي ڪاميابي سان ڪم ڪري ٿو. بهرحال، پروگرامر ان کي استعمال ڪرڻ کان پاسو ڪندا آهن. توهان هن جي سببن جي باري ۾ پڙهي سگهو ٿا Habré تي هڪ مضمون ۾ . پر پوءِ ان کي goto
محفوظ لفظن جي لسٽ ۾ ڇو ڇڏيو؟ اهو سادو آهي: مستقبل لاء. جيڪڏهن، مثال طور، متغير، طريقا، يا طبقن کي سڏيو وڃي ٿو، ڊولپرز جي جاوا ڪوڊ ۾ سڄي دنيا ۾ goto
، جيڪڏهن اهو بيان Java جي مستقبل جي ورزن ۾ واپس ڪيو وڃي، سڀ پراڻو ڪوڊ ڀڄي ويندو. اهڙي صورتحال کان بچڻ لاء، goto
اهو Java keywords جي فهرست ۾ رهي ٿو، پر ڪا به ڪارڪردگي نه رکندو آھي. شايد ڪنهن ڏينهن goto
هو اسان جي صفن ۾ واپس اچي، پر ان جو امڪان گهٽ آهي.
نتيجا
اسان جاوا ۾ مختلف جمپ آپريٽرز کي ڏٺو آهي:return
- طريقي جي مڪمل ٿيڻ، طريقي جي قيمت واپس ڪرڻ.- واپسي جي قيمت سان: طريقا جيڪي واپسي قدر؛
- ڪابه واپسي قيمت:
void
طريقا.
break
- چڪر جي مداخلت، سوئچ ڪيس بلاڪ.- ٽيگ سان: مختلف nesting جا چڪر؛
- ليبل کان سواء: بلاڪ جي سوئچ ڪيس شاخون؛ ان لوپ ۾ مداخلت ڪرڻ جنهن ۾ ان کي سڏيو ويو.
continue
.- ٽيگ سان: مختلف nesting جا چڪر؛
- بغير ليبل: لوپ جو تسلسل جنهن ۾ ان کي سڏيو ويندو هو.
goto
.- لفظن جي لسٽ ۾ آهي، پر استعمال نه ڪيو ويو آهي.
GO TO FULL VERSION