Proč je syntaxe programovacích jazyků tak složitá?

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #90 kdy: 25. 12. 2018, 15:51:09 »
stejnak radši tam prcnu {}... bez tych zatvorek v pythonu je pak stejnak potreba psát stovku krát slovíčko "end"... čož považujem za blbší řešení.


Kit

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #91 kdy: 25. 12. 2018, 16:22:00 »
stejnak radši tam prcnu {}... bez tych zatvorek v pythonu je pak stejnak potreba psát stovku krát slovíčko "end"... čož považujem za blbší řešení.

Nikdy jsem v Pythonu nepsal {} ani "end". K čemu by to bylo dobré?

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #92 kdy: 25. 12. 2018, 16:25:28 »
a jak sa teda ví že kde končí telo cyklu napríklad? jako Python moc neumím.

Kit

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #93 kdy: 25. 12. 2018, 16:46:30 »
a jak sa teda ví že kde končí telo cyklu napríklad? jako Python moc neumím.

Ukončíš odsazení.

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #94 kdy: 25. 12. 2018, 18:37:00 »
No a to je ešte horšie než end... pretože si pak nemôžem uživateľsky prispôsobiť formátovanie kódu. A okrem toho čo je odsadenie? pojem jasnej, ale z pohladu súboru to niekde sú 2 medzery, niekde 4 medzery, niekde tab, niekde inde zas neco jiného. A najmä miešať kombinácie odsadenia je niečo čo si koleduje o problém, a zas ak by sa nemiešali, no neviem jak by sis zarovnal pod sebe zložitejšie kódy, trebárs už u parametrov funkcií musí to byť docela problém, mať tie parametre rozpísané na viac riadkov. Ak to i samotný jazyk / kompilér vie zhltnúť ok, ale čo uživateľ. Jak rozozná čo je odsadenie/zarovnanie a čo ukončenie nejakého bloku kódu.... proste to je chaos.


Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #95 kdy: 25. 12. 2018, 18:42:17 »
príklad z wikipedie:

Kód: [Vybrat]
def qsort(L):
    if L == []:
        return []
    pivot = L[0]
    return (qsort([x for x in L[1:] if x < pivot]) +
            [pivot] +
            qsort([x for x in L[1:] if x >= pivot]))

len pár riadkov kódu a už mi trvá dobrú sekundu zistiť ťo posledné 3 riadky vlastne predstavujú, a čo všetko pod return patrí. A když by za tím pokračoval kód (teda kdby to nebyl return), a kdyby toho kódu bolo 100 riadkov, tak som totálne z toho... by mi proste trvalo niekoľko sekúnd len pochopiť čo pod čo patrí.

Kód: [Vybrat]
from itertools import count

def generate_primes(stop_at=0):
    primes = []
    for n in count(2):
        if 0 < stop_at < n:
            return # raises the StopIteration exception
        composite = False
        for p in primes:
            if not n % p:
                composite = True
                break
            elif p ** 2 > n:
                break
        if not composite:
            primes.append(n)
            yield n

no a skombinuj si formatovanie prvého a druhého kódu... a sme v koncích.
« Poslední změna: 25. 12. 2018, 18:47:46 od Gabriel Mlocik »

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #96 kdy: 25. 12. 2018, 18:55:29 »
No a to je ešte horšie než end... pretože si pak nemôžem uživateľsky prispôsobiť formátovanie kódu. A okrem toho čo je odsadenie? pojem jasnej, ale z pohladu súboru to niekde sú 2 medzery, niekde 4 medzery, niekde tab, niekde inde zas neco jiného. A najmä miešať kombinácie odsadenia je niečo čo si koleduje o problém, a zas ak by sa nemiešali, no neviem jak by sis zarovnal pod sebe zložitejšie kódy, trebárs už u parametrov funkcií musí to byť docela problém, mať tie parametre rozpísané na viac riadkov. Ak to i samotný jazyk / kompilér vie zhltnúť ok, ale čo uživateľ. Jak rozozná čo je odsadenie/zarovnanie a čo ukončenie nejakého bloku kódu.... proste to je chaos.

Není. Což bys věděl, kdybys věděl.

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #97 kdy: 25. 12. 2018, 19:04:36 »
príklad z wikipedie:

Kód: [Vybrat]
def qsort(L):
    if L == []:
        return []
    pivot = L[0]
    return (qsort([x for x in L[1:] if x < pivot]) +
            [pivot] +
            qsort([x for x in L[1:] if x >= pivot]))

len pár riadkov kódu a už mi trvá dobrú sekundu zistiť ťo posledné 3 riadky vlastne predstavujú, a čo všetko pod return patrí. A když by za tím pokračoval kód (teda kdby to nebyl return), a kdyby toho kódu bolo 100 riadkov, tak som totálne z toho... by mi proste trvalo niekoľko sekúnd len pochopiť čo pod čo patrí.

Nepruď.

Když uděláš 100 řádků metodu tak budeš po zásluze trpět jako zvířete i s {} nebo begin end.

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #98 kdy: 25. 12. 2018, 19:15:13 »
ani ne... príklad takého pomerne syntakticky prehľadného kódu je:

Kód: [Vybrat]
unsigned char* b_e(const char* text) {
  if (text == NULL) {
    return NULL;
  }
  if (text[0] == '\0') {
    return '\0';
  }
  size_t k = strlen(text);
  unsigned char* t = (unsigned char*)calloc((k+1), sizeof(char));
  int b[k][8];
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 8, m = 0; j > 0; j--, m++) {
      b[i][m] = (text[i] & (1 << (j-1))? 1 : 0);
    }
  }
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 0; j < 4; j = (j+2)) {
      int d;
      d = b[i][j];
      b[i][j] = b[i][j+1];
      b[i][j+1] = d;
    }
  }
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 4; j < 8; j++) {
      b[i][j] = (b[i][j]^b[i][j-4]);
    }
  }
  int x[k];
  for (size_t i = 0; i < k; i++) {
    int d = 0;
    for (size_t j = 0; j < 8; j++) {
      if (b[i][j] == 1) {
        d = d * 2 + 1;
      } else if (b[i][j] == 0) {
        d *= 2;
      }
    }
    x[i] = d;
  }
  for (size_t i = 0; i < k; i++) {
    t[i] = (unsigned char)x[i];
  }
  t[k] = '\0';

  return t;
};

čož mi prijde v pohode čitelné, snaď jediná nečitatelnosť je pomenovanie premenných, i když i to je pre mňa v pohode čitelné. p.s. je to môj vlastný kód
« Poslední změna: 25. 12. 2018, 19:17:52 od Gabriel Mlocik »

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #99 kdy: 25. 12. 2018, 19:36:11 »
a okrem toho 100+ znakové metódy môžu mať zmysel... na čo je deliť na 2, když samostatne tie 2 metódy nikdy volať nebudeš, ale budeš je chcieť vždy vykonať za sebou? Nehovoriac že sa medzi metódami bude musieť prenášať "medzivýsledok", čož je zbytočne navyše.
« Poslední změna: 25. 12. 2018, 19:38:12 od Gabriel Mlocik »

Neviditelný

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #100 kdy: 25. 12. 2018, 19:45:58 »
No a to je ešte horšie než end... pretože si pak nemôžem uživateľsky prispôsobiť formátovanie kódu. A okrem toho čo je odsadenie? pojem jasnej, ale z pohladu súboru to niekde sú 2 medzery, niekde 4 medzery, niekde tab, niekde inde zas neco jiného. A najmä miešať kombinácie odsadenia je niečo čo si koleduje o problém, a zas ak by sa nemiešali, no neviem jak by sis zarovnal pod sebe zložitejšie kódy, trebárs už u parametrov funkcií musí to byť docela problém, mať tie parametre rozpísané na viac riadkov. Ak to i samotný jazyk / kompilér vie zhltnúť ok, ale čo uživateľ. Jak rozozná čo je odsadenie/zarovnanie a čo ukončenie nejakého bloku kódu.... proste to je chaos.
Kdybys Python aspoň trochu znal, věděl bys, jak to tam funguje. Odsazení tam musí být konzistentní, jestli budeš konzistentně používat tři tabulátory nebo jednu mezeru je fuk, dokud to bude všude stejně. Free-form jazyky jako třeba C vedou k tomu, že šest kousků kódu od šesti programátorů vypadají každý úplně jinak, což se ve finále čte ještě mnohem hůře. Nikam nevedoucí dohady o tom, kam při deklaraci proměnných patří "*", zda uvozující "{" patří na nový řádek nebo na konec stávajícího atp. budiž důkazem.

Způsob zápisu kódu v Pythonu žádný chaos není, naopak je to vymyšlené docela chytře.

ani ne... príklad takého pomerne syntakticky prehľadného kódu je:

Kód: [Vybrat]
unsigned char* b_e(const char* text) {
  if (text == NULL) {
    return NULL;
  }
  if (text[0] == '\0') {
    return '\0';
  }
  size_t k = strlen(text);
  unsigned char* t = (unsigned char*)calloc((k+1), sizeof(char));
  int b[k][8];
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 8, m = 0; j > 0; j--, m++) {
      b[i][m] = (text[i] & (1 << (j-1))? 1 : 0);
    }
  }
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 0; j < 4; j = (j+2)) {
      int d;
      d = b[i][j];
      b[i][j] = b[i][j+1];
      b[i][j+1] = d;
    }
  }
  for (size_t i = 0; i < k; i++) {
    for (size_t j = 4; j < 8; j++) {
      b[i][j] = (b[i][j]^b[i][j-4]);
    }
  }
  int x[k];
  for (size_t i = 0; i < k; i++) {
    int d = 0;
    for (size_t j = 0; j < 8; j++) {
      if (b[i][j] == 1) {
        d = d * 2 + 1;
      } else if (b[i][j] == 0) {
        d *= 2;
      }
    }
    x[i] = d;
  }
  for (size_t i = 0; i < k; i++) {
    t[i] = (unsigned char)x[i];
  }
  t[k] = '\0';

  return t;
};

čož mi prijde v pohode čitelné, snaď jediná nečitatelnosť je pomenovanie premenných, i když i to je pre mňa v pohode čitelné. p.s. je to môj vlastný kód
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #101 kdy: 25. 12. 2018, 19:54:13 »
rozhodne nesúhlasím.

Citace
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

čože? ja tam nikde nevidím dvojí způsob zápisu return NULL; Druhý if nieje kontrola na NULL ale na prázdnu hodnotu,... rozdiel:

« Poslední změna: 25. 12. 2018, 19:57:16 od Gabriel Mlocik »

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #102 kdy: 25. 12. 2018, 20:05:20 »
a okrem toho 100+ znakové metódy môžu mať zmysel... na čo je deliť na 2, když samostatne tie 2 metódy nikdy volať nebudeš, ale budeš je chcieť vždy vykonať za sebou? Nehovoriac že sa medzi metódami bude musieť prenášať "medzivýsledok", čož je zbytočne navyše.

Protoze ti to umozni veci pojmenovat.

Neviditelný

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #103 kdy: 25. 12. 2018, 20:11:20 »
rozhodne nesúhlasím.

Citace
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

čože? ja tam nikde nevidím dvojí způsob zápisu return NULL; Druhý if nieje kontrola na NULL ale na prázdnu hodnotu,... rozdiel:


Aha, takže je to tedy bug. '\0' má numerickou hodnotu nula, takže výsledek return NULL a return '\0' je stejný - vyzkoušej si to. (Pro hnidopichy: je stejný za předpokladu, že makro NULL je definováno jako nula.) Předpokládám, že spíš než return '\0' bylo myšleno return "". Vzhedem k tomu, že ten kód jinak vrací pointer na dynamicky alokovanou paměť by ale i to bylo špatně.

Mlocik97

  • *****
  • 894
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #104 kdy: 25. 12. 2018, 20:17:57 »
rozhodne nesúhlasím.

Citace
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

čože? ja tam nikde nevidím dvojí způsob zápisu return NULL; Druhý if nieje kontrola na NULL ale na prázdnu hodnotu,... rozdiel:


Aha, takže je to tedy bug. '\0' má numerickou hodnotu nula, takže výsledek return NULL a return '\0' je stejný - vyzkoušej si to. (Pro hnidopichy: je stejný za předpokladu, že makro NULL je definováno jako nula.) Předpokládám, že spíš než return '\0' bylo myšleno return "". Vzhedem k tomu, že ten kód jinak vrací pointer na dynamicky alokovanou paměť by ale i to bylo špatně.

ne neni to stejný.... ani zdaleka. skus odstraniť overenie na NULL, a predaj ten metóde parameter NULL, nepôjde to.
Zatiaľ čo NULL znamená NULL teda nič. Tak prázdna hodnota znamená že je niekde v pamäti miesto, kde je premenná s prázdnou hodnotou. A '\0' je v podstate zakončenie stringu, ktorá je v C reprezentovaná poľom znakov.

Protoze ti to umozni veci pojmenovat.

a čo z toho pomenovania mám? to je jak kdybych si prišiel do mcdonaldu a pomenoval by som každú časť hamburgera ktorý si chem kúpiť... namiesto teda "chcem kurací hamburger" by som povedal "chcem dolnú časť žemle hamburgeru na ňom kurací rezeň, a na ňom hornú časť žemle hamburgeru". Abstrakce k hovnu.