Argomenti variabili in Javascript: due alternative

In Javascript è possibile scrivere funzioni con argomenti variabili, cioè funzioni che non accettano necessariamente un numero predefinito di inputs. Ad esempio è possibile scrivere funzioni come questa:

1
2
3
4
5
6
7
8
9
10
11
12
// Questa funzione mostra il numero e il valore degli argomenti
// passati facendo riferimento all'oggetto interno arguments e
// non richiedendo nessuna dichiarazione
function parametri_variabili() {
    alert ( 'Numero argomenti passati = ' + arguments.length );
    // stampa tutti gli argomenti
    var o = '';
    for (var i = 0; i <arguments.length; i++) {
        o += arguments[i] + '\n';
    }
    alert( o );
}

Quindi si ha:

1
2
3
parametri_variabili();  // nessuno

parametri_variabili( "ciao", 32 );  // due argomenti: stringa e numero

Questa tecnica è davvero utile in moltissimi casi, tuttavia – a mio parere – è possibile migliorarla in quanto questo approccio comporta:

  • Gli argomenti devono seguire sempre lo stesso ordine: arguments[0] è il primo, arguments[1] è il secondo, e via discorrendo…
  • L’accesso agli argomenti è per indice (arguments[0] o arguments[4] ad esempio), quindi poco “leggibile” nell’implementazione all’intero del codice

Un’alternativa potrebbe essere quela di usare gli oggetti-inline (Object Literal). Ad esempio potremmo scrivere:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function parametri_variabili( args ) {
    alert( args.miaStringa );
    alert( args.mioNumero );
}

// Utilizzando
parametri_variabili( {
    miaString: 'ciao',
    mioNumero: 32
});

// Oppure
parametri_variabili( {
    mioNumero: 32,
    miaString: 'ciao'
});

Come si può vedere dal codice, l’ordine degli argomenti, essendo proprietà di un oggetto, non è importante. Inoltre nell’implementazione della funzione il codice risulta esssere più chiaro, trattando “proprietà” di un oggetto invece di indici di un array.
Questa tecnica è decisamente ottima nel caso di funzioni con molti argomenti, ovviamente.

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA