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

    +92

    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
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      with message1 do
      begin
        Subject:='Test subject';
        From := '[email protected]';
        To := '[email protected]';
        Textbody:='Text body';
      [. . .]
        Configuration.Fields.Update;
        Send;
    end;
    
    Лососнул тунца.

    with message1 do
    begin
    Subject:='Test subject';
    From := '[email protected]';
    To := '[email protected]';
    Textbody:='Text body';


    'To' - ключевое слово, смирись, смертный, и забудь о 'with'
    p.s. капча сейчас - 4 семерки.

    Запостил: Stertor, 19 Февраля 2014

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

    • Компилятор при создании tlb додуплил заменить to на to_, однако напутал с присваиванием значения:
      procedure TMessage.Set_To_(const pTo: WideString);
        { Warning: The property To_ has a setter and a getter whose
          types do not match. Delphi was unable to generate a property of
          this sort and so is using a Variant as a passthrough. }
      var
        InterfaceVariant: OleVariant;
      begin
        InterfaceVariant := DefaultInterface;
        InterfaceVariant.To_ := pTo;
      end;
      
      function TMessage.Get_TextBody: WideString;
      begin
          Result := DefaultInterface.TextBody;
      end;


      InterfaceVariant.To_ := pTo;

      исправил на
      InterfaceVariant.To := pTo;

      после этого заработало нормально.
      Ответить
    • А есть возможность средствами языка добавить в тип поле, название которого является ключевым словом? Record, object, class, interface меня послали куда подальше.
      Ответить
      • врать не буду - не знаю, но склоняюсь к мысли, что в большинстве случаев - нет.
        Ответить
      • С амперсандом можно:
        type
          &Class = class
          public
            &Public: Integer;
            &Record: record
              &end: String;
            end;
            class function &Function: &Class;
            function &Do: &Class;
            constructor &Constructor(const &Const: Integer);
          end;
        
        constructor &Class.&Constructor(const &Const: Integer);
        begin
          Create;
          &Public := &Const;
          &Record.&end := 'Hello, World!';
        end;
        
        function &Class.&Do: &Class;
        begin
          Writeln(&Record.&end);
          &Do := Self;
        end;
        
        class function &Class.&Function: &Class;
        begin
          &Function := &Class.&Constructor(42);
        end;
        
        begin
          &Class.&Function.&Do.Free;
          Readln;
        end.
        Ответить
        • какой ад.
          Ответить
        • &begin и &end тоже можно?
          Ответить
          • Можно. Но при этом почему-то horse и &horse считаются одной и той же переменной.
            Ответить
            • Потому что это и есть одна и та же переменная.

              Кстати, в других языках то же есть подобная возможность. Например, в тёплом ламповом C# используется символ @.
              Ответить
              • А зачем? Я знаю, только, что гоатсе в си обозначает сырой строковой литерал.
                Ответить
                • Чтобы можно было использовать зарезервированное ключевое слово как имя переменной.

                  Это может понадобиться при переносе с одного языка на другой, при автоматической кодогенерации.
                  Ответить
        • Delphi 7 выплёвывает, Delphi 10 принимает. В FPC компилируется с директивой {$MODE DELPHI}.

          Когда этот символ появился в Delphi и что он означает?
          Ответить
          • Сколько мне память не изменяет это значит значение по ссылке procedure ttt(&arg: integer) bregin ... end;
            Ответить
            • С божественной Сишечкой путаете, товарищ. Если моя память не спит с другим, то сишкосахара в Дельфях нет. Есть procedure ttt(var arg: integer), есть procedure ttt(arg: ^integer), а прямо как в Сишечке, нет.
              Ответить
          • Он еще в Turbo Pascal-ях был, запрещает компилятору считать последующий идентификатор в качестве ключевого слова языка.
            Ответить
            • я им в асмовставках пользовался
              есть переменные dx,dy, а есть регистр dx, неудобно
              Ответить
              • Вот как раз только в асмовставках он и был доступен в Турбо-Паскалях. Вне асмовставок его можно использовать только в новых Дельфях.
                Ответить
    • И ведь не влом петушкам ебаться с "Pascal`ем"...
      Ответить
      • Эх, зря ты так. Но когда-то я сам думал так, когда сидел под пюре гуляшбейсиком, и думал что жизнь прекрасна. Делфи я боялся даже открывать, потому, что от обилия типов рябило в глазах, а синтаксис паскальный я ненавидел. Пара жестких обломов заставила меня "на карачках приползти в Delphi"
        Ответить
        • Когда-нибудь тебя пару обломов заставят выкинуть его нахуй и переползти на более современный язык. Впрочем, если писать падсибя, то можно писать на чем угодно.
          Ответить
          • Вы, батенька, видно, плохо знаете суть вещей. Недавно Delphi XE 5 вышла - под андроидные девайсы можно проги компилить, я правда, не смотрел. То, что я сижу под девяткой - мои личные, как бы, проблемы. Но Делфи - жив, это однозначно.
            Когда разрабатывали RAD Delphi XE были приглашены даже эксперты из Microsoft.
            Ответить
        • а от разнообразия ключевых (причем парных!) ключевых слов не рябило?
          это не только долго пропечатывать, но еще и точно знать эти "пары"
          Ответить
          • Не, меня больше оператор присваивания и типы коробили.. Но потом привык.
            Ответить
    • Юзать билдер прототипов - ссзб.
      Ответить

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