-
31. Data: 2012-06-27 13:39:04
Temat: Re: Java i goto
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 11:28:31 +0000, Edek Pienkowski napisal:
> Dnia Wed, 27 Jun 2012 13:25:51 +0200, AK napisal:
>
>> Użytkownik "Edek Pienkowski" <e...@g...com> napisał:
>>
>>> label: {
>>> ...
>>> break label;
>>> ...
>>> };
>>>
>>> To całkiem niezły substytut goto
>>
>> Jaki zas substytut. To _czyste goto_.
>> Czytac nie umiesz /z dokladnoscia do lukru skladniowego oczywiscie/ ?
>> :)
>
> 93% pure.
Żeby nie być gołosłownym:
- labelka jest nie tam
- labelka jest powiązana ze scopem
- nie jest użyte "goto"
- skok jest tylko do przodu
- oczywiste zanieczyszczenie języka wysokiego poziomu
assemblerowym conditional-jump-over-unconditional
- zbędny scope
- nie wiem, co jest ogólnie siódmym zanieczyszczeniem,
ale ma zapach taki cytrusowaty
Edek
-
32. Data: 2012-06-27 15:21:48
Temat: Re: Java i goto
Od: Andrzej Jarzabek <a...@g...com>
On Jun 27, 12:09 pm, Edek Pienkowski <e...@g...com>
wrote:
> Dnia Wed, 27 Jun 2012 03:43:27 -0700, Andrzej Jarzabek napisal:
> >> > > private boolean find()
> > [...]
>
> > A właściwie może nie. Więc: dlaczego widać, że niewystarczająco dobrze
> > sformułowałes poglądy? Czy nie chodziło ci o to, że twój przykład
> > wykazuje, że czasem goto jest najlepszym rozwiązaniem? No więc w czym
> > moje rozwiązanie, bez goto a z dwoma returnami, jest gorsze od tego z
> > goto?
>
> Nie jest rozwiązaniem w ogóle. Można by nim zastąpić taki kod:
>
> .... goto do_return;
>
> do_return:
> return;
>
> }; // end of method
Nie. Twój pierwotny kod:
for()
for() {
if (findSth()) {
found = sth;
goto search_complete;
}
}
}
throw new Failure();
search_complete:
Można zastąpić kodem:
if(!find()) throw new Failure();
gdzie funkcja find() jest zdefiniowana tak, jak napisałem.
> To całkiem niezły substytut goto, ograniczony, ale rozwiązujący tego
> typu problemy. Nie wiem, czy spotkam w praktyce przypadek, gdzie
> potrzebne byłoby goto a nie powyższe, chociaż znam takie.
W ogóle przypadki, kiedy goto jest potrzebne są ekstremalnie rzadkie -
i to nawet nie "potrzebne" w sensie "bez goto się nie da", bo takich
przypadków nie ma w ogóle, tylko "potrzebne" w sensie "lepiej z goto
niż bez goto"
> Czyli
> mój problem nie tylko został zauważony w ogóle, ale jest uwzględniony
> w konstrukcji języka Java, chociaż o tym nie wiedziałem, a dzięki
> temu wątkowi wiem.
Good for you.
-
33. Data: 2012-06-27 22:38:02
Temat: Re: Java i goto
Od: "Borneq" <b...@a...hidden.pl>
Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
wiadomości news:jseplq$iu5$1@inews.gazeta.pl...
> To całkiem niezły substytut goto, ograniczony, ale rozwiązujący tego
> typu problemy. Nie wiem, czy spotkam w praktyce przypadek, gdzie
> potrzebne byłoby goto a nie powyższe, chociaż znam takie. Czyli
A jakie przypadki, gdzie break label byłby nie wystarczający? Jedyna
sensowna pozycja gdzie mogłoby być goto to wychodzenie z pętli
zagnieżdżonych a to załatwia break label.
-
34. Data: 2012-06-27 22:45:25
Temat: Re: Java i goto
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 22:38:02 +0200, Borneq napisal:
> Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
> wiadomości news:jseplq$iu5$1@inews.gazeta.pl...
>> To całkiem niezły substytut goto, ograniczony, ale rozwiązujący tego
>> typu problemy. Nie wiem, czy spotkam w praktyce przypadek, gdzie
>> potrzebne byłoby goto a nie powyższe, chociaż znam takie. Czyli
>
> A jakie przypadki, gdzie break label byłby nie wystarczający? Jedyna
> sensowna pozycja gdzie mogłoby być goto to wychodzenie z pętli
> zagnieżdżonych a to załatwia break label.
Wszystko, co ma małe automatony (state machines). Da się zakodować
inaczej, jakoś mniej więcej obiekt stanu i polimorficznie obiekt
na stan, ale jak są małe, to wygodne jest goto.
Edek
-
35. Data: 2012-06-27 22:56:08
Temat: Re: Java i goto
Od: "Borneq" <b...@a...hidden.pl>
Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
wiadomości news:jsfrd5$iu5$13@inews.gazeta.pl...
> Wszystko, co ma małe automatony (state machines). Da się zakodować
> inaczej, jakoś mniej więcej obiekt stanu i polimorficznie obiekt
> na stan, ale jak są małe, to wygodne jest goto.
W przykładzie http://www.thibault.org/newhome/thoughts/goto-and-fs
ms.html
if połączone z goto do tyłu można zastąpić pętlą
-
36. Data: 2012-06-27 23:01:44
Temat: Re: Java i goto
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 22:56:08 +0200, Borneq napisal:
> Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
> wiadomości news:jsfrd5$iu5$13@inews.gazeta.pl...
>> Wszystko, co ma małe automatony (state machines). Da się zakodować
>> inaczej, jakoś mniej więcej obiekt stanu i polimorficznie obiekt na
>> stan, ale jak są małe, to wygodne jest goto.
>
> W przykładzie
> http://www.thibault.org/newhome/thoughts/goto-and-fs
ms.html if połączone
> z goto do tyłu można zastąpić pętlą
Wszystko można zastąpić. Nie sprawdzałem osobiście, ale podobno Java
jest Turing complete.
Automatony da się zaimplementować zwykłym switchem w pętli. Miałem
na myśli inny przykład, ale w tej chwili nie mogę sobie przypomnieć.
Edek
-
37. Data: 2012-06-27 23:02:53
Temat: Re: Java i goto
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2012-06-27, Borneq <b...@a...hidden.pl> wrote:
> Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
> wiadomości news:jsfrd5$iu5$13@inews.gazeta.pl...
>> Wszystko, co ma małe automatony (state machines). Da się zakodować
>> inaczej, jakoś mniej więcej obiekt stanu i polimorficznie obiekt
>> na stan, ale jak są małe, to wygodne jest goto.
>
> W przykładzie http://www.thibault.org/newhome/thoughts/goto-and-fs
ms.html
> if połączone z goto do tyłu można zastąpić pętlą
A if połączone z goto do tyłu, do środka innego if połączonego z goto?
Dowód ogólnej własności przez pokazanie specyficznego przykładu nie jest
prawidłową metodą dowodzenia.
--
Secunia non olet.
Stanislaw Klekot
-
38. Data: 2012-06-27 23:08:18
Temat: Re: Java i goto
Od: "Borneq" <b...@a...hidden.pl>
Użytkownik "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
napisał w wiadomości news:slrnjumt3m.96u.dozzie@jarowit.net...
> A if połączone z goto do tyłu, do środka innego if połączonego z goto?
>
> Dowód ogólnej własności przez pokazanie specyficznego przykładu nie jest
> prawidłową metodą dowodzenia.
Według mnie, jeżeli już dopuszczać goto to:
- tylko do przodu
- wychodzące z ramki (pętli, ifa) na zewnątrz
Inaczej to straszny kod się wtedy robi. Czy implementacja jakiegoś automatu
może tego wymagać?
-
39. Data: 2012-06-28 00:00:58
Temat: Re: Java i goto
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2012-06-27, Borneq <b...@a...hidden.pl> wrote:
> Użytkownik "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
> napisał w wiadomości news:slrnjumt3m.96u.dozzie@jarowit.net...
>> A if połączone z goto do tyłu, do środka innego if połączonego z goto?
>>
>> Dowód ogólnej własności przez pokazanie specyficznego przykładu nie jest
>> prawidłową metodą dowodzenia.
>
> Według mnie, jeżeli już dopuszczać goto to:
Ależ ja nie twierdzę, że goto jest niezbędne. Ja tylko wykazuję w tym
miejscu błąd w twojej argumentacji (a przynajmniej tym, co biorę za
argumentację).
--
Secunia non olet.
Stanislaw Klekot
-
40. Data: 2012-06-28 04:48:10
Temat: Re: Java i goto
Od: A.L. <l...@a...com>
On Wed, 27 Jun 2012 20:45:25 +0000 (UTC), Edek Pienkowski
<e...@g...com> wrote:
>Dnia Wed, 27 Jun 2012 22:38:02 +0200, Borneq napisal:
>
>> Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
>> wiadomości news:jseplq$iu5$1@inews.gazeta.pl...
>>> To całkiem niezły substytut goto, ograniczony, ale rozwiązujący tego
>>> typu problemy. Nie wiem, czy spotkam w praktyce przypadek, gdzie
>>> potrzebne byłoby goto a nie powyższe, chociaż znam takie. Czyli
>>
>> A jakie przypadki, gdzie break label byłby nie wystarczający? Jedyna
>> sensowna pozycja gdzie mogłoby być goto to wychodzenie z pętli
>> zagnieżdżonych a to załatwia break label.
>
>Wszystko, co ma małe automatony (state machines). Da się zakodować
>inaczej, jakoś mniej więcej obiekt stanu i polimorficznie obiekt
>na stan, ale jak są małe, to wygodne jest goto.
>
>Edek
Goto zupelnie ejst niepotzrebne do tego. Wystarczy switch
A.L.