An expression that returns a callable function.

Unlike value expressions, function expressions don’t return instances of classes.

Examples (multi-line):

(String? name) => name else "John Doe"

(String string) {
    value mid = string.size / 2;
    return [string[...mid], [string[mid+1...]];
}

no subtypes hierarchy

Initializer
FunctionExpression([Parameters+] parameterLists, LazySpecifier|Block definition, FunctionModifier|VoidModifier? type = null)
Parameters:
  • parameterLists

    The parameter lists of the function expression.

  • definition

    The definition of the function expression.

  • type = null

    The type of the function expression:

    • a function’ modifier (FunctionModifier) for explicit type inference,
    • a void’ modifier (VoidModifier) for a function without a return value, or
    • no type for implicit type inference.
Attributes
childrenSource Codeshared actual <FunctionModifier|VoidModifier|Parameters|LazySpecifier|Block>[] children

The child nodes of this node.

Refines Expression.children ultimately refines Node.children
definitionSource Codeshared LazySpecifier|Block definition

The definition of the function expression.

hashSource Codeshared actual Integer hash

The hash value of the value, which allows the value to be an element of a hash-based set or key of a hash-based map. Implementations must respect the constraint that:

  • if x==y then x.hash==y.hash.

Therefore, a class which refines equals must also refine hash.

Refines Object.hash
parameterListsSource Codeshared [Parameters+] parameterLists

The parameter lists of the function expression.

typeSource Codeshared FunctionModifier|VoidModifier? type

The type of the function expression:

  • a function’ modifier (FunctionModifier) for explicit type inference,
  • a void’ modifier (VoidModifier) for a function without a return value, or
  • no type for implicit type inference.
Inherited Attributes
Attributes inherited from: Node
Attributes inherited from: Object
Methods
copySource Codeshared FunctionExpression copy([Parameters+] parameterLists = ..., LazySpecifier|Block definition = ..., FunctionModifier|VoidModifier? type = ...)
Parameters:
  • parameterLists = this.parameterLists
  • definition = this.definition
  • type = this.type
equalsSource Codeshared actual Boolean equals(Object that)

Determine if two values are equal. Implementations should respect the constraints that:

  • if x===y then x==y (reflexivity),
  • if x==y then y==x (symmetry),
  • if x==y and y==z then x==z (transitivity).

Furthermore it is recommended that implementations ensure that if x==y then x and y have the same concrete class.

A class which explicitly refines equals() is said to support value equality, and the equality operator == is considered much more meaningful for such classes than for a class which simply inherits the default implementation of identity equality from Identifiable.

transformSource Codeshared actual Result transform<out Result>(Transformer<Result> transformer)

Transform this node with the given transformer by calling the appropriate transformX method on the transformer.

If you have a Node node that’s actually an LIdentifier instance, then the runtime will call LIdentifier.transform; therefore, this method is by nature narrowing. This means that if transformer is a NarrowingTransformer, calling node.transform(transformer) is equivalent to calling transformer.transformNode(node). On the other hand, if transformer is a WideningTransformer, then the two operations are very different.

Inherited Methods
Methods inherited from: Node