Skip to content

Instantly share code, notes, and snippets.

@elGuille-info
Created November 16, 2022 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elGuille-info/3391da69ab3fa864c2aa1ca130a77419 to your computer and use it in GitHub Desktop.
Save elGuille-info/3391da69ab3fa864c2aa1ca130a77419 to your computer and use it in GitHub Desktop.
Interface y records para evaluar expresiones
// Expresiones
// sealed interface y permits en records.
// Los records son buenos candidatos para usarlos en permits porque son final.
//package com.example.evaluar;
sealed interface Expr
//permits ConstantExpr, PlusExpr, TimesExpr, NegExpr, MinusExpr, DivideExpr
{
int eval();
}
record MinusExpr(Expr a, Expr b) implements Expr {
public int eval() { return a.eval() - b.eval(); }
}
record DivideExpr(Expr a, Expr b) implements Expr {
public int eval() { return a.eval() / b.eval(); }
}
record ConstantExpr(int i) implements Expr {
/**
* Constructor que recibe una cadena en vez de un entero.
* @param i El valor de tipo cadena a convertir en entero.
*/
ConstantExpr(String i){
this(Integer.parseInt(i));
}
public int eval() { return i(); }
}
record PlusExpr(Expr a, Expr b) implements Expr {
public int eval() { return a.eval() + b.eval(); }
}
record TimesExpr(Expr a, Expr b) implements Expr {
public int eval() { return a.eval() * b.eval(); }
}
record NegExpr(Expr e) implements Expr {
public int eval() { return -e.eval(); }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment