abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:33 | Humor

    Anthropic patrně omylem zveřejnil celý zdrojový kód svého CLI nástroje Claude Code prostřednictvím přiloženého sourcemap souboru v npm balíčku. Únik odhalil doposud nijak nezveřejněné funkce jako je například režim v utajení, autonomní agent 'KAIROS', orchestrace multi‑agentů, režim snění nebo dokonce virtuální mazlíček Buddy. Zajímavostí je detekce naštvání uživatele pomocí obyčejného regexpu. Anthropic rychle odstranil sourcemap a vydal opravu, nicméně kopie kódu se již stihly na GitHubu rozšířit mezi prostým lidem.

    NUKE GAZA! 🎆 | Komentářů: 4
    včera 14:33 | Humor

    Copilot automaticky vkládal do pull requestů 'propagační tipy', reklamní text se na GitHubu objevil ve více než jedenácti tisících pull requestech. Po vlně kritiky byla tato funkce zablokována a produktový manažer Tim Rogers připustil, že umožnit Copilotovi upravovat cizí pull requesty bez vědomí autorů byla chyba.

    NUKE GAZA! 🎆 | Komentářů: 4
    včera 12:55 | Upozornění

    Je 31. března a tedy Světový den zálohování (World Backup Day). Co by se stalo, kdyby Vám právě teď odešel počítač, tablet nebo telefon, který používáte?

    Ladislav Hagara | Komentářů: 4
    včera 12:44 | Upozornění

    Digitální a informační agentura (DIA) přistupuje ke změně formátu důvěryhodného seznamu České republiky z verze TLv5 na verzi TLv6, která nastane 29. dubna 2026 v 00:00 (CET). Ke změně formátu důvěryhodných seznamů členských států (tzv. Trusted Lists) dochází na základě změn příslušné unijní legislativy. Důvěryhodné seznamy se používají v rámci informačních systémů a aplikací zejména pro účely ověřování platnosti elektronických

    … více »
    Ladislav Hagara | Komentářů: 2
    včera 05:00 | Nová verze

    Rspamd (Wikipedie), tj. open source systému pro filtrování nevyžádané pošty, byl vydán v nové major verzi 4.0.0. Přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 1
    30.3. 23:11 | Nová verze

    SolveSpace (Wikipedie), tj. multiplatformní open source parametrický 2D/3D CAD, byl vydán v nové verzi 3.2. Přehled novinek v Changelogu na GitHubu. Vyzkoušet lze novou oficiální webovou verzi.

    Ladislav Hagara | Komentářů: 9
    30.3. 18:22 | Pozvánky

    Organizátoři Dne IPv6, tradiční akce věnované tématům spojeným s tímto protokolem, vyhlásili Call for Abstracts. Na webu konference mohou zájemci přihlašovat příspěvky o délce 20 nebo 40 minut či 10minutové lighting talky a to až do 30. dubna. Tvůrci programu uvítají návrhy přednášek z akademického i komerčního sektoru, které mohou být technického i netechnického zaměření. Den IPv6 se letos uskuteční 4. června a místem konání bude i

    … více »
    VSladek | Komentářů: 12
    30.3. 15:00 | Zajímavý software

    Euro-Office (Wikipedie) je evropský fork open source kancelářského balíku OnlyOffice. Za forkem stojí koalice firem IONOS, Nextcloud, Eurostack, XWiki, OpenProject, Soverin, Abilian a BTactic. Cílem je zajistit digitální suverenitu Evropy a snížit závislost na neevropských platformách. Projekt vznikl mimo jiné v reakci na nedávné uzavření cloudové služby OnlyOffice. OnlyOffice obviňuje Euro-Office z porušení licenčních podmínek. Na možné problémy upozorňuje i Collabora Online. Jednostranná změna licence není v pořádku.

    Ladislav Hagara | Komentářů: 27
    30.3. 05:11 | Komunita

    Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.

    Ladislav Hagara | Komentářů: 0
    30.3. 00:22 | Komunita

    Během akce Arduino Days 2026 byl publikován Arduino Open Source Report 2025 (pdf) a oznámeno 7 nových produktů kompatibilních s deskou UNO Q (Arduino USB-C Power Supply, USB-C Cable, USB-C Hub, UNO Media Carrier, UNO Breakout Carrier, Bug Hopper, Modulino LED Matrix).

    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (2%)
     (14%)
     (23%)
    Celkem 1199 hlasů
     Komentářů: 29, poslední včera 11:17
    Rozcestník

    Dotaz: JS: návratová hodnota v rekurzivní funkci

    29.4.2019 10:35 mica
    JS: návratová hodnota v rekurzivní funkci
    Přečteno: 648×
    Zdravím, já mám problém se zdánlivě naprosto triviální funkcí. Na začátku byla tato jednoduchá funkce:
    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      return num;
    }
    
    Já jsem si usmyslel, že když ji budu volat v rozmezí čísel -33 (tedy random(-3, 3)), nechci jako výsledek dostat nulu. Tak jsem funkci upravil následovně:
    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      if (num == 0) {random(min, max)} else {return num};
    }
    
    Jenže jsem zjistil, že funkce kromě celých čísel v zadaném rozsahu občas vrací i undefined. Tak jsem hledal čím to a našel jsem diskuse, zda je vhodné psát return do bloku else. Z nich jsem sice nepochopil, proč dostávám jako výslednou hodnotu někdy undefined, ale stejně jsem funkci upravil na
    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      if (num == 0) random(min, max);
      return num;
    }
    
    Výsledkem této úpravy bylo, že undefined se už mezi výslednými hodnotami funkce nevyskytovalo, zato se mezi ostatními čísly vyskytovala nula; čili jako by podmínka ve funkci nebyla. Už ani nevím, proč mě napadlo udělat ještě jednu úpravu, a to
    var num;
    function random(min, max) {
      num = Math.floor(Math.random() * (max - min + 1)) + min;
      if (num == 0) random(min, max);
      return num;
    }
    
    a teprve potom funkce fungovala tak, jak jsem si představoval na začátku, to znamená, že při volání random(-3, 3) vracela čísla -3, -2, -1, 1, 2, 3, ale nikdy nulu (a taky nikdy undefined). Moje otázka zní, proč je to tak, jak to je. Tuším, že to nějak souvisí s platností proměnné num, ale nevím, jak. Děkuji za vysvětlení.

    Řešení dotazu:


    Odpovědi

    Řešení 1× (Filip Jirsák)
    29.4.2019 11:07 Will
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    if (num == 0) {random(min, max)}

    {random(min, max)} - tady s navratovou hodnotou nic nedelate
    Řešení 1× (Filip Jirsák)
    xkucf03 avatar 29.4.2019 11:18 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci

    Proměnná num je lokální pro daný běh funkce. Pokud tu funkci zavoláš (třeba rekurzivně) víckrát, má každý běh této funkce svoji nezávislou proměnnou num. Tudíž ten řádek:

    if (num == 0) random(min, max);

    změní hodnotu num jen v tom vnitřním volání random(), zatímco tady zůstane hodnota nezměněná. Funkce sice na tomhle řádku vrátí hodnotu, ale ta se okamžitě zahodí, protože ji nepřiřazuješ do žádné proměnné. Musel bys tam mít:

    if (num == 0) num = random(min, max);

    aby to něco dělalo.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.4.2019 19:28 mica
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci

    Proměnná num je lokální pro daný běh funkce.

    To jsem nevěděl. Ještě jednou děkuji.
    Řešení 1× (Filip Jirsák)
    1.5.2019 00:15 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci

    Před rekurzivním voláním random(min, max) chybí return. Od toho se celý problém odvíjí. Hodnota vrácená rekurzivním voláním se tím pádem zahodí a nikam dál se nevrací.

    Vůbec nepíšeš, co přesně má ta funkce dělat, jaké vstupy má podporovat a jaké výstupy má generovat. Mají to být všechno integery? Libovolná čísla? Něco jiného? Hint: Co když bude min mít (zhruba) hodnotu pí? Na takový dotaz se pak odpovídá těžko.

    Budu tedy dál předpokládat, že argumenty mají být integery. (To by se ale mělo v prakticky použitelném kódu ověřit, případně specifikovat, co se má stát, pokud to nebudou integery.) Takže první iterace:

    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      return num == 0 ? random(min, max) : num;
    }
    

    To^^^ je ale pořád ještě fujtajbl, protože dobu běhu té funkce a počet úrovní rekurze je potřeba deterministicky omezit. Sice je krajně nepravděpodobné, že by hloubka rekurze překročila povolenou hloubku zásobníku, ale spoléhat se tímto způsobem na náhodu je ošklivé. Vznikají tak chyby, kvůli kterým pak software jednou za rok za podivných okolností zařve. Takové chyby jsou těžko reprodukovatelné a těžko odhalitelné.

    Takový jednoduchý nápad: Co takhle zjistit, jestli zadaný rozsah čísel obsahuje nulu, a pokud ano, jednoduše se jí při generování náhodného čísla vyhnout?

    function random(min, max) {
      if (min > max) [min, max] = [max, min];
      var num = function(range) {
        return Math.floor(Math.random() * range) + min;
      };
      if (min > 0 || max < 0) {
        return num(max - min + 1);
      } else {
        var result = num(max - min);
        return result >= 0 ? result + 1 : result;
      }
    }
    
    Tohle^^^ je pořád hodně ošklivé, ale vrací to náhodné číslo z celého rozsahu kromě nuly a nemá to v sobě žádnou náhodnou rekurzi.
    4.5.2019 11:12 mica
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    Já myslím, že je zbytečné to komplikovat.

    Za prvé, abych nepokoušel dobrou vůli těch, kteří jsou ochotni odpovědět, jsem se zeptal jen na jednu izolovanou věc, po nikom jsem nechtěl, aby řešil ještě spoustu dalších věcí kolem. Proč bych tedy psal, jaké vstupy má funkce přijímat či jaké očekávané hodnoty má vracet, když to s jádrem problému nesouvisí? Musím přece předem počítat s tím, že bych se pak možná dočkal odpovědí na všechno možné, jen ne to, co mě doopravdy zajímá.

    Za druhé ovšem stejně nechápu ta dodatečná bezpečnostní opatření. Funkce má přece volat samu sebe jen v případě, kdy se do proměnné num dosadí hodnota 0 - a to sice může nastat několikrát po sobě, ale rozhodně ne tolikrát, aby kvůli tomu hrozila nějaká havárie. Podle mě zde rekurze může proběhnou tak maximálně třikrát nebo čtyřikrát po sobě a to přece není problém. Takže v tomto případě nevidím nic špatného ve spolehání se na náhodu.
    4.5.2019 12:08 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    Kromě komplikace se to dá i ořezat včetně zbavení se rekurze.
    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min)) + min;
      return (num >= 0) ? (num + 1) : num;
    }
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    5.5.2019 07:00 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci

    Tohle přece nefunguje. Pro záporné rozsahy nikdy nevrací max (random(-2, -1)) a pro kladné rozsahy nikdy nevrací min (random(1, 2)). Jo, kdyby se to aspoň chovalo konzistentně co do vyloučení / zahrnutí mezí, ale ani to ne.

    Nazývejme prosím věci pravými jmény. Korektní řešení problému se nejmenuje „komplikace“ a vracení čísel z jiného než požadovaného rozsahu se nejmenuje „řešení“.

    4.5.2019 20:03 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    Vzhledem k tomu, že neznáte tak základní věc, jako volání funkcí, měl byste být spíš rád, že jste se dozvěděl další věci. Navíc teda tohle řešit rekurzí je docela zvláštní řešení.
    5.5.2019 06:53 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    Takže v tomto případě nevidím nic špatného ve spolehání se na náhodu.

    Ne, spoléhat se na náhodu není nikdy přijatelné. Programování je přesná technická disciplína, nikoliv modlitba k bohu slunce.

    5.5.2019 07:14 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci

    Ještě pár reakcí na tyhle nesmysly těžkého kalibru:

    Za prvé, abych nepokoušel dobrou vůli těch, kteří jsou ochotni odpovědět, jsem se zeptal jen na jednu izolovanou věc, po nikom jsem nechtěl, aby řešil ještě spoustu dalších věcí kolem.

    Není jistější způsob, jak pokoušet dobrou vůli těch, kdo chtějí odpovědět, než ptát se nepřesně a vágně.

    Proč bych tedy psal, jaké vstupy má funkce přijímat či jaké očekávané hodnoty má vracet, když to s jádrem problému nesouvisí?

    Protože to s jádrem problému nejen souvisí, ale dokonce to je samotné jádro problému. Jádrem samotného programování je totiž přesné pochopení problému, přesná specifikace problému a rozdělení problému do menších celků, které lze vyjádřit ve formě zdrojového kódu. Pokud první dvě fáze celého procesu selhaly (a zjevně selhaly), jaký má potom smysl zabývat se nějak izolovaně tou třetí fází?

    Za druhé ovšem stejně nechápu ta dodatečná bezpečnostní opatření.

    To nejsou žádná „bezpečnostní opatření“; jde o nezbytnou součást korektního řešení daného problému. Je zkrátka několik jednoduchých zásad, bez kterých se člověk při programování neobejde. Zásada číslo jedna: Na náhodu se nikdy nespoléhá.

    Funkce má přece volat samu sebe jen v případě, kdy se do proměnné num dosadí hodnota 0 - a to sice může nastat několikrát po sobě, ale rozhodně ne tolikrát, aby kvůli tomu hrozila nějaká havárie.

    Kde přesně je tohle zaručeno a jak? Znova: Pokud si můžu být něčím naprosto jistý, neexistuje důvod spoléhat na náhodu.

    …maximálně třikrát nebo čtyřikrát…
    Čím je to maximum omezené? Pětkrát se to stát nemůže? Šestkrát taky ne? Jak to? Kdyby programátoři uvažovali takhle, použitelný počítač by se na světě hledal velmi těžko.
    Řešení 1× (Filip Jirsák)
    1.5.2019 09:07 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: JS: návratová hodnota v rekurzivní funkci
    function random(min, max) {
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      return (num == 0) ? random(min, max) : num;
    }
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.