421
Vývoj / Re:Problémy s JavaScript v praxi
« kdy: 04. 10. 2018, 21:27:51 »
Teď nevím, co se tím pokoušíš říct...
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
Citacenew String('aa') == new String('aa')
{} == {}
Tady zase porovnáváš objekt s objektem. No a shodné objekty to nejsou. Tzn. je to konzistentní.
Tady někde je tuším ta hranice, kdy se přepíná mezi porovnávání hodnoty, a porovnávání identity. Což je další matení nepřítele, že si se dvěma oparátory (== a ===) vlastně furt nevystačíš.
Narážel jsem na tohle:Kód: [Vybrat]Špatný název protože "tak se kouknu dovnitř, co to dělá, že jo".def format(a, b):
return a + b
format(1, 2)
Funny je, že musí přijít @Kit a mluvit k tématu. Zase se po nějaké době shodneme.
Kit a k tématu? Ano, to je Funny.
Však C je také slabě typovaný jazyk. Prpblém v JS, že samotné ověřování typů není dostatečné, protože JS s nimi pracuje špatně, viz řada už uvedených příkladů:Pak to ale není argument. 1. “Java umí kontrolovat typy na vstupu při překladu - před během.” 2. “V JS taky jdou kontrolovat typy na vstupu.”Ano, dobrý point - chtěl jsem napsat dynamických (~dynamicky typovaných). Moje chyba.Interpretovanost nijak nesouvisí s typováním.Jistě, v interpretovaných jazycích se tak nějak věci za běhu kontrolují...Jinak je ti doufám jasné, že i v JavaScriptu taky můžeš hlídat, jestli jsi dostal číslo, nebo stringJen za běhu. Fakt budeš "kopat" základy lžičkou, když můžeš použít bagr?
Zaprvé se koukni na to, jak šly "argumenty" po sobě. Zadruhé Java je dynamicky typovaná?Jednak si můžeš zjistit, co uvnitř je, ...
Tohle by slušný programátor nemohl ani vyslovit!
Pročpak? A co je to "slušný programátor".
Pokud by mi těžce šlo o to, aby oba parametry byly Stringy, tak si to prostě ověřím a případně vyhodím výjimku (když už na tom tak trváte). V C si taky ověřuji, jestli pointer není NULL.
'aa' == 'aa'
'aa' == new String('aa')
new String('aa') == new String('aa')
{} == {}
Pročpak? A co je to "slušný programátor".
Potřeba podívat se co je uvnitř je znakem blbě napsané rutiny.
Zvyk, dívat se dovnitř je znakem špatného programátora.
Ale obávám se, že toto nejde dokázat. Buď máte zkušenosti, a pak je vám to jasné, a nebo nemáte, a pak mi nevěříte.
let x = 100;
let y = "ahoj";
typeof x;
typeof y;
if (ptr == NULL)
Pak to ale není argument. 1. “Java umí kontrolovat typy na vstupu při překladu - před během.” 2. “V JS taky jdou kontrolovat typy na vstupu.”Ano, dobrý point - chtěl jsem napsat dynamických (~dynamicky typovaných). Moje chyba.Interpretovanost nijak nesouvisí s typováním.Jistě, v interpretovaných jazycích se tak nějak věci za běhu kontrolují...Jinak je ti doufám jasné, že i v JavaScriptu taky můžeš hlídat, jestli jsi dostal číslo, nebo stringJen za běhu. Fakt budeš "kopat" základy lžičkou, když můžeš použít bagr?
Jednak si můžeš zjistit, co uvnitř je, ...
Tohle by slušný programátor nemohl ani vyslovit!
Interpretovanost nijak nesouvisí s typováním.Jistě, v interpretovaných jazycích se tak nějak věci za běhu kontrolují...Jinak je ti doufám jasné, že i v JavaScriptu taky můžeš hlídat, jestli jsi dostal číslo, nebo stringJen za běhu. Fakt budeš "kopat" základy lžičkou, když můžeš použít bagr?
Proto to JS dela blbe, pokud chces mit spolehlivy program, musis neustale rucne kontrolovat typy.
A co se tyce cecka, nemej peci, to byl muj prvnin jazyk, na kterem jsem vyrostl.
Jinak je ti doufám jasné, že i v JavaScriptu taky můžeš hlídat, jestli jsi dostal číslo, nebo stringJen za běhu. Fakt budeš "kopat" základy lžičkou, když můžeš použít bagr?
Až budeš mít za sebou zkušenost člověka, který 20 let udržuje stále se měnící kód, na kterém pracuje skupina programátorů, budeš se smát tomu, jak jsi byl naivní.Ale tušíš. Jednak si můžeš zjistit, co uvnitř je, druhak je úplně jedno, jak typovaný máš jazyk, ale imho by měl programátor vědět, co má kde v programu. A ano, víš, jak se to + bude chovat, protože existuje něco jako specifikace, kterou tady někteří pohrdají (chtěl bych třeba eee vidět v Céčku).Já mám pořád pocit, že jsem se špatně vyspal a nepoznám vtip... fakt to myslíte vážně?Kód: [Vybrat]Bude to concatovat, nebo sčítat, nebo přetypovávat a konkatovat?function f(a,b) {
return a + b;
}
A takhle normálně programuješ v dynamicky typovaných jazycích? Já mám zato, že je fajn si hlídat, co kam předávám. Uživatelský vstup člověk ošetří, zbytek programu mám 100% pod kontrolou. Čili vím, CO té funkci dávám -> vím, co to udělá.
V Javě si parametr označím jako @NonNull a překladač mi případně vynadá. Když tam ten NULL přijde, tak to slítne, ne že to vrátí nějaký poněkud neočekávaný výsledek.Ano, je to vhodný programátorský návyk. Buď funkci volám tak, že vždycky vím, že jí pošlu korektní vstup, nebo to v ní ošetřím. V C snad taky ve funkci kontroluješ, že jsi nedostal NULL a pak ho tam můžeš poslat, nebo nekontroluješ, ale dáváš si sakra pozor, aby sis byl "jistý", že jí tam nepřijde.CitaceJá mám zato, že je fajn si hlídat, co kam předávám.Aha...takže nejen, že se musím zabývat tím, že tu funkci napíšu a odladím, ale ještě ke všemu vlastně k tomu pochopení co ta funkce dělá (a má dělat) musím zkontrolovat, kde všude je volaná.... v pythonu to aspoň zbuchne, když to tím proběhne, ne že to vrátí "něco".
Tohle je mimochodem supr na silných typových systémech - já prostě nemusím řešit, kdo to kde volá. Ta funkce prostě v typu specifikuje, co je korektní parametr a očekávání je, že v rámci těchto mezí by měla vracet korektní výsledky. A pak prostě nemusím řešit, kdo kde jak tu funkci volá.
CitaceOno se dá škrábat i levou nohou za pravým uchem... ale tak nějak nechápu proč odpověď "dá se s tím žít" by měla být jakkoliv relevantní k tezi "je to stupidní a způsobuje to problémy". Samozřejmě že code review řeší, když tam nějaký user napíše prasárnu. Stejně tak to řeší jazyk tím, že takovou konstrukci vůbec nepřipustí. Ano, holt jazyky nejsou dokonalé a musíme se s tím nějak naučit žít, ale proč tyhle stupidní vlastnosti obhajujete??A vidíš, dá se to.CitaceUživatelský vstup člověk ošetří, zbytek programu mám 100% pod kontrolou. Čili vím, CO té funkci dávám -> vím, co to udělá.Super pro větší projekty, nedejbože když tam je víc lidí...Je to jen o tom, jak jsou lidi zvyklí programovat. Pokud se někdo takto spoléhá na typový systém, tak si zaslouží, aby ho to vyšplouchlo. Dá se to (a celkem hezky), ale chce to daleko větší sebekázeň, protože programátorovi takové jazyky spoustu dovolí.
Připomíná mi to jednoho kamaráda - trabanty jsou dobrý, že se na nich dá poměrně snadno prakticky všechno opravit. Ale ono by se to nemuselo opravovat, kdyby se to pořád nerozbíjelo....
CitaceJá mám zato, že je fajn si hlídat, co kam předávám.Aha...takže nejen, že se musím zabývat tím, že tu funkci napíšu a odladím, ale ještě ke všemu vlastně k tomu pochopení co ta funkce dělá (a má dělat) musím zkontrolovat, kde všude je volaná.... v pythonu to aspoň zbuchne, když to tím proběhne, ne že to vrátí "něco".
CitaceUživatelský vstup člověk ošetří, zbytek programu mám 100% pod kontrolou. Čili vím, CO té funkci dávám -> vím, co to udělá.Super pro větší projekty, nedejbože když tam je víc lidí...
Je to jen o tom, jak jsou lidi zvyklí programovat. Pokud se někdo takto spoléhá na typový systém, tak si zaslouží, aby ho to vyšplouchlo. Dá se to (a celkem hezky), ale chce to daleko větší sebekázeň, protože programátorovi takové jazyky spoustu dovolí.
Ale tušíš. Jednak si můžeš zjistit, co uvnitř je, druhak je úplně jedno, jak typovaný máš jazyk, ale imho by měl programátor vědět, co má kde v programu. A ano, víš, jak se to + bude chovat, protože existuje něco jako specifikace, kterou tady někteří pohrdají (chtěl bych třeba eee vidět v Céčku).Já mám pořád pocit, že jsem se špatně vyspal a nepoznám vtip... fakt to myslíte vážně?Kód: [Vybrat]Bude to concatovat, nebo sčítat, nebo přetypovávat a konkatovat?function f(a,b) {
return a + b;
}
CitaceNe, že bych s tím obecně nesouhlasil. Ale co se má stát když:ano, zde vyjimka ScitaniJablekHrusekExceptionKód: [Vybrat]? Taky výjimka?1 + "1"
Jenze kdyz je jeden z operandu string tak + neni scitani ale concat. Ale to zabednencum nevysvetlis, budou pindat, ze to ma hazet exception
Ked su dane veci v promennych tak ty ako programator netusis ci sa bude scitavat alebo concatovat, o to ide.