Quote:
Originariamente inviato da Solido
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.