Functions And Calls
Composing Small Functions
This example shows declarations, nested calls, and intermediate values.
square(value is int) is int (
return value * value
)
distanceSquared(x is int, y is int) is int (
xSquared = square(x)
ySquared = square(y)
return xSquared + ySquared
)
square(value is int) is int(return value * value) distanceSquared(x is inty is int) is int(xSquared = square(x) ySquared = square(y) return xSquared + ySquared)
Optional And Default Arguments
This function accepts both a default value and an optional fallback.
clamp(value is int, minimum is int = 0, maximum is int = 100) is int (
if (value < minimum) (
return minimum
)
if (value > maximum) (
return maximum
)
return value
)
clamp(value is intminimum is int = 0maximum is int = 100) is int(return value)
Rest Arguments
This example collects an arbitrary number of integer arguments.
sum(...values is int[]) is int (
total is var int = 0
values each value (
total += value
)
return total
)
sampleTotal() is int (
return sum(3, 5, 8, 13)
)
sum() is int(total var int = 0 values each value(total += value) return total) sampleTotal() is int(return sum(3 5 8 13))
Layering Function Calls
This example keeps a nested calculation readable by naming its intermediate results.
clamp(value is int, minimum is int = 0, maximum is int = 100) is int (
if (value < minimum) (
return minimum
)
if (value > maximum) (
return maximum
)
return value
)
percentage(part is int, whole is int) is int (
return part * 100 / whole
)
completionLabel(completed is int, total is int) is string (
value = percentage(completed, total)
bounded = clamp(value)
return `{bounded}% complete`
)
clamp(value is intminimum is int = 0maximum is int = 100) is int(return value) percentage(part is intwhole is int) is int(return part * 100 / whole) completionLabel(completed is inttotal is int) is string(value = percentage(completed total) bounded = clamp(value) return `{bounded} % complete`)