meilleure façon de faire par défaut param = une variable?
-
11-07-2019 - |
Question
J'ai une variable et une fonction de brièveté permet de considérer qu'elle ressemble à ceci:
private function applyDiscount (value:Number):Number
{
return value*_discount; //_discount defined somewhere else
}
OK, tout va bien, mais disons que je veux pouvoir appeler cette fonction et pouvoir passer mon propre rabais, tout en utilisant toujours _discount par défaut.
Je peux faire ceci:
private function applyDiscount (value:Number, discount:Number = 50):Number
{
return value*discount;
}
Cela fera de la remise par défaut la valeur 50 mais je ne le sais pas à la fin de la période. Je dois donc le faire, mais ce n'est pas autorisé dans Flex.
private function applyDiscount (value:Number, discount:Number = _discount):Number
{
return value*discount;
}
Ma question est donc la suivante: quel est le meilleur moyen d'obtenir le même résultat que dans le dernier exemple dans Flex?
Merci.
La solution
private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){
if(discount == Number.POSITIVE_INFINITY) discount = _discount;
return value*discount;
}
Autres conseils
Peut-être que la remise est exposée en tant que propriété publique afin que vous puissiez la définir séparément pour l'appel de méthode. par exemple
public function get discount():Number{
return _discount;
}
public function set discount(param:Number):void {
_discount = param;
}
private function applyDiscount (value:Number):Number
{
return value*_discount; //_discount defined somewhere else
}
La fonction supplémentaire avait l'air bizarre dans les commentaires, je l'ai donc ajoutée ici ... En gros, vous pouvez faire de la réduction un paramètre facultatif.
function applyDiscount(value:Number, ... rest):void {
if(rest.length > 0) {
return value*rest[0];
} else {
return value*_discount; //_discount defined somewhere else
}
}
applyDiscount(100, 10); // 10 discount...
applyDiscount(100); // default discount...