Składnia Delphi kontra reszta świata

0

Witajcie,
Chciałbym zrobić autoupdater do stworzonej już gry. Włączając grę chcę, aby aplikacja sprawdzała czy podmienić plik odpowiedzialny za listę serwerów czy też nie. Ma to się odbywać bez żadnych powiadomień.

Teraz mam do was pytanie
W jakim języku to będzie mi najłatwiej zrobić ? Nie chcę, aby wymagało to zbędnych programów jak np NetFramework.
Jeżeli macie jakieś jeszcze wskazówki to prosiłbym bardzo. Jeden plik będzie zmieniał się od czasu do czasu. Nie wiem jak to nawet zrobić optymalnie czy ma sprawdzać obecną wersję czy tylko za pomocą różnicy rozmiaru pliku ?

Obecnie znam bardzo dobrze php, html, css.

PS
Mam chęci i sam chcę to zrobić :) Przy okazji troszeczkę nabrać podstaw.

0

o_O W tym samym języku co grę.

0

Prawdopodobnie zrobił ją w jakimś "generatorze gierek".
Poszukaj czy nie ma też gotowych autoupdaterów - wydaje mi się że raczej na pewno są.

Autoupdatery stworzone przez początkujących programistów są raczej niebezpieczne dla użytkowników. Każda aktualizacja powinna być podpisana kluczem asymetrycznym.
W innym przypadku wprowadzamy do komputera backdoora którego może potencjalnie wykorzystać dowolna osoba.
Wystarczy że podepniemy się do złowrogiego hotspota, który zaserwuje zmienione adresy w DNS i właściciel będzie mógł zainstalować w komputerze dowolną aplikację swojego autorstwa bez potwierdzenia ze strony użytkownika

Duo94 napisał(a):

Nie chcę, aby wymagało to zbędnych programów jak np NetFramework.

.NET framework zbędny? Nawet sterowniki do kart graficznych radeona wymagają .NET Framework
w wersji 2.0 jest zainstalowany praktycznie na każdym komputerze
wersja 3.5 jest na co najmniej 60% komputerów (ciężko znaleźć dokładne statystyki)
każdy nowy komputer z windows 8 dostaje wersję 4.5 razem z systemem

0
Duo94 napisał(a):

Nie chcę, aby wymagało to zbędnych programów jak np NetFramework.

To polecam WinAPI i np. C++.

0

Gra jest starsza. Trudno, żeby napisać w tym języku skoro nawet nie wiem w jakim została napisana. Ja tylko chcę dorobić takie mini aktualizacje listy serwerów.

.NET framework zbędny? Nawet sterowniki do kart graficznych radeona wymagają .NET Framework
w wersji 2.0 jest zainstalowany praktycznie na każdym komputerze
wersja 3.5 jest na co najmniej 60% komputerów (ciężko znaleźć dokładne statystyki)
każdy nowy komputer z windows 8 dostaje wersję 4.5 razem z systemem

Chodzi mi, o to żeby każda potencjalna osoba nie musiała go instalować.

0

Mogę jak @mcoder polecić WinAPI, a jeżeli nie C++, to może być Delphi. I jeżeli nie chcesz WinAPI, a nie zraża Ciebie to że exek updatera będzie o wiele większy niż sam aktualizowany plik i ogólnie będzie rozmiarów rzędu 200 kb i więcej, nawet po spakowaniu UPX'em to moze być VCL. Do wspomnianych języków na sieci jest wiele kursów. Więcej jest chyba kursów dla WinAPI i C++, także po polsku. Dla WinAPI i Delphi od siebie moge polecić poza dokumentacją na MSDN, tę oto stronę: http://www.angelfire.com/hi5/delphizeus - natomiast do obsługi TCP dla pobierania na przykład protokołem HTTP tego pliku do aktualizacji, polecam pod WinAPI ten moduł: http://piechnat.pl/article/simpletcp.html - a dla VCL Synapse.

2
olesio napisał(a):

może być Delphi.

Delphi ma składnie, której przyzwyczajenia przeszkadzają w nauce innych języków.

Po co pisać:

var
   i : integer;
begin
  i := i + 1;
  if i = 5 then begin ShowMessage('i = 5'); end;
end;

jak można krócej:

int i;
i++;
if(i == 5) { MessageBox(0, "i == 5", 0, 0); }

Mówią, że te słowa angielskie pomagają w zrozumieniu początkującym.
To może zrobimy język w stylu:

please declare variable named i of type integer;
please increment i by one;
if i is equal to 5 show message box with text 'i = 5';
1

Dla większości ludzi składnia to tylko składnia, begin i end występują chociażby w Ruby, język to tylko narzędzie i pewna abstrakcja. Niestety takie poglądy są częste wśród newbie, całe szczęście zazwyczaj z nich wyrastają.

mcoder napisał(a):

Mówią, że te słowa angielskie pomagają w zrozumieniu początkującym.
To może zrobimy język w stylu:

please declare variable named i of type integer;
please increment i by one;
if i is equal to 5 show message box with text 'i = 5';

Ktoś już to zrobił i nazwał COBOLem.

1
mcoder napisał(a):

Delphi ma składnie, której przyzwyczajenia przeszkadzają w nauce innych języków.

Po co pisać:

var
   i : integer;
begin
  i := i + 1;
  if i = 5 then begin ShowMessage('i = 5'); end;
end;

Jak już to

var
  i: Integer;
begin
  Inc(i);
  if i = 5 then
    ShowMessage('i = 5');
end;

Aby krytykować inny język najpierw trzeba go poznać. Może uzasadnisz dlaczego to niby znajomość Delphi przeszkadza w nauce innych języków bo to że składnia jest odrobinę dłuższa raczej nie jest sensownym argumentem. Tak samo poznasz co to zmienna, funkcja, klasa itd. więc o co chodzi?

3

@mcoder: co kuhwa, za przeproszeniem?!

Po co pisać: (...) skoro można krócej: (...)

A po co pisać:

int i;
i++;
if(i == 5) { MessageBox(0, 'i == 5', 0, 0); }

Skoro można krócej:

#define m MessageBox
int _;_++;if(_==5)m(0,'i==5',0,0);

Lub czytelniej:

Var i: Integer;
Begin
  Inc(i);
  if (i = 5) Then
    ShowMessage('i = 5'); // lub Application.MessageBox lub Windows.MessageBox lub samo MessageBox.
End;

(btw, oba te kody to undefined behavior, wiesz o tym oczywiście?)
(btw2, 'foo' to w C++ nie jest ciąg znaków, tylko liczba! Ten Twój siplasplasowy mesedżboks najpewniej się zcrashuje podczas wyświetlania)

Popieram @kAzek - wytłumacz, dlaczego rzekomo znajomość Object Pascala przeszkadza w nauce innych języków?
Ja mogę stwierdzić, że nauka C++ utrudnia naukę Pythona. Dlaczego? Bo tak. Jaki ma to sens?


Mówią, że te słowa angielskie pomagają w zrozumieniu początkującym. To może zrobimy język w stylu:

Istnieje wiele takich języków, nieczęsto używanych z oczywistego powodu.


[irony]Btw, w C++ istnieje zbyt wiele słów kluczowych. Piszmy w Brajnfuku! Bo w jakim celu ułatwiać pracę programiście, skoro można na wszystkie sposoby utrudniać?[/irony]
0
mcoder napisał(a)

Po co pisać: (...) skoro można krócej: (...)

To tak jakbyś napisał, że nauka któregoś z azjatyckich języków przeszkadza w nauczeniu się angielskiego, co jest oczywiście totalną bzdurą; Można umieć i jedno i drugie;

Od kiedy to krócej znaczy lepiej? Pascal akurat nie jest językiem, który ma składnię wymuszającą najwięcej znaków do wklepania - już bardziej można by przyczepić się Basica, ale tego typu porównania nie mają najmniejszego sensu;

I po co się czepiać? Przecież nikomu nie przeszkadza, że trzeba napisać kilka(naście) znaków więcej; Poza tym to Basic ma najprzyjemniejszą do pisania i analizowania składnię; A obfuskacja kodu przez nadźganie w nim połowy znaków specjalnych wcale nie sprawi, że program będzie działał lepiej/szybciej, za to utrudni jego zrozumienie;

Polecam więc powrócić do tematu poruszonego pierwotnie w tym wątku: "Autoupdater jaki wybrać język programowania" i przestać hejtować wszystko co popadnie.

1
Patryk27 napisał(a):

A po co pisać:

int i;
i++;
if(i == 5) { MessageBox(0, 'i == 5', 0, 0); }

Skoro można krócej:

#define m MessageBox
int _;_++;if(_==5)m(0,'i==5',0,0);

Lub czytelniej:

Var i: Integer;
Begin
  Inc(i);
  if (i = 5) Then
    ShowMessage('i = 5'); // lub Application.MessageBox lub Windows.MessageBox lub samo MessageBox.
End;

Mój kod jest i krótki i czytelny. A Twój pierwszy kod jest nieczytelny, a drugi nie jest krótki _

Patryk27 napisał(a):

(btw2, 'foo' to w C++ nie jest ciąg znaków, tylko liczba! Ten Twój siplasplasowy mesedżboks najpewniej się zcrashuje podczas wyświetlania)

Użyłem w C++ ' ' zamiast " ", bo ostatnio miałem za dużo styczności z Delphi. /me +1

Patryk27 napisał(a):

wytłumacz, dlaczego rzekomo znajomość Object Pascala przeszkadza w nauce innych języków?

Bo Delphi wyłącza myślenie i jest zbyt niechlujne. Np. rozróżnianie wielkości liter czy wywoływanie procedur w stylu myProc; oraz myProc();

Ktoś napisze: "Fajne to Delphi, bo mogę pisać myProc; oraz myProc(); oraz MYPROC; i będzie to samo. To może będziemy pisać żółw albo żułw albo rzułf itd. hehe

0

jedyny zły nawyk jaki się wynosi z delphi to porównanie przez pojedynczy znak równości
po przejściu na inny język notorycznie się zdarzało zrobić przypisanie zamiast porównania

poza tym - język jak język

2

Mój kod jest i krótki i czytelny. A Twój pierwszy kod jest nieczytelny, a drugi nie jest krótki _

No ok, przyjmijmy, że tak jest.
Delphi za to nadrabia normalnymi tekstami błędów, w porównaniu do niektórych Visualowych: LNK431123123987 BECAUSE FUCK YOU (;P) czy błędów GCC w szablonach, gdzie nagle wypluwa kilkaset linijek błędów z powodu literówki.
Btw, mierzysz "jakość" języka względem ilości słów kluczowych składni? :|

Np. rozróżnianie wielkości liter

Windows też nie rozróżnia wielkości liter w nazwach plików oraz folderów/katalogów/whateva, a jednak ludzie (w tym programiści :P) z niego korzystają.

czy wywoływanie procedur w stylu myProc; oraz myProc();

A kto Ci zabroni pisać wszędzie myProc();?

Ktoś napisze: "Fajne to Delphi, bo mogę pisać myProc; oraz myProc(); oraz MYPROC; i będzie to samo. To może będziemy pisać żółw albo żułw albo rzułf itd. hehe

Twoje ostatnie zdanie nie ma sensu, jak już, to powinno być: "To może będziemy pisać żółw, ŻÓŁW, Żółw".
Widać, że u Ciebie coś myślenie szwankuje, lecz nie jest to bynajmniej wina Delphi.

6

Najfajniejsze jest to, że na forum ogólnie hejtuje się Delphi, mówi o dzieciach Delphi, hakerach piszących w Delphi boty do Tibii, ale jak @mcoder pisze o nim źle, to nagle okazuje się cudownym językiem. :D

0

@somekind: nikt nie twierdzi, że Delphi jest cudownym językiem; po prostu co innego fakt, że script kiddies mają tendencję do pisania "wuasnych botuff" do Tibii w Delphi, a co innego, gdy już chodzi o irracjonalny hejt na tę odmianę Pascala.

8

@mcoder: Delphi to słabszy język od C++ (chociaż FPC daje radę), ale nie z powodów które podajesz.
Gdyby zwięzłość języka miała znaczenie to wszyscy byśmy programowali w C/Perlu i cieszyli się na widok kodu który nikt poza nami nie rozumie.

Delphi/FPC - plusy:

  • czytelna składnia (w tym begin/end) - to plus
  • lepsza modularność niż w C/C++ (interface/implementation/initialization/finalization)
  • czytelniejsza zmienna liczba parametrów funkcji
  • czytelna deklaracja delegatów (w odróżnieniu od C - poprawione dopiero w C++ - Boost::function, w standardzie od C++11)
  • dwa sposoby na przekazywanie obiektów (referencja i interface) - zamiast 6-ciu w C++: referencja, const referencja, wskaźnik, wartość, smart pointer, r-value ref - "zabawne" zwłaszcza przy budowaniu szablonów
  • wbudowana obsługa foreach (for-in) - w C/C++ dostępne od C++11 (range-based for)
  • jedna klasa bazowa (TObject)
  • wbudowany mini garbage collection przez słowo "interface"
  • lepsze RTTI (co umożliwiło lepsze zarządzanie komponentami)
  • słowo kluczowe override (w C++ dostępne od C++11)
  • przenośność GUI - przez Lazarus/FPC
  • szybkie budowanie GUI
  • łatwość parsowania języka
  • wydajność execa (jeśli FPC)

Delphi - minusy

0

W najnwoszych delphi, string to unicodestring inaczej

0

@Duo94: a tak w temacie to takiego toola zrobiłbym w FPC/Lazarus ew. z użyciem KOL-a.

FPC/Lazarus:
http://www.lazarus.freepascal.org/

KOL (mniejsze execi, prawdopodobnie więcej roboty)
http://kolmck.net/

plus jakiś dodatkowo komponent do aktualizacji - np. ten (nie wspierają FPC, ale możliwe że zadziała - tylko ryzyko):
http://www.tmssoftware.com/site/wupdate.asp

3
Patryk27 napisał(a):

@somekind: nikt nie twierdzi, że Delphi jest cudownym językiem; po prostu co innego fakt, że script kiddies mają tendencję do pisania "wuasnych botuff" do Tibii w Delphi, a co innego, gdy już chodzi o irracjonalny hejt na tę odmianę Pascala.

Ale gdzie w negatywnej opinii jest ten "irracjonalny hejt"? To zjawisko spotyka tutaj raczej @mcodera, tylko dlatego, że wymienił kilka konkretnych wad Delphi. A to, co opisał, czyli np. rozwlekłość składni (sekcja var, pojebane begin i end), nierozróżnianie wielkości liter, różne sposoby wywoływania metod (o ile dobrze zrozumiałem, to jest to syf największy z możliwych), "udziwnione" operatory porównania i przypisania. Takie rzeczy faktycznie nakłaniają do pisania niechlujnego kodu, i utrudniają zmianę języka, bo wymaga ona złamania wielu przyzwyczajeń.

0
somekind napisał(a):
Patryk27 napisał(a):

@somekind: nikt nie twierdzi, że Delphi jest cudownym językiem; po prostu co innego fakt, że script kiddies mają tendencję do pisania "wuasnych botuff" do Tibii w Delphi, a co innego, gdy już chodzi o irracjonalny hejt na tę odmianę Pascala.

Ale gdzie w negatywnej opinii jest ten "irracjonalny hejt"? To zjawisko spotyka tutaj raczej @mcodera, tylko dlatego, że wymienił kilka konkretnych wad Delphi. A to, co opisał, czyli np. rozwlekłość składni (sekcja var, pojebane begin i end), nierozróżnianie wielkości liter, różne sposoby wywoływania metod (o ile dobrze zrozumiałem, to jest to syf największy z możliwych), "udziwnione" operatory porównania i przypisania. Takie rzeczy faktycznie nakłaniają do pisania niechlujnego kodu, i utrudniają zmianę języka, bo wymaga ona złamania wielu przyzwyczajeń.

To co Ty odczytujesz jako wadę - dla niektórych jest zaletą. Np. w C/C++ HttpExReader i HTTPExREader to dwa różne identyfikatory - współczucie dla osoby wspierające kod, który używa obu wersji. Kod w Pascalu jest dla mnie bardziej czytelny, ale to już subiektywna opinia.

3
somekind napisał(a):
Patryk27 napisał(a):

@somekind: nikt nie twierdzi, że Delphi jest cudownym językiem; po prostu co innego fakt, że script kiddies mają tendencję do pisania "wuasnych botuff" do Tibii w Delphi, a co innego, gdy już chodzi o irracjonalny hejt na tę odmianę Pascala.

Ale gdzie w negatywnej opinii jest ten "irracjonalny hejt"? To zjawisko spotyka tutaj raczej @mcodera, tylko dlatego, że wymienił kilka konkretnych wad Delphi. A to, co opisał, czyli np. rozwlekłość składni (sekcja var, pojebane begin i end), nierozróżnianie wielkości liter, różne sposoby wywoływania metod (o ile dobrze zrozumiałem, to jest to syf największy z możliwych), "udziwnione" operatory porównania i przypisania. Takie rzeczy faktycznie nakłaniają do pisania niechlujnego kodu, i utrudniają zmianę języka, bo wymaga ona złamania wielu przyzwyczajeń.

Może i wymienił kilka konkretnych wad Delphi, lecz nie wspomniał o żadnej wadzie składni siplasplasowatej, a takich jest również niemało.

A to, co opisał, czyli np. rozwlekłość składni (sekcja var...

Sekcja var może i faktycznie być czymś dziwnym dla kogoś, kto cały czas pisze w C++, lecz w gruncie rzeczy fajnie jest mieć wszystkie zmienne zadeklarowane w jednym miejscu.
Dzięki temu można uniknąć sytuacji pokroju:

int main()
{
 int i = 1;
 
 {
     int i = 2;
 }
}

Yup, ten kod jest poprawny i kompiluje się

Chociaż z drugiej strony dzięki deklarowaniu zmiennych stricte tam, gdzie są potrzebne, uniknąć można np.tego:

Var ListX, ListY, ListZ: TSplittingPlaneList;
    Sp                 : PSplittingPlane;
    I, Index           : Integer;
    Tri                : TTriangle;

    Axis: Integer = __NOAXIS;

    sx, sy, sz, bx, by, bz, _width, _height, _depth, hw, hh, hd, _x, _y, _z: Double;

    O, P0, P1, P2, E0, E1, E2: TVector3;

    traversal_cost, intersection_cost, best_cost, cost, nosplit_cost, split_position, surface_area, templ, tempr, surface_area_l, surface_area_r: Double;

    nl, nr, flag: Integer;

    bounds0, bounds1: TBoundingBox;

Jest to fragment mojej implementacji k-d tree z SAH :P


pojebane begin i end

Dlaczego Twoim zdaniem pojebane?
Równie dobrze można by stwierdzić, że "pojebane" jest mało czytelne rozwiązanie z C++, czyli klamerki.


nierozróżnianie wielkości liter

W tym nie widzę żadnej wady. A może to właśnie wadą jest, że C++ nie rozróżnia wielkości liter?


różne sposoby wywoływania metod

Są tylko dwie metody (z nawiasami oraz bez) i naprawdę nie jest to syf największy z możliwych.
Nikt przecież nie zabrania Ci wszędzie pisać (); notacja beznawiasowa to tylko ułatwienie.

Ja mógłbym natomiast powiedzieć, że "wadą" C++ jest różny wybór przestrzeni nazw:

using namespace foo;
using foo::xyz;
foo::

Tylko czy naprawdę jest to wada? W rzeczywistości to przecież ułatwia pisanie kodu.
Podobnie ułatwia notacja beznawiasowa.


"udziwnione" operatory porównania i przypisania

Co jest w nich dziwnego?
= 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.

Natomiast można by powiedzieć, że w C++ operator przypisania jest 'dziwny':

int a, b, c;
a = b = c;

Co akurat ma swoje zalety (aka inicjacja wielu zmiennych na raz), lecz u początkujących może spowodować drobny mindfuck.


Takie rzeczy faktycznie nakłaniają do pisania niechlujnego kodu

Ale klamerki i makra z C++ oraz kompilatory, które bez specjalnych przełączników nie trzymają się w 100% standardu* to zachęcają do pisania poprawnego kodu [rotfl]

#include <iostream>
#define r return
#define HEX__(n) 0x##n##LU
#define c std::cout
#define u__(x) ((x&0x0000000FLU)?1:0)+((x&0x000000F0LU)?2:0)+((x&0x00000F00LU)?4:0)+((x&0x0000F000LU)?8:0)+((x&0x000F0000LU)?16:0)+((x&0x00F00000LU)?32:0)+((x&0x0F000000LU)?64:0)+((x&0xF0000000LU)?128:0)
#define t int
#define l for
#define u(d) ((unsigned char)u__(HEX__(d)))
#define $ unsigned t
#define n unsigned char
t main(){$ __[]={u(1101000),u(1101011),u(1111111),u(10000111),u(10001101),u(10100100)};l($ _=0;_<u(110);_++)c<<[_]($ $$)->n{r(n)$$-10*_;}(__[_]);r 0;}

Ten kod powyżej oczywiście wyświetla słowo hakier w konsoli, co widać na pierwszy rzut oka, czyż nie?**


Ach, no i to piękne deklarowanie wyrażeń lambda w C++! ```cpp []()->int{} ```

i utrudniają zmianę języka, bo wymaga ona złamania wielu przyzwyczajeń.

Och, zapamiętanie, że w C++ porównuje się poprzez ==, a nie = jest niewątpliwie ciężką zmianą, współczuję wszystkim, którzy borykają się z syndromem Pascalowego porównania [*]
Może jestem dziwny, ale jak zaczynałem uczyć się C++, to ten błąd popełniałem przez... 4 godziny? Potem się przyzwyczaiłem i teraz już właściwie zawsze piszę == (jeżeli mowa o składni C-podobnej) oraz =, jeżeli mowa o Pascalowo-podobnych językach.


`*` np.: ```cpp int len; cin >> len; char tab[len]; ``` `**` oczywiście nikt takiego kodu zazwyczaj nie pisze - podałem jedynie przykład ukazujący, że czytelność języka nie zależy od składni (no, chyba, że mowa np.o Pythonie, ale pomijając języki z narzuconym formatowaniem kodu), tylko od programisty. Mówienie, że istnienie "begin" oraz "end" nakłania do pisania niechlujnego kodu to bullshit. Prędzej napiszesz coś nieczytelnego w C++, niżeli Pascalu.
0
Patryk27 napisał(a):

Ach, no i to piękne deklarowanie wyrażeń lambda w C++!

[]()->int{}

Lambda i "range-based for" - bez auto to przykład zwycięstwa lenistwa nad rozumem.
Tak samo zresztą jak "&&".

Fajne koncepcje, tylko że ten syntax obnaża czyjąś fobię przez słowotwórstwem.
Pewnie dlatego na "override" trzeba było czekać aż do C++11.

Zresztą "static" użyty w celu określenia że funkcja jest prywatna dla modułu to też dla mnie jakiś WTF.

5
Patryk27 napisał(a):

Może i wymienił kilka konkretnych wad Delphi, lecz nie wspomniał o żadnej wadzie składni siplasplasowatej, a takich jest również niemało.

Tzn. gdy piszę, że nie lubię zupy ogórkowej, muszę od razu wymienić wszystkie inne zupy, których nie lubię? Bez przesady...

w gruncie rzeczy fajnie jest mieć wszystkie zmienne zadeklarowane w jednym miejscu.

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

Równie dobrze można by stwierdzić, że "pojebane" jest mało czytelne rozwiązanie z C++, czyli klamerki.

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.

W tym nie widzę żadnej wady. A może to właśnie wadą jest, że C++ nie rozróżnia wielkości liter?

A nie rozróżnia? Bo zdaje się, że chodziło o nazwy zmiennych. W tym wypadku nierozróżnianie wielkości liter jest przyzwoleniem na niechlujstwo.

Są tylko dwie metody (z nawiasami oraz bez) i naprawdę nie jest to syf największy z możliwych.
Nikt przecież nie zabrania Ci wszędzie pisać (); notacja beznawiasowa to tylko ułatwienie.

Nie "tylko dwie", ale "aż dwie".
Gdy widzę nawiasy wiem, że mam do czynienia z wywołaniem funkcji. Gdy nawiasów nie ma, to wygląda jakoś dziwnie.

Spójrz na to z punktu widzenia wieloosobowej pracy nad kodem. Jeden będzie pisał wszystko małymi literami, inny wielkimi, jeszcze inny po wielbłądziemu, jeden będzie wywoływał funkcje z nawiasami, inny bez. To jest bałagan, czyli niechlujstwo. A gdy język na to nie pozwala, to przynajmniej ten problem jest z głowy.

= 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?

Ale klamerki i makra z C++ oraz kompilatory, które bez specjalnych przełączników nie trzymają się w 100% standardu* to zachęcają do pisania poprawnego kodu [rotfl]

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

podałem jedynie przykład ukazujący, że czytelność języka nie zależy od składni (no, chyba, że mowa np.o Pythonie, ale pomijając języki z narzuconym formatowaniem kodu), tylko od programisty.

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.

2
somekind napisał(a)

Tzn. gdy piszę, że nie lubię zupy ogórkowej, muszę od razu wymienić wszystkie inne zupy, których nie lubię? Bez przesady...

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.

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

Kto co woli; ja jestem przystosowany do składni Pascala, chociaż jak wspomniałem: rozwiązanie C++-owate nie jest złe (aka: ten fragment z mojego raytracera).

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.

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.

A nie rozróżnia? Bo zdaje się, że chodziło o nazwy zmiennych.(...)

Argh, chciałem napisać "może wadą C++ jest to, że właśnie jest case-sensitive".

(...) W tym wypadku nierozróżnianie wielkości liter jest przyzwoleniem na niechlujstwo.

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.

Gdy widzę nawiasy wiem, że mam do czynienia z wywołaniem funkcji. Gdy nawiasów nie ma, to wygląda jakoś dziwnie.

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)? ;)
No i dochodzi też druga kwestia: większość procedur tak czy siak posiada listę parametrów, więc nawiasy są nieuniknione (pomijając magicznie hacki kompilatora, ale nie o tym teraz jest mowa).

Spójrz na to z punktu widzenia wieloosobowej pracy nad kodem. Jeden będzie pisał wszystko małymi literami, inny wielkimi, jeszcze inny po wielbłądziemu, jeden będzie wywoływał funkcje z nawiasami, inny bez. To jest bałagan, czyli niechlujstwo. A gdy język na to nie pozwala, to przynajmniej ten problem jest z głowy.

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

A co w tym logicznego?

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
Można by natomiast się wykłócać o logiczność takiego C++owego kodu:

if (a=10)

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.

Właśnie - nieczytelnego programistę można nauczyć lepiej pisać, zatem możesz go nauczyć pisać tak, by nawet newbie zrozumiał (na)pisany przez niego kod.

Jak to afair powiedział Hal Abelson:

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

2
somekind napisał(a):

Są tylko dwie metody (z nawiasami oraz bez) i naprawdę nie jest to syf największy z możliwych.
Nikt przecież nie zabrania Ci wszędzie pisać (); notacja beznawiasowa to tylko ułatwienie.

Nie "tylko dwie", ale "aż dwie".
Gdy widzę nawiasy wiem, że mam do czynienia z wywołaniem funkcji. Gdy nawiasów nie ma, to wygląda jakoś dziwnie.

w c++ i praktycznie wszystkich pochodnych też możesz ominąć nawiasy przy new
możesz pisać zarówno

new klasa();

jak i: new klasa;

jeśli nie podajemy parametrów i w większości przypadków nie będzie różnicy

ale to takie odejście od tematu
tak naprawdę chciałem napisać:

<b>WYPIEPRZAĆ Z TYM TEMATEM DO FLAME'A</b>
0
Patryk27 napisał(a):

A co w tym logicznego?

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
Można by natomiast się wykłócać o logiczność takiego C++owego kodu:

if (a=10)

Czytelność czy nie to rzecz subiektywna, ale fakt jest taki, że operator porównania wywodzi się z matematyki gdzie:
a "=" b oznacza, że a ma taką samą wartość jak b

a operatora przypisania po prostu nie ma.

Dlatego dla matematyka bardziej naturalna jest pisownia Pascalowa, a nie "==" lub "===" lub "!==" (ałła)...

4
vpiotr napisał(a):

Dlatego dla matematyka bardziej naturalna jest pisownia Pascalowa, a nie "=="

Zwlaszcza, kiedy Matlab, R i co tam jeszcze wymyślisz uzywa ==.

3
Patryk27 napisał(a):

Sekcja var może i faktycznie być czymś dziwnym dla kogoś, kto cały czas pisze w C++, lecz w gruncie rzeczy fajnie jest mieć wszystkie zmienne zadeklarowane w jednym miejscu.
Dzięki temu można uniknąć sytuacji pokroju:

int main()
{
 int i = 1;
 
 {
     int i = 2;
 }
}

Yup, ten kod jest poprawny i kompiluje się

Czego chcesz unikać? Właśnie odkryłeś, że istnieją również inne rodzaje scopingu, niż ten jedyny słuszny w Pascalu...
Druga deklaracja i przesłania pierwszą na tej samej zasadzie, co zmienna lokalna może przesłonić zmienną globalną (block scoping pozwala to robić na jeszcze większą skalę). Drugie i ma niższy czas życia (co jest chyba w miarę oczywiste).

Patryk27 napisał(a):

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

if (a=10)

Okej.

int x;
while(x = nextCostam()) {
   //...
}

Nadal nielogiczne?

unikalna_nazwa napisał(a):

w c++ i praktycznie wszystkich pochodnych też możesz ominąć nawiasy przy new
możesz pisać zarówno

new klasa();

jak i: new klasa;

> jeśli nie podajemy parametrów i w większości przypadków nie będzie różnicy


Tak, tylko `new`, czy `sizeof` są dla odmiany <b>operatorami</b>, a to trochę zmienia postać rzeczy w kwestii nawiasów i w ogóle.


 > ##### [vpiotr napisał(a)](http://4programmers.net/Forum/963970):
> Czytelność czy nie to rzecz subiektywna, ale fakt jest taki, że operator porównania wywodzi się z matematyki

Operator dodawania też wywodzi się z matematyki i jest nim oznaczana suma dwóch punktów leżących na krzywej eliptycznej oraz masa innych rzeczy. Jednoznaczne definicje operatorów w matematyce, rly?

1 użytkowników online, w tym zalogowanych: 0, gości: 1