north-memo

数学できない方の数学科のブログ、一応デザイナー…なのか…?

アントニオ猪木でわかる関数

深夜テンションで書いたら筆が滑りすぎた。

関数

関数は、コードの一部をひとかたまりのものとして名前を付けて切り出すものです。

名前を付けることで、より処理の見通しが良くなったり、簡単に再利用することができたりすることが出来ます。

処理を一つにまとめる

アントニオ猪木はよく「1, 2, 3, ダー!」といいますが、これをJavaScriptで書くとこうなります。

for(var i = 1; i <= 3; i++) {
  console.log(i + "、");
}
console.log("ダー!");

アントニオ猪木はよくこのフレーズを使うので、再利用出来るように関数にまとめてみましょう。

やり方は簡単で、

function antonio() {
  for(var i = 1; i <= 3; i++) {
    console.log(i + "、");
  }
  console.log("ダー!");
} 

このように、上にfunction 関数名()と書き、{}でくくってあげるだけです。

これは、処理のひとまとまりに名前を付けただけで(var i = 0; と宣言したようなもの)、まだ実行されていません。実行するには、また簡単で、

antonio();

とするだけです。これでどこでもアントニオ猪木ができます。

引数を渡してみる

さて、関数名の後に()があります。これについて説明してみます。
先程のアントニオ猪木は3カウントの後に「ダー!」といいますが、4カウント、5カウントしたいことがあるかと思います。このようにカウントが変わる場合に、次のように使います。

function antonio(count) {
  for(var i = 1; i <= count; i++) {
    console.log(i + "、");
  }
  console.log("ダー!");
} 
antonio(3);    // 通常のアントニオ猪木
antonio(4);    // チョット多めのアントニオ猪木
antonio(100);  // かなり多めのアントニオ猪木

このように、()に変数名(宣言しなくて良い、仮の変数のような感じ)を入れることで、その関数の中で使うことが出来ます。これを「引数」といいます。

引数は一つだけじゃなく、複数とることが出来ます。

function antonio(count, shout) {
  for(var i = 1; i <= count; i++) {
    console.log(i + "、");
  }
  console.log(shout);
} 

antonio(3, "ダー!"); // 通常のアントニオ猪木
antonio(1, "だ~!!!!");  // 突然のアントニオ猪木
antonio(10, "KO!!");  // プロレスで勝負が決まった瞬間

値を返してみる

テレビにアントニオ猪木が出たら、

「1っ、2っ、3っ、ダー!」
「ありがとうございます!今日も決まりましたね猪木さん」

と言うように進行していきます。これをプログラムで書くと

function antonio(count, shout) {
  for(var i = 1; i <= count; i++) {
    console.log(i + "、");
  }
  console.log(shout);
} 

antonio(3, "ダー!");
console.log("ありがとうございます!今日も決まりましたね猪木さん。");

となるわけですが、忙しい放送業界、antonio(3, "ダー!")ではなく、antonio("ダー!", 3)のように、間違った引数をとることだってあるわけです。こうなると…、

「3」
「ありがとうございます!今日も決まりましたね猪木さん。」

放送事故になってしまいます。
ここで、司会が上手く切り返すためには、antonio関数が成功したかを確認する必要があります。そのために、antonio関数に返り値というものを持たせてみましょう。

function antonio(count, shout) {
  if((typeof count !== "number"  || count <= 0) || (typeof shout !== "string" || shout === "")) {
    // countの型がnumberでない、もしくはcountが0以下だったらカウントできない
    // shoutの型がstringでない、もしくはshoutが何もない状態だったら叫ばない
    // countとshoutのどちらか一つでもだめだったら放送事故
    return false;
  }
  for(var i = 1; i <= count; i++) {
    console.log(i + "、");
  }
  console.log(shout);
  return true; // 成功
} 

以上のようにreturn というキーワードを用いると、

var check1 = antonio(3, "ダー!");
console.log(check1); // true

var check2 = antonio(-1, "ダー!");
console.log(check2); // false

var check3 = antonio("ダー!", 3);
console.log(check3); // false

というように、antonio関数自体が true, falseに置き換わってくれます。
このreturn で返す値を「返り値」と言います。

今回、true, false を使いましたが、当然、文字列や数値など、他のタイプの値も返すことが出来ます。

さて、コレをつかえば、MCもif文を使って次のように臨機応変に対応できます。

function antonio(count, shout) {
  if((typeof count !== "number"  || count <= 0) || (typeof shout !== "string" || shout === "")) {
    return false;
  }
  for(var i = 1; i <= count; i++) {
    console.log(i + "、");
  }
  console.log(shout);
  return true;
} 

var check1 = antonio(3, "ダー!");
if(check1) {
  // 成功
  console.log("ありがとうございます!今日も決まりましたね猪木さん。");
} else {
  // 失敗
  console.log("さて、猪木さんにご登場頂いたわけですが・・・")
}

var check2 = antonio("ダー!", 3);
if(check2) {
  // 成功
  console.log("ありがとうございます!今日も決まりましたね猪木さん。");
} else {
  // 失敗
  console.log("さて、猪木さんにご登場頂いたわけですが・・・")
}

めでたしめでたし

console.log("ありがとーっ!")