Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 13 14 15 16 17 [18] 19 20 21 22   вперед  Ctrl
 Re: RAD Studio 10.3 Rio  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 401
А я бы вообще with запретил. Никакой пользы, кроме вреда.
12 дек 18, 12:24    [21761326]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5142
Фэйтл Эра
А я бы вообще with запретил. Никакой пользы, кроме вреда.

запретить нельзя, оставить
12 дек 18, 12:39    [21761357]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Beltar
Member

Откуда:
Сообщений: 163
Поддерживаю, with надо запрещать.

Насчет property, то это очень нехорошая штука вообще-то, и я как-то больно сел на ржавый гвоздь из-за неверного предположения, как оно там внутри работает (думал, оно просто поле проверяет, а оно в сеть лезет). Сами по себе они придуманы для инспектора объектов и редактирования свойств в нем. Из этого вопрос сразу, как это дружит с идей обращаться к полям рекордам через свойство? Оно просто не для этого придумано.

Не вижу особого смысла не использовать в остальных случаях геттеры и сеттеры напрямую. Тем более что это лучше воспринимается.

автор
Внутри класса чаще всего обращаются прямо к полям. Кроме тех мест, которые работают с геттерами/сеттерами. Возможно решение так себе, но так и делают.


А как иначе-то? В сеттере часто вообще перерисовка написана.

автор
Вирт к С отношения не имеет.


А как же анекдот?
Приезжает Вирт с лекцией в Испанию, обращается к аудитории: "Нравится ли вам Паскаль?"
А испанцы в ответ: "Си! Си!"

Вирт в маразм с Модулой впал, но ему, в отличие от Borland по роду деятельности было наплевать на вопросы поддержания кода N-летней давности, он, походу, даже в 90-ые жил представлениями 70-ых, когда делали компьютер, и все ПО под него с нуля.

автор
СиШарпники почему-то ржут, когда слышат слово "Delphi"


Ну Ивашки родства не помнящие. Пишут ведь по факту на Delphi с фигурными скобками. С другой стороны, у них уже не язык, а сборище всего, что только придумали в мире, включая методы обхода ограничений, чтобы снова писать как на C++. Может у них там есть парочка полезных идей.

Продолжая тему инлайнового объявления, вот куда ни посмотри, все рекомендуют, что метод должен умещаться в экран, т. е. в идеале всё должно быть и так видно сразу. Но то ли экраны стали слишком большие, то ли на советы умных людей всем наплевать.
12 дек 18, 13:18    [21761437]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
zinpub
Member

Откуда:
Сообщений: 305
[quot Beltar]
Насчет property, то это очень нехорошая штука вообще-то, и я как-то больно сел на ржавый гвоздь из-за неверного предположения, как оно там внутри работает (думал, оно просто поле проверяет, а оно в сеть лезет). Сами по себе они придуманы для инспектора объектов и редактирования свойств в нем. Из этого вопрос сразу, как это дружит с идей обращаться к полям рекордам через свойство? Оно просто не для этого придумано.[quot автор]

Откуда инфа?
12 дек 18, 13:40    [21761490]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1230
Квейд
Фэйтл Эра
А я бы вообще with запретил. Никакой пользы, кроме вреда.

запретить нельзя, оставить

На самом деле, это можно вынести в настройки компилятора, запрет на использование. И уже внутри команды решать, будете использовать или нет. Те кто против использования, просто будут выставлять настройку на запрет. Дабы когда над проектами работает человек 10, не ревьювить всех до такого уровня. Или наоборот, по умолчанию запрещено, а для совместимости со старым будут разрешать.

Кстати можно подать в QC как New Feature
12 дек 18, 13:43    [21761496]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
rgreat
Member

Откуда:
Сообщений: 4619
X-Cite
rgreat
Поддержите, если не в лом:

Add write access to record fields through property.

Please add some compiler magic to do the trick with record.

С этим есть некоторые нюансы..
В случае сеттера надо либо продолжать запрещать, либо перед сеттером втихую вызывать геттер.
12 дек 18, 13:49    [21761509]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Beltar
Member

Откуда:
Сообщений: 163
автор
Откуда инфа?


Сошлюсь на Сергея Свердлова и его книгу "Языки программирования и методы трансляции".

Кроме того, сама реализация property выглядит предельно бестолково именно с точки зрения их встраивания в код, они либо устанавливают значение поля, либо не устанавливают, выплевывая сообщение об ошибке. Это хорошо для редактирования в disign time, но совершенно бессмысленно, если эти методы будут вызваться из произвольного кода, для этого случая реализация должна быть чем-то вроде

function SetSomeValue(const Value:TSomeType):Integer;

Т. е. нормальный код ошибки, который потом можно проверить.
12 дек 18, 14:05    [21761538]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Василий 2
Member

Откуда:
Сообщений: 339
alekcvp
Речь о том, когда у тебя УЖЕ есть property Foo: Integer read FFoo write FFoo; и ты в своём коде везде обращаешься к нему как к FFoo. А потом, лет через 5, идея получила развитие и стало property Foo: Integer read FFoo write SetFoo; причём SetFoo() делает кучу важных дел. Представляешь, сколько с этого можно будет геморроя поиметь - исправляя все обращения к FFoo и если пропустить несколько штук?

Всё, догнал. Речь о внутриклассовом обращении. В какой-то мере резон есть, однако в чем проблема заменить обращение к полю на свойство в рамках одного юнита? Ctrl-A, Ctrl-Alt-J и рефакторь что хочешь. Нюансы возможны конечно, но сильных трудностей не вижу. Свойства опасны тем, что могут скрывать в себе что угодно. Например, какие-нибудь настройки, берущиеся из БД, могут на каждое обращение к каждой опции дергать БД. Что тогда будет с внешне обычным кодом типа while i < Settings.Repeats do - объяснять не нужно.

X-Cite
На самом деле, это можно вынести в настройки компилятора, запрет на использование. И уже внутри команды решать, будете использовать или нет. Те кто против использования, просто будут выставлять настройку на запрет. Дабы когда над проектами работает человек 10, не ревьювить всех до такого уровня. Или наоборот, по умолчанию запрещено, а для совместимости со старым будут разрешать.

Угу, а если сторонние либы используются? Такие вещи должны проверяться чекером стиля перед коммитом.
12 дек 18, 14:27    [21761586]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 401
Василий 2
Угу, а если сторонние либы используются?

Вспомнилась GPL... "единожды заляпавшись, уже не отмыться"...
:)
12 дек 18, 14:36    [21761608]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3007
Beltar,

автор
Т. е. нормальный код ошибки, который потом можно проверить.


нормальный код ошибки - это тип исключения. который можно вполне проверить и обработать.
12 дек 18, 15:27    [21761707]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3007
Василий 2,
автор
Угу, а если сторонние либы используются? Такие вещи должны проверяться чекером стиля перед коммитом.

в своих сырцах - как хочешь, а за чужие пусть у других голова болит.
12 дек 18, 15:28    [21761710]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 373
Beltar
автор
Откуда инфа?


Сошлюсь на Сергея Свердлова и его книгу "Языки программирования и методы трансляции".

Кроме того, сама реализация property выглядит предельно бестолково именно с точки зрения их встраивания в код, они либо устанавливают значение поля, либо не устанавливают, выплевывая сообщение об ошибке. Это хорошо для редактирования в disign time, но совершенно бессмысленно, если эти методы будут вызваться из произвольного кода, для этого случая реализация должна быть чем-то вроде

function SetSomeValue(const Value:TSomeType):Integer;

Т. е. нормальный код ошибки, который потом можно проверить.
ты абсолютно не понимаешь смысла property.
Простой пример - property класса, поддерживающий многопотоковость
12 дек 18, 15:37    [21761729]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Beltar
Member

Откуда:
Сообщений: 163
автор
нормальный код ошибки - это тип исключения. который можно вполне проверить и обработать.


Проверить и обработать исключение - это означает сравнить его с неким ожидаемым. => Несколько важных моментов.
1) Если ты ожидаешь, что может возникнуть определенная ситуация, то значит, либо заранее проверяешь на ее возникновение и соответственно как-то реагируешь, например, выходишь с кодом ошибки. Либо проверяешь на этот результат после вычисления, например, ожидаешь, что у тебя может вылететь исключение "List Index out of bounds". Т. е. тип исключения становится равнозначным коду ошибки, и во многих ситуациях это просто бессмысленно.
2) Исключения полезны именно тогда, когда ты не знаешь, что может произойти. Например, ты не контролируешь работу внешних сетевых ресурсов и при обращении к ним может произойти 100500 разных ошибок, которые могут произойти, и в которых ты можешь даже не разбираться, соответственно появляется смысл обрабатывать любую ошибку одинаково.

автор
ты абсолютно не понимаешь смысла property.
Простой пример - property класса, поддерживающий многопотоковость


property - это механизм связывания с неким полем двух функций: чтения и записи. Не более того. Я уже показал, необходимо это именно чтобы в дизайн-тайм свойства редактировать.

Причем тут многопотоковость?
12 дек 18, 16:11    [21761784]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
zinpub
Member

Откуда:
Сообщений: 305
Ну естественно, это просто удобства ради...

А чем они плохи то?

(книжечку почитаю, пока не успел)
12 дек 18, 16:15    [21761792]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Vlad F
Member

Откуда:
Сообщений: 468
rgreat
Поддержите, если не в лом:

Add write access to record fields through property.

https://quality.embarcadero.com/browse/RSP-22953

type
  TMyClass = class
    x : integer;
  end;

  TMyRec = record
    x : integer;
  end;

  TMyClass2 = class
  private
    FMyClass: TMyClass;
    FMyRec: TMyRec;
  published
    property MyClass: TMyClass read FMyClass write FMyClass;
    property MyRec: TMyRec read FMyRec write FMyRec;
  end;

begin
  var c:=TMyClass2.Create;
  c.MyClass.x:=1;  // works
  c.MyRec.x:=1;    // [dcc32 Error] E2064 Left side cannot be assigned to
end.

Please add some compiler magic to do the trick with record.

Проблемы, имхо, в том, что TMyClass это (замаскированный) указатель на объект,
а TMyRec это статический экземпляр. Попробуй в TMyClass2 дополнительно объявить
Указатель на TMyRec, в конструкторе TMyClass2 установить ссылку одного на другое и через
Автоматически разыменовываемый указатель подбираться к полям целевой записи.
По моему, оверхида будет совсем не много, хотя и через жопу, конечно.))
12 дек 18, 16:30    [21761813]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 373
Beltar
автор
ты абсолютно не понимаешь смысла property.
Простой пример - property класса, поддерживающий многопотоковость


property - это механизм связывания с неким полем двух функций: чтения и записи. Не более того. Я уже показал, необходимо это именно чтобы в дизайн-тайм свойства редактировать.

Причем тут многопотоковость?
ты вообще понимаешь разницу между strict private / private / strict protected / protected / public / published и соответствующим определением свойств???? судя по всему, нет

соответственно твой вопрос про многопотокость даже не удивил.
простой пример - например есть класс, у которого есть свойство. Экземпляр данного класса доступен из разных потоков, и данные потоки изменяют данное свойство. Каким образом обеспечить потокобезопасную работу со свойством класса?
12 дек 18, 16:55    [21761840]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 401
asutp2
ты вообще понимаешь разницу между strict private / private / strict protected / protected / public / published и соответствующим определением свойств???? судя по всему, нет

соответственно твой вопрос про многопотокость даже не удивил.
простой пример - например есть класс, у которого есть свойство. Экземпляр данного класса доступен из разных потоков, и данные потоки изменяют данное свойство. Каким образом обеспечить потокобезопасную работу со свойством класса?

Конечно же, потокобезопасность можно обеспечить понимаем разницы между прайвет и стрэйкт прайвет.
12 дек 18, 17:11    [21761869]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
rgreat
Member

Откуда:
Сообщений: 4619
Vlad F
Проблемы, имхо, в том, что TMyClass это (замаскированный) указатель на объект,
а TMyRec это статический экземпляр.
Так точно!

Попробуй в TMyClass2 дополнительно объявить
Указатель на TMyRec, в конструкторе TMyClass2 установить ссылку одного на другое и через
Автоматически разыменовываемый указатель подбираться к полям целевой записи.
По моему, оверхида будет совсем не много, хотя и через жопу, конечно.))
Оригинально, конечно, но...

Картинка с другого сайта.

12 дек 18, 17:24    [21761896]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Vlad F
Member

Откуда:
Сообщений: 468
rgreat,

На вас вот прям не угодишь!
Ладно, тогда дарю еще одну идею (что на самом деле надо было просить), следи за руками:

property MyRec: ^TMyRec read @FMyRec write @FMyRec;
И тогда, как понимаю, все остальное решилось бы естественным путем.))
12 дек 18, 18:05    [21761956]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 373
Фэйтл Эра
asutp2
ты вообще понимаешь разницу между strict private / private / strict protected / protected / public / published и соответствующим определением свойств???? судя по всему, нет

соответственно твой вопрос про многопотокость даже не удивил.
простой пример - например есть класс, у которого есть свойство. Экземпляр данного класса доступен из разных потоков, и данные потоки изменяют данное свойство. Каким образом обеспечить потокобезопасную работу со свойством класса?

Конечно же, потокобезопасность можно обеспечить понимаем разницы между прайвет и стрэйкт прайвет.
в контексте человека, утверждающего, что нужны только published property, а все остальные типы свойств излишни - да)))
12 дек 18, 19:23    [21762030]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
defecator
Member

Откуда:
Сообщений: 39029
delphinotes
Сегодня, размышляя про инлайн-переменные, вдруг подумалось, было бы не плохо вот так писать:
for var i := 0 to Screen.FormsCount - 1 do
  with var F := Screen.Forms[i] do
    F.Close;



ну т.е. как некое приспособление к with оно было бы чдненьким..


а вот with надо вообще запретить, раз уж гадят в язык
12 дек 18, 19:37    [21762052]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59568
delphinotes > было бы не плохо вот так писать:

По-моему убого. Не говоря уже о том, что нецелевое
использование with и ограничение неявного объявления
оператором with (или без ограничения, а до кучи?).

Posted via ActualForum NNTP Server 1.5

12 дек 18, 19:40    [21762057]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
defecator
Member

Откуда:
Сообщений: 39029
Beltar

автор
Вирт к С отношения не имеет.


А как же анекдот?
Приезжает Вирт с лекцией в Испанию, обращается к аудитории: "Нравится ли вам Паскаль?"
А испанцы в ответ: "Си! Си!"

Вирт в маразм с Модулой впал, но ему, в отличие от Borland по роду деятельности было наплевать на вопросы поддержания кода N-летней давности, он, походу, даже в 90-ые жил представлениями 70-ых, когда делали компьютер, и все ПО под него с нуля.


Ты бы сначала посмотрел, что такое Модула, я уж не говорю про Оберон.
Из которого потом натырили вагон идей, когда делали СиШарп
12 дек 18, 19:41    [21762063]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 401
defecator
Beltar
пропущено...


А как же анекдот?
Приезжает Вирт с лекцией в Испанию, обращается к аудитории: "Нравится ли вам Паскаль?"
А испанцы в ответ: "Си! Си!"

Вирт в маразм с Модулой впал, но ему, в отличие от Borland по роду деятельности было наплевать на вопросы поддержания кода N-летней давности, он, походу, даже в 90-ые жил представлениями 70-ых, когда делали компьютер, и все ПО под него с нуля.


Ты бы сначала посмотрел, что такое Модула, я уж не говорю про Оберон.
Из которого потом натырили вагон идей, когда делали СиШарп

В итоге, где "идей" больше - в С# или в Обероне?
12 дек 18, 20:14    [21762102]     Ответить | Цитировать Сообщить модератору
 Re: RAD Studio 10.3 Rio  [new]
defecator
Member

Откуда:
Сообщений: 39029
Фэйтл Эра
defecator
пропущено...


Ты бы сначала посмотрел, что такое Модула, я уж не говорю про Оберон.
Из которого потом натырили вагон идей, когда делали СиШарп

В итоге, где "идей" больше - в С# или в Обероне?

Оберон - это платформа, а не только язык программирования
12 дек 18, 20:51    [21762129]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 13 14 15 16 17 [18] 19 20 21 22   вперед  Ctrl
Все форумы / Delphi Ответить