Конференция "Прочее" » Как вы относитесь к использованию меток в Delphi?
 
  • SergP © (20.05.16 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 © (20.05.16 18:46) [1]
    Сразу бросается в глаза неправильная разложение на функции. В одной функции 2 условных оператора и 2 цикл и так понимаю ещё под многоточием много неправильного кода.

    Внутренний цикл надо вынести в отдельную функцию и обозвать что-то типа Pos или  Search.  

    Зачем это нужно? Вот вы скажете для красоты. Кто-то скажет что такой код становиться само документированным и его проще читать.  Но я скажу следующее.  Элементарные функции проще проверить. Причем такую проверку можно поручить и автоматическим тестам.
  • Inovet © (20.05.16 18:46) [2]
    Хоть где - нейтрально, лишь бы не говнокод был.
  • NoUser © (20.05.16 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 © (20.05.16 20:31) [4]
    Метки воплне допустимы там, где это помогает упростить код.
  • SergP © (20.05.16 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 © (20.05.16 20:56) [6]

    > NoUser ©   (20.05.16 19:43) [3]
    >
    > > вместо написания лишних строк
    > и много сэкономлено?


    1 переменная, с предварительной инициализацией, begin, end и 1 условный оператор.
  • Pavia © (20.05.16 22:14) [7]

    > Вы предлагаете каждый цикл или условный оператор выносить
    > в отдельную функцию?

    В абсолют возводят только юноши. Жизнь она не только черная или белая она имеет оттенки серого.
    Но, грубо говоря да каждый в своя функцию.
    Если идут 2-3 последовательных цикла, то разбиваю на функции/процедуры.

    Пробовал разбивать и вложенные циклы, чёрти-что получается. Поэтому сейчас допускаю, но не более 2-х.


    >  (в данном случае функция у меня  в 40 строк с 3 вложенными
    > циклами и 6 условными операторами), то такую функцию, я
    > считаю, разбивать на части обычно не стОит.

    У меня средняя длина функции 15 строк. От function до end включая пустые строки.

    Гораздо проще разбить подозрительную функцию на кучу простых и забыть о отладчике. Гораздо быстрее набить 5-10 функций. Чем  отладить одну большую. С моей скоростью (250 ударов/мин) я эти функции наберу за 5-10 минут, против полчаса-час потраченного в пошаговой отладке.    
    При таком подходи, надобность в метках отпадает сама-собой.


    > Да тогда в функциях запутаешься...

    Ни чуть. Правильные названия позволяет не заглядывать во внутрь функций.
  • KilkennyCat © (20.05.16 23:23) [8]

    >  Гораздо быстрее набить 5-10 функций.

    Каждый вызов функции затратен.
  • DayGaykin © (21.05.16 04:04) [9]

    > Pavia ©   (20.05.16 22:14) [7]

    Если функция нужна только в одном месте - я не разбиваю. Смысла не вижу.
    Если в нескольких, то чрезмерное разбиение + желание потом немного изменить одну из функций может привести к проблемам. А в теории, так как вы говорите - самодокументирование и простота отладки.
    Соглашусь с [2]
  • Eraser © (21.05.16 04:07) [10]

    > SergP ©   (20.05.16 18:25) 

    негативно. так как в наше время метки встречаются крайне редко, мозг хуже воспринимает данную конструкцию, чревато ошибками.
  • K-1000 © (21.05.16 06:26) [11]
    Нужно без них.
  • SergP © (21.05.16 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 © (21.05.16 09:28) [13]

    > так как в наше время метки встречаются крайне редко, мозг
    > хуже воспринимает данную конструкцию

    забавная причина-следствие
  • Dimka Maslov © (21.05.16 09:49) [14]

    > Т.е. получается что единого мнения по этому поводу нет?


    Конечно же нет. Постоянное использование меток - действительно плохо. Но когда на один и тот же участок кода надо прийти из нескольких мест - метка куда как проще.
  • Внук © (21.05.16 10:31) [15]
    Сейчас придет Шевченко, и скажет, что за такой код положен эцих с гвоздями с занесением перед строем.
    И я подпишусь.
  • DayGaykin © (21.05.16 12:04) [16]
    Мне нравятся метки в Java. Там это не воспринимается плохо, хотя встречается тоже редко.
  • DVM © (21.05.16 16:19) [17]
    Вот удивительно, метки это значит очень плохо, а вот, например, замыкания - это хорошо, это добавляет читаемости коду? Однако чем то плохим не считается.
  • Юрий Зотов © (21.05.16 18:42) [18]
    К использованию меток отношусь спокойно. К неиспользованию - тоже спокойно. Главное - не делать из этого религии.

    Важны не метки (или их отсутствие), а читабельность кода. Бывают случаи, когда метки ухудшают читабельность, но бывает и когда улучшают (правда, редко).
  • KilkennyCat © (21.05.16 19:26) [19]
    Главное - чтобы костюмчик сидел! а программа - работала.
 
Конференция "Прочее" » Как вы относитесь к использованию меток в Delphi?
Есть новые Нет новых   [134432   +19][b:0][p:0.001]