import ballerina/io;
function test (int x, string s) returns (float) {
    int y = check <int>s;
    float f = x * 1.0 * y;
    return f;
}
function foo (int x, function (int, string) returns (float) bar)
             returns (float) {
    return x * bar(10, "2");
}
function getIt () returns (function (int, string) returns (float)) {
    return test;
}function main (string[] args) {
    io:println("Answer: " + foo(10, test));
    io:println("Answer: " + foo(10, getIt()));
    function (int, string) returns (float) f = getIt();
    io:println("Answer: " + foo(10, f));
}

Function Pointers

A function pointer is a Ballerina type that allows you to use functions as variables, arguments to functions, and function return values. The name of a function serves as a pointer to that function when called from other functions or operations. The definition of the function name provides the type of the pointer in terms of a function signature.

import ballerina/io;
function test (int x, string s) returns (float) {
    int y = check <int>s;
    float f = x * 1.0 * y;
    return f;
}

The’test’ function acts a variable function pointer in the ‘main function’.

function foo (int x, function (int, string) returns (float) bar)
             returns (float) {
    return x * bar(10, "2");
}

Function pointer as a parameter.

function getIt () returns (function (int, string) returns (float)) {
    return test;
}

Function pointer as a return type.

function main (string[] args) {
    io:println("Answer: " + foo(10, test));
    io:println("Answer: " + foo(10, getIt()));

Value ‘test’ will serve as a function pointer to the ‘test’ function.

    function (int, string) returns (float) f = getIt();
    io:println("Answer: " + foo(10, f));
}

Function pointer as a variable;

$ ballerina run function-pointers.bal
Answer: 200.0
Answer: 200.0
Answer: 200.0