Avatar
Jurajs
Člen
Avatar
Jurajs:

Ahoj, učil jsem se OOP v Javascriptu a tak mě zajimá jestli, někde na netu nejsou další články OOP v JS ? Nemůžu totiž najít nic, jinak ten článek na itnetwork mi pomohl (děkuji), ale chtěl bych toho více...nevíte kde? Nějaký odkaz v CZ prosím.
Díky předem za odpovědi.

 
Odpovědět 15.9.2014 17:08
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Jurajs
Filip Pýrek:

Mno, podle mě to OOP tam stojí zanic...

Nahoru Odpovědět 15.9.2014 17:10
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Jurajs
Filip Pýrek:

Např. užití this ... Zkus Dart, a pak se podívej na OOP v JS (zkusil jsem, viděl jsem).

Editováno 15.9.2014 17:18
Nahoru Odpovědět 15.9.2014 17:18
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Jurajs
Honza Bittner:

Pokud opravdu toužíš po OOP JS tak opravdu využij například ten Dart... :)

Nahoru Odpovědět 23.9.2014 15:06
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Odpovídá na Jurajs
Michal Žůrek (misaz):

Ono OOP v JavaScriptu doplácí na (ne)výhody JavaScriptu. Pokud umíš pracovat s objektem, umíš jej vytvořit různými metodami a znáš takové základy, tak věř, že to je vše co lze napsat nějak rozumně. Třeba dědičnost, je tak složitá, že je mnohdy jednoduší aplikaci navrhnout tak, aby ji nepotřebovala. Do budoucna tu napíšu články o JavaScriptu (prvních 5 dílů, kde OOP zatím není je už publikovaných, čekaji na schválení), kde budu OOP tak nějak nakousávat a možná se to dostane do bodu, kdy budou čtenáři schopni pracovat s OOP v JS na rozumné úrovn, ale to tak s mojí rychlostí a časovou vytížeností možná příští rok.

Nahoru Odpovědět  +1 23.9.2014 18:19
Nesnáším {}, proto se jim vyhýbám.
Avatar
coells
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
coells:

Michale, často zdůrazňuji, že OOP neznamená slovo "class". Zatímco C# a Java si na OOP pouze hrají, Javascript a další dynamické jazyky v něm umožňují kouzlit.

Opravdový problém spočívá v tom, že všichni programují objekty, ale jen málokdo objektově. Když se opravdu naučíte OOP, přijde vám jeho princip v Javascriptu naprosto kouzelný. Prototypální dědičnost a povaha JS přímo svádějí k OOP a je to nesmírně mocná zbraň.

Pokud napíšeš, že se v JS dá "nějak rozumně" používat OOP, pak je to hluboké nepochopení některých principů. Vyzkoušejte si nějaký dynamický jazyk a programujte v něm. C# nebo Java vám pak budou přidat strnulé a nesmírně omezené.

 
Nahoru Odpovědět  +3 23.9.2014 19:22
Avatar
Odpovídá na coells
Michal Žůrek (misaz):

v jistém slova smyslu jsou všechny jazyky omezené. OOP JavaScriptu doplácí na jeho specifikum, měl jsem třeba na myslí, že když máš funkce uložené v proměnné, tak je nemůžeš přetížit a nebo můžeš, ale ten kód nebude

1.) dobře čitelný, asi nepochopíš hned že se jedná o primitivní přetížení
2.) není ani dobře udržovatelný, takové if počet parametrů, popřípadě if typ parametrů mi přijde takové hodně omezené, těžkopádné a nepřehledné.

A ano i C# a Java a všechny ostatní jsou nějak omezené. Umí třeba přetížené metody, ale neumí něco jiného a jsou tím handicapovány. JavaScriptový model je možná správný, ale mnohdy kostrbatý (alespoň podle mě), objekt pomocí klíčového slova function (function má více významů) nebo slovním se mi moc nezamlouvá, ale možná je to tak správně. OOP samozřejmě není jen o class, řekl bych, že je hlavně o způsobu přemýšlení a to se špatně učí. prototypová dědičnost je sice zajímavé, ale ve výsledku slovo extend/inherit udělá totéž (zkopíruje prototyp) akorát je to jednoduší na psaní, přehlednost, atd... Nicméně zase v JS lze s tím asi více kouzlit, na druhou stranu, kolik z nás to potřebuje? V JavaScriptu lze udělat spousta věcí, jen to není tak přehledné (o to víc věcí, však lze udělat) a tím, že to není ani příliš jednoduché, to prostě spousta lidí nezvládá, popřípadě výhodu těch vychytávek stejně pochopí až to v praxi budou potřebovat, tak se to i špatně učí. Trochu horší je to, když o těch vychytávkách ani netuší.

Závěrem: Ź každé nevýhody lze udělat výhodu a naopak. Čas od času na některou z výhod navazují nevýhody a naopak (na nevýhodu navazuje výhoda). Dokonalý programoví jazyk ani paradigma neexistuje. Někomu vyhovují class, někomu function a slovníky.

Nahoru Odpovědět 23.9.2014 19:39
Nesnáším {}, proto se jim vyhýbám.
Avatar
coells
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
coells:

Přetěžování v dynamických jazycích obvykle není možné už z principu - jestliže signatura funkce neobsahuje typy ani parametry, na základě čeho bys ji chtěl přetížit? Navíc přetěžování funkcí znepřehledňuje kód, což je v rozporu s dalšími argumenty, co uvádíš. Schopnost korektně pojmenovávat proměnné a funkce je jeden z ukazatelů kvalitních programátorských dovedností. Přetížené funkce svědčí o opaku (většinou to jde udělat lépe).

Neřekl jsem, že jeden model je správný a druhý nesprávný, jsou pouze odlišné a prototypy jsou perfektní do JS, protože skvěle doplňují jeho náturu. Třída není prototyp a prototyp není třída. Ano, zapomněl jsem na Visual Basic, ale pleteš se, inherits nekopíruje prototypy, ty fungují úplně jinak než třídy. Zatímco třída je statická záležitost, prototypy jsou dynamické. Možná, že právě tohle nepochopení je důvod, proč se ti nezamlouvá? Je totiž úplně jedno, jakým slovem definuješ objekty, může to být class, function, array a nebude to důležité, dokud budeš schopný aplikovat základní principy.

Z toho, co sem průběžně píšeš, je vidět, že jsi šikovný kluk. Proč si to pořádně nenastuduješ? Tvůj přístup "už umím OOP, protože Visual Basic má slovo inherits, takže se mi nelíbí Javascript, když to dělá jinak, protože je složitý (nerozumím mu)" naprosto neodpovídá tvé další prezentaci.

 
Nahoru Odpovědět  +3 23.9.2014 20:52
Avatar
Odpovídá na coells
Michal Žůrek (misaz):

Přetěžovat se musí v rozumné míře. Jestli jde o to tak i JavaScript má sám nějaké metody přetížené (nebo si na to hrají). Např. metoda drawImage na objektu CanvasRenderin­gContext2D (kontext canvasu).

Nahoru Odpovědět 27.9.2014 12:02
Nesnáším {}, proto se jim vyhýbám.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Zdeněk Pavlátka:

Metody se v JS často "přetěžují" kontrolou undefined v parametrech.

Nahoru Odpovědět 27.9.2014 12:06
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Michal Žůrek (misaz):

přesně to mi přijde strašně nepřehledné.

Nahoru Odpovědět 27.9.2014 12:09
Nesnáším {}, proto se jim vyhýbám.
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:

drawImage konkrétně kontroluje, jestli je první argument správná instance, čili Image nebo Canvas. Podle mě type hinting je moc přeceňovaný. Pokud zadá špatný argument, tak ho prostě v podmínce odchytím a skončí to chybou.

OOP v JS má i svou silnou stránku. Zatím jsem nenarazil na nic, co by nešlo.

 
Nahoru Odpovědět  +1 27.9.2014 13:55
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 13 zpráv z 13.