Skocz do zawartości

[Delphi] Możliwości języka


HNB

Polecane posty

a tak - napisałem krótki art o Delphi i skrótowo o nowych możliwościach składni od czasów Delphi 6. Wszystkich co się znają na Delphi proszę o przeczytanie i sugestie (ewentualne wytknięcie braków) :)

 

http://delphi.dathox.com/2009/07/delphi-no...-jezyka-na.html

 

Dzięki!

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Dodałbym podawanie wersji w której to doszło i najlepiej wypisać wszystko od tego co było najwcześniej do 2009. Rozpisać coś o "-Nieinstancyjne property dla klas" i "-Używanie klas jako procedur / funkcji związane z metodami anonimowymi " bo nawet jeśli wiem co to jest to nie znam pod tą nazwą, oraz "singletony" "-Poszerzone informacje czasu wykonania dla metod klas w zastępstwie sekcji klasy "automated" "

Można dodać "strict private" i "strict protected" oraz "class of"

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

"Class of" to meta-klasy, a meta-klasy były już o ile kojarzę fakty w Delphi 6 (mogę się mylić). Co do robienia z obiektów procedur/funkcji to najlepiej przedstawi to kod:

 

TFunc<T> = reference to function: T;iś(ui'TFunc<T> = interface
 function Invoke: T;
end;hjWŁŚ:n'(r^bpuD&ŚV7DćFĆRfCC6Ć72fwC6Ć72DFW&f6VD&ŚV7BDgVć2fCBfwC

 

Dalsze wnioski są chyba oczywiste ;).

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Nie wydaje mi się aby "calas of" było taki stare. Można też dodać class helper for oraz to, że można w trybie debugowanie badać jakie są wycieki pamięci. Także debuger dostał kilka nowych rzeczy, np. rozbudowano możliwości breakpointa. A twój kod jest dziwny :D podałbyś jakąś metodą co to używa z opisem jaki efekt będzie na ekranie :D

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Tryb Debugowania to nie jest język, a o klasach i rekordach pomocniczych jest wspomniane ;). Co do meta-klas to na pewną istnieją co najmniej od Delphi 6, wcześniej to nie wiem - ale wygląda to na wynalazek dość stary.

 

Szersze omówienie rzeczy o które pytasz wymaga raczej mniejszych i większych artykułów...

 

Może Toster dorzuci coś od siebie, bo wydaje mi się że coś jeszcze pominąłem?

 

PS. Dzięki za strict, bo kompletnie mi wyleciało z głowy, credits dla Ciebie na końcu wpisu ;)

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Ok to jak chcesz konstruktywnej krytyki to here I go:

 

1. Poszerzone informacje czasu wykonania dla metod klas w zastępstwie sekcji klasy "automated"

?? Niestety nie rozumiem tego zdania

 

2. Łatwe tworzenie tablic dynamicznych

szczerze mowiac w D7 tez to bylo latwe, SetLength. Nie bardzo rozumiem tego stwierdzenia

 

3. Procedury / funkcje inline

Metody rowniez

 

4. Statyczne metody

Hmm.. o ile mnie pamiec nie myli to wszystkie metody w delphi sa bazowo traktowane jako statyczne, chyba ze zaczynasz siegac do pol obiektu.

 

5. Nieinstancyjne "class property" dla klas

Masło maślane. Skoro jest nieinstancyjne to jak dla mnie jest oczywiste ze jest to na rzecz klasy.

 

6. Zmienne klasowe

Czy raczej zmienne statyczne ? Wydaje mi sie ze to nowoslownictwo wynikajace z bezposredniego tlumaczenia z "Class variables" co nie zmienia faktu ze chyba chodzi o zmienne statyczne.

 

7. -Metody w rekordach

-Konstruktory rekordów

-Rekordy mogą przyjmować część cech klas

Znowu masło maślane. Skoro do rekordow dodano metody i konstruktory to oczywiste jest ze przyjmuja one (rekordy) cechy klas. Czyli albo te 2 punkty albo ten ostatni z rozszerzeniem w nawiasach.

 

8. Pomocnicze regiony w kodzie jak w C#

Wydaje mi sie ze nie jest to czesc jezyka tylko cecha IDE, tym bardziej ze wstawia sie w komentarzu. Tak samo dyrektywy kompilatora nie sa cecha jezyka.

 

9. Słowa kluczowe precyzujące kontekst użycia klas (abstract i sealed)

zarowno abstract jak i sealed nie definiuje kontekstu uzycia klas. Metody Sealed i normalne wywoluje sie dokladnie tak samo, nie ma ograniczen.

 

10. Exit jak return w C

nic nie niesie ta informacja, zbyt ogolnikowa.

 

11. Singletony

Sugeruje to ze we wczesniejszych wersjach nie dalo sie stworzyc singletona co nie do konca jest prawda.

 

Tyla odemnie :)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Ok to jak chcesz konstruktywnej krytyki to here I go:

@1. Poszerzone informacje czasu wykonania dla metod klas w zastępstwie sekcji klasy "automated"

@?? Niestety nie rozumiem tego zdania

 

Chodzi o informację "ile" i "jakiego typu" parametry ma metoda +/- zwracany typ w przypadku "metodo-funkcji".

 

@2. Łatwe tworzenie tablic dynamicznych

@szczerze mowiac w D7 tez to bylo latwe, SetLength. Nie bardzo rozumiem tego stwierdzenia

 

Teraz można prościej. weźmy np. typ TStringDynArray z Types:

 

type 
 TStringDynArray       = array of string;
var 
 s:  TStringDynArray;
begin
 s := TStringDynArray.Create('a', 'HNB i już go lubisz :D', 'Toster się czepia');
end;

 

 

@3. Procedury / funkcje inline

@Metody rowniez

 

Patrz punkt 2 czyli WriteLn(s[2]); ;)

 

@4. Statyczne metody

@Hmm.. o ile mnie pamieć nie myli to wszystkie metody w delphi sa bazowo traktowane jako statyczne, chyba ze zaczynasz siegac do pol obiektu.

 

Dotychczas w przypadku metod statycznych tworzonych za pomocą class do metody (i nazwałbym ją klasową) i tak jest przekazywany ukryty parametr w postaci meta-klasy. Dopiero zastosowanie dyrektywy static tworzy nam czystą metodę statyczną.

 

@5. Nieinstancyjne "class property" dla klas

@Masło maślane. Skoro jest nieinstancyjne to jak dla mnie jest oczywiste ze jest to na rzecz klasy.

 

Patrz punkt 2 czyli WriteLn(s[2]); ;)

 

@6. Zmienne klasowe

@Czy raczej zmienne statyczne ? Wydaje mi sie ze to nowoslownictwo wynikajace z bezposredniego tlumaczenia z "Class variables" co nie zmienia faktu ze @chyba chodzi o zmienne statyczne.

 

Mój błąd.

 

@7. -Metody w rekordach

@-Konstruktory rekordów

@-Rekordy mogą przyjmować część cech klas

@Znowu masło maślane. Skoro do rekordow dodano metody i konstruktory to oczywiste jest ze przyjmuja one (rekordy) cechy klas. Czyli albo te 2 punkty @albo ten ostatni z rozszerzeniem w nawiasach.

 

True

 

@8. Pomocnicze regiony w kodzie jak w C#

@Wydaje mi sie ze nie jest to czesc jezyka tylko cecha IDE, tym bardziej ze wstawia sie w komentarzu. Tak samo dyrektywy kompilatora nie sa cecha jezyka.

 

Ale często dyrektywy dominują cechy języka. Masz rację ale jako że to bardzo przydatna cecha i na pograniczu postanowiłem o tym napisać.

 

@9. Słowa kluczowe precyzujące kontekst użycia klas (abstract i sealed)

@zarowno abstract jak i sealed nie definiuje kontekstu uzycia klas. Metody Sealed i normalne wywoluje sie dokladnie tak samo, nie ma ograniczen.

 

Z klasy sealed nie można dziedziczyć a z klasy abstrakcyjnej nie można stworzyć żadnej instancji obiektu, co niejako precyzuje kontekst użycia klasy (klasa tylko do dziedziczenia czy też zakaz dziedziczenia - doprecyzowanie o co chodzi autorowi).

 

@10. Exit jak return w C

@nic nie niesie ta informacja, zbyt ogolnikowa.

 

Exit działające opcjonalnie jak return w C

Patrz punkt 2 czyli WriteLn(s[2]); ;)

 

@11. Singletony

@Sugeruje to ze we wczesniejszych wersjach nie dalo sie stworzyc singletona co nie do konca jest prawda.

 

Wsparcie ze strony języka, a możliwość obchodzenia pewnych braków to moim zdaniem istotna różnica.

 

@Tyla odemnie :)

 

Dzięki B)

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Ciągle nie ma class helpers for (chyba, że tylko dla NET jest) i bym napisał na Twoim miejscu przykładowy kod w Delphi i np. c++ aby Ci co w c++ piszą mieli wyobrażenie o co kaman.

I nie wiem jak to było kiedyś ale teraz można np. nadpisać w klasie metodę NewInstance, bo jest statyczna, jest słowo "class", nie wiem czy wcześniej się dało. I podobno teraz TObject ma metoę "Equals" HashCode" i "ToString" jak w javie i można je sobie nadpisac

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

@2. Łatwe tworzenie tablic dynamicznych

@szczerze mowiac w D7 tez to bylo latwe, SetLength. Nie bardzo rozumiem tego stwierdzenia

 

Teraz można prościej. weźmy np. typ TStringDynArray z Types:

s := TStringDynArray.Create('a', 'HNB i już go lubisz biggrin.gif', 'Toster się czepia');

Nie widze w tym nic prostrzego, to zupelnia inna konstrukcja. Co wiecej to co pokazujesz to de facto tworzenie + inicjowanie, a nie samo tworzenie.

 

@Metody rowniez

Patrz punkt 2 czyli WriteLn(s[2]); wink.gif

nie kumam odpowiedzi, czyzbys nie rozroznial metod, funkcji i procedur :>

 

Dotychczas w przypadku metod statycznych tworzonych za pomocą class do metody (i nazwałbym ją klasową) i tak jest przekazywany ukryty parametr w postaci meta-klasy. Dopiero zastosowanie dyrektywy static tworzy nam czystą metodę statyczną.

EEee ? a co to jest metoda czysta statyczna ? Wydaje mi sie ze znowu mylisz metode i procedure. Albo czegos nie rozumiem/nie wiem.

 

Wsparcie ze strony języka, a możliwość obchodzenia pewnych braków to moim zdaniem istotna różnica.

 

Jezyk nie ma nic do rzeczy, kazdy jezyk obiektowy majacy metody statyczne pozwala na zastosowanie wzorca singleton.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

CYTAT(Force @ sob, 04 lip 2009 - 18:43)

Ciągle nie ma class helpers for (chyba, że tylko dla NET jest) i bym napisał na Twoim miejscu przykładowy kod w Delphi i np. c++ aby Ci co w c++ piszą mieli wyobrażenie o co kaman.

I nie wiem jak to było kiedyś ale teraz można np. nadpisać w klasie metodę NewInstance, bo jest statyczna, jest słowo "class", nie wiem czy wcześniej się dało. I podobno teraz TObject ma metoę "Equals" HashCode" i "ToString" jak w javie i można je sobie nadpisac

 

Dobry pomysł :).!

 

Nie widze w tym nic prostrzego, to zupelnia inna konstrukcja. Co wiecej to co pokazujesz to de facto tworzenie + inicjowanie, a nie samo tworzenie.

Ewidentnie się czepiasz :blink: . I po co? To moja nieobiektywna opinia i bardzo mi brakowało tej struktury w kodowaniu.

 

@nie kumam odpowiedzi, czyzbys nie rozroznial metod, funkcji i procedur :>

 

:lol:

 

@EEee ? a co to jest metoda czysta statyczna ? Wydaje mi sie ze znowu mylisz metode i procedure. Albo czegos nie rozumiem/nie wiem.

Ewidentnie złośliwie Ci się wydaje B). W Delphi mamy do wybory 3 typy metod pod względem przekazywanych ukrytych parametrów (oczywiście jakbyś się nie domyślił, chodzi o deklarację w klasie):

procedure Procedura1; // metoda, ukryty parametr to instancja klasy
class procedure Procedura2; // metoda klasowa, ukryty parametr to meta-klasa
class procedure Procedura3; static; // statyczna metoda klasowa, ukryty parametr - brak

 

@Jezyk nie ma nic do rzeczy, każdy jezyk obiektowy majacy metody statyczne pozwala na zastosowanie wzorca singleton.

 

Równie dobrze mogę napisać że język/kompilator mający pre-procesor na poziomie D6 pozwala na tworzenie szablonów. Nice Joke :). Serio chodzi o bardziej kompleksowe wsparcie singletonów.

 

Stonuj trochę. Stonuj. B) Pisz coś bardziej konstruktywnego, na głupią krytykę stać każdego (narazie jesteś pół na pół). Nie musisz ze mną walczyć , a sporne kwestie w terminologii do której się czepiasz to w 50% tylko zbędny puryzm językowy. Tatusiu! Metody to też funkcje i procedury :)

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Sugeruje to ze we wczesniejszych wersjach nie dalo sie stworzyc singletona co nie do konca jest prawda.

...

Jezyk nie ma nic do rzeczy, kazdy jezyk obiektowy majacy metody statyczne pozwala na zastosowanie wzorca singleton.

 

No pewnie możesz stworzyć klasę globalnie i udawać ze to singleton xD

Albo poszukać paru przykładów na sieci które trochę lepiej będą oszukiwać rzeczywistość ... Tak czy owak singletonem to nie będzie xP

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Spider sp[ecjalnie dla ciebie:

 

  TSingleton = class
     public
        constructor    Create;
        class function GetInstance: TSingleton;
     strict private
        class var      fInstance: TSingleton;
        constructor    InnerCreate;
  end;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  sing: TSingleton;
  sing2: TSingleton;
begin
  sing := TSingleton.GetInstance;
  sing2 := TSingleton.GetInstance;
  Assert(sing = sing2);
end;

{ TSingleton }

constructor TSingleton.Create;
begin
  raise Exception.Create('Please use GetInstance to obtain object');
end;

class function TSingleton.GetInstance: TSingleton;
begin
  if fInstance = nil then fInstance := TSingleton.InnerCreate;
  Result := fInstance;
end;

constructor TSingleton.InnerCreate;
begin
end;

 

jedyna zasada ktora jest zlamana to konstructor Create ktory przykrywa konstruktor Obiektu i nie moze zostac prywatny, co nie zmienia faktu ze nie da sie recznie stworzyc tego obiektu, tylko trzeba siegnac po getInstance. Jezeli jest zlamane cos z wzorca singleton prosze o wytkniecie bledu.

 

@HNB rozwin temat "bardziej kompleksowe wsparcie singletonow", nie wczytywalem sie w te zagadnienia w Delphi wiec chetnie sie dowiem czegos nowego.

 

 

Odnosnie czepiania sie, kurde to sie zdecyduj. Mam wytknac co wg mnie jest zle czy po prostu napisac: "Ok super, dobra robota.". Z tego co piszesz ja mam wrazenie ze mylisz metody i procedury, moze to jest wynik skrotow myslowych a moze czegos innego, ale nie zmienia to faktu ze nie jestem telepata. Czepiam sie bo widze niespojnosc. Zreszta detal.

 

Co do metod statycznych, siegnijmy do ogolno dostepnych zrodel: http://pl.wikipedia.org/wiki/Metoda_statyczna

Nie znajduje definicji "czystej metody statycznej" dlatego o to zapytalem, cytuje: a co to jest metoda czysta statyczna ? Wydaje mi sie ze znowu mylisz metode i procedure.

A wydaje mi sie ze mylisz te 2 rzeczy bo robisz duze skroty myslowe, bo odpowiedz mi prosze jesli to nie jest atak, czym sie rozni od siebie po kompilacji:

 

procedure cosTam;

 

od

 

TMyClass = class

procedure cosTam;static;

end;

 

po przeczytaniu tego co napisales w tym temacie i na swojej stronie.

 

Ok, starczy, nie mam zamiaru cie wiecej atakowac, Toster.Halt(0);

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Po pierwsze różni się tym, że dla tej wersji z klasy możesz mieć wygenerowane dane o ilości parametrów oraz ich typie w związku z czym można ją z powodzeniem wywoływać w czasie działania programu nie znając ani jej nazwy ani parametrów (znowu objawia się skryptowy charakter Delphi). Zawdzięczamy to temu, że jest ta procedura/metoda umieszczona w klasie i jest jej integralną częścią, widoczną z poziomu RTTI. W przypadku zwykłej procedury uzyskanie takich danych jest niemożliwe.

 

Po drugie procedury klasowe były dostępne już wcześniej w Delphi i zawsze (tz. odkąd ja znam Delphi) przekazywały ukryty parametr: meta-klasę (przez to tak do końca nie jest już metodą statyczną/klasową co ją dyskwalifikuje w pewnych zastosowaniach). Pomimo to ciągle w literaturze są nazywane klasowymi (po części jednak są - taka półprawda). Delphi ma bardziej skomplikowany model obiektowy niż C++ w którym nie ma meta-klas, dlatego trudno nazwać ten nowy twór co nie przekazuje meta-klasy:

class procedure cosTam; static;

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...