Out i Ref

0

Bez owijania w bawełnę:

Jakie są odpowiedniki parametrów ref i out z C# w Javie?

Mam w C# taki kod:

void ProcOut(out int X)
{
...
}

void ProcRef(ref int X)
{
...
}

Jak wygląda odpowiednik tego w Javie?

0

Krotko i bez [CIACH!] - nie ma.

0

Na out nie ma. Zupełnie inny sposób rozumienia co to jest zmienna i jaki ma zakres niż w C#.

Na ref jeszcze nie ma odpowiednika jeden do jeden (co dla mnie oznacza, że jest sobie coś co sprawdza przed wywołaniem czy parametr nie jest null), choć już pojawiają się implementacje JSR 303, czyli takiego ustrojstwa, które będzie robiło mniej więcej to samo. Opis implementacji w Springu http://j2ee.pl/2008/02/17/jsr-303-w-springu-inny-sposob-na-walidacje-danych/.

0

WTF? Co ma Bean Validation do ref?

0

Wg mnie w języku obiektowym w ogóle nie powinno być wartości "null". Zamiast tego Null Object Pattern oraz konstrukcja typu Option z języków funkcyjnych (np Scala Option).

Parametry typu "out" są ładnie załatwione np w Scali, tzn można zwracać krotki, a składnia języka wspiera bezpośrednie wyciąganie zmiennych z krotek. Od razu widać co się dzieje, kod jest elegancki, krótki i super czytelny.

0

A ta piekna skladnia dalej ma klasy typu Tuple1 ... Tuple26, to samo dla Function czy Product?
Ale na powaznie, to Scala jest milutka.

0

Ma te klasy owszem, bo musi latać na JVMie, który natywnie krotek nie wspiera. Za to Scala ma zasugarowaną składnię dla krotek i zamiast pisać Tuple3(a, b, c) można po prostu napisać (a, b ,c).

0

Tak tak wiem o tej skladni. Po prostu jak patrzylem na Scale pierwszy raz to mi sie strasznie wszystko podobalo, a jak zajrzalem do API i zobaczylem te kulfony to normalnie mnie odrzucilo. Do dzisiaj pamietam dreszcze ;d

0

Aha, to mam pytanie - z tego co pamietam te Tuple byly do 26 czy cos, a co jesl chce krotke z 50 polami? Musze utworzyc klase taka klase, dodac jakies cudowne operatory?

0

A jak ktoś chce krotkę na 1000 pól? Krotki służą do zwracania parametrów różnych typów, jeśli masz ten sam typ to używasz listy.

Podobnie case class może mieć te dwadzieścia parę parametrów. Jest wątek na liście Scali o zwiększenie limitu, ale nikt rozsądnych parametrów jakoś nie podał. Nikt nie podał też implementacji na nieograniczoną liczbę parametrów/ nieograniczone krotki itp

Ominąć to możesz w ten sposób, że tworzysz krotki w krotce, albo definiujesz własne typy itp itd

Krotka na 50 pól to 3 linijki zajmie co najmniej do opisania :) Taki kod na pewno nie jest czytelny. W przypadku case classes + default/ named parametres sytuacja jest inna, bo można deklarować tylko kilka parametrów z wieelu, ale i tak pattern matching na takim czymś to masakra.

1 użytkowników online, w tym zalogowanych: 0, gości: 1