Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Java стандарт кодирования / лучшие практики-соглашение об именовании для меток break / continue
Иногда помеченный разрыв или продолжение может сделать код намного более читаемым.
OUTERLOOP: for ( ;/*stuff*/; ) {
//...lots of code
if ( isEnough() ) break OUTERLOOP;
//...more code
}
Мне было интересно, какова общая конвенция для этикеток. Все шапки? первая шапка?
Я не понимаю, откуда взялось это правило "don't use labels". При выполнении нетривиальной циклической логики тест на разрыв или продолжение не всегда аккуратно находится в конце окружающего блока.
outer_loop:
for (...) {
// some code
for (...) {
// some code
if (...)
continue outer_loop;
// more code
}
// more code
}
Да, такие случаи случаются постоянно. Что люди предлагают мне использовать вместо этого? Логическое условие вроде этого?
for (...) {
// some code
boolean continueOuterLoop = false;
for (...) {
// some code
if (...) {
continueOuterLoop = true;
break;
}
// more code
}
if (continueOuterLoop)
continue;
// more code
}
Фу! Рефакторинг его как метода также не облегчает этого:
boolean innerLoop (...) {
for (...) {
// some code
if (...) {
return true;
}
// more code
}
return false;
}
for (...) {
// some code
if (innerLoop(...))
continue;
// more code
}
Конечно, он немного красивее,но все равно передает лишнее булево. И если внутренний цикл модифицировал локальные переменные, рефакторинг его в метод не всегда является правильным решением.
Так почему же вы все против ярлыков? Приведите мне некоторые веские доводы и практические Альтернативы для приведенного выше случая.
Конвенция заключается в том, чтобы полностью избегать ярлыков.
Существует очень, очень мало веских причин использовать метку для выхода из цикла. Вырваться-это нормально, но вы можете удалить необходимость ломаться вообще, немного изменив свой дизайн. В приведенном примере вы бы извлекли разделы "много кода" и поместили их в отдельные методы со значимыми именами.
for ( ;/*stuff*/; )
{
lotsOfCode();
if ( !isEnough() )
{
moreCode();
}
}
Edit: увидев фактический код, о котором идет речь ( здесь), я думаю, что использование меток, вероятно, лучший способ сделать код читаемым. В большинстве случаев использование ярлыков является неправильным подходом, в данном случае, я думаю, что это нормально.
Соглашение, которое я больше всего видел, - это просто случай верблюда, как имя метода...
myLabel:
но я также видел этикетки с префиксом подчеркивания
_myLabel:
или с лабораторией...
labSomething:
Вы, вероятно, можете почувствовать, хотя из других ответов, что вам будет трудно найти стандарт кодирования, который говорит что-нибудь, кроме "не используйте ярлыки". Ответ тогда, я думаю, заключается в том, что вы должны использовать любой стиль, который имеет смысл для вас, если он последователен.
Поскольку ярлыки так редко бывают полезны, оказывается, что нет четкого соглашения. Спецификация языка Java имеет один пример с метками, и они находятся в non_cap.
Но поскольку они так редки, на мой взгляд, лучше всего дважды подумать, действительно ли они являются правильным инструментом.
И если они являются правильным инструментом, сделайте их все шапками, чтобы другие разработчики (или вы сами позже) сразу же поняли их как нечто необычное. (как уже отметил Крейг)
Ты отдал
outerloop:
for (...) {
// some code
for (...) {
// some code
if (...)
continue outerloop;
// more code
}
// more code
}
В качестве примера. Вы делаете хороший вывод. Мое лучшее предположение было бы:
public void lookMumNoLabels() {
for (...) {
// some code
doMoreInnerCodeLogic(...);
}
}
private void doMoreInnerCodeLogic(...) {
for (...) {
// some code
if (...) return;
}
}
Но были бы примеры, когда такой вид рефакторинга не соответствует правильной логике, которую вы делаете.
Они своего рода Гото из Java - не уверен, есть ли они у C#. Я никогда не использовал их на практике, я не могу придумать случая, когда их избегание не привело бы к гораздо более удобочитаемому коду.
Но если вы должны - я думаю, что все шапки в порядке. Большинство людей не будут использовать маркированные разрывы, поэтому, когда они увидят код, колпачки выскочат на них и заставят их понять, что происходит.
Я знаю, мне не следует использовать ярлыки.
Но просто предположим, что у меня есть некоторый код, который может получить много читабельности от помеченных разрывов, как я их форматирую.
Я знаю, мне не следует использовать ярлыки.
Но просто предположим, что у меня есть некоторый код, который может получить много читабельности от помеченных разрывов, как я их форматирую.
МО, твое предположение неверно. Вопрос не должен быть таким: "как мне их форматировать?'
Ваш вопрос должен быть таким: "у меня есть код, который имеет большое количество логики внутри циклов - как я могу сделать его более читаемым?'
Ответ на этот вопрос заключается в том, чтобы переместить код в отдельные, хорошо названные функции. Тогда вам вообще не нужно будет маркировать перерывы.