Originariamente inviato da and80
in AS ancora non c'è un modo di rendere dei parametri come
opzionali
e visto l'andazzo mai ci sarà ... più facile che AS3.0 implementi finalmente l'overload di metodi.
Come funziona l'overload ?
Visto che avete tirato in ballo il php, che non supporta nemmeno lui overload, vediamo l'esempio in php:
codice:
class Test {
function scriviQUalcosa($testo = "qualcosa") {
echo $testo;
}
}
Questa semplice classe con il suo semplice metodo fanno un'operazione banale per che conosce il php (o il python) ma di fatto è un modo diverso di utilizzare un overload.
Java e .NET parlando, nonchè probabilmente AS3.0, è come se avessimo fatto una cosa tipo questa (rappresentata in AS2.0)
codice:
class Test {
public function scriviQUalcosa(Void):Void {
trace("qualcosa");
}
public function scriviQUalcosa(testo:String):Void {
trace(testo);
}
}
il metodo scriviQualcosa viene definito più di una volta (overload del metodo) e serve ad indicare quale versione dei due usare qualora il parametro sia stato inviato come stringa oppure no.
La naturale conseguenza delle possibilità di overload è questa
codice:
class Test {
public function scriviQUalcosa(Void):Void {
trace("qualcosa");
}
public function scriviQUalcosa(testo:String):Void {
trace(testo);
}
public function scriviQUalcosa(quanteVolte:Number, testo:String):Void {
for(var i:Number = 0; i < quanteVolte; i++)
trace(testo);
}
public function scriviQUalcosa(testo:String, uppercase:Boolean):Void {
if(uppercase)
testo = testo.toUpperCase();
trace(testo);
}
}
Ovvero a seconda di come verrà richiamato il metodo avremo risultati differenti.
codice:
var test = new Test;
test.scriviQUalcosa(); // qualcosa
test.scriviQUalcosa("ciao"); // ciao
test.scriviQUalcosa(2, "ciao"); // ciao ciao
test.scriviQUalcosa("ciao", true); // CIAO
test.scriviQUalcosa("ciao", false); // ciao
Come faccio in AS1.0 (quindi anche in AS2.0) a fare qualcosa di simile ? Sfruttando arguments 
codice:
function overLoad() {
trace(arguments.length);
}
overLoad();
overLoad("test");
overLoad(1, true);
overLoad("a", ["b", "c"], d);
Ovvero a seconda del tipo di parametri inviati e del totale di essi è possibile comportarsi in modo differente.
Qualcosa tipo questo:
codice:
class Test {
public function scriviQUalcosa(Void):Void {
var i:Number = arguments.length;
if(i === 0)
trace("qualcosa");
else {
if(i === 1)
trace(arguments[0]);
else if(i === 2) {
if(typeof(arguments[0]) === "number") {
for(i = 0; i < arguments[0]; i++)
trace(arguments[1]);
}
else if(typeof(arguments[1]) === "boolean") {
if(arguments[1])
arguments[0] = arguments[0].toUpperCase();
trace(arguments[0]);
}
}
}
}
}
che seppur orribile è la "brutta copia" della versione col metodo ed i suoi 4 overloads vista più sopra

[edit]
tecnicamente parlando anche il php ha una funzione per lavorare "in arguments" ... per l'appunto
codice:
func_get_args(); => arguments
func_num_args(); => arguments.length
func_get_arg($i); => arguments[i]