Article View: pl.comp.programming
Article #215938Re: Jak to robią w NASA
From: Mateusz Viste
Date: Fri, 30 Aug 2019 11:09
Date: Fri, 30 Aug 2019 11:09
46 lines
2606 bytes
2606 bytes
On Fri, 30 Aug 2019 12:27:37 +0200, Roman Tyczka wrote:
> Co prawda nie piszę w C, ale pierwszego i trzeciego warunku też
> przestrzegam i nikt mi tego nie narzuca, to po prostu pomaga.
> A metody dłuższe niż kilkadziesiąt linii to zmora.
W ogólnym i teoretycznym przypadku - zgadzam się.
W praktyce bywa jednak że trzymanie się takich sztywnych zasad "bo tak"
sprawia tylko kłopot. Przykład z głowy: funkcja która wykonuje dużą ilość
sekwencyjnych kroków konfiguracyjnych czegoś tam. Dzielenie jej na siłę
niekoniecznie jest racjonalne.
Z goto podobnie: w 95% przypadków goto można z zyskiem zastąpić inną
konstrukcją, ale zostaje te 5% czasu kiedy GOTO sensownie załatwia temat
a jakieś wymyślanie pętli/funkcji/czegoś to tylko cudowanie dla sztuki
niemania goto.
/* init thermonuclear engine, returns ptr on success, NULL otherwise */
void *engine_init(void) {
void *p = NULL;
p = malloc(ENGINE_MEMSZ);
if (p == NULL) goto SHITHAPPENS;
engine_prepare(p);
engine_thermonuclear_start(p);
if (rs232_init(COM_BAUDRATE) != 0) goto SHITHAPPENS;
if (is_it_friday_afternoon() != 0) goto SHITHAPPENS
return(p);
SHITHAPPENS: /* smth went south, cleanup and return NULL */
if (p != NULL) engine_thermonuclear_abort(p);
free(p);
rs232_close();
return(NULL);
}
Powyższe można wykonać na kilka sposobów, i nie ma problemu pozbyć się
goto - tylko po co? Gdyby ktoś z jakichś swoich powodów zakazał mi goto,
to opakowałbym całość w do { ... } while(0) i zamiast goto korzystał z
break - ale to tylko dodatkowa gmatwanina, wcale nie czytelniejsza.
Mateusz
Technical Details
Message-ID:
<5d6903da$0$14383$426a74cc@news.free.fr>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.ru!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed2-a.proxad.net!nnrp1-2.free.fr!not-for-mailReferences:
<1ua4wui506zbf$.dlg@tyczka.com> <5d68ce2a$0$15173$426a74cc@news.free.fr> <ak77llu9y7w0.dlg@tyczka.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.ru!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed2-a.proxad.net!nnrp1-2.free.fr!not-for-mail From: Mateusz Viste <mateusz@wont.tell> Subject: Re: Jak to robią w NASA Newsgroups: pl.comp.programming References: <1ua4wui506zbf$.dlg@tyczka.com> <5d68ce2a$0$15173$426a74cc@news.free.fr> <ak77llu9y7w0.dlg@tyczka.com> User-Agent: Pan/0.145 (Duplicitous mercenary valetism; d7e168a git.gnome.org/pan2) MIME-Version: 1.0 Date: 30 Aug 2019 11:09:14 GMT Lines: 46 Message-ID: <5d6903da$0$14383$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 30 Aug 2019 13:09:14 CEST NNTP-Posting-Host: 82.64.0.151 X-Trace: 1567163354 news-3.free.fr 14383 82.64.0.151:35488 X-Complaints-To: abuse@proxad.net Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit