Wpis z mikrobloga

@koziolek666: labelki się czasami w pętlach przydają, jak ma się kilka pętli w sobie i chce się wyjść z jakiejś wyżej.
Zazwyczaj rozbija się na metody, ale czasami rozbijanie na metody nie ma sensu kiedy kod ma być szybki a ty np iterujesz po np x/y/z, rozbicie na metody by tylko pogorszyło czytelność :D
A dodanie tu volatile kompletnie nie pasuje o.O

Za to można wspomnieć o keywordach które istnieją, ale
@kisi3l: no ale co kiedy masz kod gdzie każda sekunda się liczy, a masz kilka pętli po intach? dodawanie masy boolanów do wyjścia z pętli tylko sprawi że kod będzie mniej czytelny, dodanie metod... już kompletnie zrobi sieczkę z kodu.
Używałem takiego labela w moich wszystkich kodach od kilku lat... może z 3 razy, ale czasem tak było najlepiej, by zachować czytelność nie psując wydajności i czytelności.
@GotoFinal: Jeśl i masz więcej niż 2 zagnieżdżone pętle po intach, to albo:
- używasz złych struktur danych
- masz skopany design/pomieszane paradygmaty
- piszesz jakieś akademickie gówno do transponowania macierzy, i liczy się wynik, a nie całokształt.

Do 'wychodzenia' z pętli masz break/continue, przy użyciu labeli mieszasz przebiegiem logiki, i zdecydowanie w czyś takim ciężej się ogarnąć, niż po wydzieleniu fragmentów kodu do osobnych metod. Nie ma co się zasłaniać
@kisi3l: Albo tworzysz gierkę z nudów i masz mapkę x/y/z, tutaj czesto się przydają petle na 3 wymiary, a zrobienie metod na każdy wymiar...
- sprawia że kod wygląda jak nieczytelne gówno.
- spowalnia, a przy milionach iteracji nawet te glupie wykonanie metody potrafi być widoczne.
a zmiana struktur też odpada, bo też za bardzo spowolni kod.

I label nie miesza logiki, to nie jakieś goto by trudno bylo zobaczyć co
@GotoFinal: Ciężko mi się ustosunkować do tego kodu, bo nie wiadomo, co robi 'costam' i 'innecos'. W zależności od tego, można refaktorować na wiele różnych sposobów. Do/while, odwrócenie logiki w celu zmniejszenia ilości wcięć, ekstrakcja do metod, itp.

Natomiast co to label/break, to ewidentnie zamiast 'end = true' powinien być zwykły return, a całość w osobnej metodzie. I nie, nie wpływa to na wydajność.
@kisi3l: pisałem że w tym kodzie łatwo to zrobić - przenieś do metody, ale gorzej jak ma się więcej lokalnych zmiennych na których wykonujesz różne obliczenia razem z tym x/y/z.
Nie umiem na poczekanie napisać dobrego przykładu, bo to mało kiedy jest potrzebne.

Co do wydajności, jak będę wykonywał tę metodę po 1000 razy na sekundę, a za każdym razem potrzebuje zwracać te x/y/z, to już wpłynie na wydajność, szczególnie jak
@GotoFinal: Jeżeli każda sekunda się liczy to tym bardziej nie używasz labelek, które są "ciałem obcym" w kodzie i powodują, że JVM musi robić rzeczy z poza OOP. Jeżeli masz dużo zmiennych to tworzysz ValueObject, który będzie ich nośnikiem.
@koziolek666: i wtedy w metodzie muszę znowu je wszystkie wyciągnąć do zmiennych loklanych, zrobić obliczenia, znowu wrzucić do obiektu, nagle dodatkowe 50 liniejk które nic nie robi tylko straszy czytelnika.
I jakim ciałem obcym? labelki są użwane prawie wszędzie, każda pętla używa labelków, do tego bytecode generowane przez kompilator gdy używasz labelek w zły sposób, np zamiast break w mniejszej pętli robisz "continue label" na większej, jest IDENTYCZNE.
A kod z
@GotoFinal: zwalmy na kompilator... generalnie jeżeli w pętli wykonujesz break, continue to znaczy, że masz poważny problem, bo twój kod nie jest przemyślany.

każda pętla używa labelków,


No niestety nie każda... nawet mniejszość.
koziolek666 - @GotoFinal: zwalmy na kompilator... generalnie jeżeli w pętli wykonujes...
@koziolek666: nie, to dokładnie to samo... znasz ty podstawy javy? różni się tylko wartość, działanie i wszystko jest zachowanie....
A używanie break i continue od kiedy jest zwalone? co jak szukam po collection pewnego elementu, i jak go znajdę to kończę szukanie?, albo nie chce robić kilka if/else i nawalić wcięć w kodzie po za ekran jak w kalkulatorze wyborczym, to można dać continue ->if (!object.isValid()) continue; prosty, czytelny kod.