Salam! Bu gün Java-da bökmek operatorlary barada gürleşeris:
return
break
continue
goto
if
) we aýlawlar ( for
we while
ş.m.). Dolandyryş gurluşlaryna goşmaça, programmanyň çyzykly ýerine ýetirilişi bökmek jümleleri bilen üýtgedilip bilner. Programmanyň ýerine ýetirilişine kontekste we anyk jümle bagly belli bir ýere gönükdirmek üçin jogapkärdirler. Dört operatoryň hersine has içgin seredeliň.
gaýdyp gel
Hut şu operator täze gelenler köplenç ilki bilen tanyşýarlar. Beýannamareturn
çagyrylan usuly ýatyrýar we programmanyň ýerine ýetirilişi usulyň çagyrylan ýerine gaýdyp gelýär. Iki return
görnüşi bar:
- Usulyň ýerine ýetirilişini derrew tamamlaýar.
- Usulyň ýerine ýetirilişini derrew tamamlaýar we usulyň netijesinde belli bir bahany yzyna berýär.
return;
return value; // где value — некоторое возвращаемое meaning
Bahany yzyna gaýtaryp berýän usullar, return
çagyrylmagy kepillendirilen, yzyna gaýtaryş gymmaty bolan azyndan bir operator bolmaly we return
yzyna gaýtaryş gymmaty bolmadyk operator bolmaly däldir. Aşakdaky mysallara seredeliň:
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;
}
}
Gymmatlygy (usullary) yzyna gaýtarmaýan usullarda , iň azyndan bir sözlemiň yzyna gaýtaryş gymmaty bolmazdan, yzyna gaýtaryş gymmaty bolan ýekeje sözlemiň void
bolmagy kabul ederliklidir, ýöne talap edilmeýär . Aşakdaky mysallar bilen seredeliň: 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);
}
bellikleri
break
Operatorlara we operatorlara seretmezden ozal continue
Java-daky ýazgylar hakda gürleşmek isleýärin. Bu möhümdir, sebäbi käbir ýagdaýlarda break
operatorlar continue
bellikler bilen bilelikde ulanylýar. Firstöne ilki bilen bu kod düzülýärmi diýen soraga jogap bermäge synanyşyň:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
Bellik, koduň bir bölegi. Belligiň özi hiç hili işlemeýär. Bu, programmistiň soň ulanjak bolýan kodundaky bellik ýaly bir zat. Koddaky bellik gaty ýönekeý - at we sütün arkaly kesgitlenýär. Mysal üçin:
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();
}
}
Usulyň netijesi main
şeýle bolar:
Таблица Умножения
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
Aboveokardaky mysalda loop1:
we loop2:
bellikler. loop1:
we loop2:
iki aýlawy “belläň” - daşarky we içerki. Aşakdaky bölümdäki bellikleri ulanmaga serederis. Şol aralykda, bu kod düzülermi diýen soraga “ýok” diýip jogap beren bolsaňyz:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
IDE ulanyp, oňa ýene jogap bermäge synanyşyň.
arakesme
Operatorbreak
iki ýagdaýda ulanylýar:
- Islendik ýerine ýetiriş şahasyny kommutator blokynda doldurmak.
- Bir aýlawyň ýerine ýetirilmegini kesmek.
break labelName; // Синтаксис оператора с меткой
break; // Синтаксис оператора без метки
Wyklýuçatel bloklarynda operator break
etiketkasyz ulanylýar:
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);
}
Aýlawlarda, break
käbir şertler berjaý edilenden soň gaýtalanmalary kesmek üçin jümle ulanylýar. Bu köplenç bir massiw ýa-da elementler ýygyndysy bilen gaýtalanmaly we ondan zerur şertleri kanagatlandyrýan käbir element tapmaly bolanda tapylyp bilner. Geliň, bu mysaly gözden geçireliň. Bir massiwimiz bar we massiwde negatiw elementleriň bardygyny ýa-da ýokdugyny kesgitlemeli:
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;
}
}
Geliň, şol bir mysala dürli aýlawlar bilen seredeliň. Sikl 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;
}
}
}
Sikl 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 ++;
}
}
Sikl 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);
}
Aýlawlardaky sözlemiň başga bir mysaly, break
käbir şertler berjaý edilende çäksiz aýlawy kesmekdir. Ine, ulanyjynyň “durmak” sözüne girýänçä ulanyjynyň girizen setirini görkezýän programmanyň mysaly:
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
Operatory bellik bilen bilelikde ulanmagy göz öňünde tutalyň . Bellik bilen arakesme birnäçe siklli ýagdaýlarda ulanylýar, üstesine-de biri beýlekisinde höwürtge döredýär. Bu ýagdaýda siklleriň biri (ýa-da ähli sikller) bellik bilen bellenýär. Ondan soň, operator break
belligi görkezmek bilen islenýän aýlawy kesýär. Negativearamaz elementiň bardygyna, ýöne massiwde däl-de, matrisada barlygyna düşünmeli bir mysaly gözden geçireliň:
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;
}
}
}
}
üznüksizlik
Operatoryňcontinue
iki görnüşi hem bar - etiketkasyz we ýok:
continue; // форма оператора без метки
continue labelName; // форма оператора с меткой
break
Aýlawyň galan gaýtalanmalaryny kesýän operatordan tapawutlylykda , operator continue
häzirki gaýtalanmagy kesýär we indiki biriniň başlamagyna sebäp bolýar. Belli bir şertleri kanagatlandyrýan elementler boýunça käbir amallary ýerine ýetirmek zerur bolsa, bu peýdaly bolup biler. Bir setir bar diýeliň we "m" harpyndan başlanýan sözleriň sanyny sanamak isleýäris:
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);
}
Bu kody ýerine ýetireniňizden soň, konsolda aşakdaky çykyş bolar:
Кол-во слов, начинающихся с буквы М в предложении: [Мама мыла раму] = 2
Operator continue
, bellik bilen bilelikde elementleriň üstünde gaýtalananda hem ulanylýar. Geliň, negatiw elementler bilen hatar sanyny sanamaly matrisany göz öňüne getireliň:
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);
}
Bu koduň çykyşy:
Rows With Negative Elements Count = 3
break
Operatorlary we şol bir işlemegi continue
gazanmak return
üçin dürli usullarda ulanyp boljakdygyny aýtmak gerek . continue
Şeýlelikde, iň soňky mysaly täzeden ýazyp we ulanyp bilersiňiz 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);
}
Etiketkanyň arasyndaky break
we tapawudy, ýazylan aýlawyň gaýtalanmalaryny tamamlaýan zat. Bellik bilen , bellik bilen bellenen sikliň häzirki gaýtalanmasyny geçiriň. Käbir ýagdaýlarda birini beýlekisine çalyşyp bilersiňiz we programmanyň işleýşindäki hemme zat öňküligine galar. Aşakda haýsysynyň saýlanmalydygy barada gürleşeris (spoiler: kod okalmagy). Operator diňe bir bellik bilen däl, eýsem çalşylyp bilner . Ondan öň öýjükli aýlawy aýratyn usula geçirmeli: 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;
}
Şol bir zady ýazmagyň köp usuly. Haýsyny saýlamaly? Senagat programmirlemesinde bu mesele koda düşünmek aňsatlygy bilen çözülýär. Näçe ýönekeý ýazylsa, şonça gowy. Öýlenen aýlawlar näçe köp bolsa, kody kabul etmek şonça kyn. break
Esasanam aýlawlar arakesmelerde we dowamlarda ( we ) ulanylýan dürli ýazgylar bilen bellenen bolsa continue
. Bellikleri ulanmazlyk mümkin bolsa, muny etmek has gowudyr. Otherwiseogsam, mümkin boldugyça aýdyň we owadan ýazmaga synanyşyň.
goto
Käbir programmirleme dillerinde operator bargoto
. Adatça kod ýerine ýetirilişini bellik bilen bellenen programmanyň käbir bölegine gönükdirýär. Javaöne Java goto
-da biri bar we beýle däl diýip biler. Geliň, düşüneliň. Java-da açar sözleriň sanawynda bu söz bar goto
. Şeýle-de bolsa, bu jümle ulanylmaýar. Hakykat, Java dilini döreden Jeýms Goslingiň başda JVM-de operatora goldaw bermegi goto
. Şeýle-de bolsa, bu aýratynlyk soň kesildi. Munuň sebäplerinden biri, operatory öz içine alýan kod bloklarynyň şol bir funksiýany ýerine ýetirýän, ýöne bolmasa , alternatiw çemeleşmeler bilen ( , kod blokyny usullara ýerleşdirmek) kod goto
bloklary ýaly okalmazlygydyr . Aslynda beýlekiler bardy, meselem:goto
break
continue
- operatorlary öz içine alýan kody okamakda we düşünmekde kynçylyk
goto
; - düzüji üçin kod optimizasiýasyny çylşyrymlaşdyrmak (we käwagt mümkin däl);
- kodda inçe ýalňyşlyklary döretmek ähtimallygyny ýokarlandyrýar.
goto
Käbir programmirleme dillerinde operatoryň üstünlikli işleýändigi köplere syr däl . Şeýle-de bolsa, programmistler ony ulanmakdan saklanýarlar. Munuň sebäpleri barada Habre hakda bir makalada okap bilersiňiz . Thenöne näme üçin ony goto
ätiýaçlyk sözleriň sanawynda goýmaly? Bu ýönekeý: gelejek üçin. Mysal üçin, bütin dünýäde döredijileriň Java kodunda üýtgeýjiler, usullar ýa-da synplar diýilse, goto
bu jümle Java-yň geljekki wersiýasynda yzyna gaýtarylsa, ähli köne kod bozular. Şeýle ssenariýadan gaça durmak üçin goto
Java açar sözleriniň sanawynda galýar, ýöne hiç hili işlemeýär. Belki bir gün goto
ol ýene-de hatarymyza gaýdyp geler, ýöne munuň ähtimallygy pes.
Netijeler
Java-da dürli bökmek operatorlaryna göz aýladyk:return
- usulyň tamamlanmagy, usuldan bahany yzyna gaýtarmak.- gaýtarma bahasy bilen: bahalary yzyna gaýtarýan usullar;
- yzyna gaýtaryş gymmaty ýok:
void
usullar.
break
- siklleriň kesilmegi, wyklýuçatel bloklary.- bellikler bilen: dürli höwürtge siklleri;
- etiketkasyz: blokyň kommutator şahalary; diýilýän aýlawy kesmek.
continue
.- bellikler bilen: dürli höwürtge siklleri;
- etiketkasyz: atlandyrylan aýlawyň dowamy.
goto
.- açar sözleriň sanawynda, ýöne ulanylmaýar.
GO TO FULL VERSION