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

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    procedure TDetailForm.GridPanel1Click(Sender: TObject);
    var
      i: Integer;
      s: String;
    begin
      //set title and subtitle
      if Pos('Item', TControl(Sender).Name) > 0 then begin
        if Sender.ClassName = 'TImage' then begin
          i := Length(TControl(Sender).Name) - Length('ItemImage') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else if Pos('ItemSubTitle', TControl(Sender).Name) > 0 then begin
          ItemSubtitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemSubTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
        end else if Pos('ItemDescription', TControl(Sender).Name) > 0 then begin
          i := Length(TControl(Sender).Name) - Length('ItemDescription') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else begin
          ItemTitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemSubTitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end;
      end;
    end;

    Код из шаблона New Metropolis UI Application в новом Delphi XE3. Рефлексия так и прет.

    Запостил: kipar, 23 Сентября 2012

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

    • end else begin
      Ответить
      • Да, это православно, что они не городят заборы из ключевых слов, перенося их, а пишут их в ряд, поэтому левый край кода получается аккуратным и понятным.
        Ответить
        • Пиздец, даже тут большая часть - быдло, которое лепит три подряд неинформативные строчки
          end
          else
          begin

          даже не зная, что они настолько нахуй не нужны, что во всех потомках Паскаля (я не про Дельфи и ФПЦ, полученные из него долгой "эволюцией") вообще эти begin и end убрали нахуй.
          И эти долбоёбы, даже видя три ЖЫРНЫХ ключевых слова подряд, даже испытвая блевотное чувство при виде этого жирного забора, считают, что так писать - правильно и что это Паскаль виноват в том, что эта конструкция херово выглядит.
          В этом коде нет этого ёбаного в рот переноса и всё заебись видно.
          Для долбоёбов ещё раз - в крестах лучше перенести (и сделать 4 отступа, иначе else, стоящее сразу за фигурной скобкой, просто тупо сольётся со стеной кода), в Дельфи - нахуй не нужно. Мнение тех, кто привык к крестам и у которого глаз больше заточен под фигурные скобки, идёт нахуй, мне оба синтаксиса привычны одинаково и я знаю, о чём говорю.
          Ответить
          • И в три строки плохо, и в одну плохо... И с фигурными плохо. И offside rule. Все плохо.
            Ответить
            • В Паскале нормально - в одну. И нефиг лезть в него с сишными правилами, вызванными хреновой видимостью фигурных скобок.
              Ответить
              • На самом деле в одну уебищно.
                И в три - говно лютое. За это не люблю Пасцаль - как ни крути - выглядит как говно.

                А теперь посмотрим на бейсиковские ifы
                If cond Then
                       .....
                ElseIf cond1 Then
                       .....
                ElseIf cond2 Then
                       .....
                ElseIf cond3 Then
                       .....
                Else
                       .....
                End If

                > вообще эти begin и end убрали нахуй.
                И правильно сделали. Действительно блевать тянет.
                Ответить
                • В одну нормально, выглядит так же, как и в бейсике.
                  Ответить
          • Я нахожу такое написание более логичным, ибо!
            if condition then
                operator1
            else
                operator2;

            где оператор может быть простым, или составным вида
            begin
            operator1;
            ...
            operatorN;
            end

            где операторные скобки есть неотъемлемая часть составного оператора.
            И да, в Си-подобных языках я пишу так же и по той же причине:
            if (condition)
                {
                dosomething();
                }
            Ответить
            • Ну и сам видишь же, что от такой унификации вообще кодостиль получается какой-то дикий. Не нужна она. А найти глазом, где конец блока, начинающегося с этого if, не проблема, потому что в Паскале всё и так очень хорошо видно - проводишь мысленно вертикальную прямую от этого if до того места, где она упирается в код. Причём в 90% случаев она либо закончится на следующей строчке (простой оператор), либо упрётся в жирное ключевое слово (составной оператор).
              Ответить
              • Что-за мания считать пробелы? Займись кодом чтоли...
                Ответить
                • Я сам за if-else-end, ибо это намного более общая форма записи чем if-else + block.

                  if <condition>
                  ..<operator1>
                  ..<operator2>
                  else
                  ..<operator3>
                  ..<operator4>
                  end

                  намного проще записывается чем

                  if <condition> {
                  ..<op>
                  ..<op>
                  } else {
                  ..<op>
                  ..<op>
                  }

                  И тут для меня два плюса:
                  1. Пропадает необходимость в составных операторах.
                  2. Отсутствует проблема висящего else. [1]

                  [1] Good Ideas, through the Looking Glass by Niklaus Wirth, Computer, V. 39, No 1, January 2006
                  Ответить
                  • operator?
                    Ответить
                  • Проблема висячего есле отсуствует, если рассавлять скобки - а в языках с блоками с отступами (питон) она сама по себе пропадает.
                    Ответить
          • >что так писать - правильно и что это Паскаль виноват в том, что эта конструкция херово выглядит.
            Нет, Вирт.
            Ответить
          • показать все, что скрытоЯ АНДРЕЙ-ГЕЙ, ИЩУ НЕМАНЕРНОГО ПАРНЯ ИЗ ПИТЕРА ДЛЯ СЕКСА БЕЗ ОБЯЗАТЕЛЬСТВ НА ОДИН-ДВА РАЗА. ЛЮБЛЮ НОСИТЬ ЖЕНСКОЕ БЕЛЬЕ.
            [COLOR=BLUE]СОСУ ХУИ[/color][COLOR=BLACK]ДАЮ В ЖОПУ[/color][COLOR=GREEN]ДЕЛАЮ МИНЕТЫ[/color][COLOR=RED]
            ПИШИТЕ, ЗВОНИТЕ: 79046468333. СТРАНИЦА В ВК: vk.com/id41556
            [/color]
            Ответить
            • Читал, как гомосёгунов на красной разогнали - в шею? Вот и тебя надо отсюда гнать в шею.

              -В шею! Гоните все войска в ше-е-е-е-е-ю!
              (Ф. Сологуб, "Мелкий бис").
              Ответить
    • Нормальный код.
      Ответить
    • Чья-то лаба. "Зад 1"
      program zad1;
          uses crt;
          var y,t:array [1..19] of real;
          a,k,e:real;
          i:integer;
          function sqrn(a,x:real):real;
          begin
          sqrn:=exp(a*ln(x));
          end;
          function lg(x:real):real;
          begin
          lg:=ln(x)/ln(10);
          end;
          function ctg(x:real):real;
          begin
          ctg:=cos(x)/sin(x)
          end;
          begin
          clrscr;
          a:=pi/12;
          k:=ln(2);
          for i:=1 to 19 do
          begin
          y[i]:=0.1+(i-1)*0.1;
          t[i]:=((sqrn(6,y[i])*4/3+abs(sqrn(1/3,ctg(16*y[i]))))/sqrn(1/2,(cos(sqrn(2,a))+k*(sqrn(4,e)+9*lg(sqrn(3,y[i]))));
          if (y[i]=0.7) or (y[i]<=0.3) then t[i]:=2;
          end;
          for i:=1 to 19 do
          writeln('   t[ ' ,i:2, ']= ' , t[i]:4:2,'y[ ' , i:2 , ' ]= ' , y[i]:10:1);
          readln;
          end.
      Ответить
      • 1) Почему это здесь, а не в отдельной теме?
        2) Ну типичная лаба выводящая табличку значений непонятной функции, что не так?
        Ответить
        • Ньюфаги не могут постить коды пока zad1 не вырастет.
          Ваш капитан первого ранга.
          Ответить
          • Хм, а я вот, во время модераторских зверств, пытался твинка зарегить - так ему и комменты постить не давали ;)

            Или комменты через неделю, говнокоды через две?
            Ответить
            • >>Pos('Item', TControl(Sender).Name)

              Pos чувствительна к регистру, на этом многие горят. Не лучше ли так:

              Pos(ansilowercase('Item'), ansilowercase(TControl(Sender).Name))
              Ну или переменные специально выделить, если Вы филантроп. Меня жаба душит(
              Ответить
              • Вы так говорите, как будто чувствительность к регистру — это плохо.
                Ответить
                • >>Вы так говорите, как будто чувствительность к регистру — это плохо.
                  В целом - нет.
                  Плохо тогда, когда автор узнал об этом когда программа уже скомпилирована и распространяется.
                  Ответить
                  • Сударь, мне странно это. Такой автор наверняка живёт в параллельном мире, где рыбы летают, птицы дышат жабрами, а слово «мел» на заборе написано хуем.

                    Обычный поиск чувствителен к регистру везде: он ищет точную копию образца. Как раз наоборот, для нечувствительности к регистру нужно принимать меры.
                    Ответить
                    • Он просто привык к поиску в текстовых редакторах. Там же почти всегда по дефолту на регистр забивают...
                      Ответить
                      • Ничего подобного, кэп. Просто я не могу понять, что Вы оба от меня хотите. Я не говорю, что чувствительность к регистру - это плохо, ибо это абсурд. Для всех видов операций есть свое назначение.
                        Ответить
                        • Я про автора кода, внезапно узнавшего о чувствительности к регистру, а не про Вас ;)
                          Ответить
                    • Бля, за это я вас всех и люблю. Иканас, по-моему, две буквы в твоем нике лишние; может, стоит их убрать? Занятный ник получится, ни у кого такого не будет.
                      Ответить
                      • Да хоть горшком назовите, только в печь не ставьте. Никого не хотел обидеть, но мне правда странно: каким должен быть характер человека, чтобы он от функции, предназначенной для поиска точного совпадения, ожидал нечувствительность к регистру?
                        Ответить
                        • >>каким должен быть характер человека, чтобы он от функции, предназначенной для поиска точного совпадения, ожидал нечувствительность к регистру?

                          мягкий и доброжелательный. Правда, иногда упертый.

                          >>чтобы он от функции, предназначенной для поиска точного совпадения
                          А что, есть и не для точного поиска?

                          Иногда бывает так, что точность поиска не столь важна (при парсинге html например), а наоборот, препятствует нормальной работе функции;
                          немного грустно становится, когда функция различает текст вроде этого:
                          "some string here", "Some string here".
                          Можно, в принципе, воспользоваться ansilowercase, но в таком случае мы опять возвращаемся к вопросу:

                          >>А что, есть и не для точного поиска?
                          Ответить
                          • >>Pos(ansilowercase('Item'), ansilowercase(TControl(Sender).Name))

                            В данном случае это более надежное решение, чем если бы без ansilowercase
                            Ответить
                            • более того: совершенно точный поиск бывает нужен крайне редко (в моей практике ни разу не понадобился). Точный не в том плане, что функция хватает из строки лишнее или пропускает нужное, а именно не чувствительный к регистру вводимых параметров.
                              Ответить
                              • > совершенно точный поиск бывает нужен крайне редко

                                Ага, мне не нужно, значит, никому не нужно.

                                Парсинг html — вообще вещь сложная. Для нечувствительного к регистру поиска придётся указывать кодировку. Да, в отрыве от кодировки нечувствительность к регистру не существует. Ansilowercase — всего лишь частный случай, который может и не работать.
                                Ответить
                                • > совершенно точный поиск бывает нужен крайне редко

                                  но я не говорил, что он не нужен в принципе!!! )

                                  Ansilowercase — всего лишь частный случай, который может и не работать.

                                  А можно поподробнее? Я знаю, что LowerCase работает только с семибитным текстом (так написано в справке) и как альтернатива с более широкими возможностями предлагается ansilowercase. А в чем лажа?
                                  Ответить
                                  • WideLowerCase - можно ее использовать как альтернативу?

                                    В принципе, можно переписать pos под себя и заменить вот эту конструкцию :

                                    if "" = "" then
                                    ...
                                    на
                                    if lstrcmpi("","")=0 then
                                    ...

                                    будет вызываться не чувствительная к регистру lstrcmp а ее регистронечувствительный аналог
                                    Ответить
                                    • Вот, что пишут в справке:

                                      >>LowerCase returns a string with the same text as the string passed in S, but with all letters converted to lowercase. The conversion affects only 7-bit ASCII characters between 'A' and 'Z'. To convert 8-bit international characters, use AnsiLowerCase.
                                      Ответить
                                      • Вот о том и говорю, что неточный поиск — сложный и неоднозначный. Сначала возникает вопрос, конвертировать только базовую латиницу или другие алфавиты (кириллицу, например) тоже. Потом возникает вопрос, считать ли «ё» экивалентом «е» или нет, а также учитывать ли белорусские и украинские буквы. Наконец, оказывается, что в той же Винде кроме ANSI codepage есть ещё и OEM codepage (используемая в консоли) и UCS-2/UTF-16 (Unicode). А дальше выясняется, что HTML бывает и в кодировке windows-1251 (ANSI codepage в русифицированной Винде), и в koi8-r, и в utf-8 (из которой нужно перекодировать, чтобы использовать WideLowerCase).

                                        Даже без учёта кодировок регистронезависимый поиск — слишком сложная вещь, чтобы ассоциировать её с примитивной функцией.
                                        Ответить
                                        • Ещё веселее поиск по смыслу с учетом грамматических ошибок и опечаток.
                                          Ответить
                                          • А ты думал стиль Царя просто так придуман? Нехрен тварениям питухов Царей пониамть.
                                            Ответить
            • Комментарии теперь целую неделю после регистрации не дают писать. Насчёт говнокодов пока не проверял.
              Ответить
      • Блядь, где оступы? Как это говно читать?
        Ответить

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