Přejít k navigační liště

Zdroják » Zprávičky » Jak se mohou dobré návyky z C# změnit ve špatné JavaScriptové

Jak se mohou dobré návyky z C# změnit ve špatné JavaScriptové

Zprávičky Různé

Obvykle se hovoří o tom, že špatné návyky v populárních a jednoduchých jazycích (dřív to byl BASIC, dnes je v roli „generátoru špatných návyků“ PHP a JavaScript) znesnadňují učení „těch správných“ (podle preferencí buď Java nebo C#). Pravidlo ovšem platí do jisté míry i opačně – někdy akademicky čistý přístup a dobrý návyk z, řekněme, C# naopak může být, při mechanickém použití v jiném jazyce, špatný. Článek How Good C# Habits can Encourage Bad JavaScript Habits z webu Enterprise jQuery ilustruje na příkladech právě tento problém

Komentáře

Subscribe
Upozornit na
guest
42 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
KapitánRUM

Při hodnocení Javascriptu se mi nedostává slov. Třídy…hledání chyb…BLEEE
Ano, je užitečný a oproti FLASH je jen 1/3 zlem. Nejhorší je, že existují i DOBRÉ VARIANTY Javascriptu. Jsou podobné Java, mají skutečné třídy a proměnnou musíte deklarovat aby se dala použít(returnca­ll_object vs returncall_obect). Používají se při programování drobných aplikací pro mobilní telefony. Jen ten Javascript pro prohlížeče je taková S^@&|(@

KapitánRUM

*pro některé mobilní telefony s vlastní implementací JS pro tvorbu obdoby Widgetů (ne, nepletu si to s JavaME)

blizzboz

No práve flash obsahuje ActionSript čo je vpodstate vylepšený Javascript o triedy a namespaces (ECMA Script 4) tj dá sa v ňom programovať podobnym štýlom ako v C# alebo Jave.

KapitánRUM

Jenže ADOBE….a já jsem proti kradení software (pokud to není nezbytně nutné). S FLASH jsi postupně tlačen do nákupu dalších a dalších drahých nástrojů a pak i do jejich upgrade. FUJ. Zlatej Microsoft, to už je 1000000000x Silverlight.

KapitánRUM

* lepší Silverlight….jsem nějakej unavenej.

pas

Co to tady zase šíříte za bludy? Vyvíjet pro Flash se dá zcela zdarma. K dispozici je množství kvalitních vývojových prostředí (IntelliJ IDEA, Flash Develop, Eclipse, …), do kterých zaintegrujete SDK, které Adobe poskytuje zdarma a jako open source. A samozřejmě, ActionScript je o třídu vyspělejší jazyk než JavaScript, má blíže k C# nebo Javě.

MyOwnClone

„maji skutecne tridy“ – pro jejich emulaci muzete pouzit napriklad Protype.js. Navic mi prijde ze prototypove OOP v klasickem JS ma i znacne vyhody, jen je potreba si zvyknout. „promennou musite deklarovat“ – pokud nekde spatne napisete jmeno promenne, vetsinou to shori na nullpointeru (nebo jak se to v JS jmenuje), takze na to clovek casem stejne prijde.

blizzboz

Protype.js je jeden z najpomalších JS Frameworkov a tá emulácia tried je len taká polovičatá mne to rozhodne nestačí na plnohodnotné programovanie. Programovať v Javascripte je ako hrať Futbal bez jednej nohy.

KapitánRUM

Přesně tak.

okbob

No musí se to umět – potkal jsem už pár lidí, kteří v Javascriptu hodně dobře uměli, a když se to umí …

KapitánRUM

Ale jo, jasně že se v tom dají dělat kouzla.
Jde o ten kontrast. Java EE – třídy, PHP – třídy, ASP.NET – třídy.
Jscript – úplně jiný svět.
Pokud děláš serverovou i klientskou část v JS, s velkou pravděpodobností jedno vyhnojíš*. Pokud ovšem tu serverovou část neděláš v PHP, to dost možná vyhnojíš* obojí :-D A dokonce se odvážím tvrdit, že v PHP jde psát kvalitativně lepší kód než v JS.

*poznámka autora (pohnojit = trochu podělat, vyhnojit = po měsíci a deseti úpravách to je na přepsání)

okbob

jasně, že je to úplně něco jiného – tady nejde ani o rozdíl v jazyku, ale o prostředí ve kterém běží kód – a je něco jiného generovat HTML a něco jiného psát event based aplikace. Fakt netuším, čím by měl být PHP lepší jazyk než Javascript. To spíš, že se PHP používá na server side kód, tak můžete mít pocit, že výsledný kód je přehlednější – nicméně je to jen pocit :)

blizzboz

problém je v prvom rade v jazyku, JavaScript je zlý jazyk. Ešte som nevidel JS aplikáciu ktorá by nemala problémy. keby to tak nebolo nevznikali by technológie typu GWT, Qooxdoo snažiace sa oslobodiť programátora od používania JavaScriptu.

rooobertek

Furt je to len javascript.
Napríklad taký FireBug je zlý? Je napísaný v javascripte a je to jeden z mojich najlepších pomocníkov.

okbob

Ale jo, jasně že se v tom dají dělat kouzla.
Jde o ten kontrast. Java EE – třídy, PHP – třídy, ASP.NET – třídy.
Jscript – úplně jiný svět.

Kontrast je dobrá věc – svět je pestřejší – a programátoři možná pak o něco menší zombíci a drtiči kódu.

Blbost

Co mají co dělat v javascriptu třídy???

Javascript má objektový system založený na prototypech, ale většina lidi je natolik tupých, ze se s tímto objektovým systémem nedokážou pracovat…

Snažit se nějakým způsobem vytvořit třídní objektový system v javascriptu mě přijde stejně užitečné jako tvořit objektový system v jazyce C!!

Pokud jste natolik tupý ze nedokážete pracovat s objektovým systémem založeným na prototypech, použijte objective-J…

KapitánRUM

Ano i ne.
Ano, z hlediska hnusného JS.
Ne, z hlediska programátora, který musí psát serverovou i klientskou část a obojí s jiným přístupem.

Uvedu několik argumentů proč pro mé tvrzení, že JS je kýbl opičích zvratků.
Nezbytnost používání knihoven jako je jquery.
Zoufalé snahy o záchranu situace pomocí knihoven jako je Protype.
Skript by se měl dát snadno použít i bez knihoven, aniž by se muselo psát XY řádků zbytečného kódu.

Blbost

Nezbytnost používání knihoven jako je jquery.

OK souhlasím s tím, že že implentace v prohlížečích je mizerná, ale to není chyba jazyka. Jazyk jako takový mě osobně přijde velmi zajímavý…

Javascript můžete použít i na serveru… V ASP.NET je to celkem jednoduché…

A nebo pokuď nechcete podporovat mrkvosoft, tak lze použít javascript ve spojení s java…

http://jssp.sourceforge.net/
http://torino.sourceforge.net/docs/programming.php

KapitánRUM

Nemá smysl hodnotit jazyk, v tom problém není.
Ano, asi nic z toho co JScriptu vytýkám není problém samotného jazyka.
Tedy až na to nešťastné používání nedeklarovaných proměnných, to je prostě zlo, které nevím jestli připsat na vrub návrhu nebo implementaci.

Horší mi přijde to kombinování přístupů.
Nejenom mě, je to důvod proč vznikají ty různé pomocné knihovny simulující opravdové třídy.

Další bolestí je prakticky minimální možnost skrýt zdrojové kódy.
Ano, ano, open source, jo. Bla bla bla. Můžete prodávat podporu. Ale jak zabránit vykrádání Vašich návrhů? I když to zkomprimujete a zašifrujete, stejně se to musí za běhu rozšifrovat a k surovému JS se prostě lze dostat.
No, ale ani tohle není problém jazyka. Sorry, rád bych si SÁM rozhodl jestli do svých zdrojáků někoho pustím nebo ne. Za zmínku stojí i bezpečnostní hledisko. TUPÝ programátor validuje proměnné jen na straně klienta pomocí JS a HLOUPĚ si myslí, že mu do PHP nemůže přijít záludný kód. Ne, vadí mi to, že nechci publikovat některé složitě vymyšlené funkce a vychytávky.

O podpoře Javascriptu v prohlížečích snad ani nemá smysl mluvit.
Uvedu zde mnohonásobně zjednodušený kód.
function timer_tick(){glo­balniprom++;a­nimate();} počítá +2,+2,+2,+2
function timer_tick(){pric­tijedna();ani­mate();}
function prictijedna(){glo­balniprom++;} počítá +1,+1,+1
Dokud jsem to nezačal ladit, nevěděl jsem že znám tolik sprostejch slov.

A věci jako že:
Jeden prohlížeč podporuje „keypress“ druhý JEN „keydown“, jiný „mousewheel“ druhý „DOMMouseScroll“, skoro každý že jinak počítá hodnotu pootočení kolečka, IE8 sice podporuje HTML5 i s prvkem Canvas – jenže ten nejde inicializovat­…..no těch věcí bych mohl vyhrabat ještě hromadu.

KapitánRUM

Zmínil jsem se o HTML5: Tohle mi přijde jako největší sranda :-D

Možná se zobrazí přímo na stránce:

Užitečný prvek řekl bych….JENŽE zobrazte si ten kousek kódu ve FireFoxu a pak i v Chrome.

Jestli ne:
input type=“range“ min=“0″ max=“10″ step=“2″ value=“6″
Uzavřete to do <> a hoďte si někam na stránku.

okbob

Na rovinu – kód neschováte v žádném prostředí – není to technicky realizovatelné. Docela dobře lze dekompilovat jakýkoliv interpretovaný kód – a cizí binárku bych si na comp nikdy nepustil. Podívejte se např. co o obfuskaci píše MS k MSSQL serveru – jakmile dáte svůj kód z ruky, tak je to jen otázka času, kdy se objeví v otevřeném tvaru.

Blbost

Pravda, příklad za všechny je například java, kde pomocí reflexe člověk může věcí…

skret

Přesně tak. Navíc je naivní si myslet, že někdo bude vykrádat můj kód. Je určitě levnější a rychlejší si to naprogramovat znovu, než luštit zkompilovaný/ob­fuskovaný kód. Ani vykradení JS nemá moc smysl, protože to je jenom jedna (a většinou celkem malá) část systému.

P.S. Baví mě flamy o programovacích jazycích na tomto serveru. Vždycky se najde někdo, kdo si vybere nějakou část jiného jazyka a začne křičet, že recenzovaný jazyk je nepoužitelný protože danou věc neobsahuje (např. javascript je k ničemu není v něm ani goto). A všichni úplně zapomínají na základní pravidlo které znají i opice: vybrat si pro práci správný nástroj.

okbob

Tak mi vysvětlete, jak byste chtěl psát servrovou a klientskou část stejně – to je protimluv.

Blbost

No přece v javascriptu :-)

KapitánRUM

Aha, srandičky.
Zvláštní je, že Applety tu byly dlouho před FLASHem a dokonce i před samotným JS. Velmi mě mrzí, že tato technologie zemřela. No, osobně teď preferuji Silverlight. Na obou stranách mám C# a je vymalováno. Ano, měl bych raději Javu a honil to na Linuxovém serveru, ale svět asi nemůže být dokonalý.

Ad Applety. Možná, ale opravdu jen možná, za pár let JavaScript hodně vyspěje, zlepší se, bude obohacen o třídy, o interaktivní komponenty a dostane se konečně tam, kde byly Applety před 10 lety :-D

okbob

Vidíte a já ani jedno nemám rád – jsou to zbytečně těžké technologie – tuny balastu. Naopak mám rád jednoduchost a lehkost Javascriptu + třeba PHP. Ale asi záleží, co člověk píše – pro vizuální orgie je flash nebo Silverlight nezbytnost.

p.s. Šance, že by Javascript byl obohacen o třídy mi přijde jako dost malá – byl by to krok zpátky.

KapitánRUM

Proč zrovna JEN grafické orgie?
I celkem složitý frontend si můžu jen tak naklikat.
A víte že Aplikaci v Silverlightu lze nainstalovat i lokálně?
To jsou celkem podstatné výhody.
Jasně, moonlight není zrovna v nejlepším stavu, ale píšu aplikace pro lidi a ne pro servery, tak mi ani nevadí že se to na Linuxu nespustí.

KapitánRUM

…kdyby applety nebyly mrtvé, dělám to v Java…. a kdybych byl milionář, neřešil bych to vůbec…

okbob

Jasně že frontend si můžete naklikat, ale také nemusíte – což je můj přístup k tenkým klientům – tenký klient má být tenký a nikoliv „převlečený“ tlustý klient – což je přístup, který hrozně dlouho nemohl pochopit Microsoft a také jeho internetové aplikace byly díky tomu mimo intranet nepoužitelné – případně obtížně použitelné – prostě pomalé. Prostě je to o filozofii – pro Vás patrně bude lehký klient něco, co se nemusí lokálně instalovat, pro mne něco, co lze používat z internetu, když jsem na druhém konci světa, kde třeba není dobrá linka.

pas

Samozřejmě, když je něco v HTML/JS, tak je větší šance, že to spustíte někde uprostřed exotiky. Ale principiálně se přece Flash, Silverlight i HTML5 k sobě natolik přiblížili, že už tam je jen minimum rozdílů. Dobře napsaná aplikace ve Flashi může být i menší než její ekvivalent v HTML/JS, protože používá kompilaci do bytecodu, kompresi, a lépe řeší i cachování sdílených knihoven, které jsou digitálně podepsané a díky tomu použitelné napříč aplikacemi z různých domén (to pokud vím v JS chybí).

blizzboz

primitív hovorí primitívnym jazykom(Javas­cript), stačia mu jednoduché výzrazové prostriedky(pro­totypy)… primitív sa vyjadruje zbrklo a nepresne. elita hovorí zložitejším jazykom pretože v ňom vie lepšie popísať realitu a lepšie vyjadriť svoje pocity.

okbob

a znáte to, že v jednoduchosti je krása?

Blbost

Ale huš javascript můžete použít na straně serveru !!!
ve spojení s javou: http://jssp.sourceforge.net/
http://torino.sourceforge.net/docs/programming.php

nebo s platformou .NET, to by jste sám mohl vědět, že se kromě c# dají stránky psát i v jiném jazyce…

můžete také použít node.js například ve spojení s tímto: http://github.com/mrohad/Alligator

jinak pro úplnost: http://en.wikipedia.org/wiki/Server-side_JavaScript
http://en.wikipedia.org/wiki/Comparison_of_Server-side_JavaScript_solutions

KapitánRUM

Dávat JS ještě na server?
No. To bych byl dobrej exot.

Martin Malý

Odpověď je prostá: Node.js (viz) – těch dobrejch exotů je zjevně tolik, že Google na dotaz node.js registruje 13M stránek. Porozhlédněte se tam, jestli vás to zajímá a jestli si chcete udržet přehled o vývoji technologií…

KapitánRUM

Ano, ale je to něco asi jako 8M stránek které vyjedou když zadáte dotaz ,,used women’s pants“. Jinak ,,použité kalhotky“ -> 400 000 stránek a ,,Javascript na serveru“ 267 000. A obojí lze považovat pouze za neškodnou fetiš, dokud Vám to někdo nezačne vnucovat :-D

Martin Malý

Když myslíte…

KapitánRUM

Sice už nežijeme ve svobodné zemi, ale pořád si můžeme programovat v čem chceme. I když mi JS na serveru připadá jako určitá fetiš, patent na rozum nemám. Na můj názor se vůbec neohlížejte, vůbec nemusí být správný.
Je tu Haskel, Brainfuck a do třiceti let přijde zcela nový jazyk, který dost možná převálcuje všechny současné kandidáty na ,,Miss Universe“.

Martin Malý

Do třiceti let přijde takových věcí… :) Každopádně – fetiš nefetiš – se určitě shodneme na tom, že je dobré o nich alespoň vědět.

KapitánRUM

To v každém případě.
Mimochodem o tom vím už docela dlouho.
A myslím, že nedávno tady na rootu proběhl i nějaký článek.

logik

Ten člověk buďto neumí programovat, nebo myslet :-) Nadpis zní, jak dobré zvyky z C# se stanou blbé zvyky v JS. A první odstavec: nedělejte globální proměnné. Copak globální proměnné jsou v jakémkoli jazyku (C# zahrnujíc) dobrým zvykem??? Takže buďto si myslí, že ano (pak neumí programovat), nebo vyplodil nesmysl… :-)

Druhej odstavec je taky dobrej – ne že by [] nebylo elegantnější než = Array(),
ale pokud opravdu inicializuju jednoduché prázdné pole, tak je to čitelné naprosto stejně a že by fatální chyba programátora byla psát o pět znaků víc….??? To je IMHO daleko větší chyba si myslet, že globální proměnné
jsou Ok.

Zbytek článku obsahuje zajímavý věci, který by každej javascriptista znát měl, takže je dobře, že tady je linkovanej, ale některý „filosofický“ názory toho člověka jsou dosti zajímavé…

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.