Страница 1 из 1

Свойства (properties)

СообщениеДобавлено: 28.05.2010 23:26:55
runewalsh
В идеальном языке стоит довести их до ума.
Например, свойства-массивы, которые почему-то нельзя напрямую связывать с полями-массивами. Равно как и индексированные свойства, которые не умеют обращаться к тем же полям-массивам с использованием индекса. Следующий финт ушами не скомпилируется, хотя в случае, когда сеттер/геттер не нужны, наверняка будет более удобным.
Код: Выделить всё
type
  cTestClass = class
  private
    _arr : array[ 1 .. 10 ] of integer;
  public
    property SomeArray[ i : integer ] : integer read _arr write _arr; default;
    property Value2 : integer index 2 read _arr write _arr;
  end;

Re: Свойства (properties)

СообщениеДобавлено: 30.05.2010 21:07:18
hinst
а по-моему, это лишнее. введение всё новых наворотов приближает паскаль к аццкому си.

Код: Выделить всё
property SomeArray

тут не ясно, что будет, если обратиться к элементу #100, не ясно, как получить количество элементов, т.к. это нарушит инкапсуляцию

Код: Выделить всё
property Value2

а это просто лишнее. фича index в свойствах также имхо лишняя и загрязняет синтаксис.

в крайнем случае мне представляется возможным, может быть, оправданным, сделать так
Код: Выделить всё
type
  cTestClass = class
  private
    _arr : array[ 1 .. 10 ] of integer;
  public
    property SomeArray: array[ 1 .. 10 ] of integer; read _arr write _arr; default;
  end;

да и то смотрится как-то не очень. :shock:

Re: Свойства (properties)

СообщениеДобавлено: 30.05.2010 23:44:26
Timid
Ну н..х..ра, спрашивается, вы изобретаете разные велосипеды и грабли, если объектный Паскаль придуман для того, чтобы Вы описывали необходимые форматы данных типами?

Напишите:
Код: Выделить всё
type
  TMyFixedIntegerArray=array [1..10] of integer;

и подставляйте его в код.

Re: Свойства (properties)

СообщениеДобавлено: 01.06.2010 09:22:06
runewalsh
Действительно, можно сделать так:
Код: Выделить всё
type

  tArrayOfIntegers = array of integer;

  cListOfIntegers = class
  private
    _count : integer;
    _list : tArrayOfIntegers;
    procedure _SetCount( newCount : integer );
  public
    property List : tArrayOfIntegers read _list write _list;
    property Count : integer read _count write _SetCount;
  end;

Не всегда удобно, что List не считается свойством-массивом, то есть не может быть default, но это не страшно. Суть в другом: если для List вдруг понадобятся сеттер или геттер, они будут чем-то аццким.
hinst писал(а):тут не ясно, что будет, если обратиться к элементу #100

Стандартный Range check error во время отладки. Конечно, лучше бросать исключение, но вообще-то производительность может быть важнее, если это, например, список индексов рисуемых мешей и обновляется каждый кадр. По-моему, решение из первого поста выглядит симпатичнее.

Re: Свойства (properties)

СообщениеДобавлено: 01.06.2010 12:25:05
Timid
Если вы работаете с индексами вершин, то вам однозначно нужен статический массив. И никаких объектов.
Используйте record вместо class.

Re: Свойства (properties)

СообщениеДобавлено: 19.12.2014 22:13:16
sabakanwal
Привет всем.

Есть ли в природе аналоги программы Dcu2Pas (для Delphi), но только для FreePascal?

_________________________________________
Unlock the key of your success by 650-987 - certkiller
study material, you can easily pass 640-692 - braindumps - exam and Keiser University exam.