-
Сабж...
Первый раз в жизни вместо написания лишних строк решил применить метку.
Теперь меня интересует насколько это нехорошо?
Как вы относитесь к использованию меток, например в таком коде:
...
bitmove:=1;
while field<>0 do
begin
if (bitmove and field) = bitmove then
begin
field:=field xor bitmove;
for z:=0 to workseccount-1 do if secarr[z].field=bitmove then goto lbskip;
secarr[workseccount].field:=bitmove;
secarr[WorksecCount].mt:=mt;
inc(workseccount);
lbskip: end;
bitmove:=bitmove shl 1;
end;
...
?
-
Сразу бросается в глаза неправильная разложение на функции. В одной функции 2 условных оператора и 2 цикл и так понимаю ещё под многоточием много неправильного кода.
Внутренний цикл надо вынести в отдельную функцию и обозвать что-то типа Pos или Search.
Зачем это нужно? Вот вы скажете для красоты. Кто-то скажет что такой код становиться само документированным и его проще читать. Но я скажу следующее. Элементарные функции проще проверить. Причем такую проверку можно поручить и автоматическим тестам.
-
Хоть где - нейтрально, лишь бы не говнокод был.
-
> вместо написания лишних строки много сэкономлено?
> в таком коде: ...плохо.
func/proc
...
function lbskip:Boolean; begin for z := 0 to workseccount-1 do if (secarr[z].field = bitmove) then Exit(True); Exit(False); end;
...
begin
...
if (not lbskip) then begin
secarr[workseccount].field := bitmove;
secarr[WorksecCount].mt := mt;
inc(workseccount);
end;
...
end;
-
Метки воплне допустимы там, где это помогает упростить код.
-
> NoUser © (20.05.16 19:43) [3]
Ну это мне нравится, но:
> Exit(True); Exit(False);
Delphi 7 такого не знает
> Pavia © (20.05.16 18:46) [1]
>
> Сразу бросается в глаза неправильная разложение на функции.
> В одной функции 2 условных оператора и 2 цикл и так понимаю
> ещё под многоточием много неправильного кода.
Вы предлагаете каждый цикл или условный оператор выносить в отдельную функцию? Да тогда в функциях запутаешься... Я конечно выношу иногда код в отдельные функции, если в одной он уж слишком вложенный и навороченный получается, но когда код функцию можно полностью видеть на экране без использования скроллинга и когда без напряжения видно какой end какому begin'у соответствует (в данном случае функция у меня в 40 строк с 3 вложенными циклами и 6 условными операторами), то такую функцию, я считаю, разбивать на части обычно не стОит.
-
> NoUser © (20.05.16 19:43) [3]
>
> > вместо написания лишних строк
> и много сэкономлено?
1 переменная, с предварительной инициализацией, begin, end и 1 условный оператор.
-
> Вы предлагаете каждый цикл или условный оператор выносить
> в отдельную функцию?
В абсолют возводят только юноши. Жизнь она не только черная или белая она имеет оттенки серого.
Но, грубо говоря да каждый в своя функцию.
Если идут 2-3 последовательных цикла, то разбиваю на функции/процедуры.
Пробовал разбивать и вложенные циклы, чёрти-что получается. Поэтому сейчас допускаю, но не более 2-х.
> (в данном случае функция у меня в 40 строк с 3 вложенными
> циклами и 6 условными операторами), то такую функцию, я
> считаю, разбивать на части обычно не стОит.
У меня средняя длина функции 15 строк. От function до end включая пустые строки.
Гораздо проще разбить подозрительную функцию на кучу простых и забыть о отладчике. Гораздо быстрее набить 5-10 функций. Чем отладить одну большую. С моей скоростью (250 ударов/мин) я эти функции наберу за 5-10 минут, против полчаса-час потраченного в пошаговой отладке.
При таком подходи, надобность в метках отпадает сама-собой.
> Да тогда в функциях запутаешься...
Ни чуть. Правильные названия позволяет не заглядывать во внутрь функций.
-
> Гораздо быстрее набить 5-10 функций.
Каждый вызов функции затратен.
-
> Pavia © (20.05.16 22:14) [7]
Если функция нужна только в одном месте - я не разбиваю. Смысла не вижу.
Если в нескольких, то чрезмерное разбиение + желание потом немного изменить одну из функций может привести к проблемам. А в теории, так как вы говорите - самодокументирование и простота отладки.
Соглашусь с [2]
-
> SergP © (20.05.16 18:25)
негативно. так как в наше время метки встречаются крайне редко, мозг хуже воспринимает данную конструкцию, чревато ошибками.
-
Нужно без них.
-
> Inovet © (20.05.16 18:46) [2]
>
> Хоть где - нейтрально, лишь бы не говнокод был.
> Dimka Maslov © (20.05.16 20:31) [4]
>
> Метки воплне допустимы там, где это помогает упростить код.
> DayGaykin © (21.05.16 04:04) [9]
>
> Соглашусь с [2]
> Eraser © (21.05.16 04:07) [10]
>
> негативно. так как в наше время метки встречаются крайне
> редко, мозг хуже воспринимает данную конструкцию, чревато
> ошибками.
> K-1000 © (21.05.16 06:26) [11]
>
> Нужно без них.
Т.е. получается что единого мнения по этому поводу нет?
Данный код пишется чисто для себя, навряд-ли он попадет к кому-то другому, разве что в виде .exe
Но просто хочется не вырабатывать у себя вредные привычки (если они действительно считаются вредными), а то потом избавиться от них не всегда просто.
-
> так как в наше время метки встречаются крайне редко, мозг
> хуже воспринимает данную конструкцию
забавная причина-следствие
-
> Т.е. получается что единого мнения по этому поводу нет?
Конечно же нет. Постоянное использование меток - действительно плохо. Но когда на один и тот же участок кода надо прийти из нескольких мест - метка куда как проще.
-
Сейчас придет Шевченко, и скажет, что за такой код положен эцих с гвоздями с занесением перед строем.
И я подпишусь.
-
Мне нравятся метки в Java. Там это не воспринимается плохо, хотя встречается тоже редко.
-
Вот удивительно, метки это значит очень плохо, а вот, например, замыкания - это хорошо, это добавляет читаемости коду? Однако чем то плохим не считается.
-
К использованию меток отношусь спокойно. К неиспользованию - тоже спокойно. Главное - не делать из этого религии.
Важны не метки (или их отсутствие), а читабельность кода. Бывают случаи, когда метки ухудшают читабельность, но бывает и когда улучшают (правда, редко).
-
Главное - чтобы костюмчик сидел! а программа - работала.