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 17:22 | IT novinky

    Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.

    Ladislav Hagara | Komentářů: 2
    dnes 17:00 | Komunita

    Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.

    Ladislav Hagara | Komentářů: 0
    dnes 10:11 | IT novinky

    V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od

    … více »
    Ladislav Hagara | Komentářů: 1
    dnes 03:11 | Komunita

    Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.

    Ladislav Hagara | Komentářů: 0
    dnes 02:11 | Zajímavý článek

    Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    dnes 02:00 | Nová verze

    OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | IT novinky

    Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.

    Ladislav Hagara | Komentářů: 4
    včera 14:44 | IT novinky

    Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.

    Ladislav Hagara | Komentářů: 6
    včera 12:22 | Bezpečnostní upozornění

    Rozšíření webového prohlížeče Urban VPN Proxy a další rozšíření od stejného vydavatele (např. 1ClickVPN Proxy, Urban Browser Guard či Urban Ad Blocker) od července 2025 skrytě zachytávají a odesílají celé konverzace uživatelů s AI nástroji (včetně ChatGPT, Claude, Gemini, Copilot aj.), a to nezávisle na tom, zda je VPN aktivní. Sběr probíhá bez možnosti jej uživatelsky vypnout a zahrnuje plný obsah dotazů a odpovědí, metadata relací i

    … více »
    Ladislav Hagara | Komentářů: 5
    včera 05:22 | Zajímavý software

    QStudio, tj. nástroj pro práci s SQL podporující více než 30 databází (MySQL, PostgreSQL, DuckDB, QuestDB, kdb+, …), se stal s vydáním verze 5.0 open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache 2.0.

    Ladislav Hagara | Komentářů: 6
    Kdo vám letos nadělí dárek?
     (9%)
     (0%)
     (0%)
     (0%)
     (9%)
     (0%)
     (27%)
     (27%)
     (27%)
    Celkem 11 hlasů
     Komentářů: 10, poslední dnes 12:54
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Můžu vložit return do podmínky když není v žádném cyklu?

    27.1.2017 09:43 Host
    Můžu vložit return do podmínky když není v žádném cyklu?
    Přečteno: 663×
    Ahoj, můžu do podmínky vložit return, aby se již neprovedl kód pod podmínkou pokud je ta podmínka splněna? Podmínka není v žádném cyklu. Díky

    if ($url == 'foo'){
      $a = 10;
      return;
    }

    Řešení dotazu:


    Odpovědi

    27.1.2017 09:54 MadCatX
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    return slouží pro návrat z funkce, nikoliv pro ukončení cyklu. Pokud je ten kód součástí funkce, return tam použít můžeš.
    27.1.2017 13:10 NN
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Mi Muzes pouzit 'exit' pokud tato moznost v jazyce existuje.
    27.1.2017 14:22 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Je to blbě, pokud chceš při splněné podmínce a při nesplněné provádět dva rozdílné kody tak se používá if - else.
    if(x>0) printf("Cislo je vetsi nez nula.\n");
    else    printf("Cislo neni vetsi nez nula.\n");
    
    printf("A pokračujem společným kodem.\n")
    
    27.1.2017 16:44 .
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Možná chce “aby se již neprovedl kód pod podmínkou pokud je ta podmínka splněna”
    27.1.2017 20:01 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Však ano .....
    if(x>0) printf("Cislo je vetsi nez nula.\n");
    else    printf("Cislo neni vetsi nez nula.\n");
     
    return;
    Podle mě je to takto přehlednější, ale samozřejmě každý má jiné zvyky.

    28.1.2017 13:01 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?

    Spíš jde o tohle:

    void napi_consume_skb(struct sk_buff *skb, int budget)
    {
            if (unlikely(!skb))
                    return;
    
            /* dalších 20 řádků vlastního kódu funkce */
    }
    

    Samozřejmě můžete celý ten zbytek těla funkce, tj. celou její podstatu, odsadit a dát do else větve (nebo spíš rovnou otočit tu podmínku), ale čitelnosti to rozhodně neprospěje.

    28.1.2017 13:37 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Ja som veľmi konzervatívny a preferujem aby mala funkcia len jeden return.
    28.1.2017 17:32 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Taky preferuji jeden return, a pouze při závažné chybě kdy se nemůže pokračovat ukončené kdekoliv pomocí exit.
    28.1.2017 18:20 jekub
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    vždyť má ;-)
    27.1.2017 17:16 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Jak píše MadCadX, return je návrat z procedury/funkce. Dokonce se taková struktura poměrně často i používá. V testu if se posoudí, jestli parametry funkce, nebo jiná data, jsou chybně. Pokud jsou, tak nemá smysl ve funkci dále pokračovat, ošetří se chybový návratový stav a returnem se vrací.
    1.2.2017 12:44 ydenda | skóre: 2
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Pár let v automotive mě vychovalo tak, aby funkce/metoda měla právě jeden vstupní bod a právě jeden výstupní bod. Kdyby nic jinýho, zvyšuje to přehlednost. Je to jedno z méně hloupých Lint/MISRA pravidel.
    Řešení 1× (Tomáš Bžatek)
    3.2.2017 21:27 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    To tvrzení, že to zvyšuje přehlednost, vypadá bez dalšího vysvětlení dost nepravděpodobně. Můžete to nějak rozvést? Jenom když si představím klasický příklad, že je potřeba na začátku funkce/metody otestovat vstupní hodnoty – pokud povolím více výstupních bodů, po každém neúspěšném testu vyskočím z funkce, pokud je test úspěšný, pokračuju v těle funkce. Pokud to budu chtít přepsat na jediný výstupní bod, vznikne z toho kaskáda do sebe zanořených ifů…
    3.2.2017 22:48 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    No, pořád ještě je tu možnost dát si na konec funkce label a místo returnů sekat goto na něj. :-)
    4.2.2017 16:56 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    To jsi mi připomněl aritmetické if ve FORTRANu
    IF proměnná negativ,zero,positive
    se třemi labely. kdy kód za žádné podmínky nemusel pokračovat za IF. :-) s oblibou jsem s tím na VŠ provokoval.
    4.2.2017 18:31 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?

    Dokonalý chaos ovšem přinášejí interpretované jazyky. Např. "oblíbené"

      ON <expr> GOTO <num> [, <num>... ]
    

    v řadě dialektů BASICu a v některých dokonce

      GOTO <expr>
    

    Z toho se teoretikům programovacích stylů ježily chlupy i tam, kde netušili, že nějaké mají. :-)

    3.2.2017 22:58 ydenda | skóre: 2
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Abych se vyhnul zamotání se do detailů, narážka na vstupní body metody se týkala především GOTO (všichni dlouho zakazují použití, ale nikdo ho z překladače dosud nevyhodil :) ) nikoliv argumentů metody. Pokud je vstupních argumentů metody mnoho, odvolal bych se na designera... případně je testoval v separátní metodě. Na vysvětlenou dodám, že reset procesoru nepovažuji za výstupní bod. Přeci jen, pokud kontroluji nějaké proměnné s vyšším stupněm zabezpečení, v případě nesrovnalostí, volám reset OS - pro zajištění bezpečí osob/majetku. V případě, že je porucha fatální, a handling by mi navrátil kontrolu, skočím pro jistotu do nekonečné smyčky (z hlediska designu to snad nikdo nepovažuje za výstupní bod :)). Teď však k dlužnému vysvětlení: Dříve jsem používal returnů v metodách několik, avšak v zaměstnání jsem přišel na to, že je fajn, když se dodržuje dohodnutá štábní kultura a navíc když ji hlídá nějaký tool, např (sp)lint apod. Ten kritizuje spoustu maličkostí, ale u returnu jsem musel uznat, že je to opodstatněné varování. Představte si, že máte "povinnost/šanci" kontrolovat po kolegovi kód před každým mergem. Pak je reviewer rád za to, že 50 lidí píše jakš-takš uniformní kód bez ohledu na národnost. K tomu pro mě, bez pochyby, patří i počet returnů v metodě. Odpadá pak potřeba počítat, jestli ta či ona metoda měla 3 nebo 6 returnů -> měla prostě jenom jeden. Chápu, že to v někom snadno vyvolá pocit, že se snažím udělat return zbytečným, když bude vždy a pouze před poslední závorkou. Pro PC platformu bych to asi zvládnul, ale práce v automotive na mě měla eviděntně vliv... V zásadě je více vstupních/výstupních bodů metody noční můrou spíše pro designery než pro pisatele kódu, ale neměl by být pisatel tak trochu i designerem? Snad jsem Vám odpověděl.

    PS OP těsně před returnem nastavuje nějakou statickou nebo globální proměnnou - to taky musí bejt pošušňáníčko pro unit testy nebo pro hledače závislostí :)
    3.2.2017 23:16 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Snad jsem Vám odpověděl.

    Mám-li být upřímný, za sebe musím říct, že moc ne. Co se týká review kódu, osobně mnohem radši na začátku funkce uvidím

            mp = kzalloc(sizeof(u32) * RTAX_MAX, GFP_KERNEL);
            if (unlikely(!mp))
                    return -ENOMEM;
    

    než aby tam bylo formální "goto out" a já se musel ještě podívat dolů, jestli se v tom případě nedělá něco dalšího. To má naopak dobrý smysl, pokud na konci bude něco jako

    err:
            kfree(mp);
            return -EINVAL;
    }
    

    a bude se tam skákat z víc různých míst. Nebo třeba u kaskád jako tady

    4.2.2017 09:43 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Můžu vložit return do podmínky když není v žádném cyklu?
    Z vaší odpovědi jsem se dozvěděl, že je dobré dodržovat štábní kulturu, s čímž souhlasím. Nicméně nemám pocit, že by vysvětlovala, jak může pravidlo jediného výstupního bodu zpřehledňovat kód.

    Abychom se bavili o něčem konkrétním – primitivní funkce pro kopírování souborů bude s několika výstupními body vypadat nějak takhle:
    void copy(source, target) {
      if (!file_exists(source)) {
        throw "Zdrojový soubor neexistuje.";
      }
      if (!is_dir(source)) {
        throw "Zdroj nemůže být adresář.";
      }
      if (!is_readable(source)) {
        throw "Zdrojový soubor nelze číst.";
      }
      if (!is_dir(target)) {
        throw "Cíl nemůže být adresář.";
      }
    
      parent = parent_dir(target);
      if (!file_exists(parent)) {
        throw "Neexistuje adresář pro cílový soubor.";
      }
      if (exists(target)) {
        throw "Cílový soubor již existuje.";
      }
      if (!is_writable(parent)) {
        throw "Do cílového adresáře nelze zapisovat.";
      }
      if (get_free_space(parent) < get_file_size(source)) {
        throw "V cílovém adresáři není dost volného místa.";
      }
    
      buffer, offset;
      do {
        buffer = read(source, offset, size(buffer));
        write(target, offset, buffer);
        offset += size(buffer);
      } while(size(buffer) > 0);
    }
    
    Když to přepíšu na jediný výstupní bod, dostanu:
    void copy(source, target) {
      error = null;
      if (file_exists(source)) {
        if (is_dir(source)) {
          if (is_readable(source)) {
            parent = parent_dir(target);
            if (file_exists(parent)) {
              if (is_dir(target)) {
                if (is_writable(parent)) {
                  if (!exists(target)) {
                    if (get_free_space(parent) >= get_file_size(source)) {
                      buffer, offset;
                      do {
                        buffer = read(source, offset, size(buffer));
                        write(target, offset, buffer);
                        offset += size(buffer);
                      } while(size(buffer) > 0);
                    } else {
                      error = "V cílovém adresáři není dost volného místa.";
                    }
                  } else {
                    error = "Cílový soubor již existuje.";
                  }
                } else {
                  error = "Do cílového adresáře nelze zapisovat.";
                }
              } else {
                error = "Cíl nemůže být adresář.";
              }
          } else {
              error = "Neexistuje adresář pro cílový soubor.";
            }
          } else {
            error = "Zdrojový soubor nelze číst.";
          }
        } else {
          error = "Zdroj nemůže být adresář.";
        }
      } else {
        error = "Zdrojový soubor neexistuje.";
      }
      throw error;
    }
    
    Pro mne je tedy ten druhý kód daleko nepřehlednější, a porušuje například jednu velmi dobrou zásadu omezující počet vnoření bloků. Nebo jak byste ten kód přepsal na jediný výstupní bod bez těch vnořených ifů? Počet vnoření by se samozřejmě dal zredukovat sloučením několika testů do jednoho a vytknutím do samostatné funkce, ale to neřeší princip problému.

    Možná je rozdíl v programování triviálních funkcí přímo nad procesorem, kde máte jasně definované podmínky běhu, a pokud se náhodou dostanete mimo ně, zastavíte procesor a nějaký watchdog rozsvítí červenou kontrolku, že je všechno špatně (a mimochodem reset procesoru podle mne je výstupní bod, je to obdoba vyhození výjimky ve vyšších programovacích jazycích a způsob, jakým se ukončí provádění dané funkce). A v programování pro počítače, tablety, mobily, televize apod., kde uživatel pracuje přímo s programem, podmínky jsou velmi různorodé a každý očekává, že se z nečekaných situací dokáže program zotavit.

    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.