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))))
}