eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJava i gotoJava i goto
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Edek Pienkowski <e...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Java i goto
    Date: Mon, 25 Jun 2012 17:12:02 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 56
    Message-ID: <jsa652$98b$2@inews.gazeta.pl>
    NNTP-Posting-Host: static-81-219-27-130.devs.futuro.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1340644322 9483 81.219.27.130 (25 Jun 2012 17:12:02 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 25 Jun 2012 17:12:02 +0000 (UTC)
    X-User: pieniekusenet
    User-Agent: Pan/0.135 (Tomorrow I'll Wake Up and Scald Myself with Tea; GIT 30dc37b
    master)
    Xref: news-archive.icm.edu.pl pl.comp.programming:198085
    [ ukryj nagłówki ]

    "goto" w Javie jest słowem kluczowym, nieużywanym. Podobnie jak const.
    Bytekod JVM natomiast, co właśnie sprawdziłem, ma instrukcję goto,
    co biorąc pod uwagę to, że bytekod ma tylko trochę ponad 100 opcodes
    oznacza, że było potrzebne. Czyli z punktu widzenia implementacji
    nie byłoby problemu żadnego, gdyby Java miała goto.

    I teraz tak: ja wiem, że "goto" jest Złe i w ogóle, ale jakoś
    natknąłem się na coś co w Javie nieczęsto się tworzy, mianowicie
    dość skomplikowany algorytm, gdzie przydało by się goto. W mega
    uproszczonej wersji wygląda tak:

    for () {
    boolean someFlag
    for() {
    if (findSth()) {
    found = sth;
    someFlag = true;
    break;
    }
    }

    // można w tym uproszczonym przykładzie
    // pominąć if robiąc powyżej break outer_loop
    // ale to mega uproszczony przykład
    if (someFlag) {
    break;
    }
    }
    if (!someFlag) {
    throw new Failure();
    }

    Wolałbym tak:

    for()
    for() {
    if (findSth()) {
    found = sth;
    goto search_complete;
    }
    }
    }
    throw new Failure();
    search_complete:

    Mi ten drugi kod wygląda na prostszy i dużo bardziej zrozumiały,
    a prawdziwy kod jest dużo gorszy, bo niepodzielny na metody i
    długi na kilkaset linijek i szczerze mówiąc ten przykład nie oddaje
    problemu, prawdziwy ma tych someFlagów ze dwadzieścia, pętle
    bardziej skomplikowane itd.

    Dlaczego Java nie ma goto, czy dlatego żeby raczkujące berbecie
    się nie pocięły?

    Edek

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: