caso del interruptor de Java uso

user7294900:

Soy reacio a utilizar un interruptor, pero vi interruptor se mejorará en Java 12

Java 12 añadió la expresión switch como una característica experimental. Una expresión interruptor de Java es una sentencia switch que puede devolver un valor.

El único caso de uso que encontré (antes de Java 12) en la que el interruptor puede ser útil está volviendo valores diferentes de un pequeño conjunto cerrado de casos, por ejemplo:

    switch (input) {
    case "A":
        return "1";
    case "B":
        return "2";
    default:
        return "0";
    }

O en Java 12 ejemplo:

return
switch(digitInDecimal){
    case  0 -> '0';
    case  1 -> '1';
    case  2 -> '2';
    default -> '?';

Pero me encontré con un viejo, pero de alto rango respuesta que dice que para evitar múltiples sentencias de retorno:

Asignar un valor a una variable local y luego regresar que al final se considera una buena práctica. Métodos que tienen múltiples salidas son más difíciles de depurar y pueden ser difíciles de leer.

Por eso me pregunto, es que la respuesta sigue siendo relevante debido a los cambios de conmutador?

Debo esperar para Java 12, donde el interruptor se puede utilizar sin variables temporales y se rompe?

Andrew Tobilko:

Asignar un valor a una variable local y luego regresar que al final se considera una buena práctica.

No tengo ni idea cuando se consideraba una buena práctica. Para mí, switches por lo general * un indicador de que se cometió un error de diseño. Yo prefiero poner mi esfuerzo en pensar cómo evitar un interruptor de en preguntarse cómo devolver un valor de un interruptor.

Algunos ejemplos

Larga lista de sentencias if en Java
Cómo evitar declaraciones switch-case en Java
en la conversión de muchas declaraciones 'si Else' a un enfoque más limpio

Métodos que tienen múltiples salidas son más difíciles de depurar y pueden ser difíciles de leer.

Lo mismo ocurre con un método que tiene una gran cantidad de breaks - eso es lo que va a hacer si elige el "enfoque local-variable".

En mi opinión, ninguno de estos

// 1
switch (input) {
    case "A":
        return "1";
    case "B":
        return "2";
    default:
        return "0";
}

// 2
String varibleToReturn = null;
switch (input) {
    case "A":
        varibleToReturn = "1";
        break;
    case "B":
        varibleToReturn = "2";
        break;
    default:
        varibleToReturn = "0";
}
return varibleToReturn;

// 3
return switch(digitInDecimal) {
    case  0 -> '0';
    case  1 -> '1';
    case  2 -> '2';
    default -> '?';
}

hace una diferencia significativa, o una ligera mejora. Sí, el interruptor de Java-12 daría más concisión y expresividad, pero la idea fundamental sigue siendo el mismo.

Debo esperar para Java 12, donde el interruptor se puede utilizar sin variables temporales y se rompe?

Qué significa eso? :) No, la fecha límite es mañana, usted tiene que trabajar con lo que tienes a la mano ahora.


* No estoy subestimando la utilidad del interruptor. Puede ser útil, por ejemplo, cuando se programa a un bajo nivel, o escribir una optimización.

Sólo estoy diciendo que en el mundo real, con resortes , y hiberna , en un mundo de patrones, interruptor está obsoleto.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=230701&siteId=1
Recomendado
Clasificación