eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Java i goto
Ilość wypowiedzi w tym wątku: 48

  • 1. Data: 2012-06-25 19:12:02
    Temat: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    "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


  • 2. Data: 2012-06-25 19:25:48
    Temat: Re: Java i goto
    Od: Maly troll <j...@s...pl>

    On 2012.06.25 19:12, Edek Pienkowski wrote:

    > I teraz tak: ja wiem, że "goto" jest Złe i w ogóle,[...]

    Nie jest złe, złe jest jego nadużywanie. Kod programu tworzy drzewo
    (powiedzmy taki lekki graf), z użyciem goto z drzewa robi się graf i im
    więcej goto tym więcej połączeń w grafie i ciężej jest analizować.
    Dlatego początkującym programistom mówi się żeby nie używali goto. I
    tylko tyle i aż tyle.

    --
    Tomek
    http://www.ttmath.org


  • 3. Data: 2012-06-25 19:28:21
    Temat: Re: Java i goto
    Od: A.L. <l...@a...com>

    On Mon, 25 Jun 2012 17:12:02 +0000 (UTC), Edek Pienkowski
    <e...@g...com> wrote:

    >"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


    Dlaczego nie ma goto?... Bog tak chcial...

    A co o takim rozwiazaniu?...


    search_complete:
    { // begin of search_complete block
    for()
    for() {
    if (findSth()) {
    found = sth;
    break search_complete;
    }
    }
    }
    throw new Failure();
    } // end of search_complete block

    A.L.


  • 4. Data: 2012-06-25 19:42:08
    Temat: Re: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 12:28:21 -0500, A.L. napisal:

    >
    >
    > Dlaczego nie ma goto?... Bog tak chcial...
    >
    > A co o takim rozwiazaniu?...
    >
    >
    > search_complete:
    > { // begin of search_complete block
    > for()
    > for() {
    > if (findSth()) {
    > found = sth;
    > break search_complete;
    > }
    > }
    > }
    > throw new Failure();
    > } // end of search_complete block

    Ooo. Rano sprawdzę, czy da się tak, czy trzeba
    search_complete:
    while(true/false) {
    ...
    }

    Jest to jakiś pomysł, rano zawsze czytam kod z poprzedniego
    dnia, może się ten pomysł przydać.

    Edek


  • 5. Data: 2012-06-25 19:43:40
    Temat: Re: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 19:25:48 +0200, Maly troll napisal:

    > On 2012.06.25 19:12, Edek Pienkowski wrote:
    >
    >> I teraz tak: ja wiem, że "goto" jest Złe i w ogóle,[...]
    >
    > Nie jest złe, złe jest jego nadużywanie. Kod programu tworzy drzewo
    > (powiedzmy taki lekki graf), z użyciem goto z drzewa robi się graf i im
    > więcej goto tym więcej połączeń w grafie i ciężej jest analizować.
    > Dlatego początkującym programistom mówi się żeby nie używali goto. I
    > tylko tyle i aż tyle.

    Dla narzędzi typu AOP i tak nie ma różnicy, mają goto w bajtkodzie.

    Edek


  • 6. Data: 2012-06-25 21:15:05
    Temat: Re: Java i goto
    Od: A.L. <l...@a...com>

    On Mon, 25 Jun 2012 17:42:08 +0000 (UTC), Edek Pienkowski
    <e...@g...com> wrote:

    >
    >Ooo. Rano sprawdzę, czy da się tak, czy trzeba
    >search_complete:
    >while(true/false) {
    > ...
    >}
    >
    >Jest to jakiś pomysł, rano zawsze czytam kod z poprzedniego
    >dnia, może się ten pomysł przydać.
    >
    >Edek

    Przeczytaj sobie uwaznie to

    http://docs.oracle.com/javase/specs/jls/se5.0/html/s
    tatements.html

    A.L.


  • 7. Data: 2012-06-25 21:16:47
    Temat: Re: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 19:25:48 +0200, Maly troll napisal:

    > On 2012.06.25 19:12, Edek Pienkowski wrote:
    >
    >> I teraz tak: ja wiem, że "goto" jest Złe i w ogóle,[...]
    >
    > Nie jest złe, złe jest jego nadużywanie. Kod programu tworzy drzewo
    > (powiedzmy taki lekki graf), z użyciem goto z drzewa robi się graf i im
    > więcej goto tym więcej połączeń w grafie i ciężej jest analizować.
    > Dlatego początkującym programistom mówi się żeby nie używali goto. I
    > tylko tyle i aż tyle.

    Tak po zastanowieniu: czym się różni graf powstały porzez użycie
    goto od grafu powstałego bez goto? Bo jedyne co widzę to fakt,
    że graf bez goto ma dodatkowe if-y. W końcu blok kodu musi
    robić to, co ma robić, i forma zapisania tego w Javie niewiele
    w tej kwestii zmienia.

    Edek


  • 8. Data: 2012-06-25 21:33:45
    Temat: Re: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 14:15:05 -0500, A.L. napisal:

    > On Mon, 25 Jun 2012 17:42:08 +0000 (UTC), Edek Pienkowski
    > <e...@g...com> wrote:
    >
    >
    >>Ooo. Rano sprawdzę, czy da się tak, czy trzeba search_complete:
    >>while(true/false) {
    >> ...
    >>}
    >>
    >>Jest to jakiś pomysł, rano zawsze czytam kod z poprzedniego dnia, może
    >>się ten pomysł przydać.
    >
    > Przeczytaj sobie uwaznie to
    >
    > http://docs.oracle.com/javase/specs/jls/se5.0/html/s
    tatements.html

    goto hell;) 14.15 (The break statement) widzę, sprawdzę w praktyce.
    Ale za rzeczy typu 14.3 to mnie z pracy usuną, jak już ktoś
    się przełamie na tyle żeby czytać mój kod, i tak już nadużywam
    konstrukcji Javy dość gęsto.

    Nawet po przeczytaniu specyfikacji, czy goto nie wyglądałoby lepiej?

    Edek


  • 9. Data: 2012-06-25 21:43:06
    Temat: Re: Java i goto
    Od: "AK" <n...@n...com>

    Użytkownik "Edek Pienkowski" <e...@g...com> napisał:

    > goto hell;)

    Edziu

    Z goto to tak jak z dobra wodeczka.
    Gdy naduzywasz to fakt, ze tragedia, ale gdy calkiem brak, to zycie traci sens ;)

    AK


  • 10. Data: 2012-06-25 22:03:51
    Temat: Re: Java i goto
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 21:43:06 +0200, AK napisal:

    > Użytkownik "Edek Pienkowski" <e...@g...com> napisał:
    >
    >> goto hell;)
    >
    > Edziu
    >
    > Z goto to tak jak z dobra wodeczka.
    > Gdy naduzywasz to fakt, ze tragedia, ale gdy calkiem brak, to zycie
    > traci sens ;)

    Hermetyczny nieco+ dowcip. Spróbuję kiedyś rozhermetyzować, będzie
    goto hell zapewne.

    Edek

strony : [ 1 ] . 2 ... 5


Szukaj w grupach

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: