Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.
Byla vydána nová verze 1.25 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.
Byla vydána beta verze Linux Mintu 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.
Provozovatel internetové encyklopedie Wikipedie prohrál v Británii soudní spor týkající se některých částí nového zákona o on-line bezpečnosti. Soud ale varoval britského regulátora Ofcom i odpovědné ministerstvo před zaváděním přílišných omezení. Legislativa zpřísňuje požadavky na on-line platformy, ale zároveň čelí kritice za možné omezování svobody slova. Společnost Wikimedia Foundation, která je zodpovědná za fungování
… více »Byla vydána verze 2.0.0 nástroje pro synchronizaci dat mezi vícero počítači bez centrálního serveru Syncthing (Wikipedie). Přehled novinek na GitHubu.
Americký prezident Donald Trump se v pondělí osobně setkal s generálním ředitelem firmy na výrobu čipů Intel Lip-Bu Tanem. Šéfa podniku označil za úspěšného, informují agentury. Ještě před týdnem ho přitom ostře kritizoval a požadoval jeho okamžitý odchod. Akcie Intelu v reakci na schůzku po oficiálním uzavření trhu zpevnily asi o tři procenta.
Byl vydán Debian GNU/Hurd 2025. Jedná se o port Debianu s jádrem Hurd místo obvyklého Linuxu.
V sobotu 9. srpna uplynulo přesně 20 let od oznámení projektu openSUSE na konferenci LinuxWorld v San Franciscu. Pokuď máte archivní nebo nějakým způsobem zajímavé fotky s openSUSE, můžete se o ně s námi podělit.
Byl vydán Debian 13 s kódovým názvem Trixie. Přehled novinek v poznámkách k vydání.
WLED je open-source firmware pro ESP8266/ESP32, který umožňuje Wi-Fi ovládání adresovatelných LED pásků se stovkami efektů, synchronizací, audioreaktivním módem a Home-Assistant integrací. Je založen na Arduino frameworku.
if ($url == 'foo'){ $a = 10; return; }
Řešení dotazu:
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š.
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")
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.
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.
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í.
if
ů…
return
ů sekat goto
na něj. :-)
IF proměnná negativ,zero,positivese třemi labely. kdy kód za žádné podmínky nemusel pokračovat za IF.
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í. :-)
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
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.
Tiskni
Sdílej: