はじめに
脱初心者にむけてアウトプットをしていこうと思って記事を書いております。
私は、まだ現場に出たことのない完全にど素人です。
間違ったことがありましたら、ぜひコメントいただけると幸いです。
この記事の目的
JavaScriptの関数についてわからない方に向けて、わかりやすいようにまとめております。私自身、初心者で同じ境遇の方々もいると思うので、そういう方にむけてわかりやすく解説できたらと思っています。
関数にはいろいろな使われ方があり、今回がそのうちの3つを紹介しようと思います。
サブルーチンとしての関数
サブルーチンとしての関数とは繰り返しおこなわる機能をまとめ、それに名前をつけて参照するだけでその機能を実行可能にしてくれるもの。
つまり、特定のタスクを行うための「アルゴリズム」をひとまとめのユニットにする目的で使われる。
例えば
const year = new Date().getFullYear(); //年(西暦)を得る
if(year % 4 !== 0) console.log(`${year}年は閏年ではない。`)
else if(year % 100 !== 0) console.log(`${year}年は閏年である.`)
else if(year % 400 !== 0) console.log(`${year}年は閏年ではない。`)
else console.log(`${year}年は閏年である。`);
このような閏年を判断するアルゴリズムがあり、
この文を何回も使用する機会があった場合、何度もこの記述を書くことは可読性を下げることになります。
また仕様変更があった場合に、記述した全ての箇所で、修正をしなくてはなりません。
こういったことを避けるために、「サブルーチン」として使う方法です。
function printLeapYearStatus() {
const year = new Date().getFullYear(); //年(西暦)を得る
if(year % 4 !== 0) console.log(`${year}年は閏年ではない。`)
else if(year % 100 !== 0) console.log(`${year}年は閏年である.`)
else if(year % 400 !== 0) console.log(`${year}年は閏年ではない。`)
else console.log(`${year}年は閏年である。`);
}
printYearLeapStatus();
こうすることで、関数を呼び出すだけで済みますし、変更したい場合も、一つのサブルーチンの内容を変えるだけで済むので、圧倒的に楽なのです。
値を返すサブルーチンとしての関数
一つ目に紹介したサブルーチンとしての関数は実は経験を積むことで使うことが少なくなっていくらしい、、、
そして、その次の段階として「値を返すサブルーチン」としての関数です
例えば
function isCurrentYearLeapYear() {//今年は閏年か?
const year = new Date().getFullYear();
if(year % 4 !== 0) return false;
else if(year % 100 !== 0) return true;
else if(year % 400 !== 0) return false;
else return true;
}
console.log(isCurrentYearLeapYear()); //実行結果:true
(2020年は閏年なので)
この文章に変えたとして、
先のサブルーチンとしての使われ方との違いは。
1. HTMLで出力できる
2. ファイルに書き出せる
3. if文で条件判定ができる
4. 他の処理のために今年が閏年かどうか知れる
他にもメリットがありと思います。
つまり、いろいろ汎用性がある値として返すサブルーチンの方が役に立つ時が多いいということです。
純粋関数
純粋関数とは、同じ入力に対しては同じ出力を返します。
副作用を持たない、つまりプログラムの状態を変えない。
使うことのメリットとは、テストが簡単で理解が容易で可搬性が上がることです。
いろいろ調べると、純粋関数でいろいろな議論がされているみたいなので、私にとってまだまだ早い領域だと気付きました。
ただ僕なりの解釈として、関数と純粋関数の違いについては、
constとletの違いと似てる!と感じました。
constは定数でletは変数、使用する目的は、そのうち値が変わりそうなものにはletを、constは今後値が変わらないものに使うので、
そういう意味ではこれらの違いとあんまり違わないのかなと思っています。
最後に、
まだまだ難しいことがあるなと感じました,
この記事を見ていただいて、間違っていると感じたら、ぜひコメントいただければと思います。
最後までご覧いただいありがとうございました。