Składnia Delphi kontra reszta świata

Składnia Delphi kontra reszta świata
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

ten watek o tyle nie ma sensu, ze jest cala masa (niespodzianka) jezykow bezklamerkowych poza Pascalem...

Python, Ada, Rexx, Cobol, Basic, Lisp itd...

BTW, trochę humoru:
http://www.thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html
http://www.codeproject.com/Articles/927/Real-Programmers-Don-t-Use-PASCAL

edytowany 1x, ostatnio: vpiotr
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0
Demonical Monk napisał(a)

Czego chcesz unikać? Właśnie odkryłeś, że istnieją również inne rodzaje scopingu, niż ten jedyny słuszny w Pascalu...

Chciałbym uniknąć jakichś niezbyt logicznych konstrukcji, które mogą powodować potencjalne błędy (chociaż ofc.wiadomo, że wszystko ma swoje wady i zalety).

Nadal nielogiczne?

Cóż, wiem, że pętla skończy się, gdy x osiągnie wartość zerową, lecz imo i tak średnio racjonalne (bo występuje niejawne rzutowanie int->bool), chociaż przydatne :P


Sugerowałbym zakończyć ten temat: nawet sam już nie wiem o co się wykłócamy; możemy tak w nieskończoność wymieniać wady oraz zalety Delphi, C++ i całej masy innych języków, podobnie jak możemy kłócić się w nieskończoność o zasadność operatora `=` do porównywania liczb w Pascalu, a i tak do niczego konkretnego nie dojdziemy :P W ogóle to ten topic i tak w cholerę szedł z głównego tematu (vide pierwszy post), zatem EOT, jak dla mnie.

edytowany 2x, ostatnio: Patryk27
0

Chyba każdy kto potrafi programować za pomocą begin end potrafi też { }

Ale nie każdy posługujący się klamerkami ogarnia delphi.

n0name_l
ohoho, kolejna wielka madrosc w tym temacie :D
3
bueeeedleee napisał(a):

Ale nie każdy posługujący się klamerkami ogarnia delphi.

Nie każdy ogarniający delphi potrafi wieszać pranie.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Tuchów
  • Postów:12165
3

Skoro już i tak wątek i pierwotny temat szlag trafił, to może przyłączę się do dyskusji na temat składni;

EDIT: gratuluję przezabawnego nowego tematu wątku :D


somekind napisał(a)

Ale gdzie w negatywnej opinii jest ten "irracjonalny hejt"?

Gdzie? Pół tego wątku to irracjonalny hejt na Pascala i to tylko przez tych, którzy w nim po prostu nie piszą; Bo najlepiej jest ktytykować coś, czego się nie używa, a główne argumenty są nie dość, że subiektywne, to wynikają po prostu z gustu a nie funkcjonalności; O gustach się nie dyskutuje;

somekind napisał(a)

To zjawisko spotyka tutaj raczej @mcodera, tylko dlatego, że wymienił kilka konkretnych wad Delphi.

Tu zagadka - przypomnijcie sobie świętoszki kto już od dawna najeżdżał na @mcodera i o co - nikt z Was nie jest bez winy;

somekind napisał(a)

A to, co opisał, czyli np. rozwlekłość składni (sekcja var, pojebane begin i end)
[...]
begin i end zaciemniają te miejsca, które wymagają ich użycia. Klamerki to jednak cztery razy mniej znaków, szybciej się je czyta, nie rozpraszają tak, jak słowa.

Poj#### jest twierdzić, że coś jest poj####używając poj#### argumentów; Sekcja var? Świetna sprawa dla tych, którzy lubią mieć porządek w kodzie (czyli pedantycznego mnie); Nie trzeba się zastanawiać gdzie co się zadeklarowało, bo wszytko w danej procedurze/funkcji/metodzie/wtf jest w jednym logicznym miejscu; begin i end jest poj####? A:

Kopiuj
sub Foo(ByVal Bald As Integer)
  'code here
end sub

już nie jest? No pewnie - lepiej up#### się Pascala i wciskać kit, że ma najgorszą składnię tylko dlatego, że trzeba więcej napisać niż w tym "boskim" C/C++ jeśli są języki, w których napisać trzeba jeszcze więcej i których się nie hejtuje;

Komuś ciężko zauważyć begin i end jako początek/koniec bloku? To przypominam o takim złowieszczym fiuczerze jak "syntax highlighting" i w nowszych niż Delphi7 środowiskach - "code folding"; Rzeczą normalną są odmienne kolory dla słów kluczowych, przez co kod jest bajecznie czytelny; Czego nie można powiedzieć o klamrach w C/C++/C#/java, jeśli klamrę otwierającą blok pozostawia się na końcu linii i nie używa się wcięć jak Pan Bóg przykazał; Często poprawiam formatowanie kodu w dziale Newbie i szlag mnie trafia jak mi wcięcia nie pasują, bo jakiś gieniuś w nie dość, że nadziubdzianym kodzie zostawia klamrę otwierającą na końcu linii, np. nagłówku funkcji; To jest jeden znak, więc o wiele trudniej go zauważyć, niż pozostawiony na końcu linii begin skłądający się z pięciu znaków; Kolorowanie składni wcale Bóg wie jak nie uwidoczni tej klamry, za to "ogromnego" begin owszem, którego i tak powinno się przenosić do newej linii, bo takie są nieoficjalne (a może i oficjalne) "standardy" tworzenia kodu w Pascalu;

somekind napisał(a)

nierozróżnianie wielkości liter

To jest według Ciebie wada? Dla mnie to ogromny plus, przez co nie można obfuskować kodu przez pierdyliard takich samych identyfikatorów różniących się jedynie wielkością liter; Dzięki temu każda zmienna/procedura/funkcja/wtf ma inną nazwę i nie trzeba się domyślać jej przeznaczenia; Pewnie - to jest minus oczywiście i jak zwykle dla tych, którzy piszą w C lub pochodnych językach;

semekind napisał(a)

różne sposoby wywoływania metod (o ile dobrze zrozumiałem, to jest to syf największy z możliwych)

Mam podobne zdanie, choć nie aż tak bardzo negatywne; Też denerwuje mnie to, że można wywołać procedurę/funkcję (która nie posiada argumentów) bez klamer - dlatego tego nie stosuję; Zawsze i każdą procedurę/funkcję/metodę wpisuję z nawiasami, dlatego zawsze wiem gdzie one są, a gdzie są zmienne czy stałe; Jeśli ktoś nie stosuje klamer przy wywoływaniu ww. elementów to zaciemnia kod i to jest wadą; Osobiście je stosuję i nigdy nie mam problemu ze zrozumieniem kodu;

somekind napisał(a)

"udziwnione" operatory porównania i przypisania.

No tak, dziwne jest to, że operator równości oznacza faktyczną równość; Po raz kolejny używasz bezsensownych argumentów przeczących ustalonym od wiek wieków standardom;

Wiesz co jest nienormalne? To, że w językach ceplusplusowatych część operatorów ma zupełnie inne znaczenie, niż się tego można spodziewać: = to nie jest równość, a przypisanie, == jest równością, co dziwacznie wygląda, != jest operatorem "różności", oczywiście inne znaczenie niż <> w matematyce;

somekind napisał(a)

Takie rzeczy faktycznie nakłaniają do pisania niechlujnego kodu, i utrudniają zmianę języka, bo wymaga ona złamania wielu przyzwyczajeń.

No tak, teraz trzeba mieć pretensję do twórców wszystkich języków, które nie mają zerżniętej na żywca składni z C; Na szczęście są jeszcze języki z czytelną skłądnią, jak choćby wspomniany wyżej VB; Jednych podnieca obfuskowanie kodu nieczytelnymi znaczkami, innych cieszy dłuższy, ale o wiele bardziej czytelny kod;

somekind napisał(a)

Nie. Fajnie jest mieć jak najmniejszy zasięg, a nie musieć wszystkiego deklarować na początku pliku jak w XIX w.

Widać Twoje pojęcie o Pascalu jest zbyt małe na obiektywną ocenę; Poza tym widać zatrzymałeś się w latach 70/80-tych operając się na manii deklarowania wszystkiego globalnie;

Na szczęście bardzo dobrą i szeroko stosowaną techniką jest dbanie o jak najmniejszą widoczność i dzielenie kodu na "jednoekranowe" bloki znacznie ułatwiające zrozumienie kodu; Jeśli ktoś nawali milion zmiennych i procedur/funkcji globalnych nie dbając o ich widoczność i bezpieczeństwo to po prostu jest niechlujem - powinien wrócić do kursu z podstaw kodzenia;

somekind napisał(a)

= to porównanie
:= to przypisanie
Jest to logiczne i zrozumiałe dla każdego, kto miał z tym językiem kontakt na przynajmniej parę dni.

A co w tym logicznego?

Nie wiesz? Symbol := czyta się (z matematyki) jako "zdefiniowane jako, (równe) z definicji" i ma to jak nabardziej sens logiczny;

Logiczne jest, że wpajany od dziecka w szkole na matematyce operator równości oznacza równość, a operator przypisania, który ma inne przeznaczenie ma ma inny identyfikator; Podobnie ze znakiem różności - <> - który tak samo jest zgodny z matematycznym zapisem; Tylko że zaraz ktoś się przyczepi, że operator negacji to słówko not, który oczywiście z racji swojej ogromnej długości pisze się przez pół godziny - podobnie z koniunkcją and i alternatywą or; Ileż to trzeba się opisać...

somekind napisał(a)

Wszyscy przecież wiedzą, że C++ to obrzydliwy język, ale nie o to tu chyba chodzi.

Nie twierdzę tak, ale i nie wypowiadam się o funkcjonalności C-pochodnych języków, bo najzwyczajniej w świecie mam nikłe o tym pojęcie; Cały czas bijecie w składnię Pascala (mniej w funkcjonalność);

somekind napisał(a)

Ja bym powiedział, że zależy od jednego i drugiego, ale od składni bardziej. Bo nieczytelnego programistę można nauczyć lepiej pisać, ale składni zmienić się nie da.

A to ciekawe, czy niechlujny programista bardziej zobfuskuje kod języka przywiązującego większą wagę do czytelności kodu (tu: Pascala/VB) czy pozwalającego na większą swobodę (tutaj: C i pochodne);

vpiotr napisał(a)

ten watek o tyle nie ma sensu, ze jest cala masa (niespodzianka) jezykow bezklamerkowych poza Pascalem...

Nie ma sensu, bo hejtuje się tutaj Pascala za "czytelną składnię" bardzo prostą do zrozumienia tylko dlatego, że po pierwsze jest inna od ceplusplusowatych języków, a po drugie - trzeba więcej pisać.


Wybacz @somekind, że w większości cytowałem Twoje słowa - użyłeś akurat wszystkich argumentów, które można łatwo obalić; Wypowiadam się jedynie w kwestii składni języka, który tak hejtujecie;

Nie uważam, że Pascal jest najlepszym językiem (rzutując na całokształt) bo wyniki popularności mówią same za siebie - górują C/C++/Java i to prędko się nie zmieni; Osobiście nie piszę w nich głównie dlatego, że nie podoba mi się składnia, która de facto jest bardzo ważna; Za to w najbliższym czasie zamierzam bliżej poznać VB, bo urzeka mnie od dawna jego składnia i niesamowita czytelność kodu.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
furious programming napisał(a):

Nie uważam, że Pascal jest najlepszym językiem (rzutując na całokształt) bo wyniki popularności mówią same za siebie - górują C/C++/Java i to prędko się nie zmieni; Osobiście nie piszę w nich głównie dlatego, że nie podoba mi się składnia, która de facto jest bardzo ważna; Za to w najbliższym czasie zamierzam bliżej poznać VB, bo urzeka mnie od dawna jego składnia i niesamowita czytelność kodu.

To też zależy w czym górują.
W rozmiarze kodu "legacy" to chyba nadal COBOL...
Na git - np. JavaScript: https://github.com/languages
Sourceforge - Java
Mix nie-wiadomo-czego (popularność?): C - http://lang-index.sourceforge.net/

A tak naprawdę to chciałem napisać, żebyś przemyślał ten VB (o ile to pisałeś na serio).
Microsoft promuje w pierwszej kolejności C# i możliwe że VB pójdzie w odstawkę (jako język stricte jednego producenta).
Na pocieszenie dodam, że C# projektowali goście od Delphi (Anders Hejlsberg), co się objawiło (prawdopodobnie) np. w obecności properties:
http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

edytowany 2x, ostatnio: vpiotr
flowCRANE
Co do VB - nie wiążę z nim żadnych planów - po prostu z ciekawości ;)
mcoder
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 5 lat
  • Postów:117
1
Patryk27 napisał(a):

Ja bezproblemowo radzę sobie z rozpoznawaniem wywołań procedur, głównie dlatego, że czym innym może być foo;, jak nie wywołaniem procedury (a w razie czego IDE dodatkowo podpowiada)? ;)

To powiedz mi co to jest:

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
begin
  foo1 := foo2;
end;

Przypisanie zmiennej do zmiennej? Nie.

Kopiuj
var
  Form1: TForm1;
  foo1 : Integer;

implementation

{$R *.dfm}

function foo2(): Integer;
begin
  //some code

  Result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  foo1 := foo2;
end;

<sup>_</sup>
flowCRANE
@mcoder - nie dość, że nie stosujesz stylu wielbłądziego, nie wstawiasz pustych nawiasów to jeszcze promujesz korzystanie ze zmiennych globalnych i to w dodatku w module aplikacji okienkowej; Łamiesz wszelkie standardy tworzenia czytelnego i bezpiecznego kodu przedstawiając je jako wadę języka;
mcoder
To jest przykład, że ktoś mógłby tak napisać - wierz mi, że ja tak nie pisze ;) Puste nawiasy? Delphi ich nie wymaga i @Patryk27 napisał, że to jest plus jezyka, bo nie trzeba nawiasów przy funkcjach pisać.
vpiotr
@mcoder: Napiszę jaśniej: w Delphi / Pascalu nazwy metod zaczyna się z dużej litery i od czasownika, więc "foo" jest tylko przykładem, do którego sie nie przywiązuj, bo u dobrego programisty, w realnym kodzie, takiej nazwy nie znajdziesz.
mcoder
"foo" jest przykładem i mój kod jest przykładem.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Przypisanie zmiennej do zmiennej? Nie.

Kto normalny nazywa funkcję foo2? To jest niekonsekwencja w nazewnictwie, co powoduje zagmatwanie kodu. Kolejny idiotyczny przykład.


edytowany 2x, ostatnio: Patryk27
mcoder
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 5 lat
  • Postów:117
1
Patryk27 napisał(a):

Kto normalny nazywa funkcję foo2?

Ty :D

Patryk27 napisał(a):

czym innym może być foo;, jak nie wywołaniem procedury (a w razie czego IDE dodatkowo podpowiada)? ;)


<sup>_</sup>
edytowany 1x, ostatnio: mcoder
LU
  • Rejestracja:około 19 lat
  • Ostatnio:około 11 lat
4

Nie sądziłem, że w epoce Javy, C#, PHP, .NET itd. będą jeszcze możliwe kłótnie o wyższości Pascala nad C (i na odwrót) i ich potomnymi. Najbardziej jednak rozbawił mnie argument, jakoby zaczynanie od Pascala/Delphi uczyło złych nawyków. Eksperymentowałem z różnymi językami, w tym C, C++, C#, Pascale, Ada... nawet w awk-u popełniłem parę skryptów. Niestety, wtedy jeszcze nie wiedziałem, że Pascal przyzwyczaja do złego i najnormalniej w świecie nie miałem problemów z przestawieniem się na cokolwiek innego.

A żeby nie nabijać postów po próżnicy dorzucę tylko kilka przemyśleń:

  • w każdym języku jest coś, co uważamy za wygodne i coś, co przeklinamy.
  • Widywałem czytelny kod w C-podobnym języku i nieczytelny w Pascalu i na odwrót. Składnia języka nie ma tu nic do rzeczy. O wiele większe znaczenie ma logiczne rozplanowanie kodu i odpowiednie jego sformatowanie (nazewnictwo, wcięcia, odstępy, komentarze, ozdobniki). Ma to szczególne znaczenie w przypadku pozagnieżdżanych jednolinijkowych pętli, if-ów else-ów itp. Czasem nie wiadomo, gdzie który blok się kończy i jak ma działać. Pod tym względem sztywne rozwiązanie z Ady bije na głowę wszystko.
  • Nierozróżnialność wielkości liter jest DLA MNIE wadą - po pierwsze ogranicza dostępne dla nas "słownictwo" (weszło mi już w krew, że String i string to zupełnie różnie rzeczy), a po drugie daje przyzwolenie na niechlujstwo - widzieliście kod w Pascalu napisany samymi małymi literami? Po kilku godzinach czytania czegoś takiego bolą oczy! Komuś może to nie przeszkadzać. Mnie przeszkadza. żeby nie było - kod w C napisany w ten sam sposób również będzie nieczytelny.
  • Pascale to pełnowartościowe HLLe. C/C++ bardziej przypominają assemblera wzbogacanego co jakiś czas o nowe "ficzery". Z drugiej strony, nadmierne ustrukturowienie i uściślenie języka bywa niewygodne w praktyce. Sekcja Var w Pascalu jest dobra, gdy uczysz się programowania. Potem zaczyna być zbędnym uprzykrzeniem. Zwłaszcza, gdy poprawiasz stary kod, gdzie jest 20 zmiennych lokalnych, o podobnych nazwach, ale innych typach, a procedura, w której są użyte, ma 200-300 linijek. Rozwiązanie C-podobne jest tu dla mnie dużo wygodniejsze i bardziej czytelne.

Odnośnie pytania o wybór języka - C++ jest o tyle dobre, że jest oparty o bardzo popularną składnię, używaną w wielu innych językach, przez co przesiadka na coś innego (Javę/C#) będzie nieco bardziej płynna. Napisałem 'nieco', bo wymienione języki, poza podobną składnią, mają niewiele wspólnego i każdy z nich, tak czy inaczej, trzeba poznawać od początku.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Ok, mógłbym napisać:
'Czym innym może być TCompiler.CompileError, jak nie wywołaniem procedury*?'
Z tym, że ja miałem stricte na myśli fragment składni: identyfikator + średnik, a Ty podajesz jakiś nierealny kod na obalenie sensu tej konstrukcji :P
Przykłady podaje się uproszczone, podczas gdy próby udowodnienia sensu czegoś (lub jego braku) powinny być jak najbardziej 'z życia wzięte'.


`*` no dobra, oszukuję: metody.

edytowany 2x, ostatnio: Patryk27
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
  • Lokalizacja:Wrocław
0
Patryk27 napisał(a):

Bardziej chodzi o to, gdy np.mówisz, że nie lubisz Xyz, bo coś tam coś tam coś tam i twierdzisz, że Abc jest lepsze uzasadniając to jakimiś nierealnymi przykładami, które ukazują wybrane zalety Abc, a nie są ani trochę obiektywne i po prostu... nota bene idiotyczne.

Ale gdzie te nierealne przykłady?

Kwestia przystosowania imo; ilekroć patrzę na jakiś dłuższy C++-owaty kod, to zaczynam dostawać mini ataku epilepsji od tych klamerek.
Poza tym, gdyby to było kompletnie złe rozwiązanie, nie zostałoby zastosowane np.w Rubym.

Nie mówię, że jest kompletnie złe. Mówię tylko, że jest niepotrzebne. Słowa powinny oznaczać ważne rzeczy, które mają rzucać się w oczy: instrukcje i identyfikatory, a nie operatory, ani nie takie detale jak początki bloków, których spokojnie można by w ogóle nie oznaczać.

Dawanie programiście dostępu do klawiatury jest samo w sobie przyzwoleniem na niechlujstwo, nie mówiąc o angażowaniu go w jakiś projekt.

Wiesz, ja tutaj próbuję poważnie dyskutować, a z takimi tekstami jest trudno.

Cóż, again: kwestia przyzwyczajenia. Ja bezproblemowo radzę sobie z rozpoznawaniem wywołań procedur, głównie dlatego, że czym innym może być foo;, jak nie wywołaniem procedury (a w razie czego IDE dodatkowo podpowiada)? ;)

Często fajnie móc zrobić coś na kilka sposobów, ale nie w tak elementarnej sprawie, jak wywołanie funkcji. Mi to wygląda na coś potencjalnie mylącego.

A to C++ nie pozwala na nazywanie wszystkiego małymi literami, wielkimi literami lub w camel-case?

Nie. Jak zadeklarujesz zmienną foo, to nie odwołasz się do niej przez FOO ani Foo. W w większości normalnych języków też tak jest.

Chyba nie rozumiem pytania: to są po prostu dwa odmienne operatory, w C++ ich odpowiednikami są = oraz ==, dla programisty Pascala właśnie podejście C++ jest nielogiczne i vice versa :P

Mi po prostu przymiotnik "logiczny" nie pasuje w tym kontekście. To jest umowa i przyzwyczajenie, a nie logika.

Można by natomiast się wykłócać o logiczność takiego C++owego kodu:

Kopiuj
if (a=10)

Nie mam zamiaru się o to kłócić. To jest akurat kompletny bezsens i źródło problemów, które nie ma żadnych zalet.

I w ogóle nie rozumiem Twojej kontrargumentów opartych na C++. Czy ja napisałem tutaj coś dobrego o tym języku? **Odniosłem się tylko do kilku wad języka programowania, bo nie chodzi nawet o to, że występują one akurat w Delphi. Po prostu te rozwiązania są złe. **
Nigdzie też nie napisałem, że Delphi to jest zły język, że ma same wady i żadnych zalet, itp.
A w ogóle, to nie chodziło mi o Delphi, tylko o hipokryzję, którą tutaj się uprawia.

Programs must be written for people to read, and only incidentally for machines to execute.

No właśnie. I begin oraz end albo różne możliwości odwołania się do tego samego identyfikatora mają w tym pomóc?

furious programming napisał(a):

Tu zagadka - przypomnijcie sobie świętoszki kto już od dawna najeżdżał na @mcodera i o co - nikt z Was nie jest bez winy;

Nie przypominam sobie, żebym to robił, ale jeśli kojarzysz jakieś moje najazdy na niego, to proszę, podlinkuj.

Sekcja var? Świetna sprawa dla tych, którzy lubią mieć porządek w kodzie (czyli pedantycznego mnie); Nie trzeba się zastanawiać gdzie co się zadeklarowało, bo wszytko w danej procedurze/funkcji/metodzie/wtf jest w jednym logicznym miejscu;

Porządek polega na niezaśmiecaniu, zmienne zadeklarowane wcześniej niż trzeba, to śmieci. Po co dostęp do czegoś, co nie jest potrzebne? I nie jest to wada jedynie Delphi.

begin i end jest pojebane? A:

Kopiuj
sub Foo(ByVal Bald As Integer)
  'code here
end sub

już nie jest?

A kto pisał, że nie jest? Oczywiście, że jest złe, jak wszystkie nadmierne śmieciowe słowa kluczowe.
Tylko w tym wątku nikt nie poruszał tematu VB, więc o co Ci chodzi?

No pewnie - lepiej upierdolić się Pascala i wciskać kit, że ma najgorszą składnię

Ale... Kto i gdzie tak napisał? Bo jeśli nikt, nigdzie, to masz jakieś urojenia.

Dla mnie to ogromny plus, przez co nie można obfuskować kodu przez pierdyliard takich samych identyfikatorów różniących się jedynie wielkością liter;

Nikt tak nie robi.
A rozróżnienie jest wygodne, dzięki niemu np. w C# można mieć pole myValue, właściwość MyValue i każdy wie co jest czym.

Po raz kolejny używasz bezsensownych argumentów przeczących ustalonym od wiek wieków standardom;

Języki programowania pojawiły się w zeszłym wieku, na dodatek chyba większość z nich stosuje przypisanie przez znak =.

Wiesz co jest nienormalne? To, że w językach ceplusplusowatych część operatorów ma zupełnie inne znaczenie, niż się tego można spodziewać: = to nie jest równość, a przypisanie, == jest równością, co dziwacznie wygląda, != jest operatorem "różności", oczywiście inne znaczenie niż <> w matematyce;

Ja tu widzę przynajmniej spójność: ==, <=, >=, !=

No tak, teraz trzeba mieć pretensję do twórców wszystkich języków, które nie mają zerżniętej na żywca składni z C;

NIC w tym wątku nie pisałem o C.

Na szczęście są jeszcze języki z czytelną skłądnią, jak choćby wspomniany wyżej VB;

Tak, język, w którym pisze się poematy, zamiast programów, który ma więcej słów kluczowych niż wszystkie pozostałe razem wzięte.

Widać Twoje pojęcie o Pascalu jest zbyt małe na obiektywną ocenę; Poza tym widać zatrzymałeś się w latach 70/80-tych operając się na manii deklarowania wszystkiego globalnie;

WTF? Co Ty pijesz, że takie wnioski wyciągasz?
Niczego nie robię globalnie, wszystkie zmienne deklaruję jak najbliżej miejsca ich użycia.

Logiczne jest, że wpajany od dziecka w szkole na matematyce operator równości oznacza równość, a operator przypisania, który ma inne przeznaczenie ma ma inny identyfikator; Podobnie ze znakiem różności - <> - który tak samo jest zgodny z matematycznym zapisem;

Programowanie, to nie jest matematyka. Tu nawet liczby zazwyczaj nie działają tak, jak w matematyce.

A to ciekawe, czy niechlujny programista bardziej zobfuskuje kod języka przywiązującego większą wagę do czytelności kodu (tu: Pascala/VB)

Jakiej niby czytelności? Czym wyrażonej? Większą ilością słów niż znaków?
Muszę Cię rozczarować, czytelność nie na tym polega.

Wybacz @somekind, że w większości cytowałem Twoje słowa - użyłeś akurat wszystkich argumentów, które można łatwo obalić; Wypowiadam się jedynie w kwestii składni języka, który tak hejtujecie;

Nie hejtuję tutaj żadnego konkretnego języka, jeśli ktoś tak uważa, to niech się nauczy czytać ze zrozumieniem i nie dopowiadać sobie.

edytowany 1x, ostatnio: somekind
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
5

Jeśli już się tak przyczepiliście tych nawiasików, to kontr-przykład w C++:

Kopiuj
MyObject object(123); // wywołanie konstruktora
MyObject object; // wywołanie konstruktora
MyObject object(); // surprise! deklaracja funkcji

To jest konsekwencja?

edytowany 2x, ostatnio: vpiotr
Zobacz pozostałe 12 komentarzy
02
2. Wyjątek nie niesie ze sobą tylu informacji co np. w Javie - np. brak stack trace'a. Można co najwyżej napisać swoje chodzenie po stosie. 3. Łączenie wyjątków C++ z wyjątkami systemowymi jest utrudnione (przynajmniej na Windowsie). 4. Konsekwencja niezlapanego wyjatku jest abort programu, chyba że sobie to explicite przestawisz. I tak np. widziałem programistów z 10 letnim stażem w C++, którzy wierzyli, że new zwraca nulla w przypadku braku pamięci. Pewnie by się jeszcze trochę wad znalazło.
Azarien
@vpiotr: dlatego podałem drugi przykład z BSD, żeby nie było że to przekonania. @0x200x20: w prawdziwym C z klasami się STL-a też nie używa ;-)
vpiotr
Ad. 1) Nie wiem czemu, ale przecież wyjątków nie musisz łapać w każdej funkcji. Wystarczy nawet jedno miejsce - jeśli chcesz je logować przed zamknięciem aplikacji. Do ochrony zasobów lepiej użyć RAII. Wyjątek bazowy to dla mnie std::exception, catch(...) to już tylko na wypadek gdy chce się napisać "do widzenia, nie wiem czemu". Ad. 1a) Klauzula throws to rzeczywiście jakieś nieporozumienie. Ktoś coś tam usłyszał o Javie ale nie do końca. Ad. 2) Brak stack trace w STANDARDZIE to dla mnie też lipa, można się posiłkować dodatkowymi rozwiązaniami, ale to powinno być
vpiotr
...w bibliotece standardowej. Ad. 3) Nie korzystałem z systemowych (a przynajmniej nie świadomie), w VS/CL jest jakaś opcja do tego, w GCC pewnie nie. Ad. 4) Podobnie jak w Javie. Ale chyba trudno się o to oburzać?
02
1. Dla Ciebie to std::exception, dla boosta to nie jes std::exception. Dla jeszcze innej biblioteki lub kawałka kodu pisanego przez inną osobe bedzie coś innego. 3. Nie korzystasz bo nie miałeś potrzeby. Są takie funkcje , które wymagają obsługi obsługi systemowych exceptionów (w Windowsie np. przy Rpc). 4. W Javie wywali się jeden wątek. W C++ wywali się cały program - a w przypadku kernel modu - cały system.
0

Przecież to wszystko rzeczy umowne... Gdyby trzymać się tego ściśle to:
x = x + 1
Byłoby przecież największym kłamstwem świata.
Moim zdaniem Pascal na początek jest dobrym językiem, sam od niego zaczynałem. Składnia to kwestia gustu, czytelności - przecież nawet w obrębie jednego języka trzeba się czasem zastanawiać jakiej składni użyć. Operator ?: czy lepiej if. Albo foreach vs LINQ (czasem w R# gdy kliknie się w convert to linq można się nieźle uśmiać z tego co otrzymamy). Takie void też jest ciekawe, słowo kluczowe do stwierdzenia, że nie będziemy nic zwracać - a gdyby użyć coś na wzór Pascala:
func Funkcja(int a, int b) : int
proc Procedura(string a)
Byłoby tylko kilka znaków więcej, a uniknęlibyśmy podanej przez @vpiotr niejednoznaczności.
Swoją drogą, czytałem kiedyś wywiad z Brendanem Eichem (twórcą JS), który zastanawiał się, czy zamiast słowa function nie zastosować lambda. Argumentacją za tym pierwszym było to, że... zbyt dużo osób nie wie co to lambda i tego wtedy nie zrozumie ;)

Endrju
void służy też do innych rzeczy.
Azarien
„coś na wzór” Pascala już jest: auto Funkcja(int a, int b) -&gt; int, auto Procedura(string a) -&gt; void — ale tego voida jednak trzeba dać.
OT
  • Rejestracja:około 20 lat
  • Ostatnio:ponad 11 lat
0

Nie czepiajcie sie aż tak tego Delphi. Są języki z gorszą składnią, jak np pl-sql, bash albo nie daj Boże perl (czyli rzucanie kotem o klawiaturę). Ja osobiście preferuję składnię a'la C/C++/C.

Tak w ogóle, dość dziwne jak bardzo pl-sql momentami przypomina pascala

edytowany 1x, ostatnio: othello
ShookTea
C/C++/C yyy...?
ShookTea
Okej, dzięki.
somekind
Tak, też nienawidzę SQL za begin, end i case insensitive. A najgorszy i tak jest PowerShell.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)