Corso di Java

Gestire gli argomenti di un'applicazione

 

Poter passare degli argomenti ad un’applicazione è utile in molte occasioni, in quanto consente di modificarne il comportamento senza dover necessariamente ricompilare il codice sorgente.
Ad es. un programma che ordina alfabeticamente le righe contenute in un file, può offrire all’utente la possibilità di eseguire l’ordinamento in maniera ascendente anziché discendente semplicemente specificando un opportuno parametro.

Spesso, può essere necessario dover supportare degli argomenti numerici anziché delle stringhe e in questo caso occorre convertire l’oggetto String corrispondente nel numero che lo rappresenta, ad es. la stringa “1234” nel numero 1234.
Per far questo esistono diversi metodi che elencheremo dopo aver mostrato un esempio, che riporta un programma la cui funzione è quella di sommare i suoi argomenti, oppure farne media, se il primo argomento specifica l’opzione “–m”:

/*
* File SommaMedia.java
*/

class SommaMedia
{
public double somma(String addendi[])
{
int i;
double somma = 0.0;
double doubleArg;

for (i = 0; i < addendi.length; i++)
{
try {
doubleArg = Double.parseDouble(addendi[i]);
} catch (NumberFormatException e) {
// Ignora l'argomento
continue;
}
somma += doubleArg;
}

return somma;
}

public double media(String addendi[])
{
double media;
String daSommare[] = new String[addendi.length-1];

System.arraycopy(addendi, 1, daSommare, 0, daSommare.length);
/* Gli argomenti non validi vengono calcolati come aventi il valore 0
e contribuiscono al calcolo della media */
media = somma(daSommare) / daSommare.length;

return media;
}

public static void main(String args[])
{
double risultato;
SommaMedia sm = new SommaMedia();

if (args.length == 0)
{
System.out.println("Nessun argomento su cui operare");
System.exit(1);
}

if (args[0].equals("-m") & args.length > 1)
risultato = sm.media(args);
else
// Qualsiasi altro parametro diverso da -m viene ignorato
risultato = sm.somma(args);

System.out.println("Il risultato dell'operazione e' " + risultato);
}
}

Il funzionamento complessivo, anche grazie ai commenti inseriti nel codice, dovrebbe essere chiaro.
In particolare ci soffermiamo su due nuovi metodi presentati, evidenziati in grassetto.

All’interno del metodo media() è presente un metodo molto utile, arraycopy() della classe java.lang.System, che ha la seguente segnatura:

public static void arraycopy(Object src,
int src_position,
Object dst,
int dst_position,
int length)

e il cui compito è quello di copiare in ordine un numero length di elementi di un array src, a partire dalla posizione src_position, nella posizione dst_position dell’array di destinazione dst.


Nel nostro caso, lo abbiamo utilizzato per passare alla funzione somma() il vettore dei parametri passati all’applicazione, senza l’argomento “-m”.

Il metodo parseDouble() presente nel metodo somma() viene utilizzato per convertire gli argomenti in numeri di tipo double, sui quali poter operare aritmeticamente per eseguire la somma.
Si tratta di un metodo statico della classe java.lang.Double, ma ne esistono anche altri che permettono la conversione in altri tipi numerici.
In particolare, tutte le classi che hanno un corrispondente tipo primitivo in Java (quindi Byte, Character, Double, Float, Integer, Long e Short) hanno dei metodi statici che convertono una stringa in un oggetto del loro tipo o in un valore del loro tipo primitivo, con una segnatura del tipo:

public static <tipo primitivo> parse<NomeTipoPrimitivo>(String s)

Tutti questi metodi sollevano un’eccezione del tipo NumberFormatException se la stringa passata come argomento non è un numero valido.

Con questa lezione terminiamo la prima panoramica sulle applicazioni Java, delle quali torneremo a discutere quando sarà la volta della interfacce grafiche.
Con la prossima lezione cominceremo un nuovo capitolo, nel quale impareremo a scrivere le nostre applet.

 

Torna all'indice Generale del corso di Corso di Java di Software Planet