Problémy s JavaScript v praxi

Honza

Re:Problémy s JavaScript v PRAXI
« Odpověď #45 kdy: 27. 09. 2018, 00:37:34 »
Ale já pořád nechápu, co je špatně. To, že "111" == 111 vyhodí true? Naopak se to hodí (když vím, co dělám), pokud to nechci používat / neznám, tak použiji ===.
Na té linkované stránce je toho dost, třeba:
Kód: [Vybrat]
[1,2,3,15,30,7,5,45,60].sort();
// = [1,15,2,3,30,45,5,60,7]


Trollopata

Re:Problémy s JavaScript v praxi
« Odpověď #46 kdy: 27. 09. 2018, 00:55:44 »
Ono je sice moc hezké označit nedostatky za featury, ale když s některými "featurami" má tolik lidí problém, je opravdu problém v těch lidech?

Kit

Re:Problémy s JavaScript v PRAXI
« Odpověď #47 kdy: 27. 09. 2018, 01:15:09 »
Kód: [Vybrat]
[1,2,3,15,30,7,5,45,60].sort();
// = [1,15,2,3,30,45,5,60,7]

Kód: [Vybrat]
[1,2,3,15,30,7,5,45,60].sort(function(a,b){a-b});
// = [ 1, 2, 3, 5, 7, 15, 30, 45, 60 ]

Souhlasím, že je to pakárna.

asd

Re:Problémy s JavaScript v praxi
« Odpověď #48 kdy: 27. 09. 2018, 03:11:07 »
Kód: [Vybrat]
// lib/sorting.js

export const ascending = (a, b) => a - b;

Kód: [Vybrat]
import {ascending} from './lib/sorting';

[1, 15, 2, 3, 30, 45, 5, 60, 7].sort(ascending);

Re:Problémy s JavaScript v PRAXI
« Odpověď #49 kdy: 27. 09. 2018, 07:04:19 »
Ale já pořád nechápu, co je špatně. To, že "111" == 111 vyhodí true? Naopak se to hodí (když vím, co dělám), pokud to nechci používat / neznám, tak použiji ===.
Na té linkované stránce je toho dost, třeba:
Kód: [Vybrat]
[1,2,3,15,30,7,5,45,60].sort();
// = [1,15,2,3,30,45,5,60,7]

Protože
Citace
The default sort order is according to string Unicode code points.
Ale ano, tohle není dvakrát intuitivní.


Ono je sice moc hezké označit nedostatky za featury, ale když s některými "featurami" má tolik lidí problém, je opravdu problém v těch lidech?

Ale to není "feature", to je standard. Je jasně specifikováno, jak to  funguje. Navíc co je to za argument? S monádami v Haskellu má problém také spousta lidí... Problém "většiny" je v tom, že 1) nečte 2) je nepozorná a spoléhá se na něco, co "tak funguje jinde". Asi mate ta C-like syntax :) 


Sajfi

Re:Problémy s JavaScript v PRAXI
« Odpověď #50 kdy: 27. 09. 2018, 09:09:50 »
O čom to hovoríš? Ako "dvakrát"? Prijatý JSON je VŽDY a VŠADE string.

Mluvím o tom, že když přijatý JSON (jako string) na backendu deserializuju a on je to stále string. Tj. když přijatý JSON místo
Kód: [Vybrat]
'{"foo": 1}'vypadá nějak takhle
Kód: [Vybrat]
'"{\"foo\": 1}"'
Ostatně, podobná chyba, když nám po změnách na frontendu začne na backend chodit
Kód: [Vybrat]
'{"sid": "null"}'

Nejlepší programátor EU

Re:Problémy s JavaScript v praxi
« Odpověď #51 kdy: 27. 09. 2018, 09:12:53 »
Sorry, možná se to řadí podle unicode, ale já v tom poli vidím integer ne string..

Re:Problémy s JavaScript v praxi
« Odpověď #52 kdy: 27. 09. 2018, 09:23:12 »
Sorry, možná se to řadí podle unicode, ale já v tom poli vidím integer ne string..

Ano, ale ono se to nejdřív "přetypuje". Respektive si to spíš představ jako lexikografické řazení, to je korektní i pro čísla. Nicméně můžeš tomu sortu strčit vlastní (lambda) funkci. ;)

Scripter

Re:Problémy s JavaScript v PRAXI
« Odpověď #53 kdy: 27. 09. 2018, 09:49:05 »
S monádami v Haskellu má problém také spousta lidí
Na monádách se oddělí zrno od lopat :)

Re:Problémy s JavaScript v praxi
« Odpověď #54 kdy: 27. 09. 2018, 09:54:47 »
Tím bych si nebyl tak jistý... :)

ava

Re:Problémy s JavaScript v praxi
« Odpověď #55 kdy: 27. 09. 2018, 10:02:11 »
Sorry, možná se to řadí podle unicode, ale já v tom poli vidím integer ne string..

Zkušený JS programátor v tom vidí string ("\x01\x02\x03\x0f\x1e\x07\x05-<"), všechno je to ve specifikaci, nech si ty akademické debaty a uveď nějaký PRAKTICKÝ problém!

Vlado

Re:Problémy s JavaScript v PRAXI
« Odpověď #56 kdy: 27. 09. 2018, 11:02:16 »
Nejde o neznalost, jde o to, že pokud tohle jazyk dělá, tak to může být 1000x napsáno v dokumentaci, ale stále to neznamená, že je to dobrý nápad.

Přesně tak, to si také myslím. Jinak tenhle argument, že "je to přece v dokumentaci", ten se tu bohužel objevuje docela dost často.

Opravdu? Vtip je v tom, že u JS je to *ve standardu*. A to je sakra rozdíl (a buďme za to rádi). Zkus si programovat v C/C++ jen jak tě napadne, kašli na dokumentaci/standard, bo to přece není argument. ;)

Já beru, že je to v dokumentaci, a že je to ve standardu. Ale právě proto, to tam už zůstane, nikdo to neopraví. Považuju to za chybu návrhu, zatímco se Javascript tváří jednoduše, tak ve skutečnosti je to samý špek. A i když zkušený programátor bude o všech podobných výjimkách vědět, a budou popsané v té dokumentaci, tak se ty chyby nikam neztratí. A narazí se na ně právě v praxi, i když se počítají triviální věci...

A premýšľal si niekedy aj nad tým prečo to nikto neopraví? Napoviem ... otvorím 15 rokov starú web stránku, vtedy ešte s "DHTML" efektami a bude fungovať rovnako ako vtedy...

Vlado

Re:Problémy s JavaScript v praxi
« Odpověď #57 kdy: 27. 09. 2018, 11:04:02 »
Nie.  ja za roky praxe neviem o jedinom. Takže si myslím, že také kecy majú len ovce čo nevedia o čom hovoria.

A nechtěl bys raději zase místo JS onanie jít mydlit toho barana?   ;D

Divnejšie ako to, že v roku 2018 ešte existuje JS je to, že ešte existujú ľudia ako ty.

Vlado

Re:Problémy s JavaScript v PRAXI
« Odpověď #58 kdy: 27. 09. 2018, 11:14:06 »
O čom to hovoríš? Ako "dvakrát"? Prijatý JSON je VŽDY a VŠADE string.

Mluvím o tom, že když přijatý JSON (jako string) na backendu deserializuju a on je to stále string. Tj. když přijatý JSON místo
Kód: [Vybrat]
'{"foo": 1}'vypadá nějak takhle
Kód: [Vybrat]
'"{\"foo\": 1}"'
Ostatně, podobná chyba, když nám po změnách na frontendu začne na backend chodit
Kód: [Vybrat]
'{"sid": "null"}'

A v akom jazyku ti na backende ostal z toho JSON po parsovaní string? Nemám s ním problém ani JS, ani v Java, ani v PHP. V akom jazyku a ako si ho deserializoval?

Vlado

Re:Problémy s JavaScript v praxi
« Odpověď #59 kdy: 27. 09. 2018, 11:19:40 »
Ono je sice moc hezké označit nedostatky za featury, ale když s některými "featurami" má tolik lidí problém, je opravdu problém v těch lidech?

A v čom inom? Pokiaľ jeden je schopný naštudovať si to a zmysluplne ho napriek tomu použiť a druhý len nadávať aké je to zlé, v čom inom môže byť rozdiel?