Вопрос по Java

1,921
107
378
Кто знает, как называется такая штука в Java, что даёт называть циклы своими именами? Заранее спасибо!
Java:
int a = 0;

loop: while (true) {
    switch (a) {
        case 10:
            break loop;
    }
    a++;
}
 
Метки (label)
Это не имена циклов, а штука чтобы break выходил в нужное место.
Удобно если два вложенных цикла и нижний пишет бреак, то без метки мы выйдем на уровень выше в цикл, а по логику нужно например выйти сразу из всех вложенных циклов.
В данном случае без метки мы выйдем из свитча, но цикл все равно будет крутиться. А с меткой мы выходим полностью из цикла.
 
Отличный способ сделать код сложным для понимания. Лучше использовать условия цикла для всех кейсов его завершения.
Например
Java:
int a = 0;

loop: while (a != 10) {
    a++;
}
 
Ты не прав. Да, довольно редко, но бывает что без меток нормально никак.
Совать бездумно везде конечно же не стоит.
Я не знаю как тут можно выйти из всех циклов без метки.
Java:
exit: for(int x = 0; x < 10; x++){
    for(int y = 0; y < 10; y++){
        for(int z = 0; z < 10; z++){
            if(blocks[x][y][z] == 228){
                break exit;
            }
        }
    }
}
 
Я бы написал что-то вроде
Java:
IntStream.range(0,10)
    .flatMapObj(x-> IntStream.range(0,10)
        .flatMapObj(y-> IntStream.range(0,10)
            .mapObj(z-> blocks[x][y][z])
        )
    )
    .takeWhile(b-> b != 228)//К сожалению, фича java9. Надо было писать на скале)))
    //.forEach or .collect
А если юзать стримы в том месте слишком жырно, то можно вынести этот тройной цикл в отдельный метод и юзать return вместо break
 
Сферические примеры в вакууме действительно не портятся метками, надо смотреть реальный код и тогда решать, юзать в конкретном месте метку или нет
 
Назад
Сверху