Skip to main content

Quick Reference

This page provides concise examples of common operations in Expresso.

Core Operations

// Create evaluator
ExpressionEvaluator evaluator = new ExpressionEvaluator();

// Create context
Context context = new Context();
context.setVariable("name", "Alice");
context.setVariable("price", 100.0);

// Basic evaluation
String result1 = (String) evaluator.evaluate("$name", context); // "Alice"
Double result2 = (Double) evaluator.evaluate("$price * 1.05", context); // 105.0

Operators

Arithmetic

// Addition
Double sum = (Double) evaluator.evaluate("$a + $b", Map.of("a", 10, "b", 20)); // 30.0

// Subtraction
Double diff = (Double) evaluator.evaluate("$a - $b", Map.of("a", 10, "b", 20)); // -10.0

// Multiplication
Double product = (Double) evaluator.evaluate("$a * $b", Map.of("a", 10, "b", 20)); // 200.0

// Division
Double quotient = (Double) evaluator.evaluate("$a / $b", Map.of("a", 10, "b", 20)); // 0.5

// Modulus
Double remainder = (Double) evaluator.evaluate("$a % $b", Map.of("a", 10, "b", 3)); // 1.0

Comparison

// Equality
Boolean equal = (Boolean) evaluator.evaluate("$a == $b", Map.of("a", 10, "b", 10)); // true

// Inequality
Boolean notEqual = (Boolean) evaluator.evaluate("$a != $b", Map.of("a", 10, "b", 20)); // true

// Greater than
Boolean greaterThan = (Boolean) evaluator.evaluate("$a > $b", Map.of("a", 10, "b", 5)); // true

// Less than
Boolean lessThan = (Boolean) evaluator.evaluate("$a < $b", Map.of("a", 10, "b", 20)); // true

// Greater than or equal
Boolean greaterEqual = (Boolean) evaluator.evaluate("$a >= $b", Map.of("a", 10, "b", 10)); // true

// Less than or equal
Boolean lessEqual = (Boolean) evaluator.evaluate("$a <= $b", Map.of("a", 10, "b", 20)); // true

Logical

// Logical AND
Boolean and = (Boolean) evaluator.evaluate("$a && $b", Map.of("a", true, "b", false)); // false

// Logical OR
Boolean or = (Boolean) evaluator.evaluate("$a || $b", Map.of("a", true, "b", false)); // true

// Logical NOT
Boolean not = (Boolean) evaluator.evaluate("!$a", Map.of("a", true)); // false

// Ternary conditional
String conditional = (String) evaluator.evaluate("$age >= 18 ? 'Adult' : 'Minor'", Map.of("age", 25)); // "Adult"

Null-Safety

// Null-safe property access
Object result1 = evaluator.evaluate("$person?.name", Map.of("person", null)); // null (no exception)

// Null-safe array access
Object result2 = evaluator.evaluate("$list?[0]", Map.of("list", null)); // null (no exception)

// Null coalescing (default values)
String result3 = (String) evaluator.evaluate("$person?.name ?? 'Unknown'", Map.of("person", null)); // "Unknown"

Data Types

Strings

// String concatenation
String fullName = (String) evaluator.evaluate("$firstName + ' ' + $lastName",
Map.of("firstName", "John", "lastName", "Doe")); // "John Doe"

// String functions
String upper = (String) evaluator.evaluate("upperCase($name)", Map.of("name", "John")); // "JOHN"
String lower = (String) evaluator.evaluate("lowerCase($name)", Map.of("name", "John")); // "john"
Integer length = (Integer) evaluator.evaluate("length($name)", Map.of("name", "John")); // 4

Numbers

// Numeric functions
Double rounded = (Double) evaluator.evaluate("round($number, 2)", Map.of("number", 3.14159)); // 3.14
Integer maxValue = (Integer) evaluator.evaluate("max($a, $b)", Map.of("a", 10, "b", 20)); // 20
Double sqrtValue = (Double) evaluator.evaluate("sqrt($number)", Map.of("number", 16)); // 4.0

Collections

// Lists
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
context.setVariable("numbers", numbers);

// Array access
Integer item = (Integer) evaluator.evaluate("$numbers[2]", context); // 3

// Collection functions
Integer count = (Integer) evaluator.evaluate("size($numbers)", context); // 5
Integer sum = (Integer) evaluator.evaluate("sum($numbers)", context); // 15
Double avg = (Double) evaluator.evaluate("avg($numbers)", context); // 3.0

Maps

// Map data
Map<String, Object> user = Map.of(
"name", "Alice",
"profile", Map.of(
"age", 30,
"email", "[email protected]"
)
);
context.setVariable("user", user);

// Property access
String name = (String) evaluator.evaluate("$user.name", context); // "Alice"
String email = (String) evaluator.evaluate("$user.profile.email", context); // "[email protected]"

Validation

// Basic validation
boolean isValid = evaluator.validate("$price * 1.05", context);

// Detailed validation
ValidationResult result = evaluator.validateWithContext("$price * 1.05", context);
if (!result.isValid()) {
ExpressionError error = result.getFirstError();
System.err.println(error.getMessage());
}

Custom Functions

// Register custom function
evaluator.registerFunction("discount", (args) -> {
double price = ((Number) args[0]).doubleValue();
double rate = ((Number) args[1]).doubleValue();
return price * (1 - rate);
});

// Use custom function
Double discounted = (Double) evaluator.evaluate("discount($price, 0.1)", Map.of("price", 100.0)); // 90.0