Kezdőoldal » Számítástechnika » Programozás » Mit jelent ez a kód JAVA-ban?

Mit jelent ez a kód JAVA-ban?

Figyelt kérdés

(Egy statikus függvény definíciója, a többi részét a kódnak értem). Igazából a field -> kifejezéssel vannak gondjaim. Én úgy értelmezem mint egy lambda kifejezést, ami egy anonim oszályt hoz létre a visszatérési érték előállításához. A gondom pl. hogy a return type hogyan lesz GameBoard, amikor mindenütt return CellState van? Pontosan mit csinál ez a kód?



private static GameBoard board(String file) {

List<String> lines = linesOf(file);

return field -> {

Coordinate coord = FIELD_COORDINATE.get(requireNonNull(field));

switch (lines.get(coord.y).charAt(coord.x)) {

case 'x':

return CellState.OCCUPIED_BY_X;

case 'o':

return CellState.OCCUPIED_BY_O;

default:

return CellState.EMPTY;

}

};

}


2017. márc. 5. 17:29
 1/5 anonim ***** válasza:

A board(String) fv. egy GameBoard-ot ad vissza. Azt jól látod, hogy az egy lambda. A kód ami a return CellState-t csinálja, az a lambdának a része. A külső board(String) fv. pedig ezt a lambdát adja vissza, amiről a Java fordító kitalálja, hogy a GameBoard-ban lévő getCellState(CellLocation) metódusról van szó.

Ha "lambdamentesítjük" a kódot, akkor valahogy így nézne ki: [link] (nem próbáltam ki, úgyhogy ne csodálkozz ha nem jó).

2017. márc. 5. 21:46
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
Köszönöm a választ, én is kb. ilyesmire gondoltam. A kód amit írtál jónak tűnik (én sem futtattam). Már csak az a kérdés hogy a "field" mezőt azt honnan kapja a program? Mindenképpen külső kell legyen mert az adja meg hogy a játék melyik celláját kell épp vizsgálni.
2017. márc. 5. 21:59
 3/5 anonim ***** válasza:

[link]

Ezt érdemes lehet átnyálazni.


A visszatérési érték pedig a lambda kifejezés által meghatározott GameBoard implementáció, amelynek egyetlen metódusa CellState-et ad vissza, tehát nézhetne ki valahogy így is:


// anonymous inner class here

return new GameBoard {

˙˙˙˙@Override

˙˙˙˙public CellState getCellState(Field field) {

˙˙˙˙˙˙˙˙Coordinate coord = FIELD_COORDINATE.get(requireNonNull(field));

˙˙˙˙˙˙˙˙switch (lines.get(coord.y).charAt(coord.x)) {

˙˙˙˙˙˙˙˙˙˙˙˙case 'x':

˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.OCCUPIED_BY_X;

˙˙˙˙˙˙˙˙˙˙˙˙case 'o':

˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.OCCUPIED_BY_Y;

˙˙˙˙˙˙˙˙˙˙˙˙default:

˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.EMPTY;

˙˙˙˙˙˙˙˙}

˙˙˙˙}

};


Rávágnék a kezére a kedves költőnek, de ez perpill offtopic. Maradjunk annyiban, hogy ez a fentiek legközelebbi lambdamentes megfelelője.


(Az azért kikívánkozik, hogy Enum.valueOf helyett képes volt a szakembör switch-csel kókányolni, és ez még csak az egyik bűne a sok közül; besírok)

2017. márc. 5. 23:26
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
Első válaszoló vagyok, elnézést az összezavarásért, a field az az argumentuma a fv.-nek, csak amikor másoltam, nem figyeltem hogy ugyanaz legyen a neve. Már javítottam (ugyanazon a linken). Mindenesetre előttem válaszoló jól írta.
2017. márc. 5. 23:35
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszönöm a válaszokat!
2017. márc. 6. 00:58

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!