es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El método Enum coincide con ‘default’.

Estoy preguntándome si hay una forma más eficiente de “definir un valor por defecto” para una coincidencia que lo que he encontrado en la documentación de PHP. Lo siguiente es extraído de https://www.php.net/manual/en/language.enumerations.methods.php

enum Suit implements Colorful
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;

    // Cumple con el contrato de la interfaz.
    public function color(): string
    {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => 'Rojo',
            Suit::Clubs, Suit::Spades => 'Negro',
        };
    }
}

El ejemplo anterior no es el mejor para demostrar la necesidad de por qué estoy haciendo esta pregunta, aún no he encontrado un mejor ejemplo, pero imagina, por el bien de esta pregunta, que hay 10 palos, 9 negros y 1 rojo. Parece que tendría que repetir 9 veces los casos dentro de la función de coincidencia de colores para “negro”… Estoy esperando (y preguntando aquí si la sintaxis existe) que haya una forma de decir “el valor por defecto es ‘negro'” y solo usar “rojo” para aquel que explico específicamente que es “rojo”. Algo así como lo que podría hacer en una declaración switch. ¿Los enums de PHP proporcionan tal sintaxis?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en PHP, enums y PHP 8.1, puedo confirmar que los enums de PHP proporcionan una sintaxis para definir una coincidencia predeterminada. En el ejemplo anterior, el caso predeterminado para la función de coincidencia de color no se define explícitamente, lo que significa que se asumirá automáticamente que cualquier palo que no sea Corazones o Diamantes será de color negro. Sin embargo, si hubiera 10 palos y 9 de ellos fueran negros y 1 fuera rojo, sería posible definir un caso predeterminado que se aplicaría a los 9 palos negros, al tiempo que declara explícitamente el palo rojo como tal.

    Para hacer esto, la función de coincidencia de color se podría reescribir de la siguiente manera:

        public function color(): string
        {
            return match($this) {
                Suit::Hearts, Suit::Diamonds => 'Rojo',
                default => 'Negro',
            };
        }
    

    En esta versión de la función de coincidencia de color, el caso predeterminado se aplica a todos los palos que no se declaran explícitamente como rojos o negros. Esto ahorra repetición, ya que los palos negros ya no necesitan enumerarse individualmente.

    En resumen, sí, los enums de PHP proporcionan una sintaxis para definir una coincidencia predeterminada, que se puede utilizar para simplificar el código y reducir la repetición.

Comments are closed.