Article View: pl.comp.lang.pascal
Article #93003Re: Generic
From: darekm
Date: Fri, 30 Apr 2010 12:37
Date: Fri, 30 Apr 2010 12:37
63 lines
2960 bytes
2960 bytes
W dniu 2010-04-29 23:38, webmajsterek@poczta.onet.pl pisze:
> we FPC 2.3.1 wprowadzona kilka nowych słow kluczowych
>
> np: Generic ( http://wiki.freepascal.org/Generics ) i specialize .
>
>
> moze ktos to w miare senowny sposob wytłumaczyć jak to cóś działa ???
> albo jakiś przykład z opisem po polsku.
>
>
type
GList = generic class of T
public
procedure Add(const stuff: T);
end;
Tworzysz definicję obiektu GList dla pewnego abstrakcyjnego typu danych
(w powyższym przykładzie T)
T można używać jak jakiś super uniwersalny obiekt, na którym
dopuszczalna jest każda operacja:
T:=T+1;
T.add;
x:=t.Create;
abs(T)
itd.
na tym etapie kompilatora obchodzi tylko (częściowa) poprawność składniowa.
Następnie użycie takiego generycznego obiektu (specjalizacja):
GList<string>
kompilator generuje kod programu na podstawie uprzedniej definicji
podstawiając zamiast T żądany typ (czyli string) a następnie dokonuje
normalnej już normalnej kompilacji.
Innymi słowy jest to forma preprocesora kodu, który bierze tekst
programu, odpowiednie go modyfikuje (dokonuje podstawień) i tak
utworzony kod przekazuje do właściwej kompilacji.
w dużym uproszczeniu można to samo osiągnąć korzystając z makrodefinicji
$Include i $Define
Po co to stosujemy:
1. Gdy takie same algorytmy stosujemy dla różnych typów danych (inna
możliwość to dziedziczenie i interface)
2.Gdy chcemy uniknąć stosowania funkcji wirtualnych (są wolniejsze od
zwykłych)
3. Tzw silne typowanie, choć pascal jest naturalnie silnie typowany
4.Zwiększenie czytelności programu: rozdzielenie uniwersalnej części
algorytmu od wariantów wykorzystujących pewne indywidualne własności
niektórych typów danych (template vs specialize)
Darek
--
Darek
Technical Details
Message-ID:
<4bdacf04$0$2599$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!aotearoa.belnet.be!news.belnet.be!feed.xsnews.nl!border-1.ams.xsnews.nl!feeder.news-service.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<3461.0000204c.4bd9fc39@newsgate.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!aotearoa.belnet.be!news.belnet.be!feed.xsnews.nl!border-1.ams.xsnews.nl!feeder.news-service.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Fri, 30 Apr 2010 14:37:15 +0200 From: darekm <darekm@emadar.com> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 MIME-Version: 1.0 Newsgroups: pl.comp.lang.pascal Subject: Re: Generic References: <3461.0000204c.4bd9fc39@newsgate.onet.pl> In-Reply-To: <3461.0000204c.4bd9fc39@newsgate.onet.pl> Lines: 66 Message-ID: <4bdacf04$0$2599$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 83.3.216.122 X-Trace: 1272631044 unt-rea-a-02.news.neostrada.pl 2599 83.3.216.122:62535 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit