Операторы в стиле C

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Операторы в стиле C

Сообщение Brainenjii » 31.08.2011 10:37:59

В FPC есть поддержка операторов в стиле C +=, *= и т.п.
Есть ли флаг, включающий их для свойств, а не только для переменных, и ещё оператор !=?

// маленький примерчик
Код: Выделить всё
program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}

Type

{ TMyClass }

TMyClass = Class
  Private
    FOneOfMyDearestAndNearestProperties: Integer;
  Public
    Property OneOfMyDearestAndNearestProperties: Integer
      Read FOneOfMyDearestAndNearestProperties
      Write FOneOfMyDearestAndNearestProperties;
End;

Var
  OneOfMyDearestAndNearestVariables: Integer;
  aMyClass: TMyClass;
begin
  aMyClass := TMyClass.Create;
  aMyClass.OneOfMyDearestAndNearestProperties := 1;
  //aMyClass.OneOfMyDearestAndNearestProperties += 1; // не работает
  aMyClass.OneOfMyDearestAndNearestProperties :=
    aMyClass.OneOfMyDearestAndNearestProperties + 1; // приходится так
  WriteLn(aMyClass.OneOfMyDearestAndNearestProperties);

  OneOfMyDearestAndNearestVariables := 1;
  OneOfMyDearestAndNearestVariables += 1; // как удобно ^_^
  WriteLn(OneOfMyDearestAndNearestVariables);
end.

Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Операторы в стиле C

Сообщение Vadim » 31.08.2011 10:50:44

Brainenjii
Не надо включать. Операторы С - это ужас, покрытый липким потом отвращения. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Операторы в стиле C

Сообщение Brainenjii » 31.08.2011 11:13:22

Они позволяют значительно снизить уровень повторения => они добро ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Операторы в стиле C

Сообщение kipar » 31.08.2011 11:34:40

Вместо оператора += есть расовая паскалевская функция Inc(x, n);
Правда она тоже не работает со свойствами по понятной причине (свойство нельзя передать по ссылке).
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54

Re: Операторы в стиле C

Сообщение Vadim » 31.08.2011 11:56:27

Brainenjii писал(а):Они позволяют значительно снизить уровень повторения

И снизить уровень понятности. :) Не все ведь параллельно овладевают С или начинают с него свой нелёгкий труд программиста.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Операторы в стиле C

Сообщение Ask » 31.08.2011 13:29:06

Я тоже активно использую операторы сокращённого присваивания,
и считаю что они более читабельны, чем использование псевдо-процедур типа Inc и Include.
К сожалению, разработчики FPC наотрез отказались реализовывать их для свойств,
несмотря на мои настойчивые попытки их переубедить :(
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Операторы в стиле C

Сообщение MageSlayer » 31.08.2011 22:27:37

Ask писал(а):К сожалению, разработчики FPC наотрез отказались реализовывать их для свойств,несмотря на мои настойчивые попытки их переубедить

Ваши настойчивые попытки не содержали убедительных аргументов.
К счастью для паскаля.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Операторы в стиле C

Сообщение alexs » 31.08.2011 23:19:50

Не надо делать С. Если хочется этих операторов - то почему не писать на самом С?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Операторы в стиле C

Сообщение Mr.Smart » 31.08.2011 23:42:36

Давайте подумаем: что такое свойство (property)? Можно сказать, что это особый тип переменной, который имеет два "атрибута" (не соображу как ещё обозвать), это "атрибут" чтения и соответственно записи. Которые в свою очередь могут как ссылаться на переменную внутри класса так и на метод оного. Да ещё и могут вовсе отсутствовать.
И если операции inc, += преобразуются в 2-3 инструкции ассемблера, то как вы представляете, код который будет выполнять операции над свойствами?
Теоретически, конечно можно, но ...

з.ы. Данные конструкции языка конечно удобны, но извините С есть С и нечего его сопоставлять с Pascal. Как бы холивар из темы не вышел.
По мне: вообще пофигу на язык. Какой бы он не был, главное чтобы позволял реализовать замыслы программиста. Про "быдлокодеров" деликатно промолчу :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Операторы в стиле C

Сообщение Ask » 01.09.2011 01:20:37

MageSlayer писал(а):Ваши настойчивые попытки не содержали убедительных аргументов.


Очевидно так, раз не убедил. Однако, Я считаю это существенной потерей для Паскаля.

alexs писал(а):Не надо делать С. Если хочется этих операторов - то почему не писать на самом С?

Mr.Smart писал(а):Данные конструкции языка конечно удобны, но извините С есть С и нечего его сопоставлять с Pascal


Потому что глупо ставить целью дизайна языка "сделать не как в Си". В Си есть ещё, например, операторы "if", "break", "while" --
следуя вашей логике, их следует убрать из Паскаля как некошерные :-)

Mr.Smart писал(а):Давайте подумаем: что такое свойство (property)?...

Далее перечислены истинные утверждения, не не имеющие отношения к обсуждаемому вопросу :-)

Mr.Smart писал(а):как вы представляете, код который будет выполнять операции над свойствами?

Непонятно, зачем мне представлять этот код.
Если мне очень интересно (а мне не очень), Я могу его сгенерировать и посмотреть -- вот например что получается для целочисленного свойства:
Код: Выделить всё
movl   4(%eax),%edx
incl   %edx
movl   -4(%ebp),%eax
call   P$PROGRAM_TT_$__SETP$LONGINT
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Операторы в стиле C

Сообщение Сквозняк » 01.09.2011 12:19:38

Потому что глупо ставить целью дизайна языка "сделать не как в Си". В Си есть ещё, например, операторы "if", "break", "while" --
следуя вашей логике, их следует убрать из Паскаля как некошерные

"break" и "while" можете убирать, "for" и "goto" перекроют их возможности с запасом :mrgreen: А если сложные циклы будут ломать стек в лазарусе но отлично работать при {$mode fpc}, то это кого-то заставит не гнаться за новыми фичами а доделать старые.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Операторы в стиле C

Сообщение daesher » 01.09.2011 12:28:33

Думаю, в свойствах следует сделать шаг немного в другом направлении - разрешить использовать их в качестве var-параметров. Да, с точки зрения кода это будет созданием временной переменной (того же типа), присваивании ей значения свойства, вызовом процедуры и присваиванием свойству значения этой переменной. Но насколько будет удобнее! И inc будет работать, но не в этом дело.
А операторов в стиле С я тоже не люблю, хотя они и позволяют что-то сократить. Не паскалевское это! Как и конструкции вида PByte(a)[3] вместо PByteArray(a)^[3]. Для автопреобразования заголовков в модули сгодится, а в повседневных целях - надо избегать.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Операторы в стиле C

Сообщение Ask » 01.09.2011 12:46:18

daesher писал(а):Думаю, в свойствах следует сделать шаг немного в другом направлении - разрешить использовать их в качестве var-параметров.

Вот этого точно не будет. И тут Я с разработчиками не то чтобы совсем согласен, но могу принять их аргументы.
Реализация с помощью временной переменной поменяет семантику, поэтому тут нужен либо новый режим параметров
(предлагалось имя copyinout), либо thunks, что дико сложно.
Кстати, только сегодня Jonas Maebe в комментарии к багу упомянул, что он уже вроде как в принципе не против
сокращённых присваиваний для свойств, так что шансы ещё есть :-)

daesher писал(а):конструкции вида PByte(a)[3] вместо PByteArray(a)^[3]

Арифметика с указателями -- это, конечно, зло (хотя в последней версии сделали немного удобнее),
но в данном конкретном случае не вижу разницы -- range check что так, что этак бесполезен,
а визуально первый вариант даже приятнее.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Операторы в стиле C

Сообщение Brainenjii » 01.09.2011 12:59:58

Хочу такие шансы ^_^ Надо-то всего лишь, чтобы компилятор x += y; понимал как x := x + y;
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Операторы в стиле C

Сообщение vada » 01.09.2011 13:14:42

А мне люто не хватает конструкции
Код: Выделить всё
a := (F?b:c);

10 лет на JAVA программировал. Привык, ититить его. :(

И возможности описать переменную в любом месте. Но это уже глумление над паскалем.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru