¿la mejor manera de hacer el parámetro predeterminado = una variable?
-
11-07-2019 - |
Pregunta
Tengo una variable, y una función de brevedad permite considerar que se ve así:
private function applyDiscount (value:Number):Number
{
return value*_discount; //_discount defined somewhere else
}
OK, eso está muy bien, pero digamos que quiero poder llamar a esa función y poder pasar mi propio descuento, pero aún usar el _discount como predeterminado.
PUEDO hacer esto:
private function applyDiscount (value:Number, discount:Number = 50):Number
{
return value*discount;
}
Esto hará que el descuento sea predeterminado a 50, pero no lo sé en el tiempo de ejecución automático, así que necesito hacer esto, pero no está permitido en Flex.
private function applyDiscount (value:Number, discount:Number = _discount):Number
{
return value*discount;
}
Entonces mi pregunta es, ¿cuál es la mejor manera de lograr lo mismo que el último ejemplo en Flex?
Gracias.
Solución
private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){
if(discount == Number.POSITIVE_INFINITY) discount = _discount;
return value*discount;
}
Otros consejos
Tal vez exponga el descuento como propiedad pública para que pueda configurarlo por separado para la llamada al método por ejemplo
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 función adicional se veía tonta en los comentarios, así que la he agregado aquí ... Básicamente, podría hacer que el descuento sea un parámetro opcional.
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...