Avatar
lalacekcz
Člen
Avatar
lalacekcz:

Zdravím, zhruba tři roky jsem s JavaScriptem nepracoval, nyní bych v něm chtěl zase programovat a rovnou v nové verzi. Po přečtení wikipedie https://en.wikipedia.org/wiki/ECMAScript#… nejsem moc moudrý. Takže bych se chtěl zeptat - co se nejlépe učit? Blíží se v blízké době ve světě JS něco zajímavého? Jaká je podpora v prohlížečích? Nějaká stránka, kterou by jste doporučili? :)

Uvítám vaše zkušenosti, rady a odkazy. Díky :)

 
Odpovědět 8. října 0:23
Avatar
Odpovídá na lalacekcz
Michal Žůrek (misaz):

Je nový standard ES6, pokud umíš dobře ES5, tak ES6 víceméně nepoužívej, protože si pouze omezíš možnosti a schopnosti JavaScriptu. ES6 zavádí funkce, které uměl ES5 taky akorát se to složitěji psalo, musel si nad tím více přemýšlet, ale zase to mělo víc možností co si s tím pak mohl dělat. Pokud ES5 dokonale neumíš, tak se nauč ES6, je to teď hrozně moderní, cool navíc se podobá spoustě jiných jazyků, tak je i mnohem jednoduší. Podpora je v dnešních prohlížečích celkem dobrá, ale skutečně jenom v dnešních. Existují nějaké věci, které ti zajistí, že i hodně staré prohlížeče budou ES6 rozumět.

Nahoru Odpovědět  -1 8. října 0:39
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

Možná kdybys věnoval víc pozornosti těm věcem, které zajišťují podporu v starých prohlížečích, pochopil bys skutečný význam nové specifikace.

Pokud máš pocit, že dokonale umíš es5 a radši bys ručně psal async a await věci pomocí switchů s nekonečnou podmínkou, generátory a iterátory, paráda. Pokud chceš kód stále balit do self-exec funkcí místo modulů, pokud chceš každý callback bindovat na this a nebo používat tu nechutnou prasárnu self, paráda.

Pokud chceš spojovat stringy jako blázen a trpět bolestí hlavy z hoistingu proměnných, mutovat argumenty funkcí, obejít se bez operátorů spread a rest, žít bez defaultního formálního argumentu, paráda.

Jen by ti asi mělo být celkem jasný, že se nikdo nebude obtěžovat po tobě ten kód číst, kód napíšeš pro sebe, napíšeš ho ani pro počítač, píšeš ho pro ostatní. Neměl bys ho proto psát tak, abys byl hrdej na to, jak umíš použít pět prvků a dostat z nich padesát konstrukcí, kód má mít eleganci, schopnost sebepopsání, kvalitu stojící nejen na výkonu a náročnosti na paměť ale i vysokou čitelnost, protože právě v ní spočívá znovuužitelnost kódu.

Vyjadřovat se k něčemu, co jsi evidentně vůbec ale vůbec nepochopil, je ale cool schopnost dnešních mladých programátorů, je to moderní mít názor na to, že všechno nové je na houby protože to už není dost spartanské jako za doby, kdy ses to učil. Umět jazyk ale znamená vidět za jeho horizont, vnímat jeho hranice a překračovat je.

V dnešním jsku je spousta skvělých věcí, které si tam zaslouží být, opravdu vzniká široká škála možností jak psát kvalitní kód a kdo tvrdí opak ten se plete. Ne všechno je super, ne všechno je černobíle správně a špatně a nikdo tě nenutí používat classy, je v pořádku používat factory funkce a composition over inheritance. Odsoudit ale s takovýmto přístupem něco, co dalo smysl vývoji v js ve velkých týmech bez nutnosti si trhat vlasy, je špatně. Příště se nad tím zamysli, než někomu, kdo si tvoří názor podsuneš ten svůj.

Poznatek: nevadí mi co říkáš, ale s jakou sebejistotou to říkáš, mýlit se může kdokoliv, ale nikdo tě nenutí vyjadřovat se k něčemu co jsi plně nepochopil a nepřijal.

Vzkaz pro tazatele, na ITN toho o moderním jsku moc nepočteš, záměr se na anglické weby pokud možno jako sitepoint, mdn dokumentace, tutorialspoint, codeschool, přímo o změnách je skvělá appkniha na google play JavaScript ES6, to ti dá představu, jak to všechno ale použiješ? Budeš muset hledat věci jako:

Babel

Commonjs
Amd.js
Modules in js

Webpack
Browserify
Grunt

Eslint - na kontrolu syntaxe, výborná věc, dá js úplně nový rozměr

Jsx a react
Redux
Vzor flux

Tyhle tři jen pro představu o čem dnešní js frameworky jsou

Npm.js - balíčkovací systém
Github - studnice všeho dobrého

Lodash
Underscore

Protože funkcionální přístup jede

Angular2 - protože mám kamarada, který v to věří a opět pro představu o frameworcích

Nodejs - protože JavaScript na server prostě patří už jen že dvou důvodů, event riden je super a async také, a php si zaslouží ústup

Electron - protože jsku to sluší i na klientu
Pozitron - protože i Mozilla chce vlastní Electron

Phonegap, Cordoba, Ionic, React-native - protože js chce i na mobilní platformy

Nové skvělé věci uvnitř jazyka

Promise
Generátor
Arrow operátor
Rest a spread operátor
Gettery a settery
new.target
let a const
Destructuring
Object property shorthand
Symbols
Static method
A mnoho dalšího
Import a export
Class a extends

Skvělé věci v browseru

Worker api
Notification api
Localstorage api
Service
Websockets
Server sent events
Templates
Fetch api
A mnoho mnoho dalšího

Post je psán na telefonu, v případě překlepů, sorry.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 8. října 1:42
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

Immutable.js - nutnost a zamyslet se nad významem a dopadem na kvalitu a testovatelnost kódu

Mocha
Sinon
To ohledně testování

 
Nahoru Odpovědět 8. října 1:47
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

A sérii knížek You don't know JavaScript - je na githubu, také sledovat blogy lidí, kteří v js něco znamenají a přijdou ti zajímaví,

Dobrá knížka je také Eloquent JavaScript opět v aj , oplatí se přečíst, obsahuje základy i detaily a je velmi kvalitně strukturovaná, umožní ti přeskakovat to, co už znáš.

 
Nahoru Odpovědět 8. října 2:33
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

A věci jako asm.js a webassemly
Neuškodí vědět něco o parsování JavaScriptu a kde to v praxi nejvíc pálí

 
Nahoru Odpovědět 8. října 2:36
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Taskkill
Marian Benčat:

osobně sice souhlasim asi tak s 70% věcí a celkově nejsem takový JS fanboy jako ty, ale musím uznat, že jsi mu to sepsal pěkně.. a zároveň, ač si nechtěl, si ukázal ten neskutečný průser webového vývoje.. a sice, že:

  1. musíš znát strašně moc věcí, aby si byl vůbec schopný rozumně vypsat do konzole Hello World a netahal do prohlizece pomoci 30ti requestu zakladni knnhovny
  2. Musíš doufat, že během komentáře na ITNetwork se to zase celé nezměnilo
 
Nahoru Odpovědět 8. října 10:06
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Marian Benčat
Taskkill:

Já zase souhlasím naprosto s tebou. Ale věřím, že časem se to ustálí, protože navzdory tomu, že js je tu už 21 let, v podstatě teprve teď začal vznikat, boom přijde a odejde, jazyk zůstane, jestli ho budou lidi používat netuším, nejsem vědma, možná že nakonec bude odpověď Elm, možná C++ nebo JAVA převedené do webasm... Kdo ví, tak jako tak, je super sledovat ten rachot, když se komunita zamiluje. Je to působivé neříkej, že to tak taky nevidíš :-).

 
Nahoru Odpovědět  +1 8. října 10:13
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Taskkill
Marian Benčat:

Já to vnímám tak, že se z JS sice rozhodně né bezbolestně, ale postupně začíná stávat použitelná platforma pro vývoj..úmyslně tady mluvím o platformě.. Současně s JS ekosystémem se to týká i samotného .NET (.NET Core), kde taky všechno rozdělují na co nejmenší balíčky a jsou tam vesměs podobné problémy..

Jako úplně největší průšvih co teďka ohledně PL/JavaScriptu je, vnímám to, že tam přicházejí věci, které jsou jinde už 10let a lidé je umějí správně používat.., zatímco v JS jsou relativně novinkou a lidé nevědí ani jak to dělat správně... Jeden příklad za všechny..

V NPM, stejně jako jinde máš sémantické verzování balíčků, kde máš mj. možnost velmi dobře odlišit verze, které obsahují brraking changes a které NEOBSAHUJÍ breaking changes.. Pak samozřejmě bys měl dávat logicky do dependency jiné balíčky a omezit je, aby neobsahovaly breaking changes..

Jenže, když se koukneš do 80% balíčků tak tam nalezneš jednu ze dvou věcí:

  1. Autor balíčku netuší, co je to semver a tudíž do patch verze napere tolik breaking changes, ze se z toho dalších 10 000 balíčků absolutně zhroutí
  2. Autor balíčku nastaví jako dependence balík a poví, že se má vždy použít nejnovější i třeba kompletně překopaný...

Teď třeba nedávno jak jistě víš, došlo k hodně breaking changes u webpacku.. hlavně tedy se třeba config validuje oproti schematu a tam si řekli, že ho překopajjí (resolve,..) .. samozřejmě dalších 100 000 balíků má ve starter "balíku" nejnovější webpack,.takže stáhneš co má fungovat zkusíš to zbuidit a máš tam 10 000 erroru...


Opačný problém je ten, že zjistíš, že do JavaScriptu přišlo něco nového co je zdánlivě to samé jinde.. například import {} a reexporty v barelech.. (index.ts)..

Zatímco jinde je to vždycky bez problémů, protože "bundler" si to dokáže správně poskládat, tak jak Babel, webpack,..coko­lliv.. má opravdu velké problémy s circular referencema..

//a
import neco from /index.ts
import b from /b

//c
import a from /index.ts

a pak ti to samozrejme posklada blbe bundle a koncis.. (snad jsem ten prikald dal dobre,., protoze se strasne jednoduse udela pruser automaticky, ale blbe se vymysli manualne.)


Dalším problémem je treba i to THIS a Lambda.. ono je sice fajn, že máš ()=>{} a to za tebe udělá samo _self (dělá to většinou jako _this).. jenže pak vývojář koukne do prohlížeče.. tam má .map soubory... pokud si to breakne a ukáže na this tak mu to ukazuje správně na objekt (protože se to ve skutečnosti namapuje na _this).. Pak si ael zadá do watche this a to mu ukazuje na Window.. tak si řekne WTF??? Ve finále tedy tato lambda vede často k tomu, že si říkáš pak "je to tedy this, nebo to je _this?"

 
Nahoru Odpovědět  +1 8. října 10:38
Avatar
lalacekcz
Člen
Avatar
Odpovídá na Taskkill
lalacekcz:

Wow, takto dobrou odpověď jsem ani nečekal :) děkuji, myslím, že mi to dalo docela dobrý nadhled co mě čeká. A děkuji i ostatním co napsali komentáře.

Jinak chtěl jsem se ještě zeptat ohledně verzí na wiki. Po edici 6, je tam ještě 7, takže bych se zeptat proč si se nezmínil o ní? Nepřínáší moc nového, když vychází po roce? nebo ještě se nepoužívá? :)

 
Nahoru Odpovědět 8. října 10:40
Avatar
Marian Benčat
Redaktor
Avatar
 
Nahoru Odpovědět 8. října 10:42
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Taskkill
Marian Benčat:

JInak.. jeste co se tyce Angularu 2 :) Take jsem presvedceny, ze se dostane zase pred React :-) ON je X let pred reactem.. problem je, ze dokud s nim nema clovek vetsi zkusenost a vetsi projekt, tak to moc nezjisti.. Predevsim to, jak je ve skutecnosti JSX strasne omezujici.

 
Nahoru Odpovědět 8. října 10:44
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na lalacekcz
Taskkill:

A stručné doplnění i sem do diskuze: ES7 ještě není hotová/ready.

 
Nahoru Odpovědět 8. října 10:50
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Marian Benčat
Taskkill:

I tohle beru tak nějak v potaz. Přece jenom, nic není dokonalý a nebude tu věčně.

Však jsem taky angular 2 zmínil speciálně se tvou referencí.

 
Nahoru Odpovědět  +1 8. října 10:53
Avatar
lalacekcz
Člen
Avatar
Odpovídá na Marian Benčat
lalacekcz:

Díky za super článek, pobavil jsem se, vystrašil jsem se :D ... aspoň mám představu o nynejší situaci JS.

Takže ještě jednou díky všem :)

 
Nahoru Odpovědět  +2 8. října 11:02
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na lalacekcz
Taskkill:

Jo a včera jsem se snažil nezapomenout ti ještě zmínit TypeScript jakožto typovaný superset JS případně jako zajímavost Flow.js od fb taky k typům.

 
Nahoru Odpovědět 8. října 13:14
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Typescript +1

 
Nahoru Odpovědět 8. října 13:48
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 17 zpráv z 17.