🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215938

Re: Jak to robią w NASA

#215938
From: Mateusz Viste
Date: Fri, 30 Aug 2019 11:09
46 lines
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-mail
References: <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