今日はなんの話?
- プログラミングにおける「関数」のお話です
関数とは何か
- プログラミングにおいては入力が同じなら常に同じ出力となる性質のこと(不完全な定義)
関数の例
- 足し算
function add(rh, lh) {
return rh + lh;
}
入力が同じなら常に同じ結果となるので、関数である
非関数の例
- 1~100までの整数をランダムで返す
function random() {
return Math.floor(Math.random() * 100);
}
呼び出す度に結果が変わるので、関数ではない
これは関数?
- DB更新
function update(records) {
const updateCount = db.updateRecords(records);
return updateCount
}
関数の性質
- 入力が同じなら常に同じ出力
- 副作用(関数の外に影響を及ぼさない)がない
関数の性質と定数
- 引数のない関数は、つまり定数である
引数がない=状態は1つしかない=定数
関数の何が嬉しいのか(今日はこれが最重要)
- 安全です!
何が嬉しいって「副作用がない」=「関数の中だけを見ればよい」 - ただし安全度は言語による
関数型プログラミング言語について
- 関数の利点を最大限発揮するように設計されたPG言語のこと
Haskell/Elmが該当する
変数なし/ループなし/メソッドなし/関数しかない、狭量かつ堅牢な言語 - 関数型PG言語でなくても、関数を多く用いた実装は良い実装
ちょっと目先は変わるが、定数を参照する箇所も少ない方が良い実装になります。
最後に(今日もっとも伝えたかったこと)
- 関数型PG言語でなくても、関数を多く用いた実装は良い実装(2回目)
- 経験上、変数がないとどうしても実装できない、というケースはほぼないです
- だまされたと思って、地道に関数を作ってください