78

In the same way we can have

nullableClassInstance?.method(blah)

Is there a way to do

nullableFunctionInstance?(blah)

In other words, is there an operator that checks whether a function instance is not null, if so, invoke the function all in one line?

Philippe Fanaro
  • 6,148
  • 6
  • 38
  • 76
xster
  • 6,269
  • 9
  • 55
  • 60

2 Answers2

181

Using the call method, you can achieve what you want with:

nullableFunctionInstance?.call(blah)

There's also the apply method if you want to pass arguments.

Philippe Fanaro
  • 6,148
  • 6
  • 38
  • 76
Ganymede
  • 3,345
  • 1
  • 22
  • 17
  • But I have to wrap my function in a callable class or am I misunderstanding this? Invoking "call" or "apply" on a variable of type e.g. 'void Function(int)' throws a compiler error – Wecherowski Jan 25 '20 at 22:43
18

If you have a Function Object , you can use the call method and send all the parameters to that which works exactly as calling the function. Here , you can use the null aware member access operator.

void myFun(int a , int b){...}

var myVar = myFun ;

call

The function myVar will only get called if its not null as shown below.

myVar?.call( arg1 , arg2 );

apply

If your function is dynamic or you wish to control which function is being called at run time , you can use the apply static method of Function like so :

Function.apply(myVar , [arg1 , arg2]);

apply takes the function and a List of parameters that will be sent to the function.

Read more about call and apply :

Natesh bhat
  • 12,274
  • 10
  • 84
  • 125