IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
zelvicek
Člen
Avatar
zelvicek:12.7.2017 12:30

Zdravím,
mám (možná podivnou) otázku na zkušené.

Mám script

function fun(){return 1}var a=fun();a&&fun()

Jak by měl compiler/inter­preter chápat poslední část "a&&fun()" ? Jde mi o to, že daný výraz je evaluován a nechává na zásobníku výsledek/hodnotu, se kterým se nepracuje a není ze zásobníku žádným příkazem odstraněn/zkon­zumován. Má to nějakou logiku, kterou nevidím; nebo má compiler/inter­preter prostě takovýto stav detekovat a nějak se s ním poprat?

 
Odpovědět
12.7.2017 12:30
Avatar
Wal De Mar-Lad:12.7.2017 13:13

Nejak v tom nevidím logiku. To je z reálneho kódu? Alebo je to z nejakého príkladu?

Nahoru Odpovědět
12.7.2017 13:13
Libraries over frameworks...
Avatar
zelvicek
Člen
Avatar
Odpovídá na Wal De Mar-Lad
zelvicek:12.7.2017 13:33

Je to minifikovaný výstup jednoho mého testovacího scriptu. Logiku v něm nehledej, podstata problému je/byla popsána výše.

Původní script je

function fun(){return 1;}; var a=fun(); if (a) fun();

Hmm, teďka, když se snažím popsat mé zmatení, se na to znovu dívám, a zjišťuji, že stejný problém je už v původním neminifikovaném scriptu. I "if (a) fun();" může na zásobník uložit hodnotu, jež není zkonzumována.

Tímto si sám odpovídám, že compiler/inter­preter se s takovýmto stavem musí nějak poprat. Před "prohlédnutím" mi ta minifikovaná verze připadala nelogická, ale je to jen nedostatek praxe s JS.

 
Nahoru Odpovědět
12.7.2017 13:33
Avatar
Odpovídá na zelvicek
Wal De Mar-Lad:12.7.2017 13:48

Ako nie, že by to nefungovalo a v princípe konštrukcia a&&fun() funguje tak, že ak aj je v premennej a truthy hodnota, čiže sa dá premenná a vyhodnotiť ako true, tak sa spustí funkcia fun. Čo je naozaj to isté, ako to napísať ako if (a) fun(). Avšak, či je to napísané tak, či onak, oba prípady sú naprosto zbytočnou konštrukciou. Síce funkčnou konštrukciou, ale zbytočnou, bez akéhokoľvek zmyslu z pohľadu praktickosti.

Editováno 12.7.2017 13:49
Nahoru Odpovědět
12.7.2017 13:48
Libraries over frameworks...
Avatar
zelvicek
Člen
Avatar
Odpovídá na Wal De Mar-Lad
zelvicek:12.7.2017 14:03

Zdá se, že nejsem schopen správně popsat problém. Ten nespočívá v logice či nelogice daného skriptu (a proto se k ní nemusíme vracet), ale v procesingu. Nějak mi nedošlo, že kompilery progr. jazyků celkem běžně zahazují spočtené hodnoty, pokud nejsou dale využívány.

Tímto bych rád poděkoval za odpovědi+vstříc­tnost a toto téma/vlákno uzavřel. Nenech se mnou nadále zdržovat.

 
Nahoru Odpovědět
12.7.2017 14:03
Avatar
Odpovídá na zelvicek
Wal De Mar-Lad:12.7.2017 14:30

Aha, až teraz chápem ako si to myslel. V tom prípade je odpoveď takáto: JE "odstraněn/zkon­zumován". Garbage collectorom...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
12.7.2017 14:30
Libraries over frameworks...
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 6 zpráv z 6.