eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
Ilość wypowiedzi w tym wątku: 62

  • 1. Data: 2012-06-25 20:38:13
    Temat: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Edek Pienkowski <e...@g...com>

    Powiedzmy, że mam metodę która ma ze 30 zmiennych i, co oczywiste
    w tym przypadku, jest za duża. Chcę ją podzielić.

    Problem polega na tym, że cokolwiek bym nie chciał wydzielić
    z tej metody zmienia te zmienne lokalne. Jeżeli zmieniałoby
    jedną, nie ma problemu:
    x1 = doSth(a,b,c,d,e);

    Ale jeżeli zmienia x1, y1 i z1, różnych typów? Najlepsze,
    co dotychczas wymyśliłem ucząc się Javy po raz drugi to:

    A arrX1 = new A[1]
    B arrYZ = new B[] { y1, z1}
    doSth(a,b,c,d,e, arrX1, arrZY)
    x1 = arrX1[0];
    y1 = zrrYZ[0];
    z1 = arrZY[1];

    Jest jakiś ogólny prostszy sposób? Kombinowałem z EnumMap
    automatycznie weryfikującym typy i castującym przez generyki,
    ale to już chyba łatwiej mieć 'private static class'
    do każdej metody w celu przekazania parametrów "out" lub
    "in/out".

    Czy C# ma to jakoś lepiej rozwiązane?

    Edek


  • 2. Data: 2012-06-25 20:50:48
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Adam Klobukowski <a...@g...com>

    On Monday, 25 June 2012 20:38:13 UTC+2, Edek Pienkowski wrote:
    > Powiedzmy, że mam metodę która ma ze 30 zmiennych i, co oczywiste
    > w tym przypadku, jest za duża. Chcę ją podzielić.

    Jeżeli te wydzielone części nie mają wielkiej szansy być wykorzystywane gdzie indziej
    to nie ma sensu jej dzielić, chyba że robi się nieczytelna, ale wtedy lepiej trochę
    popracować nad kodem i obkomentować co trudniejsze kawałki.

    Jeśli jednak jesteś pewien co do podziału, to myślę że lepiej niż tablic użyć
    dedykowanych do tego mini klas POD.

    AdamK


  • 3. Data: 2012-06-25 21:26:33
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: "AK" <n...@n...com>

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

    > Czy C# ma to jakoś lepiej rozwiązane?

    Ma Tuple.
    http://msdn.microsoft.com/en-us/library/system.tuple
    .aspx

    PS0: Nie sa idealne (gorsze niz w Pythonie), ale sa.
    PS1: I nie C# jeno .NET k..de

    AK


  • 4. Data: 2012-06-25 21:30:49
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Bronek Kozicki <b...@s...net>

    On 25/06/2012 19:38, Edek Pienkowski wrote:
    > Powiedzmy, że mam metodę która ma ze 30 zmiennych i, co oczywiste
    > w tym przypadku, jest za duża. Chcę ją podzielić.
    >
    > Problem polega na tym, że cokolwiek bym nie chciał wydzielić
    > z tej metody zmienia te zmienne lokalne. Jeżeli zmieniałoby
    > jedną, nie ma problemu:
    > x1 = doSth(a,b,c,d,e);

    elementarne - zrób klasę i zamień zmienne lokalne na prywatne pola
    klasy, a częsci funkcji na funkcje klasy. Potem upraszczaj.


    B.


  • 5. Data: 2012-06-25 21:41:47
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 20:30:49 +0100, Bronek Kozicki napisal:

    > On 25/06/2012 19:38, Edek Pienkowski wrote:
    >> Powiedzmy, że mam metodę która ma ze 30 zmiennych i, co oczywiste w tym
    >> przypadku, jest za duża. Chcę ją podzielić.
    >>
    >> Problem polega na tym, że cokolwiek bym nie chciał wydzielić z tej
    >> metody zmienia te zmienne lokalne. Jeżeli zmieniałoby jedną, nie ma
    >> problemu:
    >> x1 = doSth(a,b,c,d,e);
    >
    > elementarne - zrób klasę i zamień zmienne lokalne na prywatne pola
    > klasy, a częsci funkcji na funkcje klasy. Potem upraszczaj.

    Powiedz od razu, że mam pisać klasy zamiast metod - jest takich metod
    dobre kilka. I nie bardzo wiem, co miałbym upraszczać i dlaczego miałbym
    psuć działający kod - upraszczanie poniżej miminum jak empirycznie
    stwierdzono nie jest najlepszym pomysłem, a metody nie są już do
    uproszczenia. Kopiowanie pól przy rekurencji też mało mnie pociąga.

    No ale ok, mogę stworzyć kilka takich klas. Wydajność będzie taka sama,
    czyli nie niższa od niskich stanów średnich? A czytelność metody-jako-
    klasy?

    Edek


  • 6. Data: 2012-06-25 21:48:21
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: "AK" <n...@n...com>

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

    > Powiedz od razu, że mam pisać klasy zamiast metod - jest takich metod
    > dobre kilka. I nie bardzo wiem, co miałbym upraszczać i dlaczego miałbym
    > psuć działający kod

    Nie znam Javy prawie wcale, ale...: napisz se (na wzor tego z .NET - to trywialne)
    templejta tuple implementujacego interface Tuple i finito.

    PS: i przestan truc ciagle o "wydajnosci" bo sie mdlo robi :(
    PS1: zabraknie ci tej "wydajnosci" to sie bedziesz wtedy zastanawial

    AK


  • 7. Data: 2012-06-25 22:05:42
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Edek Pienkowski <e...@g...com>

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

    > Użytkownik "Edek Pienkowski" <e...@g...com> napisał:
    >
    >> Powiedz od razu, że mam pisać klasy zamiast metod - jest takich metod
    >> dobre kilka. I nie bardzo wiem, co miałbym upraszczać i dlaczego
    >> miałbym psuć działający kod
    >
    > Nie znam Javy prawie wcale, ale...: napisz se (na wzor tego z .NET - to
    > trywialne)
    > templejta tuple implementujacego interface Tuple i finito.
    >
    > PS: i przestan truc ciagle o "wydajnosci" bo sie mdlo robi :(
    > PS1: zabraknie ci tej "wydajnosci" to sie bedziesz wtedy zastanawial

    Ja to mało wydajny jestem, ale już od dawna marudzą, że tool startuje
    aż w 2 minuty, i to pomimo tego, że wcześniej startował w 6. Ciężkie
    życie...

    Edek
    PS. Ciekawie cytujesz







  • 8. Data: 2012-06-25 22:08:42
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: "AK" <n...@n...com>

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

    > Ja to mało wydajny jestem, ale już od dawna marudzą, że tool startuje
    > aż w 2 minuty, i to pomimo tego, że wcześniej startował w 6. Ciężkie
    > życie...

    No to sobie wbij do glowy, ze wlasnie to wychwalene "reczne" malloc jest
    _najbardziej kosztowna funkcja w C/C++_.
    Wiem, bo kiedys napisalem w asm86 cala biblioteke standardowa TC 2.0

    AK


  • 9. Data: 2012-06-25 22:14:11
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 11:50:48 -0700, Adam Klobukowski napisal:

    > On Monday, 25 June 2012 20:38:13 UTC+2, Edek Pienkowski wrote:
    >> Powiedzmy, że mam metodę która ma ze 30 zmiennych i, co oczywiste w tym
    >> przypadku, jest za duża. Chcę ją podzielić.
    >
    > Jeżeli te wydzielone części nie mają wielkiej szansy być wykorzystywane
    > gdzie indziej to nie ma sensu jej dzielić, chyba że robi się
    > nieczytelna, ale wtedy lepiej trochę popracować nad kodem i obkomentować
    > co trudniejsze kawałki.

    Częsciej komentuję "co" niż "jak".

    >
    > Jeśli jednak jesteś pewien co do podziału, to myślę że lepiej niż tablic
    > użyć dedykowanych do tego mini klas POD.

    To ma taki sam problem, jak wszystkie inne w Javie. Zamieniam 10 linijek
    treści na call i 6 linijek kopiowania. Wycinając większy fragment,
    zamieniam 50 linijek na call i 15 linijek kopiowania. Nie widzę sensu,
    więc chyba zostaną duże metody z fluganiem na brak goto.

    Edek


  • 10. Data: 2012-06-25 22:28:33
    Temat: Re: Nie mieszczę się w tym garniturku część 2: Java i parametry in/out
    Od: Edek Pienkowski <e...@g...com>

    Dnia Mon, 25 Jun 2012 22:08:42 +0200, AK napisal:
    >
    > No to sobie wbij do glowy, ze wlasnie to wychwalene "reczne" malloc jest
    > _najbardziej kosztowna funkcja w C/C++_.
    > Wiem, bo kiedys napisalem w asm86 cala biblioteke standardowa TC 2.0

    malloc i inne new mogą mieć zachcianki w rodzaju deframentacji sterty,
    to wiadomo, że są na to podatne. Tyle, że to nic w porównaniu z Javą,
    startup, operacje na stosie przy rekurencji itp. Niedawno był
    chyba tutaj benchmark google kilku języków pod kątem właśnie takich
    algorytmów.

    Podobno każda klasa to jakieś 4K plus to co compiler, nie zamienię
    metod na klasy bez powodu.

    Edek


strony : [ 1 ] . 2 ... 7


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: