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

    +131

    1. 1
    if (Edit40.Text<>t1) and (Edit38.Text<>t1) and (Edit36.Text<>t1) and (Edit34.Text<>t1) and (Edit32.Text<>t1) and (Edit30.Text<>t1) and (Edit28.Text<>t1) and (Edit26.Text<>t1) and (Edit24.Text<>t1) and (Edit22.Text<>t1) and (Edit20.Text<>t1) and (Edit18.Text<>t1) and (Edit16.Text<>t1) and (Edit14.Text<>t1) and (Edit12.Text<>t1) and (Edit10.Text<>t1) and (Edit8.Text<>t1) and (Edit6.Text<>t1) and (Edit4.Text<>t1) and (edit2.Text<>t1) ...

    Старый мем с форума:
    "Здрасте, вообщем такая проблемка:
    У меня Unit10.pas занимает 13378 КБ (13.0 МБ)
    И при работе в коде 10 формы после 5-10 изменений делфи начинает виснуть на 5-20 сек. (приходится вырезать весь текс кроме нужной процедуры и т.д, вставлять в блокнот, писать процедуру и затем обратно вставлять в делфи вырезанный текст из блокнота).
    И компелируется тож долговато.
    Всего 59988 строк.
    На строчке 400-500 знаков (эт только там где условие, но часть условия(для удобства) переходит на 2 строчку (если все вместить, то будет примерно 35000 строк))
    ____________________________________
    Постараюсь нормально сформулировать что хочу сделать.
    Есть часть условия:
    (код выше. прим. ReallyBugMeNot)
    ____________________________________
    Оно повторяется если быть точным 4200 раз.
    Изменяются только "номера\имена" эдитов (только четные от 2 до 240) и "t1" (t2, t3, t4, .. ,t35).
    Хотелось бы задать переменную (Например "Z") и присвоить ей это условие, но так чтобы переменные "t1, t2, t3, .. ,t35)" и "имена\номера" эдитов задавались в каждой процедуре (всего 6 процедур), где находится оставшееся часть условия.
    Можите подсказать как мне это реализовать?
    Зарание спс."

    Остается только удивлятся терпеливости человека, который позволил исходнику разростись до тринадцати мегов, прежде чем заметил, что что то не так.

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

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

    • когда мне было 12-13 лет я изучал паскаль.
      программа моя была написала в файле noname1.pas.

      в нем не было ни одной процедуры и ни одной функции. все переменные назывались a,b,c,d и что бы не заводить лишних переменных -- я их переиспользовал. Активно использовалост goto.

      Когда файл стал слишком большой и компилятор отказался его компилировать -- я стал искать решение и так я понял зачем нужны процедуры.

      Как хорошо, что в моем детстве нельзя было скомпилировать исходик на 13 мегов
      Ответить
      • Аналогично!
        Я даже сохранил, кажется, исходник моего первого лабиринтика! Только сюда он не влезет...
        Ответить
        • А я вот свой первый лабиринт посеял, только бинарь есть(((
          Ответить
      • все мы с подобного начинали
        Ответить
        • а вот не надо за всех
          Ответить
          • ну если сразу первый проект был верхом совершенства - снимаю шляпу:)
            PS. в моем первом проекте (это был редактор карт для warcraft 2) было ~50 менюитемов с идиотской реализацией. не 240 едитов конечно, но все-таки. да и размер был килобайт 100...
            цифры на порядок меньше - но принцип тот же:(
            а тут.... видимо чел О-ОЧЕНЬ терпелив :)
            Ответить
            • ну как бы необязательно узнавать от кого-либо, что в модуле размером > N LoC неудобно копаться, а далее:
              N выбирается по вкусу
              а действия по борьбе с феноменом описаны в абсолютно любой книге
              Ответить
              • так их читать надо! и ведь проблем вроде бы нет:
                бедный студент - ну скачай, читай с экрана, лениво читать - полно примеров - погугли!
                интеренеты щас у всех быстрые и дешевые - не то что в 90-е.
                в общем, мозгами думать не можем или не хотим:(
                Ответить
                • да ладно, книжку можно взять на почитать в избе-читальне
                  ключевое в описанном - тупость, ибо надо: а) догадаться, что длинный модуль - неудобно б) удобнее - взять и поделить в) узнать, как поделить - проще, чем продолжать мучаться с длинным модулем
                  только пункт в) определенно требует высшей нервной деятельности
                  Ответить
            • > редактор карт для warcraft 2
              ахиреть, среди нас программист blizzard'а
              Ответить
              • это не так. я один из многих сторонних разработчиков-любителей игры, которые делали подобное. ну а формат карты можно раскопать методом проб и ошибок:)
                с другой стороны результат оказался вполне приличным в сравнении с оригиналом.
                PS. на близзард никогда не работал:)
                Ответить
    • Какой плохой t1, никто не хочет на него равняться. =)
      Ответить
    • Извините, конечно, но сходство очевидно:
      ________________________________________ ____________
      >Здрасте, вообщем такая проблемка:
      Здраствуйте, я хотел бы чтобы вы зделали игру
      >И компелируется тож долговато.
      И если пользователь играет эльфами...
      >Всего 59988 строк.
      Всего 4 зоны
      >Можите подсказать как мне это реализовать? Зарание спс
      Я джва года хочу такую игру. Можно...

      итд..
      Ответить
      • Я хочу, чтобы вы написали программу на Паскале. Суть такова: константы деревянные, функции набигают. Можно грабить переполненный буфер.
        Ответить
        • показать все, что скрыто<Aptyp> "Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы...
          * ChanServ changes topic to 'Можно грабить корованы'
          (c) http://bash.org.ru/quote/22171
          Ответить
          • показать все, что скрытоХм.., так и не понял за что минусуют, просто привел первоисточник, может кто не знает эту цитату.
            Ответить
            • > первоисточник
              > bash.org.ru

              Ёбаный пиздец...
              Ответить
              • А что вы хотели?
                Весь ориджинал контент и креатив рунета давно куются на бошорке.Ну не набижал еще на /lm/ ну и что?
                Ответить
                • Ололо, на башорг!
                  Я даже прослезился.
                  Петросян читает башорг. И не только читает, но и пересказывает!
                  Ответить
                  • LOLWUT?
                    Ответить
                    • Сериусли.
                      Ответить
                      • Башорг_ворует_шутки_у_ЕВП.жпег
                        Ответить
                      • Для слоупоков
                        Весь вин теперь генерируется здесь:
                        http://vkontakte.ru/feed?section=popular

                        И еще большим вином стало ВНЕЗАПНОЕ появление там Андрея Романовича.
                        Ответить
                        • Захожу я, значит, и вижу на четвёртой позиции цитату с башорга. Хуёвый генератор вина у Дурова.
                          Хотя с первой позиции долго гыгыкал.
                          Ответить
    • странно, но у меня даже в самом начале кодового пути не было таких моразмов.
      как-то ухитрялся быть в курсе базовых возможностей каждого языка. ЧЯДНТ?
      Ответить
    • там, видимо, еще есть t2, которое сравнивается с нечётным эдитами
      Ответить
    • У меня назревала подобная ситуация (Edit1.Text <> xx) ... (EditNNN.Text <> xx). Более-менее выкрутился следующим образом:
      1. Edits: array[0..do_xera] of TEdit.
      2. Говнокод в Create()
      Edits[0] := Edit1;
      ...
      Edits[N] := EditNNN;

      Зато потом всю эту хрень можно обрабатывать циклом.

      Еще вариант:
      for I := 0 to Controls.Count - 1 do
      if Controls[i] is TEdit then ......
      Ответить
      • О чёрт, и я таким страдал... Валидацию ввода делал)) Что первым, что вторым способом.

        procedure TFormMain.Ed_KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
        var i,index:integer;
        begin
        index:=0;
        if Key=VK_Return then
        begin
        //суть такова: в некоторых полях должны быть только числовые значения. Такие поля заносятся в EdMas в конструкторе формы. А имена у них всех вида ed_N.
        for i:=0 to length(EdMas)-1 do
        if pos(copy((Sender as TEdit).Name,4,length((Sender as TEdit).Name)-3),EdMas[i].Name)<>0 then index:=i;
        //а эти числовые поля еще и по-разному надо обрабатывать
        case index of:
        ...

        Сколько угробил времени на эту хрень))
        Ответить

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