Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

Встречаем Record Helper   Найти похожие ветки 

 
oxffff ©   (2007-03-11 13:30) [0]

Согласно
http://forum.ixbt.com/topic.cgi?id=26:33495-8
и
http://forum.sources.ru/index.php?showtopic=143384

Можно объявлять и Record Helper.

Помощь молчит по этому поводу.


 
oxffff ©   (2007-03-11 13:31) [1]

Вот пример.
(C) Взято из http://forum.ixbt.com/topic.cgi?id=26:33495-8

TRectHelper = Record Helper For TRect

  Function GetWidth : Integer; Inline;
  Function Getheight : Integer; Inline;

  Property Width : Integer Read GetWidth;
  Property Height : Integer Read GetHeight;

 End;


 
Kerk ©   (2007-03-11 13:55) [2]

Ну и бредятина


 
oxffff ©   (2007-03-11 14:05) [3]


> Kerk ©   (11.03.07 13:55) [2]
> Ну и бредятина


?
Поясни


 
Kerk ©   (2007-03-11 14:09) [4]

> [3] oxffff ©   (11.03.07 14:05)

Нафига такие извраты? Тогда б уж object не убирали


 
oxffff ©   (2007-03-11 14:19) [5]


> Kerk ©   (11.03.07 14:09) [4]
> > [3] oxffff ©   (11.03.07 14:05)
>
> Нафига такие извраты? Тогда б уж object не убирали


Кстати и все таки  есть  плюс. Как я не противился в других ветках.
Что касаемо реализации.

Object мог запутать.
Поскольку к нему можно было применить Typeof для получения VTB.

А виртульные методы в record не объявишь.

Это удобная настройка над TRect. Тот же scope.

Вместо того чтобы

function Width(Rect:Trect):integer;

пишешь rect.Width, что  в принципе удобно.
Поскольку тот же scope и псевдо-методы классифицируются.
Хотя дело вкуса.


 
Аноним   (2007-03-11 18:00) [6]


> Kerk ©  


Ты не прав. Штука действительно классная. Другое дело, что компилятор таки глючит на многих новых расширениях синтаксиса, в том числе и на рекорд-хелперах.


 
Суслик ©   (2007-03-11 18:31) [7]

я бросил несколько репортов 2 дня назад о том, что это недокументировано.


> Ты не прав. Штука действительно классная. Другое дело, что
> компилятор таки глючит на многих новых расширениях синтаксиса,
> в том числе и на рекорд-хелперах.

а чтобы компилтор не глючил нужно репорты писать.

-------
кстати в новой версии очень неплохо пофиксили ошибки, связанные с advanced records. Самая мерзкая - что нельзя было вызывать метод у записи, которая возвращена в результате функции:

getRecord().SomeMethod().

очень часто (не всегда) это приводит к internal error с1624.


 
jack128 ©   (2007-03-11 20:34) [8]

oxffff ©   (11.03.07 13:30)
Можно объявлять и Record Helper.

И можно было объявлять с момента выхода D2006


 
Игорь Шевченко ©   (2007-03-11 20:41) [9]

А нафига ?

Мне кто-нибудь может объяснить, в чем полезность этой фичи ?


 
просто так   (2007-03-11 21:07) [10]

моск отцов из борланд плодит "гениальные" идеи


 
oxffff ©   (2007-03-11 21:28) [11]


> jack128 ©   (11.03.07 20:34) [8]
> oxffff ©   (11.03.07 13:30)
> Можно объявлять и Record Helper.
> И можно было объявлять с момента выхода D2006


Но help про них умалчивает.


 
Petr V.Abramov   (2007-03-11 23:55) [12]

> oxffff ©   (11.03.07 21:28) [11]
если хелп умалчивает, это может значить одно из:
1. нельзя
2. потом не жалуйся


 
Юрий Зотов ©   (2007-03-12 00:01) [13]

> Игорь Шевченко ©   (11.03.07 20:41) [9]

> в чем полезность этой фичи ?

ИМХО, в том же, в чем и хелперов классов. Положим, я юзаю некую библиотеку, в которой используется некий Record. Но мне по каким-то причинам требуется расширить его функциональность. Пишу хелпер.


 
oxffff ©   (2007-03-12 00:03) [14]


> ИМХО, в том же, в чем и хелперов классов. Положим, я юзаю
> некую библиотеку, в которой используется некий Record. Но
> мне по каким-то причинам требуется расширить его функциональность.
>  Пишу хелпер.


Прошу вас в соседнию ветку
Вот завел себе блог (Суслик  12.03.07 00:02)


 
Игорь Шевченко ©   (2007-03-12 00:06) [15]

Юрий Зотов ©   (12.03.07 00:01) [13]

процедуру напиши


 
oxffff ©   (2007-03-12 00:07) [16]


> Игорь Шевченко ©   (12.03.07 00:06) [15]
> Юрий Зотов ©   (12.03.07 00:01) [13]
>
> процедуру напиши


Нет helper
:)


 
Юрий Зотов ©   (2007-03-12 00:09) [17]

> Игорь Шевченко ©   (12.03.07 00:06) [15]

Тогда и ООП на фиг не нужно. Любую программу можно написать и на процедурном подходе - но иногда ООП позволяет сделать это проще и удобнее. То же и здесь.


 
Юрий Зотов ©   (2007-03-12 00:12) [18]

> oxffff ©   (12.03.07 00:03) [14]

Я там был. Ну да, возможны баги - ну и что? Одно дело - принципиальная возможность, другое - баг в ее реализации.


 
oxffff ©   (2007-03-12 00:16) [19]


> Юрий Зотов ©   (12.03.07 00:12) [18]
> > oxffff ©   (12.03.07 00:03) [14]
>
> Я там был. Ну да, возможны баги - ну и что? Одно дело -
> принципиальная возможность, другое - баг в ее реализации.
>


В этой ветки уже обсуждают целесообразность применения
class helper


 
Игорь Шевченко ©   (2007-03-12 00:20) [20]

Юрий Зотов ©   (12.03.07 00:09) [17]


> Тогда и ООП на фиг не нужно.


А что ООП - это жупел что ли ? Или серебряная пуля ? Вовсе нет.
Юра, покажи мне пример, когда helper для record"а будет проще и удобнее, чем процедура, работающая с этим рекордом.

Вот честное слово, интересно мне.


 
Юрий Зотов ©   (2007-03-12 00:22) [21]

Вдогонку. Честно говоря, я вообще не вполне понимаю, зачем понадобились рекорды с методами. По сути, это статические объекты - и уж если в них возникла нужда, так не проще было ввести что-то вроде описателя static:

type
 TMyClass = class(...)
 ...
 end;

var
 MyClass: TMyClass; static;

И все. Компилятор просто строит код создания объекта при входе в область видимости переменной MyClass его автоматического убиения при выходе из этой области. Остальное (VMT, RTTI и пр.) - не меняется.


 
oxffff ©   (2007-03-12 00:26) [22]


> Юрий Зотов ©   (12.03.07 00:22) [21]
> Вдогонку. Честно говоря, я вообще не вполне понимаю, зачем
> понадобились рекорды с методами. По сути, это статические
> объекты - и уж если в них возникла нужда, так не проще было
> ввести что-то вроде описателя static:
>
> type
>  TMyClass = class(...)
>  ...
>  end;
>
> var
>  MyClass: TMyClass; static;
>
> И все. Компилятор просто строит код создания объекта при
> входе в область видимости переменной MyClass его автоматического
> убиения при выходе из этой области. Остальное (VMT, RTTI
> и пр.) - не меняется.


Зачем так усложнять. Перегружаешь  NewInstance и FreeInstance.
В куче выделяешь псевдо стек. И свой esp в переменной.


 
Юрий Зотов ©   (2007-03-12 00:28) [23]

> Игорь Шевченко ©   (12.03.07 00:20) [20]

> А что ООП - это жупел что ли ?

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

> пример, когда helper для record"а будет проще и удобнее, чем процедура,
> работающая с этим рекордом.

Инкапсуляция, Игорь. Код лучше структурируется, легче читается и т.д. А пример ты и сам легко напишешь.


 
oxffff ©   (2007-03-12 00:30) [24]

>Вдогонку. Честно говоря, я вообще не вполне понимаю, зачем
> понадобились рекорды с методами. По сути, это статические
> объекты

Естественно ноги растут из .NET struct c методами и интерфейсами. Только понятно, что в самой области памяти занимаемой структурой нет никаких сслылок аля всех тех которые по отрицательному смещению от VTB.
Да и не нужны они, поскольку нет наследования для структур. Поэтому тип известен на этапе компиляции и однозначно можно вызвать метод или получить интерфейс для этого типа.


 
Petr V.Abramov   (2007-03-12 00:31) [25]

> Юрий Зотов ©   (12.03.07 00:28) [23]
Юр, а какова, на твой взгляд, принципиальная разница между объектом и рекордом с мЕтодами? На мой взгляд, фигней люди занимаются.


 
Юрий Зотов ©   (2007-03-12 00:32) [26]

> oxffff ©   (12.03.07 00:26) [22]

Имелось в виду - на уровне языка. Ручками-то, яснь пень, можно сделать что угодно - но уж если разработчикам вдруг захотелось ввести в сам язык статические объекты - так зачем было делать их именно на базе record? Вот это непонятно.


 
Petr V.Abramov   (2007-03-12 00:33) [27]

> oxffff ©   (12.03.07 00:30) [24]
не видел [24], пока писАл :)


 
oxffff ©   (2007-03-12 00:35) [28]

To Юрий Зотов ©  
Зачем record VMT ведь наследования нет.


 
Petr V.Abramov   (2007-03-12 00:38) [29]

> Зачем record VMT ведь наследования нет.
Да люди, которые библиотеку разрабатывали, ушли или в другие места, или в запой. А которые компилятор делают - им до сих пор не надоело :)))


 
Юрий Зотов ©   (2007-03-12 00:41) [30]

> oxffff ©   (12.03.07 00:35) [28]

Не понял. Где я говорил про record VMT?


 
Игорь Шевченко ©   (2007-03-12 00:41) [31]

Юрий Зотов ©   (12.03.07 00:28) [23]

Так я в соседней ветке как раз об удобстве чтения ситуация вида Memo.Lines.DoWork и писал - неудобно, когда вдруг встречаются неожиданные методы.


 
oxffff ©   (2007-03-12 00:46) [32]


> Не понял. Где я говорил про record VMT?


ОК. Я не правильно распознал контекст.

Что касаемо

> MyClass: TMyClass; static;

Тогда появиться конструктор по умолчанию.
Вообщем а у конструктора с параметрами не будет знать, как объекту выделена память.
Придется по мимо регистра dl, и флаг выделения памяти указывать.
Усложнится компилятор.


 
oxffff ©   (2007-03-12 00:48) [33]

Также и с деструктором.
dl и флаг выделения памяти.


 
Юрий Зотов ©   (2007-03-12 00:50) [34]

> Юрий Зотов ©   (12.03.07 00:28) [23]

Понятие "неожиданный" относительно. Дело документированности и привычки. Тебя же не смущает Memo.Lines.SaveToFile? Нет, потому что этот метод документирован, не раз тобой юзался и ты к нему привык. А поюзаешь какой-нибудь хелпер, так и Memo.Lines.DoWork тоже тебя не смутит.

ИМХО, хелперы - штука мощная. Фактически, позволяет сделать нечто вроде множественного наследования. Кому как, а мне далеко не раз не хватало чего-то подобного.


 
oxffff ©   (2007-03-12 00:52) [35]

>Фактически, позволяет сделать нечто вроде множественного наследования

Ancestor list - это опечатка. Только один helper родитель


 
Юрий Зотов ©   (2007-03-12 00:56) [36]

[34] было ответом на [31].

> oxffff ©   (12.03.07 00:46) [32]

Само собой, появится. И компилятор тоже усложнится. Но, ИМХО, он усложнился бы меньше, чем если учить его работать с хитрыми рекордами.

А флаг выделения памяти - зачем? Есть точка входа в область видимости переменной - туда надо вставить код создания. Есть точка выхода из этой области - туда надо вставить код уничтожения. И все, никаких флагов. А обе точки компилятор и так определяет, так что не шибко-то он и усложняется.


 
Petr V.Abramov   (2007-03-12 00:59) [37]

> ИМХО, хелперы - штука мощная. Фактически, позволяет сделать нечто вроде множественного наследования.
а почему бы не сделать множественное наследование, как у врагов?
а вот когда это "вроде" найдет отражение в батонокидательстве, тогда будет ПРИНЦИПИАЛЬНО новое.
А пока - ничего. Вот в MS студии сделали property binding - ниче нового, но это то, что руками делалось. А в d.net - ну чего такого, что принципиально скорость ПРИКЛАДНОЙ разработки повысит?


 
Юрий Зотов ©   (2007-03-12 01:00) [38]

> oxffff ©   (12.03.07 00:52) [35]

Тоже не понял.


 
oxffff ©   (2007-03-12 01:03) [39]


> А флаг выделения памяти - зачем? Есть точка входа в область
> видимости переменной - туда надо вставить код создания.
> Есть точка выхода из этой области - туда надо вставить код
> уничтожения. И все, никаких флагов. А обе точки компилятор
> и так определяет, так что не шибко-то он и усложняется.


MyClass: TMyClass; static;

Конструктор вызывает classCreate, который выделяет память.
Поэтому у конструктора должна быть информация выделять память или нет для NonStatic и для Static объектов.

Только проблемы возникнут позже.
Static "переменной вы ничего не присвоите и ее присваивать придется тоже с осторожностью". Понятно почему?


 
oxffff ©   (2007-03-12 01:07) [40]


> Юрий Зотов ©   (12.03.07 01:00) [38]
> > oxffff ©   (12.03.07 00:52) [35]
>
> Тоже не понял.


type
  identifierName = class helper [(ancestor list)] for classTypeIdentifierName
    memberList
  end;



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.178 c
2-1173314268
Wind
2007-03-08 03:37
2007.04.08
В несколько колонок


15-1173732577
Неюрист
2007-03-12 23:49
2007.04.08
Заполнить бланк лицензии на программный продукт


15-1173086418
Juice
2007-03-05 12:20
2007.04.08
Хелп файлы


15-1173949095
Calibr
2007-03-15 11:58
2007.04.08
Список процессов?


2-1174218327
Nic (ro)
2007-03-18 14:45
2007.04.08
Непонятная ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский