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

    +98.5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    // Этот говняжный кусочек кода лечит работу козьих шариков.
    for iter := 0 to staticSet.fields.Count - 1 do
      if staticSet.fields[i].IsNull then
        ;
    // Конец говняжного кусочка кода

    Вкратце: staticSet - декоратор (обертка) для ADO Recordset; чтобы синхронизировать обертку и носителя, надо было дернуть любой метод. Автор выбрал R/O property IsNull. Но каков вброс. Комментарии прошу считать частью кода. Если учесть, что плотность комментариев 1 на примерно 60 КБ кода.

    Запостил: Billy the Kidd, 09 Ноября 2009

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

    • Плотность кода: комментарий/килобайт кода. :-D. Здорово придумано.
      Ответить
    • Ссори, плотность комментариев.
      Ответить
    • "Но каков вброс", то есть в цикле объявлено iter, а используется i. В этом говнокод?
      Ответить
      • Не понял я, как писать комментарии от своего имени.

        Вброс, камрад, в том, что комментарий - авторский. Тот человек, который писал эти три строчки - написал комментарий. Во-первых, обычно он не пишет комментарии. Во-вторых, я при отлове жука, наткнувшись на этот комментарий, долго думал, что такое "козьи шарики". Вброс в этом. В-третьих, как справедливо замечено, можно было дернуть одно поле, чтобы синхронизировалась вся обертка.
        Ответить
    • Мне вот это нравиться:
      if ... then
      ;
      Ответить
      • B.t.K.

        Шаришь. Мне еще нравится название iter.

        "Академически" такие циклы пишутся примерно так:

        with staticSet do
        for i := Fields.Count - 1 do
        Fields[i].IsNull;

        При таком подходе @staticSet попадает в EDI, propget Fields, возвращающий поле, вызывается inline, i рискует попасть в ECX, propget Count не вызывается на каждой итерации, и ненужная пара TEST EAX,EAX / JZ @..., порождаемая IF, отсутствует. Ежу ясно, что в конкретном случае - фигня. А если весь проект сделан из такой фигни - становится печально.
        Ответить
        • for i := Fields.Count - 1 downto 0 do

          ессна.
          Ответить
        • Count в обоих случаях не вызывается на каждой итерации. Прочитать свойство (в отличие от прямого вызова геттера) не используя значение не даст компилятор (если это дельфи). Короче, чушь
          Ответить
          • Мощно задвинул. Внушает.
            То есть, ты хочешь сказать, что границы цикла вычисляются один раз перед его началом, а не на каждой итерации?
            Разбегайся, камрад. И найди стену покрепче.
            Ответить
            • В Delphi, в цикле for .. to ... expression, expression вычисляется всего один раз. Учи матчасть.
              Ответить
    • > чтобы синхронизировать обертку и носителя, надо было дернуть любой метод
      Настоящий говнокод - в этой обёртке.
      Клин клином вышибают.
      Ответить

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