Neškodila by trochu důvěry v překladač/runtime?
Prvním řešením říkám co chci dělat. Druhým řešením dělá práci za mašinu. Je to sice optimální a správně, ale víc se ztrácí myšlenka.
Ale přece i ostatní řešení (přičítání/odečítání od A.P.Hacker nebo XOR) dělají práci za překladač a fungují jen na základě nízkoúrovňových znalostí, často jsou v tomhle typu příkladu považovány za správnou odpověď. Stejně tak použití destructuring assignment pro prohození hodnot je spíše vedlejší efekt téhle funkce. Zadání, které explicitně mluví o "bez použití proměnné" odkazuje na to, že se chci vyhnout zbytečné alokaci a v prostředí JS vlastně vyžaduje použití daleko náročnější konstrukce.
Tenhle přiklad totiž potrádá ve vysokých jazycích to kouzlo a důvod, proč původně vznikl, přetrval jen jako hořká pachuť a vede právě k absurdním řešením s hůře čitelnou syntaxí.
zase typy..... minus u ne-ciselnych typu neprojde pres eslint.
S jakým nastavením eslint? Mně to prochází. Pokud potřebuješ číslo, ok, a = 1, b = 0/0 obsahuje číselné typy a také plodí nesmyslné výsledky a nikoliv žádané prohození hodnot.
ja bych tohle povazoval asi za nejhorsi moznou odpoved na otazku "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné"
Také jsem to jako řešení neprezentoval, jen jsem tenhle přímý konstrukt použil pro porovnání efektivity. Nic víc, nic míň.
Líbí se mi, jak z JS hned přeskakuješ na registry... Takže každej překladač každýho jazyka interně udělá alokaci 4 registrů? Skoro bych se vasdil, že ne...
Ne, jsem pořád v JS, myslel jsem tím Lda, tj. accumulator register jak to pojmenovává V8 interně.
Ano, tohle bude správný řešení otázky "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné" :-)
Kde píšu, že to je správné řešení? Jen jsem zmiňoval, že tahle varianta je jako rychlejší než správné řešení.