enrique-j
6/21/2018 - 5:01 PM

Smart Casts

Castin inteligente

package interfaces

// 3 * 4 * 2 + 2 +4
interface Expresion

class Numero(val valor: Int):Expresion //implementacion de la interface

class Sumar(val valorA: Expresion, val valorB: Expresion): Expresion

class Mul(val valorA: Expresion, val valorB: Expresion): Expresion

fun evalExpresion(expresion: Expresion):Int{
    //para evaluar si objeto corresponde a una clase se usa "is"
    //cast inteligente y sabe kotli
    if(expresion is Numero){
        return expresion.valor
    }else if(expresion is Sumar){
        return evalExpresion(expresion.valorA) + evalExpresion(expresion.valorB)
    }else if(expresion is Mul){
        return evalExpresion(expresion.valorA) * evalExpresion(expresion.valorB)
    }else{
        throw IllegalArgumentException("No se puede reconocer la operacion")
    }
}

fun main(args: Array<String>){
println(evalExpresion(Sumar(Sumar(Mul(Mul(Numero(3),Numero(4)), Numero(2)), Numero(2)),Numero(4))))
}