Closed miqueldedo closed 4 years ago
Hola Miquel,
Està molt bé això que has fet del mòdul ToJSONParserHelper
, la interfície JSON
i el mètode toJSON()
.
Pel demés, cito textualment del changelog:
com que a Java els objectes són immutables
Això no és cert. Hi ha de tot. Dependrà de si tenen mètodes modificadors o no.
per tant, quan es passen en una funció, si no es modifica l'objecte de manera directe, és a dir, object.setValue(x) modificarà l'objecte en sortir de la funció, però objectA = objectB, no, no acabo de veure la manera factible de fer-ho.
Si vols modificar l'objecte pots fer-ho amb mètodes modificadors, com ara setValue
. Si no disposa d'aquests (és una classe que no disposes?) sempre pots fer una classe que l'extengui i afegeixi els atributs i mètodes modificadors que calgui. O fer-te tu una nova classe directament amb mètodes modificadors. O crear un objecte nou i retornar-lo.
Si de cas posa un exemple concret de paràmetre que voldries modificar i en seguim parlant.
Per exemple, per a controlar els torns, faig servir dos int
els quals hauria de pensar en aquesta funció. He estat buscant manera de com el podria modificar i és on he trobat que, per exemple, la classe Integer
és immutable.
Un altre exemple, sobre una classe (o enum en aquest cas) creat per nosaltres, si es fa un moviment, com podria invertir el valor de la variable que ens guarda l'enum, ja que són dos valors, dins la funció.
Per exemple, per a controlar els torns, faig servir dos
int
els quals hauria de pensar en aquesta funció. He estat buscant manera de com el podria modificar i és on he trobat que, per exemple, la classeInteger
és immutable.
Cal dir que els paràmetres "de sortida" conceptualment ja són una cosa lletja. Matemàticament, una funció no modifica els arguments, en tot cas retorna alguna cosa.
Dit això, efectivament tant int
com Integer
són immutables. Jo crec que el més natural seria retornar els nous valors (així queda més clar que són un resultat de l'operació).
Si tot i així vols fer paràmetres "de sortida", hauràs de crear tu una classe que els encapsuli i tingui mètodes modificadors.
Una altra alternativa és que els paràmetres passin a ser atributs de l'objecte (vull dir de l'objecte que executa l'operació). Llavors no hi ha problema en modificar-los, perquè són variables globals (dins de la classe).
Jo pensaria què és més natural conceptualment, és a dir, què queda més clar... que no és necessàriament el més fàcil de programar. Ja us vaig dir que Java potencia un bon estil de programació 😄
com podria invertir el valor de la variable que ens guarda l'enum, ja que són dos valors, dins la funció.
No pots, és el mateix que un enter.
El fet que siguin atributs de la classe ho havia pensat, però fins ara hem mantingut la classe ConsoleGame
com un mòdul funcional. "Transformar-ho" a una classe en seria un problema?
Tindria sentit que aquesta nova classe fos un singleton
?
Sí, tindria sentit. Podria ser un singleton
o bé una classe abstracta amb variables de classe.
No acabo de veure com ho hauria de fer amb una classe abstracta. Hauria d'implementar els mètodes, o, crearia una classe abstracta i llavors una segona que l'heredés i implementés els mètodes?
He penjat una proposta. Ja em diràs com ho veus!
Ho veig bé. No t'oblidis però de comentar els atributs. Per cert, pel que respecta a turns
no aniria millor una Stack
?
Seria una opció. Ho tinc en una llista per a controlar el refer i desfer- Fixa't que quan desfem un moviment, simplement descompto 1 al controlador del torn, sense eliminar el torn. D'aquesta manera, si llavors es fa un refer, incremento aquest comptador. Perquè, si ho féssim amb piles, quan fés el desfer, el moviment de dalt quedaria eliminat, no? D'alguna manera l'hauria de guardar, per exemple, en una altre pila, no?
OK, tens raó.
Bones, He realitzat forces canvis i adicions. Sobretot he estat treballant en el tema de passar d'objectes a JSON, per a poder-ho guardar. Per a no fer una explicació molt extensa a l'issue, adjunto un fitxer amb les coses que he canviat i algun dubte que tinc. Ja ens diràs 💯
Changelog.txt