JavaScript tipy a triky. rubrika: Programování: JavaScript

Anonym
položil/-a 2.12.2017
 
upravil/-a 2.12.2017

Prispejte prosím do zbierky v komentároch, alebo odpovediach :)

VALUE SWAPPING

let a = 'world', b = 'hello'
[a, b] = [b, a]
console.log(a, b) // hello world

ARRAY CONCATENATION

let a = ['aa', 'bb'], b = ['cc', 'dd']
var result = a.concat(b) // old way
var result = [...a, ...b]

ASYNC/AWAIT

const [user, account] = await Promise.all([
  fetch('/user'),
  fetch('/account')
])

MORE READABLE FUNCTIONS

const myFunc = (id, force, verbose) => {
  ...do stuff
}
// Somewhere else in the codebase... 
myFunc(150, true, true) // WTF is true, true?
 
const improved = ({ id, force, verbose }) => {
  ...do stuff
}
// Somewhere else in the codebase...
improved({ id: 150, force: true, verbose: true }) // more readable

FIND MAX ONELINER

const max = arr => Math.max(...arr)
max([123, 456, 78]) // 456

CONVERT TO NUMBER

const toNumber = number => +number
console.log(toNumber('1234')) // 1234
console.log(toNumber('ABC')) // NaN

SHUFFLE

var sorted = [1, 2, 3]
const shuffle = arr => arr.sort(_=> Math.random()-0.5)
console.log(shuffle(sorted)) // 2,1,3

SHORT CIRCUIT

if (connected) {
  login()
}
// Or shorter version
connected && login()

CONVERT TRUTHY/FALSY TO BOOLEAN

var arr = [0]
console.log(!!arr, !!arr[0]) // true, false

Komentáře

  • harrison314 : to nie su typy a triky, to je kusok zo specifikacie :D 2.12.2017
  • Anonym : tos uhod bobeši :) 2.12.2017
  • kate.mihalikova : Ohledně toNumber není potřeba vymýšlet kolo, existuje built-in funkce Number, která dělá to samé. 9.12.2017
odkaz
10 ondrej.zara
odpověděl/-a 10.12.2017

Nelze to všechno jen slepě opsat. Někdy to má svá úskalí. Zkuste si např.

Math.max(...new Array(1000000))

Komentáře

  • Anonym : Ako pardón, ale to je tak nezmyselný argument, ako je to nezmyselná konštrukcia. Niky v živote by som niečo také nenapísal, nieto to ešte použil ako argument proti niečomu. Za mňa riadne mínus. 10.12.2017
  • skliblatik : @vladislav.ladicky zkusil jsi to alespoň pustit? Nikdy v životě nemáš pole s 1000000 prvků? V čem je to nesmyslné? 10.12.2017
  • Anonym : Nie @skliblatik, ani som to nevyskúšal, ani som ešte nehľadal maximálnu hodnotu v poli o milióne prvkov. To by som ani len neskúšal, to je na prvý pohľad blokujúca operácia. A už nikdy by som to nenapísal v tom tvare ako napísal @ondrej.zara - vytvárať nové pole uprostred Max funkcie. Ten príklad je naprosto silený, nemá nič spoločné s realitou. 11.12.2017
  • ondrej.zara : @vladislav.ladicky ten příklad přirozeně neukazuje, že by se mělo nové pole vytvářet uprostřed funkce Math.max. Je to zkrácený zápis, aby čtenář pochopil, že spread operator má svá omezení (například @skliblatik to pochopil) a nelze ho používat automaticky. Co se týče výkonu: omezení počtu parametrů záleží na prohlížeči, ve Firefoxu je to například už při 500001 položkách. A v nich trvá najít maximum 60ms, což mi nepřijde jako zásadní zdržení. (Také nebylo nikde řečeno, že se pohybujeme výhradně v klientském JS. Na serverové straně je snad v pořádku, když hledáme maximum z mnoha čísel, ne?) 11.12.2017
  • siq : Toto je fakt priklad teoretika. Pokial clovek naozaj vie co robi, a nie je to len ctrl+c/v bastlic-Googlista, tak to v zivote takto nenapise. Fakt by ma ani nenapadlo to takto riesit. 11.12.2017
  • Anonym : Moja reč @sig. A mimochodom @ondrej.zara, 60ms Ti pripadá ako malé zdržanie, lebo nevieš o čom hovoríš. Zrovna na serveri si callback čo trvá 60ms nemôžeš dovoliť. 12.12.2017
  • skliblatik : @siq kdysi jsem dělal nějaké zpracování dat - určeno pro data za 1 den - a první co se na tom pustilo byla více než půlroční dávka... @vladislav.ladicky to snad záleží na konkrétním použití, ne? 12.12.2017
  • siq : @skliblatik to je fajn, a ako je to relevantne k mojmu postu? Vies preco vobec tento problem vznika? Ja to viem, a prave preto by som to v zivote tymto sposobom neriesil. Na svete existuje 10 typov ludi: ti co vedia ako funguje pocitac, a potom mas zvysok sveta. 12.12.2017
  • skliblatik : @siq: max([123, 456, 78]) - viz tip v otázce. Samo o sobě to nedává smysl (nahraditelné číslem 456), takže to navádí k něčemu jako max(numbers). Pro malý počet prvků v numbers to bude fungovat. Po překročení jisté meze, narazíš na limit parametrů. Fce "max" navíc bere 1 parametr, čímž problém poněkud maskuje. Odpověď mi přijde jako jako dobré upozornění k danému tipu (obecně, Math.max beru jen jako příklad). 12.12.2017
  • siq : Mas pravdu, tam je ten problem so vsetkymi podobnymi funkciami, napriklad console.log sa chova uplne rovnako kvoli moznemu poctu n vstupnych parametrov. 12.12.2017
  • ondrej.zara : @vladislav.ladicky jaky callback? O callbacku a pripadnem dalsim omezeni tu nikdo nepsal. Proc by muj nodejs skript, ktery treba zpracovava nejaka bohata data, nemohl bezet nekolik vterin ci minut? Jiste, negeneroval by HTTP odpoved pro cekajiciho klienta. Ale takove omezeni zde uvedeno nebylo. A popravde, i kdybychom se bavili o serverovem HTTP, tak *nejak* se to maximum z pul milionu cisel najit musi, ze :-) 13.12.2017
  • Anonym : @ondrej.zara Lebo Node nie je PHP - tú dobu čo by prepočítaval nejaké šialené pole by nevrátil výsledok nie len čakajúcemu klientovi, ale ani NIKOMU INÉMU. Node je proste jednovláknová záležitosť, keď nevieš o princípoch na pozadí a ideš na to phpčkovým spôsobom, narobíš viac škody ako úžitku. 13.12.2017
  • siq : @ondrej.zara: "*nejak* se to maximum z pul milionu cisel najit musi, ze :-)" Co tak to hladat v nejakom systeme, ktory to ma za par ms a je na to priamo stavany, napriklad databazu? 13.12.2017
  • harrison314 : @siq: to nie vzdy ide, niekedy tu matematiku a zoradovanie treba v aplikacii, nebudes predsa cisla tlacit do DB len pre to aby si ich zoradil asnychrone. 13.12.2017
  • Kit : @harrison314: Aplikace ta data musí odněkud vzít, nejčastěji právě z DB. Obvykle je jednoduché si rovnou říct o seřazená data. 13.12.2017
  • harrison314 : Ja som narazal na pripady, ked to databaza byt nemusi, alebo pouzita databaza nemusi vediet zoradovat. 13.12.2017
  • Kit : @harrison314: Jistě, existuje i pár výjimek, které potvrzují pravidlo. 13.12.2017
  • skliblatik : @vladislav.ladicky: jestli tvoje "lebo" odpovídá na "Proc" od @ondrej.zara tak si otázku přečti znovu (hint: background job, build skript...) 13.12.2017
  • ondrej.zara : @siq: ano, jiste, to by bylo vhodnejsi. Ale pokud se nepletu, tak predmetem tohoto vlakna neni "najdete optimalni architekturu informacniho systemu, ktery pocita maximum z pul milionu cisel". Predmetem vlakna je ukazat ruzne JS triky a moje odpoved mela demonstrovat, ze "trik" fungujici na desitce cisel desivym zpusobem zkolabuje, kdyz jich pouzijeme vic. To je vse. 14.12.2017
  • Anonym : @sklibatik Natívne je Node jednovláknový proces a podobné konštrukcie, blokujúce operácie, si v ňom proste nemôžeš dovoliť. ak už potrebuješ dlhšie trvajúce výpočty, treba predovšetkým zvážiť, či bude Node platforma optimálnym riešením - ja by som v takom prípade radšej využil dotnet core, alebo rovno javu. @ondrej.zara to isté by sa predsa dalo povedať prakticky o každom triku. prakticky na všetko nájdeš prestrelený príklad v ktorom by niečo nefungovalo poriadne. to však neznamená, že daný trik je zlý. znamená to len, že nie je univerzálny, čo však ani nikto netvrdí, ani to nie je argument proti ktorémukoľvek triku, lebo univerzálne predsa nie je nič. ty proste argumentuješ spôsobom "ja by som to na takéto niečo nepoužil, hoci by to fungovalo, lebo existuje hraničný prípad v ktorom to nefunguje". a to je proste nezmyselná argumentácia, podložená nezmyselnými príkladmi. 14.12.2017
  • skliblatik : @vladislav.ladicky: To jednoduše není pravda - z jednovláknovosti node neplyne nemožnost blokujících operací. V nodejs lze napsat tool, který používá blokující operace a může to být optimální řešení. 14.12.2017
  • siq : @ondrej.zara: chapem tvoj pohlad, ale nechapem preco stale riesime tento 0.001% neoptimalny corner case. Kazdopadne mas pravdu, dost som ten prispevok a diskusiu zle pochopil. Menim minus na plus. 14.12.2017
  • ondrej.zara : @siq: Dik! Je jasne, ze malokdo bude chtit resit zrovna tuhle vec, tj. pomoci spread operatoru predavat funkci pul milionu parametru. Me to ale zaujalo, protoze je to presne ten druh chyby, ktera 1) se pri beznem pouzivani a testech neprojevi, 2) prijde kdyz ji nikdo neceka, 3) zabije aplikaci vyhozenou vyjimkou. Tedy chyba zaludna a spatne odhalitelna. 14.12.2017
  • Taco : @vladislav.ladicky: Teda, tady se musím Ondry zastat, kde tam psal o tom, že by se to nemělo používat? Já tam vidím jen připomenutí, že by se na to mělo myslet. A to je věc, kterou je třeba připomínat mnohým. 17.12.2017
  • Anonym : Ok, pripúšťam, že sme sa možno len na začiatku nepochopili. Vyzerá to, že @ondrej.zara tým myslel, že nie vždy môže byť bezpečné použiť destructuring, i keď to predviedol na nereálnom príklade. Ale chápem a down-vote som zrušil. 17.12.2017

Pro zobrazení všech 24 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.