🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334854

Re: [outro] ]Re: Delphi do zastosowan domowych

#334854
From: Arivald
Date: Fri, 20 Jan 2012 08:04
125 lines
5940 bytes
W dniu 2012-01-19 20:24, Wojciech "Spook" Sura pisze:
> Dnia 19.01.2012 o 18:56 R.e.m.e.K <go@dev.null> napisał(a):
>>> {
>>>      std::vector<std::string > & SL = GetStringListWithContent();
>>>
>>>      auto result = [&SL]() -> std::string
>>>      {
>>>          std::string tmp;
>>>          for (int i = 0; i < SL.size(); i++)
>>>              tmp += (SL[i] + "\n");
>>>          return tmp;
>>>      }();
>>> }
>>
>> No dobra, ruki wierch, poddaje sie, nie znam C++ i troche pojechalem po
>> bandzie, ale chcialem pokazac co mozna zrobic w Delphi i to mnie
>> czesciowo tlumaczy :-)
>> ps. to jest tez funkcja anonimowa?
>
> Już chciałem Pana pocieszyć, że to składnia nowego C++11 i że jeszcze
> jej kompilatory nie obsługują, ale przed chwilą wklepałem powyższy kod z
> niewielkimi poprawkami do VS2010EE i wstał (!).
>
> A jeżeli pętla się Panu nie podoba, to można [będzie] też tak:
>
> (...)
>
> for (std::string & s : SL)
>      tmp += (s + "\n");
>
> ...ale żeby skompilować taki kod trzeba niestety jeszcze trochę poczekać
> albo użyć GCC, który ma już zaimplementowane 90% standardu (
> https://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport )
>

Ładnie się C++ rozwija ;-)


> Ale mogę ripostować za Pana - w C++ nie ma na przykład atrybutów i nie
> zanosi się na to, by się szybko pojawiły,

Wbudowanych nie ma, ale można sobie podobną funkcjonalność samemu 
napisać. Oczywiście wsparcie kompilatora dla atrybutów jest nie do 
przecenienia.


> Do licha, ale wysoko wycelowałem. W C++ nie ma nawet własności, trzeba
> poprzestać na getterach i setterach. Można co najwyżej zrobić przekręt i
> zdefiniować podklasę żeby umożliwić zapis instancja.wlasnosc[4] = 3;

Tu podobnie. I nie nazwał bym tego przekrętem. W C++ tworzenie klasy 
jest bardzo tanie, znacznie tańsze niż w Delphi. Dodatkowo można 
przeładować operatory, tak że koniec końców używanie takiej "property" 
nie będzie się niczym różniło od jej użycia w Delphi.

A kompilacja template w momencie tworzenia instancji daje możliwość 
utworzenia jednego, prostego template klasy "property", i potem 
kompilator sam będzie generował instancje dla różnych typów.
A jak dodasz do tego mechanizm trejtów (traits), z odpowiednią 
konkretyzacją dla np. callbacków, to daje się łatwo zaimplementować 
bardzo skomplikowane działania.


> Z drugiej strony w Delphi bardzo brakuje C++owego consta. W C++ const
> nie jest formalnie deklaratorem stałej, tylko modyfikatorem. Na przykład:
>
> int * i; // Wskaźnik do inta;
> const int * i; // Wskaźnik do stałego inta. Wskaźnik można
> przedefiniować, ale wartości wskazywanej przez niego - nie
> int const * i; // Stały wskaźnik do inta. Wskaźnika nie można
> przedefiniować, ale wartość przez niego wskazywaną - tak
> const int const * i; // Stały wskaźnik do stałego inta.
>
> Ciekawie są też skonstruowane metody z constem. Metoda const zobowiązuje
> się do niemodyfikowania zawartości klasy, na przykład:

Hmmm... Ja o takich metodach myślę nieco innaczej. Metoda const to taka 
metoda którą można wywołać na rzecz obiektu który jest const. Bo w 
szczególnych wypadkach ona może jednak zmienić pola klasy.


>
> Jako ciekawostkę podam, że do C++ przeraźliwie zniechęcała mnie na
> początku konstrukcja:
>
> std::cout << zmienna << "\n";
>
> Bo co za przyzwoity, współczesny język przekazuje parametry tak, jak
> przekierowywane są strumienie w plikach wsadowych? I dopiero na jakimś
> mądrym FAQ znalazłem wyjaśnienie zagadki:
>
> class cout
> {
> public:
>      cout & operator << (int i)
>      {
>          // Do something
>          return *this;
>      }
> }


Co w tym mądrego? Bo nie widzę.
To że strumień ma operatory << i >> dla większości wbudowanych typ to 
konieczność.
Zwracanie referencji na siebie, umożliwiające wywołanie łańcuchowe, to 
też nie jest żadne cudo... W Delphi też tak można.

Istotniejszy jest fakt że w każdej klasie możesz przeładować operatory 
<< i >> w kontekście strumienia, dzięki czemu klasa sama będzie 
wiedziała jak się zapisać i jak się wczytać z dowolnego strumienia.


> Niewyjaśnione pozostaje dla mnie natomiast, dlaczego początkującym
> C++owcom w każdej pojedynczej książce w pierwszym programie hello world
> serwuje się statycznie alokowaną klasę (na stosie) z przeciążonym
> operatorem i wywołaniem łańcuchowym. Ale tego pewnie się nigdy nie
> dowiem...

Bo strumienie standardowe to podstawowa metoda interakcji z 
użytkownikiem? A tego przeciążenia i łańcucha nie widać, tego się nauczy 
później.

-- 
Arivald
Technical Details
Message-ID: <jfb799$qli$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Arivald <NOSPAMarivald@interia.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: [outro] ]Re: Delphi do zastosowan domowych
Date: Fri, 20 Jan 2012 09:04:23 +0100
Organization: Dialog Net
Lines: 125
Message-ID: <jfb799$qli$1@news.dialog.net.pl>
References: <1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus>
NNTP-Posting-Host: dynamic-78-8-242-109.ssp.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1327046761 27314 78.8.242.109 (20 Jan 2012 08:06:01 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Fri, 20 Jan 2012 08:06:01 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20120111 Thunderbird/10.0
In-Reply-To: <op.v8ciulumyumhbd@notebook.asus>
X-Antivirus: avast! (VPS 120119-2, 2012-01-19), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit