Co vám vadí na JavaScriptu v roce 2018?

nojo

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #75 kdy: 26. 09. 2018, 14:14:08 »
async/await je stejne jen glorifikovany cukr nad promissma ktery se snazi zalibit synchronnim programatorum.
Tohle by mě zajímalo - mně se synchronní programování líbí. Připadá mi to značně přehlednější, jednodušší a spravovatelnější než "callback hell". Takže mě překvapuje, že někdo má jiný názor - mohl bys to rozvést?

Citace
Vznika tak naprosto zabavny kolotoc abstrakce, kdy HW-> asynchronni, OS nabidne thready aby to vypadalo jako synchronni pro uzivatele -> multithreaded browser nabidne asynchronni js interface -> ES6 nabidne synchronne vypadajici async/await s try catch. je to genialni nebo dementni? sam nevim.
Mně by se líbil runtime, který na N OS threadech (N ~ počet CPU) poběží M "app" threadů, které se z programátorského hlediska budou jevit jako synchronní (tzn. nebudu řešit async/await), ale runtime to bude dělat asynchronně (bude to řešit za mě). Nemá to tak Go?

ten autor tam prece nehodnoti zdali je sync lepsi nez async, ale na vasi otazku -
callback hell resi prave uz promisy ktere vypadaji "velmi synchronne"

nabizi se potom uz jen otazka zdali mate radsi try catch nebo then catch

promise()
.then
.then
.then
.catch

vs

try {
await()
await()
await()
}
catch() {
}


Petra

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #76 kdy: 26. 09. 2018, 14:19:18 »
null/undefined

Staci to vedet pouzivat. Undefined je default pri deklaraci promenne, ktere nebyla prirazena hodnota. Null by se mel prirazovat zamerne aby bylo videt rozdil jestli se promenne priradilo nic zamerne nebo deklaraci. Takze:
Kód: [Vybrat]
let promenna = 'neco mam';
promenna = undefined; // prasarna
promenna = null; // dobry

Petra

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #77 kdy: 26. 09. 2018, 14:23:59 »
Promise vs async - pozor bezne promise.then.then. funguje seriove. Async funguje paralelne, async je tedy spise Promise.all().

Phi

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #78 kdy: 26. 09. 2018, 14:30:44 »
Je úplne logické, že sa autori tak rozhodli, pretože tieto novinky sú obrovským plusom a do Expressu sa to zrejme nedalo jednoducho dorobiť, ale teda nepoteší to, že zasa treba niečo prijať a zahodiť.
Tohle se děje tak často, že se ptám, jestli není JavaScript write only jazyk.

nojo

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #79 kdy: 26. 09. 2018, 14:57:42 »
null/undefined

Staci to vedet pouzivat. Undefined je default pri deklaraci promenne, ktere nebyla prirazena hodnota. Null by se mel prirazovat zamerne aby bylo videt rozdil jestli se promenne priradilo nic zamerne nebo deklaraci. Takze:
Kód: [Vybrat]
let promenna = 'neco mam';
promenna = undefined; // prasarna
promenna = null; // dobry

Petro nestaci, tohole je typicka legacy chyba pri navrhu jazyka. Pokud se to "naucite" pouzivat, ten investovany cas je ztraceny a mohla ste se ucit neco jineho, nehlede na to, ze je to dalsi zatez do pameti programatora. Muzete se naucit vselijake brikule vsemoznych jazyku, to nic nemeni na tom, ze je to spatne navrzene, kdyz jazyk vedle vam ukazuje jak je to spravne (napriklad python).


Jano7

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #80 kdy: 26. 09. 2018, 15:01:12 »
Citace
to mate mirne casove popleteny, javascript mel objekty vzdy, akorat nebyl class-based (class tam jsou az od nedavna jako doplnek). tzn objekty se tvorily vzdy literalne, NASLEDNE vznikl JSON ktery to ma primo v nazvu "javascript object notation" - dalo by se rici "javascript object creation notation" abychom byli presnejsi.

Nemám to časovo popletené, neviem prečo vznikol taký dojem. To, že JavaScript až do es6 nemal kľúčové slovo class, viem veľmi dobre. Pretože som ho pred vyše 10 rokmi tam márne hľadal, keď som vo firme dostal zadanie spraviť niečo v JavaScripte na frontende. Malo to C syntax, písalo sa o ňom, že je OOP, tak predsa tam to class musí byť. A nebolo. Objekty sa tvorili aj ináč, čo sa mi vrylo do pamäti ako prvé, tak to boli konštruktor funkcie.

Kód: [Vybrat]
// constructor function

function Item(name, maker) {

    this.name = name;
    this.maker = maker;
    this.getInfo = function () {
        return `${this.name} - ${this.maker}`
    };
 }

var item = new Item('IPhone', 'Apple');
console.log(item.getInfo());

Pre mňa bol AHA moment ten, keď som si uvedomil, že sa dajú vytvárať objekty a kolekcie objektov bez definovania tried, getterov a setterov a všektého toho balastu okolo. Pretože rokmi programovania v Jave sa človeku vryje do mozu, že trieda sa definuje pomocou class a objekt vytvorí pomocou new.

Kód: [Vybrat]
const R = require('ramda');

const users = [
    { name: 'John', city: 'London', born: '2001-04-01' },
    { name: 'Lenny', city: 'New York', born: '1997-12-11' },
    { name: 'Andrew', city: 'Boston', born: '1987-02-22' },
    { name: 'Peter', city: 'Prague', born: '1936-03-24' },
    { name: 'Anna', city: 'Bratislava', born: '1973-11-12' },
    { name: 'Albert', city: 'Bratislava', born: '1940-18-19' },
    { name: 'Adam', city: 'Trnava', born:'1983-12-01' },
    { name: 'Robert', city: 'Bratislava', born: '1935-05-15' },
    { name: 'Robert', city: 'Prague', born:'1998-03-14' }
  ];

let res = R.reject(R.propEq('city', 'Bratislava'))(users);
console.log(res);

let res2 = R.filter(R.propEq('city', 'Bratislava'))(users);
console.log(res2);

No a keď si človek uvedomí nakoniec, že veci sa dajú robiť oveľa jednoduchšie a elegantnejšie, tak precitne. Hore uvedený príklad by v Jave vyžadoval desiatky riadkov kódu navyše. JSON syntax a možnosť funkcionálneho spracovania dát napr. pomocou Ramdy ma na JavaScripte najviac zaujalo.

No a keď sa potom ešte Javista, ktorý má skúsenosť trebárs so Springom pozrie na taký Express, ako sa tam oveľa jednoduchšie nastavujú veci, tak dochádza k paradigm shift.

agent

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #81 kdy: 26. 09. 2018, 15:02:53 »
Staci to vedet pouzivat. Undefined je default pri deklaraci promenne, ktere nebyla prirazena hodnota. Null by se mel prirazovat zamerne aby bylo videt rozdil jestli se promenne priradilo nic zamerne nebo deklaraci. Takze:
Kód: [Vybrat]
let promenna = 'neco mam';
promenna = undefined; // prasarna
promenna = null; // dobry
null / undefined / NaN / "" / 0 ...
Vcelku dobře je to vysvětléné tady: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

nojo

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #82 kdy: 26. 09. 2018, 15:04:42 »
Promise vs async - pozor bezne promise.then.then. funguje seriove. Async funguje paralelne, async je tedy spise Promise.all().

Toto neni pravda, async tak napsany jak jsem psal ja, je sekvencni!!!!  async muzete zavolat paralelne a taky to jinak musite napsat.

nojo

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #83 kdy: 26. 09. 2018, 15:06:26 »
Promise vs async - pozor bezne promise.then.then. funguje seriove. Async funguje paralelne, async je tedy spise Promise.all().

Toto neni pravda, async tak napsany jak jsem psal ja, je sekvencni!!!!  async muzete zavolat paralelne a taky to jinak musite napsat.

Doporucim vam knizku You Don't know javascript - nejlepsi knizky o javascriptu, kde jsou tyto veci velmi dobre vysvetlene.

Vlado

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #84 kdy: 26. 09. 2018, 15:08:49 »
Promise vs async - pozor bezne promise.then.then. funguje seriove. Async funguje paralelne, async je tedy spise Promise.all().

Toto neni pravda, async tak napsany jak jsem psal ja, je sekvencni!!!!  async muzete zavolat paralelne a taky to jinak musite napsat.

Doporucim vam knizku You Don't know javascript - nejlepsi knizky o javascriptu, kde jsou tyto veci velmi dobre vysvetlene.

Odporúčam tú knihu miesto odporúčania radšej prečítať. Awaity v async funkcii sú vykonávané jeden po druhom, nie paralelne. Ergo, nie je to náhrada za Promise.all()

nojo_neznamy

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #85 kdy: 26. 09. 2018, 15:16:27 »
Ok nevim komu odpovidate ale aby nedoslo k mylce.

1) await bla { - SEKVENCNI!!! (jak jsem psal vyse)
  try{
    async()
    async()
    async()
  }
  catch{
  }
}

2) await bla { - PARALELNI (mnoho lidi tohle nezna a nechape async)
let call1 = work1();
let call2 = work2();
result = [await call1, await call2] (v pripade promisu je tuna zdroju jak volat promisy paralelne)
}
--------

asyncy jsou ve vetsine pripadu seekvencni  (protoze vic casu potrebujete sekvenci a ne paralel ciste prakticky) a pisou se v podstate stejne jako promisy, ergo jen syntax cukr.



nojo_neznamy

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #86 kdy: 26. 09. 2018, 15:17:55 »
a najdete mi pet rozdilu mezi timhle

promise()
.then()
.then()
.catch()

vs

await() {
try {
  async1();
  async2();
}
catch() {
}
}

Vlado

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #87 kdy: 26. 09. 2018, 15:23:16 »
a najdete mi pet rozdilu mezi timhle

promise()
.then()
.then()
.catch()

vs

await() {
try {
  async1();
  async2();
}
catch() {
}
}

Await je operátor, nie funkcia.

nojo_neznamy

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #88 kdy: 26. 09. 2018, 15:25:12 »
a najdete mi pet rozdilu mezi timhle

promise()
.then()
.then()
.catch()

vs

await() {
try {
  async1();
  async2();
}
catch() {
}
}

Await je operátor, nie funkcia.

prijde vam to jako realny kod? proboha. mluvte k veci.

Vlado

Re:Co vám vadí na JavaScriptu v roce 2018?
« Odpověď #89 kdy: 26. 09. 2018, 15:31:08 »
a najdete mi pet rozdilu mezi timhle

promise()
.then()
.then()
.catch()

vs

await() {
try {
  async1();
  async2();
}
catch() {
}
}

Await je operátor, nie funkcia.

prijde vam to jako realny kod? proboha. mluvte k veci.

Ak to nie je reálny kód, čo reálne v ňom mám nájsť??