Functions: Introduction
The function keyword defines a global function.
function add_one(int $x): int {
  return $x + 1;
}
The function keyword can also be used to define methods.
Default Parameters
Hack supports default values for parameters.
function add_value(int $x, int $y = 1): int {
  return $x + $y;
}
This function can take one or two arguments. add_value(3) returns 4.
Required parameters must come before optional parameters, so the following code is invalid:
function add_value_bad(int $x = 1, int $y): int {
  return $x + $y;
}
Variadic Functions
You can use ... to define a function that takes a variable number of
arguments.
function sum_ints(int $val, int ...$vals): int {
  $result = $val;
  foreach ($vals as $v) {
    $result += $v;
  }
  return $result;
}
This function requires at least one argument, but has no maximum number of arguments.
// Passing positional arguments.
sum_ints(1, 2, 3);
// You can also pass a collection into a variadic parameter.
$args = vec[1, 2, 3];
sum_ints(0, ...$args);
Function Types
Functions are values in Hack, so they can be passed as arguments too.
function apply_func(int $v, (function(int): int) $f): int {
  return $f($v);
}
function usage_example(): void {
  $x = apply_func(0, $x ==> $x + 1);
}
Variadic functions can also be passed as arguments.
function takes_variadic_fun((function(int...): void) $f): void {
  $f(1, 2, 3);
  $args = vec[1, 2, 3];
  $f(0, ...$args);
}
Thank You!
Thank You! If you'd like to share more feedback, please file an issue.