Patrón de coincidencia en HarmonyOS Next: expresión when y guardias de tipo

En el desarrollo para HarmonyOS Next, la coincidencia de patrones es una característica poderosa que permite ejecutar lógica diferente según condiciones específicas. La expresión when y las guardias de tipo son fundamentales en este proceso. A continuación se detallan sus aplicaciones, funcionalidades y principios de optimización.

Capítulo 1: Coincidencia básica

La expresión when permite realizar coincidencia de valores, siendo especialmente útil para tipos de enumeración. Consideremos un ejemplo con una enumeración que representa formas geométricas:

enum Forma {
    case circulo
    case rectangulo
    case triangulo
}

La expresión when facilita la desestructuración de valores de enumeración y la ejecución de operaciones específicas:

let figura: Forma = .circulo
when (figura) {
    case .circulo:
        print("Es un círculo")
    case .rectangulo:
        print("Es un rectángulo")
    case .triangulo:
        print("Es un triángulo")
    default:
        print("Tipo de figura desconocido")
}

Adicionalmente, la expresión when admite el uso del comodín _ para coincidir con cualquier valor. En el procesamiento de arrays heterogéneos:

let elementosMixtos: [Any] = [1, "texto", 3.14]
for elemento in elementosMixtos {
    when (elemento) {
        is Int:
            print("Entero: $elemento as! Int)")
        is String:
            print("Cadena: $elemento as! String)")
        _:
            print("Elemento de otro tipo")
    }
}

El comodín _ permite manejar tipos distintos a Int y String, aumentando la versatilidad del código.

Capítulo 2: Conversión inteligente

Las guardias de tipo permiten verificar y convertir tipos en tiempo de ejecución. Tras una verificación is, el compilador estrecha el tipo de la varialbe. Ejemplo:

func mostrarLongitud(valor: Any) {
    if valor is String {
        let texto = valor as! String
        print("Longitud de cadena: $texto.count)")
    }
}

En este caso, la guardia valor is String garantiza que valor sea tratado como String dentro del bloque if, evitando errores de conversión.

La combinación con expresiones when permite lógica más compleja, como el manejo de valores numéricos:

let cantidad: Any = 3.14
when (cantidad) {
    is Int:
        let valorEntero = cantidad as! Int
        print("Entero: $valorEntero)")
    is Double:
        let valorDecimal = cantidad as! Double
        print("Decimal: $valorDecimal)")
}

Esta estructura promueve código claro y adaptable al tipo real de la varible.

Capítulo 3: Optimización de rendimiento

El compilador genera tablas de salto (jump tables) para optimizar expresiones when. Estas estructuras permiten saltar directamente al bloque correspondiente sin evaluar condiciones secuencialmente.

Ejemplo con una eunmeración amplia:

enum Fruta {
    case manzana
    case plátano
    case cereza
    // Más opciones...
    case naranja
}
let miFruta: Fruta = .plátano
when (miFruta) {
    case .manzana:
        print("Es una manzana")
    case .plátano:
        print("Es un plátano")
    // Más casos...
    case .naranja:
        print("Es una naranja")
}

Si los valores de la enumeración son secuenciales, la tabla de salto usa índices para localizar rápidamente el bloque objetivo, mejorando significativamente el rendimiento. Esta optimización mantiene la eficiencia incluso en lógicas complejas de coincidencia.

Etiquetas: HarmonyOS guardias de tipo expresión when coincidencia de patrones Optimización de Rendimiento

Publicado el 10-10 00:13