-
51. Data: 2012-06-27 16:37:42
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out[off]
Od: A.L. <l...@a...com>
On Wed, 27 Jun 2012 04:58:34 -0700 (PDT), Maciej Sobczak
<s...@g...com> wrote:
>W dniu środa, 27 czerwca 2012 13:49:38 UTC+2 użytkownik AK napisał:
>
>> > Tematem było C++sowe func(Some& inOutParam, Some2& outParam), których
>> > nie ma w Javie.
>>
>> Jak to nie ma w Javie ?
>
>W Javie wszystkie parametry przekazywane sa przez wartość. Nie ma czegoś takiego jak
przekazywanie przez referencję ani też rozróżnialnych trybów in/out/inout.
>
Nie ma rozneiz prekazywania przez nazwe
A.L.
-
52. Data: 2012-06-27 18:16:21
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out[off]
Od: Michoo <m...@v...pl>
On 27.06.2012 16:29, Edek Pienkowski wrote:
> To nie jest dużo kodu, ale jeszcze przydałoby się ref.get()++.
W ogóle operatory by się przydały.
--
Pozdrawiam
Michoo
-
53. Data: 2012-06-27 19:20:37
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: A.L. <l...@a...com>
On Wed, 27 Jun 2012 09:21:21 +0000 (UTC), Edek Pienkowski
<e...@g...com> wrote:
>Dn
>
>Może z 5-10 lat temu to i owszem, pomijając ryzyko stania się
>"opinionated". Nie muszę szlifować technikaliów.
>
>Edek
Wydaje mi zie ze to i owo musisz szlifowac. Bo jak na moj rozum to
masz male pojecie o rzoych rzeczach dosyc podstawowoych. Na przyklad
"dlaczego moja metoda ma 30 zmiennych..."
A.L.
-
54. Data: 2012-06-27 19:22:23
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: A.L. <l...@a...com>
On Wed, 27 Jun 2012 11:19:09 +0000 (UTC), Edek Pienkowski
<e...@g...com> wrote:
>Dnia Wed, 27 Jun 2012 04:02:28 -0700, Andrzej Jarzabek napisal:
>
>> On Jun 27, 10:21 am, Edek Pienkowski <e...@g...com>
>> wrote:
>>> Dnia Wed, 27 Jun 2012 02:11:06 -0700, Andrzej Jarzabek napisal:
>> [...]
>>> > Miałbyś to robić bez psucia.
>>>
>>> Nie da się uprościć poniżej minimum bez psucia. Gdyby się dało,
>> [...]
>>> > duża", to jesteś daleko od tego minimum.
>>>
>>> Pożycz szklaną kulę...
>>
>> Miszczu - piszesz, że masz metodę, która jest "za duża" i że chcesz ją
>> podzielić, a nawet używasz sformułowania "cokolwiek bym nie chciał
>> wydzielić" - to sugeruje, że byś jednak coś z niej chciał wydzielić i
>> nawet masz jakieś pomysły, co to by mogło być. Ja się nie odnoszę do
>> tego, czy akurat masz w tym momencie rację, że jest za duża i czy masz
>> rację, że chcesz podzielić - opieram się tylko na tym, co sam piszesz.
>> Ja mogę tylko powiedzieć, że jeśli metoda ma faktycznie trzydzieści
>> zmiennych lokalnych to jest bardzo wysoce prawdopodobne, że faktycznie
>> jest za duża i że można ją podzielić. I w takiej sytuacji "replace
>> method with method object" jest dobrym wstępem do dalszych
>> refaktoryzacji.
>
>Tematem było C++sowe func(Some& inOutParam, Some2& outParam), których
>nie ma w Javie.
>
>Obawiałem się, że na dużą metodę niektórzy zareagują jak psy Pawłowa.
>Ten kod ogólnie nie wymaga grubszej refaktoryzacji, a dodatkowo w zasadzie
>jedynymi sensownymi opcjami w przypadku tej metody jest klasa z kodem lub
>klasa na dane, czy w zasadzie struktura. Ani jedno ani drugie nie poprawia
>czytelności.
>
>>
>>> > W ogóle w tym temacie powinieneś zapoznać się z książką Martina
>>> > Fowlera "Refactoring: Improving the Design of Existing Code".
>>>
>>> Może z 5-10 lat temu to i owszem, pomijając ryzyko stania się
>>> "opinionated". Nie muszę szlifować technikaliów.
>>
>> Sorki, ale jeśli uważasz, że nie da się zejść ze złożonością poniżej 30
>> zmiennych lokalnych w metodzie, to myślę, że powinieneś jednak się
>> zapoznać.
>
>A ja uważam, że jesteś właśnie "opinionated". Coś przeczytałeś, coś
>powtarzasz, a niewiele z tego rozumiesz, co niestety widać.
>
>Edek
He, he.... Wlasnie, niestey widac. Tylko gdzie indziej. Polecam
Pismo Swiete, Kazanie na Gorze. Przypowiesc o belce w oku.
A.L.
-
55. Data: 2012-06-27 19:43:33
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 12:22:23 -0500, A.L. napisal:
> He, he.... Wlasnie, niestey widac. Tylko gdzie indziej. Polecam Pismo
> Swiete, Kazanie na Gorze. Przypowiesc o belce w oku.
Nie twierdzę, że wiem wszystko. Znam Javę, ale jak widać nie wszystko
o Javie wiem, chociaż to prosty język. Nie muszę, raz na kiedyś
czegoś się naumiem i wystarczy.
Co do rekurencji, wiem co to jest rekurencja i jak ją można traktować,
jeżeli o to chodzi, to polecam przeczytanie części wątku ponownie.
To o jaką belkę chodzi?
Edek
-
56. Data: 2012-06-27 19:58:57
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 12:20:37 -0500, A.L. napisal:
> On Wed, 27 Jun 2012 09:21:21 +0000 (UTC), Edek Pienkowski
> <e...@g...com> wrote:
>
>>Dn
>>
>>Może z 5-10 lat temu to i owszem, pomijając ryzyko stania się
>>"opinionated". Nie muszę szlifować technikaliów.
>
> Wydaje mi zie ze to i owo musisz szlifowac. Bo jak na moj rozum to masz
> male pojecie o rzoych rzeczach dosyc podstawowoych. Na przyklad
> "dlaczego moja metoda ma 30 zmiennych..."
No to już dzisiaj mam za sobą przejrzenie jej ponownie przy
świeżym umyśle i po prostu jej logika jest skomplikowana. Ja
wiem, że obsługa eventu "Zosiu, wprowadź do systemu chęć Pani
do zakupu pietruszki" 30 zmiennych nie wymaga, ale czasami
pisze się rzeczy bardziej złożone.
Tak już zupełnie na marginesie, przerabiałem Javowe metody
znacznie większe, jak widać nie wszyscy mają manię decydowania
o podziale według sztywnych reguł. Bo to jest wyjątek od reguły.
Edek
-
57. Data: 2012-06-27 20:28:41
Temat: Re: Nie mieszcz? si? w tym garniturku cz?ae 2: Java i parametry in/out
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2012-06-27, Edek Pienkowski <e...@g...com> wrote:
> Dnia Wed, 27 Jun 2012 12:20:37 -0500, A.L. napisal:
>
>> On Wed, 27 Jun 2012 09:21:21 +0000 (UTC), Edek Pienkowski
>> <e...@g...com> wrote:
>>
>>>Dn
>>>
>>>Może z 5-10 lat temu to i owszem, pomijając ryzyko stania się
>>>"opinionated". Nie muszę szlifować technikaliów.
>>
>> Wydaje mi zie ze to i owo musisz szlifowac. Bo jak na moj rozum to masz
>> male pojecie o rzoych rzeczach dosyc podstawowoych. Na przyklad
>> "dlaczego moja metoda ma 30 zmiennych..."
>
> No to już dzisiaj mam za sobą przejrzenie jej ponownie przy
> świeżym umyśle i po prostu jej logika jest skomplikowana. Ja
> wiem, że obsługa eventu "Zosiu, wprowadź do systemu chęć Pani
> do zakupu pietruszki" 30 zmiennych nie wymaga, ale czasami
> pisze się rzeczy bardziej złożone.
Te rzeczy bardziej złożone rozkłada się na drobniejsze, prostsze
przypadki. Przynajmniej tak słyszałem, bo IANAP (w każdym razie
oficjalnie).
--
Secunia non olet.
Stanislaw Klekot
-
58. Data: 2012-06-27 20:39:59
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 18:28:41 +0000, Stachu 'Dozzie' K. napisal:
> On 2012-06-27, Edek Pienkowski <e...@g...com> wrote:
>> Dnia Wed, 27 Jun 2012 12:20:37 -0500, A.L. napisal:
>>
>>> On Wed, 27 Jun 2012 09:21:21 +0000 (UTC), Edek Pienkowski
>>> <e...@g...com> wrote:
>>>
>>>>Dn
>>>>
>>>>Może z 5-10 lat temu to i owszem, pomijając ryzyko stania się
>>>>"opinionated". Nie muszę szlifować technikaliów.
>>>
>>> Wydaje mi zie ze to i owo musisz szlifowac. Bo jak na moj rozum to
>>> masz male pojecie o rzoych rzeczach dosyc podstawowoych. Na przyklad
>>> "dlaczego moja metoda ma 30 zmiennych..."
>>
>> No to już dzisiaj mam za sobą przejrzenie jej ponownie przy świeżym
>> umyśle i po prostu jej logika jest skomplikowana. Ja wiem, że obsługa
>> eventu "Zosiu, wprowadź do systemu chęć Pani do zakupu pietruszki" 30
>> zmiennych nie wymaga, ale czasami pisze się rzeczy bardziej złożone.
>
> Te rzeczy bardziej złożone rozkłada się na drobniejsze, prostsze
> przypadki. Przynajmniej tak słyszałem, bo IANAP (w każdym razie
> oficjalnie).
No tak, dlaczego ja na to nie wpadłem, dzięki.
Edek
-
59. Data: 2012-06-27 20:52:09
Temat: Re: Nie mieszcz? si? w tym garniturku cz?ae 2: Java i parametry in/out
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2012-06-27, Edek Pienkowski <e...@g...com> wrote:
>>> No to już dzisiaj mam za sobą przejrzenie jej ponownie przy świeżym
>>> umyśle i po prostu jej logika jest skomplikowana. Ja wiem, że obsługa
>>> eventu "Zosiu, wprowadź do systemu chęć Pani do zakupu pietruszki" 30
>>> zmiennych nie wymaga, ale czasami pisze się rzeczy bardziej złożone.
>>
>> Te rzeczy bardziej złożone rozkłada się na drobniejsze, prostsze
>> przypadki. Przynajmniej tak słyszałem, bo IANAP (w każdym razie
>> oficjalnie).
>
> No tak, dlaczego ja na to nie wpadłem, dzięki.
Spójrz na to z naszej perspektywy. Przychodzisz na grupę i mówisz, że
masz metody z 30+ parametrami długie na kilkaset linii. Twierdzisz, że
nie da się tego uprościć, ale w żaden sposób nie uzasadniasz tej tezy.
Reszta grupy z doświadczenia wie, że właściwie wszystkiemu się daje
uprościć interfejs, więc bez dowodu, przy samym żonglowaniu ogólnikami,
nikt ci nie uwierzy.
--
Secunia non olet.
Stanislaw Klekot
-
60. Data: 2012-06-27 21:51:31
Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 27 Jun 2012 18:52:09 +0000, Stachu 'Dozzie' K. napisal:
> On 2012-06-27, Edek Pienkowski <e...@g...com> wrote:
>>>> No to już dzisiaj mam za sobą przejrzenie jej ponownie przy świeżym
>>>> umyśle i po prostu jej logika jest skomplikowana. Ja wiem, że obsługa
>>>> eventu "Zosiu, wprowadź do systemu chęć Pani do zakupu pietruszki" 30
>>>> zmiennych nie wymaga, ale czasami pisze się rzeczy bardziej złożone.
>>>
>>> Te rzeczy bardziej złożone rozkłada się na drobniejsze, prostsze
>>> przypadki. Przynajmniej tak słyszałem, bo IANAP (w każdym razie
>>> oficjalnie).
>>
>> No tak, dlaczego ja na to nie wpadłem, dzięki.
>
> Spójrz na to z naszej perspektywy. Przychodzisz na grupę i mówisz, że
> masz metody z 30+ parametrami długie na kilkaset linii. Twierdzisz, że
> nie da się tego uprościć, ale w żaden sposób nie uzasadniasz tej tezy.
> Reszta grupy z doświadczenia wie, że właściwie wszystkiemu się daje
> uprościć interfejs, więc bez dowodu, przy samym żonglowaniu ogólnikami,
> nikt ci nie uwierzy.
Czyli wszyscy wiedzą, że da się pisać krótkie metody. Very well, my
friend, ja też to wiem. Nie mogę przedstawić kodu, sorry, praca, nie
za takie rzeczy potrafią człowieka zjeść. No więc abstrakcyjnie:
----------------------------------------------------
-------------
Mam zakres 0..x, naturalne liczby, x jest gdzieś pomiędzy kilkaset
tysięcy i sky is the limit, ale powiedzmy kilkadziesiąt milionów.
Dzielę ten zakres na mniejsze, tak, aby w drzewie każdy rodzic
zawierał gałązki i gałązki się nie pokrywają. Każda gałąź
to zakres [a,b). Gałąź bez rozgałęzień możemy nazwać liściem,
mi to nie przeszkadza, ale ogólnie wszystkie gałęzie mają
istotne parametry, nie tylko liście.
Drzewo ma dowolny kształt.
Mam na tym zakresie 0..x znaczniki o określonej pozycji, lub określonych
pozycjach, jest ich z 10 typów. Niektóre wprost decydują, gdzie
zakresy mogą się zaczynać i kończyć, bardzo liczebne, są w
miejscach gdzie mogą być granice. Mógłbym zredukować zakres 0..x
do samych znaczników eliminując przestrzeń pomiędzy, ale chwilowo
nie widzę powodu, wystarczy je posortować i opcjonalnie
powiązać inne znczniki do zakresów pomiędzy tymi, które wyznaczają
możliwy podział.
Część znaczników, jak się tworzy drzewo, ma kilka powiązanych pozycji i
przez to należy do więcej niż jednej gałęzi, szczegóły pominę.
Niektóre typy znaczników dodają ograniczenia, ich 4 pozycje muszą się
zmieścić w jednej gałęzi. Jest ich b. mało, ale komplikują
metodę, bo to twarde ograniczenie.
Inne typy mogą należeć do więcej niż jednej gałęzi (w sensie
node), ale to jest koszt. W pierwszym przybliżeniu koszt to
a * b, gdzie a i b to koszt dzielonych znaczników dwóch typów,
przy czym w dość nieokreślony sposób koszt jest tym większy,
im dalej w dół drzewa. Tych znaczników jest b.duzo,
w zakresie 0..99 byłoby ich po kilkanaście tak średnio,
dośc nieprzewidywalnie rozrzuconych, ale ogólnie z tendencją
do lokalności w większości przypadków.
Każda gałąź ma z grubsza dodatkowy stały koszt i maksymalny rozmiar,
więc nie mogą być za duże, ale lepiej żeby nie były za małe
ze względu na stały koszt. Gałęzi ma być docelowo sądząc
po rozmiarze od dwóch sztuk do kilku tysięcy, co oczywiście
zależy od x.
Oczywiście mam wszystkie dane, takie jak
ile znaczników jest dzielonych pomiędzy node'ami, ile
pomiędzy node'em i rekursywnie dziećmi itd., to wszystko
jest w metodach z jakimś podziałem na klasy, nieistotnym
w tym momencie, ale każda taka operacja ma swoją złożoność.
Mam też w każdym punkcie stos niektórych znaczników,
można go używać jako podpowiedź, ile co może kosztować,
ale można go pominąć. Te znaczniki w stosie mają zakres.
Ogólnie jest sporo chodzenia w górę i w dół pomiędzy
gałęziami, ale to jest detal implementacji.
Chcę znaleźć nie tyle minimum, co rozsądnie mało kosztujący
podział drzewa, przy czym czas analizy też kosztuje tak jak
i rezultat, którym jest dość duży generowany na tej podstawie kod;
oczywiście samo generowanie kodu jest nietrywialne, ale
już sobie jest. A, dzielenie drzewa na gałązki ma ogólnie
dwa rodzaje, dwa rodzaje znaczników określają możliwy
dla ich typu rodzaj podziału na dwa rodzaje generowanego
kodu.
-------------------------------------------------
Jeżeli to podchodzi pod jakiś znany problem ze znanym
na wikipedii lub gdzieś ogólnym rozwiązaniem, to chętnie
przeczytam. Oczywiście, musi mieć poniżej 30 zmiennych na
metodę, ja na razie mam jedną tak rozbudowaną.
Troszkę się chyba rozpędziłem, ale to powinno działać.
Mam też wrażenie, że z jednej strony to już jest dość
nietrywialne, a z drugiej może o czymś zapomniałem,
co mogłoby uprościć sprawę, ale w tej chwili nie wiem
co to może być. Może w ogóle warto całość zrobić inaczej
zupełnie, czekam na przebłysk geniuszu, i chyba mogę sobie
czekać.
Edek
PS. Dopóki tego nie spisałem wyglądało jeszcze normalnie
i do ogarnięcia, ale opis wygląda nieciekawie.
PS2. To teraz może się nie będę na grupie pokazywał
przez tydzień, będę zajęty rzecz jasna ;)
PS3. Nie zamierzam rozwiązywać tego problemu,
coś co jest "wystarczająco dobre" mi wystarczy.