Nauka programowania w Delphi- od czego zacząć?


(Adwody1) #1

Witam! Chciałby się nauczyć pisać programy w Delphi. Z programowaniem aplikacji nie miałem do czynienia więc nic nie umiem. Od czego zacząć? Jaką książkę polecacie do nauki tego języka? (wolał bym książkę nie kurs internetowy ze względu na wygodniejszy sposób czytania)

A może polecacie jakiś inny język (programistyczny :D) ?

Z góry dziękuję!


(somekind) #2

Delphi... Ja bym się w to nie pchał, strata czasu. Nawet jeśli chce się robić tylko aplikacje okienkowe pod Windows to są lepsze języki do wyboru.


(nero) #3

Jestem elektronikiem a nie informatykiem i ja uczyłem się Delphi z tego kursu:

http://4programmers.net/Delphi/Kompendium

Możesz przejrzeć książkę on-line i ewnelutalnie zakupić jak Ci się spodoba.


([alex]) #4

Na ile pamiętam nie tak dawno na tym forum ktoś, ostrzegał przed ludźmi który jak czegoś nie umieją to uważają to za niedobre? Pamiętasz kto to był?

Dla programów okienkowych pod windows nic lepszego niż Delphi nie znajdziesz. Projektowanie formatek o wiele lepsze niż pod QT czy Visual. Bardzo łatwo tworzą się własne komponenty. Bardzo szybko się kompiluje - ważne dopiero przy większych projektach.


(somekind) #5

Jak na razie wymieniłeś wszystkie cechy platformy .NET, która ma też większe wsparcie, większe szanse na rozwój i jest bardziej popularna (wg TIOBE).

Delphi ciągle traci na popularności i raczej nic poważnego już w nim nie powstaje. No i nie zapominajmy gdzie i nad czym pracuje teraz twórca Delphi :slight_smile:


([alex]) #6

Tak a propos, delphi podtrzymuje .NET więc mam możliwość porównania technologii na jednej formatce.

Wnioski po porównaniu są oczywiste. Dla prymitywnych formatek (kilka standardowych kontrolek luźno że sobą powiązanych podczas wprowadzenia) używając .NET wyjdzie kilka wierszy mniej. Natomiast jak chcesz zrobić jakąś bardziej skomplikowana zależność to używając .NET trzeba napisać dwa razy więcej kodu niż używając normalnych kontrolek VCL. Nie wspominając już o tym że jak chcesz trochę zmienić działanie jakieś kontrolki to w przypadku VCL tworzysz nowy komponent na podstawie już istniejącego, pisząc tylko to co chcesz zmienić. W przypadku .NET - tylko nie z poziomu Delphi. Co ci daje analiza popularności? Gdyby ludzi się na to oglądali ciągle bylibyśmy w wieku kamienia łupanego, ponieważ kamień byłby od zawsze najbardziej popularny.


(Fiołek) #7

Jakiś przykład? Nie wydaje mi się, że byłaby jakaś znaczna różnica w ilości kodu.

Przyznaj, nie miałeś do czynienia z pisaniem UserControls w .NET. ;] Kontrolek nie są "sealed" więc wystarczy tylko nadpisać metody które się chce zmienić i dziedziczyć z tej kontrolki. Ot cała filozofia.

Nietrafiony przykład. Tu nie chodzi i wymyślanie nowych rzeczy, tylko o używanie istniejących.

Dzięki takiej analizie możemy spodziewać się, od ilu osób będziemy mogli uzyskać pomoc, jak będzie z naszą przyszłością(w kwestii pracy) oraz możemy wnioskować co jest dobre(wygodne, ergonomiczne, etc.).


(pebal) #8

Dla platformy .NET, naturalnym językiem programowania jest język C#. Język ten był specjalnie projektowany dla tej platformy i pozwala na pełne wykorzystanie jej możliwości.

Z jakich mechanizmów platformy .NET Framework 3.5, można skorzystać pisząc w Delphi?

Język Delphi będzie odchodził w zapomnienie, bo skończyły się czasy, kiedy to biblioteka VCL wyznaczała standardy.


(somekind) #9

Faktycznie. Zapomniałem, że Ty używasz kompilatorów C/C++, które nie wspierają podstawowej optymalizacji, komentarzy i nazw zmiennych dłuższych niż 3 znaki :stuck_out_tongue:

Problem w tym, że technika idzie do przodu i nawet Twoje teorie nie zatrzymają jej na etapie łupanego Delphi.


([alex]) #10

Wiem wolisz Visual'a który nie potrafi zoptymalizować a=a+2; wyjaśnialiśmy to z Fiołkiem na tym forum. Co do kompilatorów nie wspierających komentarzy i nazw zmiennych dłuższych niż 3 znaki - pierwsze słyszę może mnie oświecisz? Chociaż wcale się nie zdziwię jeżeli coś takiego oferuje M$, ale zapewniam cie że tego badziewia nie używam.

W łupanym Delphi da się napisać system operacyjny, tak jak w C/C++. W C# tego nie zrobisz. Jeżeli nazywasz progresem techniki produkt dla domorosłych "programistów" nie potrafiących napisać prostego programu w C aby coś nie mazało po pamięci (przynajmniej jednego takiego mamy na tym forum) to możesz to tak nazywać (bo dla takich "programistów" to rzeczywiście zbawienie). C# nigdy nie zastąpi C/C++ oraz Pascala/Delphi.


(somekind) #11

Aluzja jasna i wszyscy załapali, oprócz jej bohatera :stuck_out_tongue:

Szef IBM powiedział kiedyś, że nie ma sensu, aby na świecie pracowało więcej niż 10 komputerów. A Gates, że 64kB pamięci operacyjnej wystarcza do wszystkich zastosowań :slight_smile:

Ale można sobie pogadać :wink: Jeśli chodzi o to ostatnie to już jest popularniejszy, jeśli chodzi o C/C++ to nawet jeśli zostaną czymś zastąpione to na pewno nie C#, bo nie są to przecież technologie konkurencyjne.

I czy ja gdzieś napisałem, że C# ma coś zastępować? :smiley:

Ja napisałem tylko, że .NET jest obecnie lepszym niż Delphi wyborem, jeśli chce się tworzyć aplikacje okienkowe pod Windows, z uwagi chociażby na wsparcie od firmy, która jest producentem tych systemów, a tym samym możliwości integracji z nimi. Framework dostarcza gotowych klas i metod do wykonywania przeróżnych operacji oraz wiele kontrolek do dyspozycji. Wszystko to jest naprawdę łatwe do rozbudowania w razie potrzeby.

Nie przeczę, że w Delphi jest inaczej i nie twierdzę, że Delphi jest złe, tylko że nie jest najlepszym wyborem, bo traci na popularności i tracić będzie. Wystarczy spojrzeć na oferty pracy. A co do samego języka jako języka - jest tak odmienny od większości popularnych, że powoduje późniejsze problemy z przesiadaniem się - to w sumie można uznać za wadę.

Ja rozumiem, że należysz do pokolenia Delphi i będziesz go bronił za wszelką cenę nie dopuszczając do siebie nawet myśli, że może niekoniecznie jest tak, jak myślisz. Twoja sprawa.

Wystarczy za komentarz.


([alex]) #12

Ja znam Delphi oraz C#, ale oczywiście ty lepiej wiesz chociaż znasz tylko C#.

Oczywiście, tylko że musieli kilka DLL'ek dodać aby to jakoś działało. :lol:

Jeżeli to się liczy jako napisanie całego systemu operacyjnego to tak samo można napisać system operacyjny w batch'u, owszem DLL'ek będzie nieco więcej.


(somekind) #13

No ja wiem, że Ty znasz wszystko, szkoda tylko, że nawet, gdy czegoś nie rozumiesz, to twierdzisz, że to znasz.

Swój popis znajomości .NET dałeś już chociażby w tym wątku: http://forum.dobreprogramy.pl/viewtopic.php?f=23&t=322536 :smiley:

Przy okazji popisałeś się także umiejętnościami programowania zgodnie z regułą DRY =D>

Kolejne słowa świadczące o Twojej znajomości tego tematu są w bieżącym wątku:

  • zupełnie jakby w .NET było inaczej :roll:

I kolejne:

Przypominam, że Fiołek poprosił Cię o udowodnienie tej Twojej tezy. Dołączam się do prośby.


([alex]) #14

Przejrzyj uważnie wątek i zobacz kiedy wyjaśniło się że kolega robi to za pomocą kontrolek .NET

Może w C# jest inaczej, .NET jest kolekcją bibliotek które mogą być teoretycznie użyte z każdego języka. Czyżby ty też nie zupełnie wiesz czym jest .NET i czym się różni od IDE.

Ok :-D, Wstawilem przykład tutaj

Proszę zrobić za pomocą .NET kontrolkę dla wprowadzania wartości zmiennoprzecinkowej oraz kontrolkę która tworzy nagłówek nad inną kontrolką i pokażcie jak wygląda kod programu używającego tej kontrolki. Jak coś takiego ktoś z was zrobi (albo połączcie siły) to porównamy kody kontrolek. Po obejrzeniu działania dwóch prostych kontrolek prawie na 100% wymiękniesz, prawdopodobnie Fiołek też. Nawet wiem jak będziesz się wykręcać :lol: . Powiesz że to ja mam zrobić tę kontrolki w .NET a wy zobaczycie kod i ewentualnie powiecie gdzie coś można było zrobić nieco prościej. Od razu odpowiadam na to, nie zamierzam w tym syfie grzebać, w .NET to zajmie z tydzień a kod kontrolek będzie jakieś 5 razy większy o ile w ogóle da rady. Jeżeli uważacie że .NET nadaję się przynajmniej dla aplikacji użytkowych to musicie przyznać że tę kontrolki jak najbardziej do takich aplikacji pasują.


(Fiołek) #15

Żartujesz, prawda? Prosiłem Cię, abyś mi pokazał jak tworzyć nowe kontrolki w Delphi(i przykład zrobienia TEGO SAMEGO w .NET), a nie pokazywał jak używać już istniejące. Zresztą z tego co widzę, to Twój kod, wykorzystujący gotowe kontrolki jest nawet dłuższy od identycznego używając kontrolek .NET(tu: GroupBox i MaskedTextBox).

Niestety po powyższych wypowiedziach muszę stwierdzić, że NIE ZNASZ C# wystarczająco by go oceniać. Znasz, co najwyżej, podstawy.

Tylko, że to są standardowe kontrolki Windows, a nie jakieś wymysły z VCL. Wszystkie jakie tam pokazałeś są zaimplementowane w .NET. A określanie .NET "syfem" bez znajomości go można uznać jedynie za dziecinadę.

Z mojej strony EOT.


([alex]) #16

Chyba ty żartujesz, prawda? GroupBox oraz MaskEdit (tak to się nazywa w delphi) owszem są standardowymi kontrolkami tylko że zupełnie inaczej działają. Skoro twierdzisz że to jest to samo oraz w C# zajmie to mniej kodu to zrób to i porównamy funkcjonalność. Prymitywne kontrolki C# nie umywają się do tych NIE STANDARDOWYCH kontrolek. Mnie zrobienie tego przykładu zajęło jakieś 4-5 min, jeżeli nie kłamiesz z tym że w C# to prościej to tobie powinno to zając mniej czasu. :lol:


(Fiołek) #17

Proszę. Wyklikanie tego zajęło mi ~minutę. Kod w 100% wygenerowany przez IDE(ja zrzuciłem to tylko w jeden plik). Działa tak jak miało działać.

EDIT: na upartego dałoby się to odchudzić o ~10linijek :stuck_out_tongue_winking_eye:


([alex]) #18

Czy naprawdę nie widzisz różnicy w działaniu i wyglądzie czy tylko się zgrywasz?

Poza tym w moim przykładzie jest dwa przykłady. Jeden zrobiony przez wrzucenie kontrolek na formę jedyny kod to reakcja na naciśniecie przycisku wmontowanego w pole edycji lub naciśniecie znajdując się w polu edycji, (zresztą nie widzę w twoim przykładzie nic wmontowanego w pole edycji). Drugi zrobiony dynamicznie czyli w trakcie działania programu.


(Fiołek) #19

Działa tak jak miało działać(opisałeś 5 postów wyżej).

Przyciski w kontrolce to dla mnie zbędny bubel(niepraktyczne(dla mnie)), ale w .NET też jest możliwe, ale nie działa do końca tak jak tutaj(może i działa, ale nie bawiłem się tym). Dodanie zdarzenia sprowadza się do dwukliku na kontrolce(ew. wyboru innego zdarzenia), dodanie hotkeya sprowadza się do edycji jednego pola w ustawieniach.

Prosiłbym o wyjaśnienie tego stwierdzenia.

PS. Żeby nie było(już 13-ty Smok mnie o to posądził kiedyś, co prawda była mowa o kompilatorach, no ale...), ja nie mam nic przeciwko Delphi i VCL(a to, że go nie używam, to przez składnie Delphi(której nie lubię) i małe wsparcie ze strony producenta/).

PS2. Tak nawiasem mówiąc, to nie o to prosiłem(i nie o to mi ze stwierdzeniem "żartujesz(...)" chodziło). Miałeś przedstawić(Ty, nie ja) kod w którym Delphi będzie przeważało w ilości kodu(znacząco) nad .NET + C# w kwestii tworzenia kontrolek użytkownika(prosiłem o kod i w Delphi, i w C#). Jeśli nie chcesz się tego podejmować(tworzenie UserControls) to chociaż daj mi przykład z użyciem istniejących kontrolek(i innych) na dużą przewagę VCL na .NET.

EDIT:

To już moja ostatnia wiadomość na ten temat. Dopóki nie dostanę niezbitych dowodów, że C# i .NET to syf, a Delphi to cud, miód i orzeszki nie mam co się wypowiadać.


([alex]) #20

Z tego co napisałeś wnioskuje że nie podejmujesz się napisać kontrolek które by działali identycznie z moimi, czy dobrze rozumiem? Poza tym widzę dokładnie taką próbę wykręcenia się z sytuacji jak przewidziałem, powoli staję się prorokiem :smiley: .

Podmieniłem przykład, to wyjaśni tworzenie dynamiczne, oraz na jednym ekranie pokaże jak marnie wygląda twoja propozycja.

PS. Zauważ że aby powtórzyć to co zrobiłeś za pomocą .NET tak samo nie musiałem wpisywać ani linijki kodu. Przyjrzyj się uważnie możliwością wprowadzania/edycji za pomocą twojego przykładu a możliwością wprowadzania/edycji za pomocą mojego.