Форум: "Прочее";
Текущий архив: 2017.08.13;
Скачать: [xml.tar.bz2];
ВнизКак вы относитесь к использованию меток в Delphi? Найти похожие ветки
← →
SergP © (2016-05-20 18:25) [0]Сабж...
Первый раз в жизни вместо написания лишних строк решил применить метку.
Теперь меня интересует насколько это нехорошо?
Как вы относитесь к использованию меток, например в таком коде:...
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;
...
?
← →
Pavia © (2016-05-20 18:46) [1]Сразу бросается в глаза неправильная разложение на функции. В одной функции 2 условных оператора и 2 цикл и так понимаю ещё под многоточием много неправильного кода.
Внутренний цикл надо вынести в отдельную функцию и обозвать что-то типа Pos или Search.
Зачем это нужно? Вот вы скажете для красоты. Кто-то скажет что такой код становиться само документированным и его проще читать. Но я скажу следующее. Элементарные функции проще проверить. Причем такую проверку можно поручить и автоматическим тестам.
← →
Inovet © (2016-05-20 18:46) [2]Хоть где - нейтрально, лишь бы не говнокод был.
← →
NoUser © (2016-05-20 19:43) [3]> вместо написания лишних строк
и много сэкономлено?
> в таком коде: ...
плохо.
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;
← →
Dimka Maslov © (2016-05-20 20:31) [4]Метки воплне допустимы там, где это помогает упростить код.
← →
SergP © (2016-05-20 20:54) [5]
> 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 условными операторами), то такую функцию, я считаю, разбивать на части обычно не стОит.
← →
SergP © (2016-05-20 20:56) [6]
> NoUser © (20.05.16 19:43) [3]
>
> > вместо написания лишних строк
> и много сэкономлено?
1 переменная, с предварительной инициализацией, begin, end и 1 условный оператор.
← →
Pavia © (2016-05-20 22:14) [7]
> Вы предлагаете каждый цикл или условный оператор выносить
> в отдельную функцию?
В абсолют возводят только юноши. Жизнь она не только черная или белая она имеет оттенки серого.
Но, грубо говоря да каждый в своя функцию.
Если идут 2-3 последовательных цикла, то разбиваю на функции/процедуры.
Пробовал разбивать и вложенные циклы, чёрти-что получается. Поэтому сейчас допускаю, но не более 2-х.
> (в данном случае функция у меня в 40 строк с 3 вложенными
> циклами и 6 условными операторами), то такую функцию, я
> считаю, разбивать на части обычно не стОит.
У меня средняя длина функции 15 строк. От function до end включая пустые строки.
Гораздо проще разбить подозрительную функцию на кучу простых и забыть о отладчике. Гораздо быстрее набить 5-10 функций. Чем отладить одну большую. С моей скоростью (250 ударов/мин) я эти функции наберу за 5-10 минут, против полчаса-час потраченного в пошаговой отладке.
При таком подходи, надобность в метках отпадает сама-собой.
> Да тогда в функциях запутаешься...
Ни чуть. Правильные названия позволяет не заглядывать во внутрь функций.
← →
KilkennyCat © (2016-05-20 23:23) [8]
> Гораздо быстрее набить 5-10 функций.
Каждый вызов функции затратен.
← →
DayGaykin © (2016-05-21 04:04) [9]
> Pavia © (20.05.16 22:14) [7]
Если функция нужна только в одном месте - я не разбиваю. Смысла не вижу.
Если в нескольких, то чрезмерное разбиение + желание потом немного изменить одну из функций может привести к проблемам. А в теории, так как вы говорите - самодокументирование и простота отладки.
Соглашусь с [2]
← →
Eraser © (2016-05-21 04:07) [10]
> SergP © (20.05.16 18:25)
негативно. так как в наше время метки встречаются крайне редко, мозг хуже воспринимает данную конструкцию, чревато ошибками.
← →
K-1000 © (2016-05-21 06:26) [11]Нужно без них.
← →
SergP © (2016-05-21 09:00) [12]
> 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
Но просто хочется не вырабатывать у себя вредные привычки (если они действительно считаются вредными), а то потом избавиться от них не всегда просто.
← →
KilkennyCat © (2016-05-21 09:28) [13]
> так как в наше время метки встречаются крайне редко, мозг
> хуже воспринимает данную конструкцию
забавная причина-следствие
← →
Dimka Maslov © (2016-05-21 09:49) [14]
> Т.е. получается что единого мнения по этому поводу нет?
Конечно же нет. Постоянное использование меток - действительно плохо. Но когда на один и тот же участок кода надо прийти из нескольких мест - метка куда как проще.
← →
Внук © (2016-05-21 10:31) [15]Сейчас придет Шевченко, и скажет, что за такой код положен эцих с гвоздями с занесением перед строем.
И я подпишусь.
← →
DayGaykin © (2016-05-21 12:04) [16]Мне нравятся метки в Java. Там это не воспринимается плохо, хотя встречается тоже редко.
← →
DVM © (2016-05-21 16:19) [17]Вот удивительно, метки это значит очень плохо, а вот, например, замыкания - это хорошо, это добавляет читаемости коду? Однако чем то плохим не считается.
← →
Юрий Зотов © (2016-05-21 18:42) [18]К использованию меток отношусь спокойно. К неиспользованию - тоже спокойно. Главное - не делать из этого религии.
Важны не метки (или их отсутствие), а читабельность кода. Бывают случаи, когда метки ухудшают читабельность, но бывает и когда улучшают (правда, редко).
← →
KilkennyCat © (2016-05-21 19:26) [19]Главное - чтобы костюмчик сидел! а программа - работала.
← →
Германн © (2016-05-22 01:15) [20]В принципе против меток возражений не имею. В ассемблере без меток вообще никак не обойтись. В Паскале обойтись без них можно и желательно.
Сам когда-то использовал метки в одной из своих программ (поскольку решил что так код будет короче и понятней, но теперь тоже сам не могу в нем разобраться. :)
← →
Тимохов Дима © (2016-05-24 02:09) [21]Иногда можно.
Использовал один раз.
← →
dmk © (2016-05-24 11:00) [22]А ведь можно внутри while еще один while сделать или repeat. Тогда просто break.
Пользовался метками. Потом все снес. Сейчас метки только в ассемблере.
← →
Юрий Зотов © (2016-05-24 12:42) [23]> dmk © (24.05.16 11:00) [22]
> А ведь можно внутри while еще один while сделать или repeat.
> Тогда просто break.
Не всегда. Недавно столкнулся примерно с такой ситуацией:
while ... do
begin
while ... do
begin
...
if ... then
// Здесь нужно прервать ВНЕШНИЙ цикл. Break не прокатывает.
goto lbl; // А вот goto - прокатывает. Просто, читабельно и элегантно.
end;
end;
lbl: ...
← →
dmk © (2016-05-24 13:01) [24]Да я не против меток, тем более в асме они повсюду ).
Где то на просторах нэта читал, что мол goto упразднят. Подумал, подумал и избавился от меток. А goto так и не убрали из языка. Кругом обман.
← →
Jeer © (2016-05-24 17:49) [25]В целом - отрицательно.
Но, иногда, использую реинкарнацию процедур и функций из, скажем, Фортрана.
Дабы не корежить все - использую.
← →
K-1000 © (2016-05-24 21:55) [26]Если нужно выйти из нескольких циклов, я бы сделал бы выход из подпроцедуры.
← →
KilkennyCat © (2016-05-24 23:22) [27]неиспользование GOTO - это из серии Argumentum ad verecundiam -
вид ошибочной логической аргументации — предложение считать некоторое утверждение корректным потому, что такое утверждение сделано неким источником, считающимся авторитетным (wiki)
, то есть, один гуру брякнул исходя из своей субъективной нелюбви, остальные бездумно подхватили. Ни одного достойного, объективного аргумента, доказывающего вред сего, нет.
← →
Юрий Зотов © (2016-05-25 00:35) [28]> K-1000 © (24.05.16 21:55) [26]
Можно и процедуру. Можно придумать еще десяток способов. Но ни один из них по простоте, читабельности и накладным расходам не сравнится с [23].
Особенно если немного изменить задачу. Допустим, требуется не прервать внеший цикл, а выйти на какой-то оператор ПЕРЕД его началом.
← →
Kerk © (2016-05-25 01:03) [29]Читабельность субъективна. Любой код с goto менее читабелен, чем вариант без goto. Просто за счет того, что этот оператор очень редко используется. Приходится спотыкаться о него взглядом и думать чего же там хочет автор.
Код из начала ветки - яркий пример. Приходится его в голове повертеть, чтобы понять что имел ввиду автор. Альтернатива же без goto воспринимается сходу. Просто за счет привычки.
← →
Германн © (2016-05-25 01:40) [30]
> Kerk © (25.05.16 01:03) [29]
>
> Читабельность субъективна. Любой код с goto менее читабелен,
> чем вариант без goto. Просто за счет того, что этот оператор
> очень редко используется. Приходится спотыкаться о него
> взглядом и думать чего же там хочет автор.
>
Да. Для тех кто его никогда не применял.
Для тех, кто применял и знает с чем его кушать - пример Юрий Зотов © (24.05.16 12:42) [23]
← →
Kerk © (2016-05-25 01:42) [31]
> Германн © (25.05.16 01:40) [30]
Предлагаю прочитать мой комментарий еще раз целиком :)
← →
Kerk © (2016-05-25 01:47) [32]Код нужно писать таким образом, чтобы в каждый момент можно было держать в голове как можно меньше информации. В примере из [23] человек наткнувшийся на метку будет вынужден выяснять "а кто это у нас сюда прыгает?". Код после цикла сразу же перестает быть просто кодом, который выполняется после цикла. Линейность восприятия теряется. Появляется никому не нужная сложность.
← →
Германн © (2016-05-25 01:52) [33]
> Kerk © (25.05.16 01:42) [31]
>
>
> > Германн © (25.05.16 01:40) [30]
>
> Предлагаю прочитать мой комментарий еще раз целиком :)
>
Предлагаю прочитать и мой комментарий ещё раз целиком.
А так же и ответы ЮЗ.
Чем "лесенка" кода уже, тем она лучше.
← →
Юрий Зотов © (2016-05-25 01:54) [34]> человек наткнувшийся на метку будет вынужден выяснять "а
> кто это у нас сюда прыгает?".
Возле метки пишем краткий коммент - и проблема исчезла.
Кстати, ставить подобные краткие комменты по ходу выполнения прикладного функционала - тоже не вредно. Сильно облегчает понимание чужого кода, например. Или даже своего, через пару лет.
← →
Юрий Зотов © (2016-05-25 01:58) [35]> Возле метки пишем краткий коммент - и проблема исчезла.
Еще лучше - дать метке осмысленное имя. Тогда и коммент может не потребоваться, метка сама все о себе скажет.
← →
Kerk © (2016-05-25 01:59) [36]
> Юрий Зотов © (25.05.16 01:54) [34]
>
> > человек наткнувшийся на метку будет вынужден выяснять "а
> > кто это у нас сюда прыгает?".
>
> Возле метки пишем краткий коммент - и проблема исчезла.
Об этом и речь. Комментарий написать конечно можно. Но сама необходимость написать комментарий как бы намекает нам, что с читаемостью не все в порядке.
> ставить подобные краткие комменты по ходу выполнения прикладного
> функционала - тоже не вредно
Это совсем другое. Goto и метки - это не прикладной функционал.
← →
Kerk © (2016-05-25 02:01) [37]
> Юрий Зотов © (25.05.16 01:58) [35]
>
> > Возле метки пишем краткий коммент - и проблема исчезла.
>
> Еще лучше - дать метке осмысленное имя.
Ну это еще куда ни шло :)
Но все равно я против goto. В основном по причинам описанным в [29]. Очень редко используется, а потому спотыкаешься взглядом и ищешь в чем подвох. Неприятное ощущение.
← →
Германн © (2016-05-25 02:07) [38]
> Kerk © (25.05.16 01:59) [36]
>
>
> > Юрий Зотов © (25.05.16 01:54) [34]
> >
> > > человек наткнувшийся на метку будет вынужден выяснять
> "а
> > > кто это у нас сюда прыгает?".
> >
> > Возле метки пишем краткий коммент - и проблема исчезла.
>
>
> Об этом и речь. Комментарий написать конечно можно. Но сама
> необходимость написать комментарий как бы намекает нам,
> что с читаемостью не все в порядке.
Можно подумать что с читаемостью длинной и широкой простыни, которая не использует goto проблем не будет.
← →
Юрий Зотов © (2016-05-25 02:09) [39]> Kerk © (25.05.16 02:01) [37]
Дело привычки, всего лишь.
Конечно, я против злоупотребления метками в ЯВУ (асм не в счет). Но если метка единственная, на нее идет только один переход, а сама метка стоит рядом с goto - то все в порядке.
← →
Германн © (2016-05-25 02:10) [40]
> Kerk © (25.05.16 02:01) [37]
>
>
> > Юрий Зотов © (25.05.16 01:58) [35]
> >
> > > Возле метки пишем краткий коммент - и проблема исчезла.
>
> >
> > Еще лучше - дать метке осмысленное имя.
>
> Ну это еще куда ни шло :)
>
> Но все равно я против goto
А мы тебе его и не навязываем. :)
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2017.08.13;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.004 c