Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Diskuze: js a tridy

Aktivity (2)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6. března 12:05

Z tematu https://www.itnetwork.cz/…bdeb3bbd7f14

"JavaScript je postaven na prototypech a přirozené schopnosti delegace úloh (callbacky). Žádné přetížení operátorů, žádné třídy, žádná rozhraní."



Zrovnávaním hrušiek s jablkami?

Ano, doteď existuje spousta vývojářů, kteří si myslí, že Java a JavaScript je to stejné. A právě proto, jsem zdůraznil fakt, že v JS třídy NEEXISTUJÍ.

Takýchto sračiek - flame, zrovnaní a hejtu je plný internet...

Ano, a právě proto jsem popřel neplatný argument Petra, abych předešel nesrovnalostem a "flamu".

Více o třídách na Mozilla Developer Network
https://developer.mozilla.org/…ence/Classes



Otazkou je, jaky by melo smysl tam pridavat kod pro vytvareni trid, na jaky jsi zvykly z jinych jazyku? Pouzivat 'private' nema smysl. Public a static je v podstate vse ostatni.
Takze je mnohem jednodussi pouzit zapisy, ktere jsem uvedl, nez si komplikovat zivot se zapisem trid, jejichz vlastnosti vlastne nevyuzivas.

Tridy

  • maji smysl u serverovych jazyku, kdy se snazi oddelit uzivatele od systemu a od programu
  • maji smysl u prohlizece, kdy se snazi oddelit uzivatele od systemu
  • nemaji smysl u js stranky, kdy pracuji kompletne se strankou a nepotrebuji uzivatele od niceho odriznout. Navic, prohlizece umoznuji tento js kod ovlivnovat uzivatelem. Proste, pres js stejne zadne zabezpeceni delat nemuzes, tak proc tam resit private?

Zkusil jsem: .

Chci docílit: .

 
Odpovědět 6. března 12:05
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na Peter Mlich
Ilja Židkov:6. března 14:08

Dobře, vraťme se na začátek.

Peter Mlich

V JS tridy funguji, jen to musis spravne zapsat.

V JS třída NEEXSTIUJE... ...Class je tzv. "syntaktický cukr" pro konstrukor funkci.

Peter Mlich

Otazkou je, jaky by melo smysl tam pridavat kod pro vytvareni trid...

Kde jsem se o tom zmínil? Dokonce, aby toho nebylo málo, poukázal jsem na přirozenost JavaScriptu (konkrétně prototypů a callbacků).

Celý JavaScript je postaven na prototypech a přirozené schopnosti delegace úloh (callbacky). Žádné přetížení operátorů, žádné třídy, žádná rozhraní.

Můj jediný "definzivní" argument vůči TypeScriptu a "třídám" byl následující:

...Navíc díky ES6 a TypeScriptu můžeš psát kód, který je skoro identický C#.

Celá pointa tohoto komentáře byla "namotivovat" David Klouček, aby nemyslel, že JavaScript je "zapeklitý jazyk", ale naopak, obrovská příležitost na dnešním trhu.

Peter Mlich

Tridy....

tento odstavec nebudu komentovat, protože je to obecná teorie tříd (se kterou souhlasím), tudíž odklonění od původního tématu - v JS třídy neexistují jsou to konstruktor funkce.

 
Nahoru Odpovědět 6. března 14:08
Avatar
Odpovídá na Peter Mlich
Vladislav Ladicky:6. března 14:11

JS nemá triedy len preto, že bol inak myslený, nie z dôvodov tebou uvedených. Avšak, v praxi sa ukázalo, že sa "klasický" class syntax predsa len hodí...

Kvôli neschopním užívateľom. Hlavne takím, ako ten, čo sem písal, aký je JS zlý. Rýchlo kvasení programátori ktorí v praxi videli len OOP paradigmu, napríklad v C#, a tak je nad ich sily pochopiť dedičnosť postavenú nad reťazcom prototypov. No tak sa teda zaviedol do JS syntaktický cukor a pribudol class syntax, avšak na pozadí je to stále len a len reťazec prototypov...

To však konečne zafungovalo. Navyše to vcelku sprehľadnilo kód a tak sa toho chytili moderné frameworky. A tam sa ukázalo, že by sa vlastne hodili aj privátne premenné... Nie, že by už dávno nemohol mať JS objekt privátne premenné. Mohol. Ale trikom, cez uzáver, nie typicky, ako to OOP odchovanci očakávajú. To je však spôsob, aký by už lamy vôbec nedali, no tak padlo rozhodnutie, že pribudne aj deklarácia privátnych premenných...

Ony tam už vlastne sú, môžeš to vyskúšať v latest prehliadačoch, alebo použiť Babel...

class Rectangle {
  height = 0 // public field
  #width // private field

  constructor (height, width) {
    this.height = height
    this.#width = width
  }
}

Celý problém je, že deklarácia polí, ako verejných, tak privátnych, je stále len v stage 3. Čiže stále len ako experimentálna vlastnosť. AVŠAK už v stave kandidát, takže vysoká šanca, že aj vyjde v takom tvare v ESnext...

 
Nahoru Odpovědět  +1 6. března 14:11
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6. března 15:18

No, ono, class tam opravdu chybi. Ale pouzivat takoveto opisy? Proc nejdou do klasicke syntaxe?
Neni problem pouzit class jako jakysi spesl tag, neco jako v html kodu tag script.

Jediny problem i s tim zapisem, co uvadis, muzou mit ruzne syntax-highlight nebo minifikatory a stare prohlizece.

 
Nahoru Odpovědět 6. března 15:18
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Ilja Židkov
Peter Mlich:6. března 15:24

Mne osobne by potesilo, kdyby cely JS prekopaly uplne jinak :) A kdyby stejna syntax fungovala napric prohlizeci.

Nebo, kdyby byly univerzalni knihovny, ktere by prohlizec podporoval a nemusel jsi je pouzivat z netu, jako jquery, google mapy a pod.

Editováno 6. března 15:26
 
Nahoru Odpovědět 6. března 15:24
Avatar
Odpovídá na Peter Mlich
Vladislav Ladicky:6. března 15:30

Nie som si istý, že viem o čom hovoríš. Neexistuje "klasický syntax". Existuje princíp. A implementácia princípu, samotný syntax, dôležitý zrovna nie je. Ten sa zvykne líšiť jazyk od jazyka. A to je v poriadku...

A problém s tým nikto nemá. Určite nie syntax-highlighting, či minifikátory. A že s tým majú problém staré, neudržiavané prehliadače, ktoré proste nič z nového syntaxu nepodporujú ... čo k tomu dodať? Ich problém...

 
Nahoru Odpovědět  +2 6. března 15:30
Avatar
Ilja Židkov
Člen
Avatar
Ilja Židkov:7. března 9:21

Peter Mlich

No, ono, class tam opravdu chybi...

Děkuji, to jsem chtěl slyšet.

Vladislav Ladicky

Naprostý souhlas. A ano, o nejnovějších standardech mám přehled. Odebírám novinky od MDN, TypeScriptu a Microsoftu.

Děkuji za debatu.

 
Nahoru Odpovědět 7. března 9:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.