Войти
ПрограммированиеФорумОбщее

Вопросы по Delphi (15 стр)

Страницы: 112 13 14 15 16 17 Следующая »
#210
16:10, 20 июня 2022

g-cont
> Каким образом происходит автогенерация этого кода? Там есть какие-то жесткие
> правила?
Ну вроде же очевидно, не? Проперти на чтение данных (которое read) должно вернуть эти самые данные. Проперти на установку данных (которое write) должно принять эти самые данные, и ничего не возвращать.

> Ну типа не более одного аргумента?
Может быть и более:

property Data[Index: Integer] : Integer read GetData write SetData;

Может быть вообще сколько угодно:

property Data[Index: Integer; Name: String; Foo: TFoo] : Integer read GetData write SetData;


> В чём вобщем смысл пропертей на вызовы функций? В С++ если уж что-то прячут,
> так прямой доступ к членам класса, а вовсе не функции
Смысл в том, что позволяет тебе работать с классом поддерживая состояние всего объекта согласованным + выглядит снаружи как поле класса. В плюсах на мой взгляд очень не хватает пропертей.

#211
(Правка: 16:24) 16:22, 20 июня 2022

g-cont
> Здесь FCancelling булева переменная, всё просто и прозрачно. Но вот более
> сложный случай:
часто можно встретить прямое чтение, и запись через метод:

protected
  FCancelling: Boolean;

property Cancelling: Boolean read FCancelling write SetCancelling;

MrShoor
> Может быть и более:
я бы снабдил примером, на доступ к такому проперти.

property Data[Index: Integer] : Integer 

Синтаскически выглядит как обращение к массиву:

  a.Data[i] := N;

(для крестов это перегрузка опертора [], но в паскале такого оператора нет)

#212
16:25, 20 июня 2022

skalogryz
> Но доступ к нии маскируется под обычные поля
Я смотрю это одна из основных парадигм Delphi. Сделать работу с функциями и членами класса неотличимой друг от друга в определённых случаях.

skalogryz
> В крестах ты вынужден завозить сеттер и геттер методы.
При условии что речь идёт о переменной. А метод я просто перенесу в public - секцию, да и всё.

#213
(Правка: 16:43) 16:35, 20 июня 2022

g-cont
> Я смотрю это одна из основных парадигм Delphi. Сделать работу с функциями и
> членами класса неотличимой друг от друга в определённых случаях.
в Паскале не любят писать много - не кресты.
Да и задача рефакторинга упрощается.

g-cont
> При условии что речь идёт о переменной. А метод я просто перенесу в public - секцию, да и всё.
и доступ к данным (в интерфейсе класса) у тебя обрастает двумя точками setNNN getNNN,
тогда как в паскале остаётся только одна NNN, при том, что сохраняется ООП-шная инкапсуляция. Ведь поле не находится в прямом доступе

#214
16:37, 20 июня 2022

ronniko
Нет, Блез Паскаль из 17го века, изобретатель закона Паскаля, треугольника Паскаля, машины сумматора и пр

#215
(Правка: 16:44) 16:41, 20 июня 2022

Aslan
> Нет, Блез Паскаль из 17го века, изобретатель закона Паскаля, треугольника
> Паскаля, машины сумматора и пр
язык был назван Паскалем, чтобы обеспечивать дополнительное давление на мозг!

+ а ещё есть Педро Паскаль!
+ и ещё Паскаль, названный в честь Паскаля
#216
(Правка: 17:28) 17:07, 20 июня 2022

g-cont
> В чём вобщем смысл пропертей на вызовы функций?

При редактировании формы в редакторе форм нужно как-то редактировать компоненты.
Напрашивается делать это в виде списка свойств, часто виртуальных (виртуальных как реальность, не как метод), хранящихся при работе в памяти в другом виде, не так как в исходнике формы.
Кроме того, при изменении свойств нужно перерисовывать компоненты.

Вобщем без свойств редактор форм не сделать, вопрос лишь в какой мере поддерживать их языком. А дальше они расползлись по всему рантайму.

#217
18:44, 20 июня 2022

CD
Примерно понял. В моей парадигме это будет лишняя сущность. Бакэнд у VM просто будет сам загружать dfm-подобные файлы со своего уровня абстракции безо всяких проблем, в отличии от Delphi. Я просто уберу префикс F у всех переменных и буду их находить и заполнять по имени.

Очередной вопрос. Что это такое:

TShortCut = Low(Word)..High(Word);

На структуру очевидно не похоже, на юнион тоже. Диапазоны значений вроде как не содержат слов Low\High.

#218
(Правка: 18:57) 18:53, 20 июня 2022

g-cont
> Что это такое:

Low/High это встроенные функции над Ordinal Types, возвращающеие минимальное и максимальное значение. Так же Low/High работает над массивами, возвращает минимальный/максимальный индекс

https://gamedev.ru/code/forum/?id=268952&page=5&m=5552234#m61
Можно прочитать раздел Ordinal Types и Subrange Types на их странице про типы
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Simple_Types_(Delphi)

#219
18:55, 20 июня 2022

g-cont
.. в объявлении типа - целый тип с заданным диапазоном. Например 1..10 - тип который может принимать значения от 1 до 10.
Low и High - возвращают соответственно нижнюю и высшую границу типа (работают для целых и для энумов).

Так что в данном случае получился просто хитрый аналог TShortCut = Word.

#220
19:03, 20 июня 2022

kipar
Да, я уже допетрил :)

Благодаря CD понял концепцию property, прикинул что это весьма удобная штука для VM.
Как раз в плане общения с бакэндом. Потому что часть членов класса может быть указателем, property позволяет вызвать функцию, внутри которой будет создан нужный объект например, или выполнить любое другое действие. До его разъяснения, я их воспринимал как какой-то аналог get\set методов, но это более интересная штука. Наверное добавлю их в свой язык тоже, пригодятся.
Потом покажу синтаксис, может что посоветуете.

#221
19:38, 20 июня 2022

skalogryz
> + а ещё есть Педро Паскаль!
Это ваши молодежные темы
> + и ещё Паскаль, названный в честь Паскаля
Ну хоть не честь Педро Паскаля

#222
(Правка: 22:02) 22:00, 20 июня 2022

g-cont
> Потом покажу синтаксис, может что посоветуете.
Сразу могу посоветовать крайне удобную штуку в делфях, аналогов которой нет в других языках. Смотри как могу:

TSomeEnum = (stateOne, stateTwo, stateThree);

Это пока обычный энам, а вот это уже массив с индексами по энаму:

var MyArray: array [TSomeEnum] of Integer;

А вот цикл по всем элементам массива с индексом по энаму:

var i : TSomeEnum;
begin
    for i := Low(TSomeEnum) to High(TSomeEnum) do
        WriteLn(MyArray[i]);
end;

Основная фича тут в том, что расширяя энам у тебя автоматически расширяется массив и автоматически меняется количество итераций цикла.
А вот еще киллерфича:

const cMyConstArray: array [TSomeEnum] of Integer = (1,2,3);

Константный массив по энаму. И если ты расширил энам добавив еще одно значение, но при этом не изменил константу, то на этапе компиляции тебе скажут: "ошибка: милок, тут не хватает данных".

В общем на практике безумно удобная штука, и я решительно не понимаю почему в плюсах до сих пор нельзя объвлять массивы с индексацией по энаму, и надо каждый раз дрочиться с кастом к инту, самому следить за размером массивов, за итерациями в цикле и прочее.

#223
(Правка: 22:05) 22:04, 20 июня 2022

удобную штуку в делфях, аналогов которой нет в других языках.
А вот еще киллерфича:
const cMyConstArray: array [TSomeEnum] of Integer = (1,2,3);

fasm такое могет.

#224
(Правка: 22:08) 22:07, 20 июня 2022

MrShoor
> я решительно не понимаю почему в плюсах до сих пор нельзя объвлять массивы с индексацией по энаму,
Потому что индексы енама могут идти не с 0 и не подряд

Страницы: 112 13 14 15 16 17 Следующая »
ПрограммированиеФорумОбщее