Function Extensions
implicit_functions
The function keyword can be optionally omitted, along with empty argument lists:
ok = (timeout) { sendNote() setTimeout { run() }, timeout return true }
Gotcha
according to this definition {}
or { }
could be a function
or an object
, so to avoid ambiguity:
it is defined to be an object
.
To express an empty function, make sure it has some code within. For example:
{;} {null} function() {}
implicit return
The last statement of a function will be automagically returned (Ruby style). For example
getName = { @name }
This will only work for returnable statements, i.e. variables, objects and functions. So an final if
statement will result no return value
getName = { if truthy @name }
gotcha
A constructor must not return an array or an object to work properly. So make sure you do not accidently do this
Animal = (name) { @name = name @friends = [] // wrong => new Animal() won’t work properly }
Animal = (name) {
@friends = []
@name = name // better => providing you’re sure that name will be a string or null
}
Animal = (name) {
@friends = []
@name = name
return // best => cannot break
}
hash alias
Kaffeine provides #
shortcut for referring to the first argument in a function.
Additionally, #n
refers to the nth argument (n >= 0). Useful for terse function definitions:
// square = { #*# } // times = { #*#1 }
default arguments
This module allows support for ruby-syle defaults for null
or undefined
arguments.
Note, this uses non strict comparison with null, meaning falsy values such as 0
or “”
can be used as default.
fn = (x=1, a=0) { log x, a } fn 5 // => 5, 0