ひとつの関数はすでに導入されています: main()
- すべてのDプログラムの開始地点です。
関数は任意の個数の引数を受け取り、値を返します(なにも返さない場合はvoid
と宣言します):
int add(int lhs, int rhs) {
return lhs + rhs;
}
auto
返値型返値型がauto
と定義されている場合、D コンパイラは自動的に返値型を推論します。
したがって複数のreturn
式は互換性のある型の値を返す必要があります。
auto add(int lhs, int rhs) { // `int`を返す
return lhs + rhs;
}
auto lessOrEqual(int lhs, int rhs) { // `double`を返す
if (lhs <= rhs)
return 0;
else
return 1.0;
}
関数は必要に応じてデフォルト引数を定義することができます。 これは冗長なオーバーロードの定義という退屈な仕事を回避します。
void plot(string msg, string color = "red") {
...
}
plot("D rocks");
plot("D rocks", "blue");
デフォルト引数が指定された後はその次からの引数もすべてデフォルト引数でなければなりません。
関数は他の関数の中で宣言することができます。その場合宣言した関数は局所的に使うことができ、 外の世界からは見えません。 これらの関数は親のスコープのローカルオブジェクトにアクセスすることもできます:
void fun() {
int local = 10;
int fun_secret() {
local++; // 合法
}
...
このようなネストした関数はデリゲートと言うもので、 近いうちに詳しく説明されます。