Свойства (properties)

Проектирование и разработка идеального средства программирования.

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

Свойства (properties)

Сообщение runewalsh » 28.05.2010 23:26:55

В идеальном языке стоит довести их до ума.
Например, свойства-массивы, которые почему-то нельзя напрямую связывать с полями-массивами. Равно как и индексированные свойства, которые не умеют обращаться к тем же полям-массивам с использованием индекса. Следующий финт ушами не скомпилируется, хотя в случае, когда сеттер/геттер не нужны, наверняка будет более удобным.
Код: Выделить всё
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;
Аватара пользователя
runewalsh
постоялец
 
Сообщения: 411
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение hinst » 30.05.2010 21:07:18

а по-моему, это лишнее. введение всё новых наворотов приближает паскаль к аццкому си.

Код: Выделить всё
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:
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 782
Зарегистрирован: 12.04.2008 18:32:38

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

Сообщение Timid » 30.05.2010 23:44:26

Ну н..х..ра, спрашивается, вы изобретаете разные велосипеды и грабли, если объектный Паскаль придуман для того, чтобы Вы описывали необходимые форматы данных типами?

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

и подставляйте его в код.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение runewalsh » 01.06.2010 09:22:06

Действительно, можно сделать так:
Код: Выделить всё
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 во время отладки. Конечно, лучше бросать исключение, но вообще-то производительность может быть важнее, если это, например, список индексов рисуемых мешей и обновляется каждый кадр. По-моему, решение из первого поста выглядит симпатичнее.
Аватара пользователя
runewalsh
постоялец
 
Сообщения: 411
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение Timid » 01.06.2010 12:25:05

Если вы работаете с индексами вершин, то вам однозначно нужен статический массив. И никаких объектов.
Используйте record вместо class.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение sabakanwal » 19.12.2014 22:13:16

Привет всем.

Есть ли в природе аналоги программы 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.
sabakanwal
незнакомец
 
Сообщения: 1
Зарегистрирован: 19.12.2014 21:58:44


Вернуться в Компилятор / язык программирования

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

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

Рейтинг@Mail.ru