1. Pascal / Говнокод #5653

    +93

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    for i:=1 to 100 do
    begin
    for j:=1 to f do
    begin
    ...
    end;
    f:=f+1000;
    end;

    Бедные дельфины, им не повезло с циклами.

    Запостил: CHayT, 12 Февраля 2011

    Комментарии (38) RSS

    • а чему f равно изначально?
      Ответить
      • 0. Да это и не важно.
        Ответить
        • просто не понимаю в чем говно, алгоритмы с изменяемым количеством итераций вполне возможны, а если ты про не кошерность языка как в си-подобных не лучше было бы
          Ответить
    • Снаут, привет.
      Что ты хотел сказать этим говнокодом?
      Я минус не трогал ни одним виртуалом, честно.

      Ааа, я понял, ты про ограничения цикла for. Наш фор - это конструкция более высокоуровневая, чем сишный, являющийся полной копией while, да.
      Ответить
      • это не говнокод
        Ответить
      • Привет, Тарас. Да вот, потроллить пытаюсь. 27 комментов - хиловато, но зато моих меньшинство.
        Ответить
    • Автор, при чем тут Делфи?
      Ответить
    • Если посмотреть какие возможны методы итерации: по буквам (А..Z), по перечислениям (stLo, stHi) - то читабельность кода только улучшается таким фором

      (Типы имеют нормальное имя и их можно использовать в массивах и итераторах, вместо целых магических чисел)

      А вот менять итератор в теле цикла - это не хорошо. Эту ошибку потом будешь искать два-три дня и корить себя за невнимательность. Лучше уж пользоваться while/repeat циклами.

      Паскаль тем хорош, что циклы читаются чисто:
      i.e:

      type
      TValues = (vOne, vTwo, vThree);

      TOneArray = Array[TValues] of Integer;

      var
      a : TOneArray;
      i : TValues;
      begin
      //... init here

      for i := vOne to vThree do
      Write( a[i] );

      end;

      Чисто и понятно - к чему имеешь доступ. И проверка типов ещё очень помогает (компилер ругнется, если ты 2 вместо vThree будешь использовать, хотя ord(vThree) = 2)

      Строгая типизация рулит
      Ответить
      • все конечно правильно в вашем эссе, но, если уж использовать хитротипизированный итератор, то делать это следует так:
        for i := low(TOneArray) to high(TOneArray) do
          Write( a[i] );

        И вообще, это касается перебора любых массивов
        Ответить

    Добавить комментарий