#!ek9 defines module site.functions.noreturn defines constant noon <- 12 evening <- 18 defines function // region: initialised //The initial value is the answer unless a later statement replaces it. greeting() as pure -> hour as Integer <- rtn as String: "Good evening" if hour < noon rtn: "Good morning" else if hour < evening rtn: "Good afternoon" // end region: initialised // region: every_path //No initial value: the compiler proves that every path gives it one. sign() as pure -> amount as Integer <- rtn as String? if amount < 0 rtn: "negative" else if amount > 0 rtn: "positive" else rtn: "zero" // end region: every_path // region: switch //A switch returns a value through its own '<-' variable. dayKind() as pure -> day as String <- rtn as String: switch day <- kind as String? case "Saturday", "Sunday" kind: "weekend" default kind: "weekday" // end region: switch lookup() as pure -> code as String <- rtn as String? if code == "GB" rtn: "United Kingdom" else rtn: String() // region: guard //A guard replaces the early return: the body runs only when lookup gives a set value, //otherwise the initial value stands. countryName() as pure -> code as String <- rtn as String: "unknown" if name <- lookup(code) rtn: name // end region: guard isPositive() as pure -> amount as Integer <- rtn as Boolean: amount > 0 // region: stream //A stream replaces a loop with 'continue' or 'break': 'filter' skips items ('head n' would stop //early), and '>' adds each Integer into the returning variable. sumOfPositives() as pure -> amounts as List of Integer <- rtn as Integer: 0 cat amounts | filter by isPositive > rtn // end region: stream defines program NoReturn() stdout <- Stdout() stdout.println(greeting(9)) stdout.println(greeting(20)) stdout.println(sign(-4)) stdout.println(sign(0)) stdout.println(dayKind("Sunday")) stdout.println(dayKind("Monday")) stdout.println(countryName("GB")) stdout.println(countryName("XX")) stdout.println($ sumOfPositives([-3, 0, 7, 2])) //EOF