|
|||||||||||||||||
![]() |
|||||||||||||||||
Pràctica |
![]() |
Exercicis
|
|||||||||||||||
Conversió i Format | ||||||||
Aquesta pràctica ens servirà per a:
|
||||||||
Conversió entre tipus primitius (casting): | ||||||||
![]() |
La conversió (casting)
és una de les necessitats més freqüents en qualsevol
entorn de programació i cada llenguatge resol aquest problema d'una
forma diferent. Hi ha llenguatges laxament tipificats, com Perl
o, en certa mesura javaScript (bruts,
en llengua col·loquial) que són molt elàstics en
la conversió entre tipus: una
variable de cadena pot convertir-se en
un nombre enter i aquest en un nombre
amb decimals en el moment en què es vulgui: el compilador
no es queixa, però és responsabilitat seva que les conversions
entre tipus siguin coherents. Quan es tracta de tipus numèrics
les conversions s'han de fer, generalment, del tipus
de jerarquia baixa cap al tipus de jerarquia
més alta: un byte passa fàcilment
a short i aquest a int,
però no a l'inrevès, en aquest darrer cas hi ha perill de
pèrdua d'informació. De menys a més la conversió
es pot fer de manera implícita:
Si és necessària una conversió de
més nivell a menys nivell, el programador és l'encarregat
de vigilar la coherència de les dades. En aquest cas, la conversió
s'ha de fer explícita:
Si el compilador reconeix la impossibilitat de la conversió, obtindrem
un error en temps de compil·lació
i, si es produeix més tard, l'error
serà en temps d'execució.
En el cas que la conversió sigui de reals a enters,
Java intentarà salvar la situació eliminant del número
la part decimal: 12,9 el convertirà a
12.
Posem entre parèntesis i davant de la variable
a convertir el nou tipus que pretenem
obtenir. Una necessitat freqüent és la conversió de dades de tipus cadena (string) a nombres i a l'inrevés. Java tampoc permet fer aquest tipus de conversió i, en aquest cas, tampoc és possible fer conversions explícites:
Però tenim una solució: com que totes les classes primitives disposen dels seus equivalents en tipus referenciats, podem utilitzar les eines dels tipus referenciats per a fer les conversions. Per exemple, la conversió d'una cadena (String) a nombre enter (int) es pot fer així:
El mètode parseInt() de la classe java.lang.Integer és static (consulteu la documentació d'aquesta classe!) Això vol dir que s'executarà el mateix codi i es reservaran les mateixes posicions de mèmòria per a qualsevol procés que el cridi. No cal doncs, encarregar cap previsió d'utilització a la Màquina Virtual de Java, i la clàusula new, que fem anar sempre que creem una classe nova, aquí és supèrflua. Com que no estem segurs que cadena contingui sempre un número enter correcte, no és mala idea tancar la conversió en un bloc try...catch:
Aquest model de conversió val per a qualsevol tipus numèric (Integer, Double, Float ...). El procés invers és similiar. Per passar un nombre a cadena:
Les capacitats de conversió que acabem d'explicar no fan referència només als tipus primitius de Java: es poden utilitzar amb qualsevol altra parella de tipus de Java. A la pràctica 2 del ṃdul següent d'aquest mòdul aprendrem a fer conversió entre objectes de diferents classes. |
|||||||
Donar Format | ||||||||
![]() |
Les conversions que acabem de veure no garanteixen que el format fruit de la conversió sigui el desitjat. Imaginem una conversió de Double a String. Potser estem treballant amb qualificacions d'alumnes i volem dir que un alumne treu un 7.5, però després de fer la conversió del decimal a cadena, Java ens informa que l'alumne ha tret un 7.4645739349434. Aquesta informació, encara que precisa, és poc presentable al públic. Hem de manipular el seu format. La base de la representació d'informació en Java és la classe java.lang.String. S'utilitza tant que Java li deixa passar algunes coses que no permet a altres classes. Per exemple,
Disposem de moltes eines de format aplicables a cadenes. En destacarem algunes:
|
|||||||
![]() |
||||||||