それが最後の引数でなかったら、後続の引数は名前付き引数を使って渡すか、または後続の引数が関数型なら括弧の外からラムダを渡す。最後の引数に渡す処理}既に渡したいものを配列として持ってるなら、配列の前にアスタリスクを付けることで展開して渡せる。関数はファイルのトップレベルで宣言できる。ように関数を入れるためのクラスを用意する必要はない。トップレベルの関数に加えて、(関数内で)ローカルに、メンバ関数として、拡張関数として宣言することもできる。メンバ関数や拡張関数はもう説明しているからいいよね?ローカル関数だけ説明するよ。関数の中で関数を宣言できる。HashSet())}ローカル関数はその外側の変数にアクセスできる。ローカル変数にできる。この関数の中で、外側にあるvisitedが見える。dfs(graph.vertices[0])}ローカル関数はラベルを指定することで外側の関数を抜けることもできる。recursion)として知られる関数型プログラミングのスタイルをサポートしている。これは通常はループで書くアルゴリズムを、スタックオーバーフローを起こすリスクなく再帰を使って書けるようにしてくれる。修飾子を付けると、コンパイラが再帰を(高速で効率的な)ループに置き換えて最適化する。findFixPoint(Math.cos(x))これは数学の定数であるコサインの不動点を計算するコード。Math.cos()を結果がもう変化しなくなるまで繰り返し呼び出す。コンパイラが吐き出すコードは伝統的なスタイルの以下と同等のものになる。適合させるために、関数は最後の処理として自分自身を呼び出さなければならない。再帰呼び出しの後にまだコードがある場合、末尾再帰は使えない。ブロックの中でも使えない。バックエンドでのみサポートされている。パラメータとして関数を取ったり、関数を返したりする関数のこと。これはロックを獲得してから関数を実行して、ロックを解除する。型の戻り値を返す関数を表している。}}これを呼び出すには引数として別の関数を渡す。::toBeSynchronized)もっと簡便な方法はラムダを渡すこと。ラムダの書式については後で説明する。