Scrivere script

Seconda lezione dal tutorial Sun su JavaFX, partiamo dicendo qualcosa di più sulle funzioni in questo linguaggio.

Per default, una funzione fx é una procedura, ovvero non ritorna nulla. Dunque le due funzioni che scrivo qui a seguire, hello() e hello2() sono esattamente uguali. Nota che il tipo del parametro tornato dalla funzione viene specificato dopo il nome e la lista dei parametri in input della funzione stessa. E che Void é indicato con la V maiuscola.

function hello() {
println("Hello");
}

function hello2() : Void {
println("Hello");
}

Per mostrare come si passano parametri in input ad una funzione, riscriviamo l'esempio visto nella lezione precedente nel modo a seguire - qui faccio anche la piccola variazione di non usare una variabile globale result in appoggio per la gestione locale delle singole funzioni, ma dichiaro result locale alle funzioni stesse.
Si noti che anche il tipo delle variabili in input alla funzione viene indicato dopo il nome del parametro.

add(100,10);
subtract(50,5);
multiply(25,4);
divide(500,2);

function add(argOne: Integer, argTwo: Integer) {
var result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
}

function subtract(argOne: Integer, argTwo: Integer) {
var result = argOne - argTwo;
println("{argOne} - {argTwo} = {result}");
}

function multiply(argOne: Integer, argTwo: Integer) {
var result = argOne * argTwo;
println("{argOne} * {argTwo} = {result}");
}

function divide(argOne: Integer, argTwo: Integer) {
var result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}

function hello() {
println("Hello");
}

function hello2() : Void {
println("Hello");
}

Vediamo come agisce una funzione che accetta due parametri in input di tipo Integer e ritorna un altro Integer. Mi scrivo una nuova funzione addizionatrice che chiamo add2() e la chiamo come da tutorial:

var total = add2(1,300) + add2(23,52);
println("total is {total}");

function add2(argOne: Integer, argTwo: Integer) : Integer {
var result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
return result;
}

Il risultato di questo pezzo di codice non dovrebbe essere sorprendente:

1 + 300 = 301
23 + 52 = 75
total is 376

E' lecito chiedersi come funziona la comunicazione dalla shell del sistema al nostro script fx. Dato che non c'é una funzione main, come fare a passargli parametri?

La risposta sta nella funzione run(), che é a tutti gli effetti una procedura, e accetta come parametro in input un array di stringhe.

La usiamo a seguire modificando leggermente il codice sopra visto, per permettere all'utente di effettuare operazioni con i valori che vuole lui.
Faccio un rapido test dell'input, per accertarmi di non avere eccezioni dalla parseInt() e poi chiamo le funzioni di calcolo parametrizzate con i valori passatimi dall'utente.

function run(args : String[]) {
if(args.size() < 2) {
println("Missing input parameter.");
}
else {
// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);

// Invoke Functions
add(numOne,numTwo);
subtract(numOne,numTwo);
multiply(numOne,numTwo);
divide(numOne,numTwo);
}
}

Chiamando da shell la mia applicazione:

javafx fxTut.calc2 100 50

ho effettivamente i risultati attesi.

Nessun commento:

Posta un commento