関数

プログラムを書いているときに、同じ処理を何度も別の場所で行うことがよくあります
例えば、ステッピングモーターを回すなどです

処理の行数が少なかったり、使用頻度が少ないものであれば、コピーペーストでもよいかもしれません
しかし、行数が多かったり、何度も行う処理をコピーペーストで書いてしまうと長く、読みづらいプログラムになってしまうので、関数としてまとめて宣言し、それを呼び出すようにします

また、動作が似ている処理を抽象化して、関数にすることでコードを書く手間を大幅に削減できます
7セグメントを点灯させる際に、各数字ごとに別の関数を用意する必要はありません
どの数字を点灯するかを引数に取り、数値によって動作を変えればよいのです

宣言

返り値の型 関数名(引数の型 仮引数) {
    処理
}

返り値とは処理の結果の値のことです
例えば、整数の足し算をする関数なら int 型を指定します
また、返り値がない場合(処理だけ行う)ときは void 型を指定します

引数は、関数の動作に必要な変数のことです
引数がいらない場合は省略できます
, で区切って複数個指定することもできます

// 整数同士の足し算を行う関数
int add(int a, int b) {
    return a + b; // return句で返り値を返すことができる
}

// 呼び出せる
int i = add(5, 10);
// クロック書き込みを行う関数
void clock() {
    digitalWrite(5, HIGH);
    delay(5);
    digitalWrite(5, LOW);
}

また、名前が同じでも引数が違う複数個の関数を宣言する(オーバーロード)こともできます

// 5msで固定のクロック
void clock() {
    digitalWrite(5, 1);
    delay(5);
    digitalWrite(5, 0);
}

// 秒数を指定できるバージョン
void clock(int ms) {
    digitalWrite(5, 1);
    delay(ms);
    digitalWrite(5, 0);
}

スコープ

関数にも変数と同様にスコープの概念があるので、宣言の際には気を付けましょう