JavaRush /Blog Java /Random-PL /Instrukcja break w Javie
iloveski
Poziom 37
Москва

Instrukcja break w Javie

Opublikowano w grupie Random-PL
Witam wszystkich kolegów i osoby po prostu zainteresowane.
Instrukcja break w Javie - 1
Dzisiaj przyjrzymy się takiej funkcji języka programowania Java, jak operator break. To pierwszy artykuł na temat operatorów przejść, więc jeśli Ci się spodoba, chętnie napiszę więcej. Od razu zaznaczę, że ten artykuł jest przeznaczony przede wszystkim dla początkujących programistów, a bardziej zaawansowani studenci mogą nie znaleźć tu nic nowego dla siebie. Więc chodźmy. W Javie istnieją dwa sposoby zmiany kolejności wykonywania instrukcji programu: instrukcje skoku i mechanizm obsługi wyjątków. W Javie są trzy operatory skoków: break, kontynuuj i return. Dziś zapraszam do bliższego przyjrzenia się operatorowi break. Obsługa wyjątków to tak szeroki temat, że wykracza poza zakres tego artykułu. Istnieją trzy sposoby użycia instrukcji break w Javie. Pierwszym i najpopularniejszym sposobem jest breakwcześniejsze wyjście z pętli, na przykład:
public class SimpleExample {
    public static void main(String[] args) {
        findNumberInLoop(3);
    }
    public static void findNumberInLoop(int number){
        for (int i = 0; i < 10; i++) {
            if (i == number) {
                break;
            }
            System.out.println(i);
        }
        System.out.println("cycle was finished");
    }
}
Ten przykład wyświetli:
1
2
cycle was finished
Oznacza to, że gdy licznik pętli izrówna się z przekazanym parametrem number, czyli liczbą 3, wykonanie pętli zostanie wcześniej zakończone. Jeśli program ma kilka zagnieżdżonych pętli, odłącz wyjścia tylko od najbardziej wewnętrznej pętli, na przykład:
public class SimpleExample {
    public static void main(String[] args) {
        findNumberInLoop(3);
    }
    public static void findNumberInLoop(int number){
        for(int i = 0; i < 5; i++) {
            for (int j =0; j < 10; j++) {
                if(j == number) {
                    break;
                }
                System.out.print(j);
            }
            System.out.println();
        }
        System.out.println("cycles was finished");
    }
}
Ten przykład generuje dane wyjściowe:
012
012
012
012
012
cycles was finished
Jak widać na przykładzie pętla wewnętrzna jest przerywana każdorazowo przy liczbie 3 (parametr number), a pętla zewnętrzna wykonywana jest 5 razy zgodnie z zamierzeniem. W Javie możesz użyć więcej niż jednej instrukcji break w pętli, ale nie jest to zalecane, ponieważ czytelność i struktura kodu są znacznie obniżone. Drugim zastosowaniem breakjest użycie go do przerwania wykonywania instrukcji w oddziałach switch, na przykład:
public class SimpleExample {
    public static void main(String[] args) {
        square(2);
    }

    public static void square(int number){
        switch (number){
            case 1:
                System.out.println(number*number);
                break;
            case 2:
                System.out.println(number*number);
                break;
            case 3:
                System.out.println(number*number);
                break;
        }
        System.out.println("after switch");
    }
}
Uruchomienie tego przykładu da wynik:
4
after switch
Instrukcja break przekazała kontrolę do kodu następującego po całym bloku switch. breakJeśli w switchtym przykładzie nie określisz :
public class SimpleExample {
    public static void main(String[] args) {
        square(2);
    }
    public static void square(int number){
        switch (number){
            case 1:
                System.out.println(number*number);
            case 2:
                System.out.println(number*number);
            case 3:
                System.out.println(number*number);
        }
        System.out.println("after switch");
    }
}
Dane wyjściowe nie będą zgodne z oczekiwaniami:
4
4
after switch
Stało się tak, ponieważ po wykonaniu bloku case 2program kontynuował wykonywanie wszystkich kolejnych bloków przypadków , co dało nam odpowiedni wynik. Czasami ta cecha operatora switch może być dla nas korzystna, na przykład:
public class SimpleExample {
    public static void main(String[] args) {
        compare(2);
        compare(7);
        compare(12);
    }
    public static void compare(int number){
        switch (number){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("number is less than 5 or equal 5");
                break;
            case 6:
            case 7:
            case 8:
            case 9:
                System.out.println("number is greater than 5");
                break;
            default:
                System.out.println("number is less than 0 or greater than 9");
        }
        System.out.println("after switch");
    }
}
Ten program porównuje daną liczbę z liczbą 5 i daje następujący wynik:
after switch
number is greater than 5
after switch
number is less than 0 or greater than 9
after switch
Kiedy metoda jest wywoływana po raz pierwszy, operator switchprzekazuje kontrolę operatorowi case 2, a następnie operatorowi breakw case 5. Drugie wywołanie jest podobne do pierwszego, ale zaczyna się od c case 7. Trzecie wywołanie nie znajdzie odpowiedniej wartości wśród wszystkich przypadków, więc operator zostanie wykonany default. Trzeci sposób to użycie operatora breakzamiast gotooperatora C. W tym celu użyjemy specjalnej formy operatora breakwywoływanej breakz etykietą. Formularz ten wygląda jak break метка;Etykieta — jest to zwykle dowolna odpowiednia nazwa z przestrzeni nazw Java, poprzedzająca blok kodu. Co więcej, po zastosowaniu tego bloku kodu breakz etykietą, kod będzie w dalszym ciągu wykonywany od miejsca za blokiem z odpowiednią etykietą, np.:
public class SimpleExample {
    public static void main(String[] args) {
        howWeUseLabels(true);
        System.out.println();
        howWeUseLabels(false);
    }
    public static void howWeUseLabels(boolean bool) {
        firstBlock:{
            secondBlock:{
                thirdBlock:{
                    System.out.println("We will see it always");
                    if(bool) {
                        break secondBlock;
                    }
                    System.out.println("We won't see it if bool == true");
                }
                System.out.println("We won't see it if bool == true");
            }
            System.out.println("We will see it always");
        }
    }
}
Ten przykład da następujące dane wyjściowe:
We will see it always
We will see it always

We will see it always
We won't see it if bool == true
We won't see it if bool == true
We will see it always
Po pierwszym wywołaniu metody operator breakprzekazuje kontrolę na koniec bloku secondBlock, wychodząc secondBlocki thirdBlock, wykonując jednocześnie inny operator println()na końcu firstBlock. Po drugim połączeniu na ekranie zostaną wyświetlone wszystkie linie. Etykiet można również używać do oznaczania cykli. Należy pamiętać, że do etykiety można przejść jedynie z wnętrza wskazanego przez etykietę bloku kodu; przykładowo taki kod się nie skompiluje:
public class SimpleExample {
    public static void main(String[] args) {
        label:{
            System.out.println("inside label");
        }
        if(true) {
            break label;
        }
        System.out.println("This is error");
    }
}
Uwagi na temat czystości kodu i instrukcji break: Ogólnie przyjmuje się, że instrukcja powinna być używana breakbardzo ostrożnie, ponieważ breakutrudnia to zrozumienie pętli i zmusza programistę do zajrzenia do wnętrza pętli w celu zrozumienia niuansów jej działania. Istnieje zasada heurystyczna, której break możesz używać z większą pewnością w krótszych pętlach i z większą ostrożnością w długich i głęboko zagnieżdżonych pętlach, ponieważ zwiększa to prawdopodobieństwo błędów i komplikuje czytanie i zrozumienie Twojego kodu przez innych programistów. Jak pisałem powyżej, użycie dużej liczby break.rozsianych po całym kodzie wskazuje, że programista nie do końca rozumie, dlaczego napisał swój kod w taki sposób, w jaki to zrobił. Warto rozważyć refaktoryzację takiej pętli poprzez podzielenie jej na kilka mniejszych pętli. Staraj się zachować ostrożność, używając break etykiety jako zamiennika goto, ponieważ komplikuje to strukturę kodu. To wszystko, co chciałem dzisiaj powiedzieć o operatorze breakw Javie. Chętnie przyjmę konstruktywną krytykę, jestem też gotowy napisać kontynuację na temat operatorów continuei return, jeśli jesteś zainteresowany.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION