-
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