eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak to robią w NASA › Re: Jak to robią w NASA
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.r
    u!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed2-a.proxad.net!
    nnrp1-2.free.fr!not-for-mail
    From: Mateusz Viste <m...@w...tell>
    Subject: Re: Jak to robią w NASA
    Newsgroups: pl.comp.programming
    References: <1ua4wui506zbf$.dlg@tyczka.com> <5d68ce2a$0$15173$426a74cc@news.free.fr>
    <a...@t...com>
    User-Agent: Pan/0.145 (Duplicitous mercenary valetism; d7e168a git.gnome.org/pan2)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    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: a...@p...net
    Xref: news-archive.icm.edu.pl pl.comp.programming:213875
    [ ukryj nagłówki ]

    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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: