How come arrow function can by pass the Function signature when assigned?

Viewed 32

I can assign an arrow function, which returns a value to a function variable that requires a void signature. But I can not assign a block function that returns a value. Why? Should the not be arrow function restricted as well, as it returns a value?

arrow function

block function

1 Answers

That is because by doing

void Function(int) function=(a)=>b=a;

Dart assumes that you don't want to return the value of the assignation, that normally you could use, for example:

void main() {
  int a=10,b;
  print(b=a);
}

So, dart just thinks that you want to assign the variable, nothing more. Another more detailed example here:

int number=10;
late int target;

void main() {
  print(test());
  number+=10;
  test2();  
  print(target);
}


int test()=>target=number;

void test2()=>target=number;

//Note: there aren't many best practices here (For example, global variables)
//Is just an example to make you understand, nothing more

but if you specify the return, dart will think you reeeeally want to return that value, and that's not possible, as it is a void function.

Related