Discussione: [Java] Aiuto su metodi
View Single Post
Old 30-08-2012, 00:52   #4
Ballantine
Member
 
L'Avatar di Ballantine
 
Iscritto dal: May 2004
Messaggi: 278
Quote:
Originariamente inviato da Solido Guarda i messaggi
Edit: ho letto che è un metodo Java. Ma in quale libreria si trova? Io qui vedo solo un import ovvero: Java.util.*
Cmq saresti così gentile da spiegarmi come funziona questa concatenazione di metodi...
Esatto, equalsIgnoreCase() è un metodo Java, appartenente alla classe String.
La classe String appartiene al package java.lang, che contiene tutte le classi "base" per la programmazione Java. I package sono dei contenitori utilizzati per raggruppare classi, che solitamente appartengono alla stessa categoria (es: java.io contiene tutte le classi relative all'input/output). Importando i package puoi utilizzare le classi da esso contenute e i metodi di queste classi. Il package java.lang però è un caso particolare, poiché viene automaticamente incluso anche senza scrivere il relativo import. Se così non fosse, il codice da te postato non compilerebbe, poiché il compilatore non sarebbe in grado di riconoscere nemmeno i tipi "base" come String.
Tornando al metodo equalsIgnoreCase(), ti spiego più nel dettaglio come è viene effettuata la chiamata:
1) si parte da un oggetto di tipo Testo, sul quale viene chiamato il suo metodo getAutore(), che restituisce un oggetto di tipo String.
2) siccome hai un oggetto di tipo String, puoi chiamare su di esso i metodi della relativa classe (tabella "Method Summary"). Tra questi metodi troverai anche equalsIgnoreCase(...).
3) il metodo equalsIgnoreCase restituisce un booleano, che verrà usato per determinare il risultato della successiva clausola "AND".

Quote:
Originariamente inviato da Solido
...e a cosa serve fare così ?
Queste concatenazioni di solito vengono usate se in seguito non si devono riutilizzare i valori restuiti dai metodi concatenati.
Prendiamo ad esempio il codice esteso che ti avevo scritto prima e quello postato da te in origine. Le chiamate "intermedie" getAutore() e getTitolo() vengono eseguite solo quella volta all'interno del metodo, quindi la mia versione estesa non porta nessun beneficio poiché autoreTesto e autoreTitolo vengono utilizzate una volta sola.
Poniamo invece che il metodo, ogni volta che viene trovato un libro diverso da quello che si sta cercando, stampi a video il nome e il titolo di questo libro:

Codice:
for(Iterator<Testo> i = testi.iterator();i.hasNext();){
     Testo testo = (Testo)i.next();
     if(testo.getAutore().equalsIgnoreCase(autore) && testo.getTitolo().equalsIgnoreCase(titolo))
          return testo;
     else
          System.out.println("Il libro " + testo.getTitolo() + " di " + testo.getAutore() + " non è quello che stiamo cercando."); 
}
In questo caso avrebbe senso memorizzare i risultati di getTitolo() e getAutore() in due variabili, poiché entrambi vengono chiamati due volte.
In questo caso utilizzare due variabili piuttosto che chiamare due volte getTitolo() e getAutore() non ha un impatto visibile sulle performance perché sono metodi molto semplici, ma se al loro posto dovessimo chiamare dei metodi che effettuano delle operazioni "pesanti" (es: reperimento/inserimento di una grande mole di dati da/in un database) allora la differenza sarebbe notevole.
__________________
PROCESSORE: AMD Athlon64 2800+ Boxed - MOTHERBOARD: Gigabyte K8NS nForce3 250 - SCHEDA VIDEO: 3D Prophet 9800 Pro 128MB - RAM: 512MB Corsair Value + 512 V-Data - CASE: Chieftech Dragon - ALIMENTATORE: Q-TEC 550W - HARD DISK: Seagate SATA 80 GB - LETTORE DVD: LG 16x52x - MASTERIZZATORE: Nec ND-3520

Ultima modifica di Ballantine : 30-08-2012 alle 00:59.
Ballantine è offline   Rispondi citando il messaggio o parte di esso