Open3

6章関数を作る

人形劇人形劇

#01関数の定義

c6_1_1.js
let manufOrder = () => {
    console.log(`忍者です。
本日、手裏剣3個製造をお願いします。`);
}


manufOrder();

組み込み関数 JavaScriptではじめから定義されていたもの いままで呼び出していたもの
アロー関数式 
(引数) => {
関数で行う処理
}

引数を括弧で囲い、アロー「=>」 アロー関数式を代入文の右辺に書くことで、
一連の処理を行う関数を変数に代入することができる。
一度書いた処理を再利用できるというメリットがある
製造業者に発注内容を送るプログラムを書いている。

c6_1_2.js
let manufOrder2 =(name) => {
  console.log(`${name}様
忍者です。
本日、手裏剣3個の製造をお願いします。`);
}


manufOrder2(`服部`);
manufOrder2(`河村`);

アローの前のカッコの中に引数を書くと、呼び出し元から引数を受け取ります。

c6_1_3.js
let manufOrder3 = (name2,order) => {
    console.log(`${name2}様
忍者です。
本日、${order}の製造をお願いします。`);
}


manufOrder3(`服部`,`手裏剣3個`);
manufOrder3(`河村`,`まきびし4個`);

引数が二つ以上の場合

c6_1_4.js
let getOrder = (shurikenNum,makibishiNum) => {
  let orderText = '';
  if (shurikenNum > 0) {
      orderText += `手裏剣${shurikenNum}`;
  }
  if (makibishiNum > 0) {
      orderText += `まきびし${makibishiNum}`;
  }
  return orderText;
}

let manufOrder4 = (name,order) => {
  console.log(`${name}様
忍者です。
本日、${order}の製造をお願いします。`);
}


manufOrder4('服部',getOrder(3,0));
manufOrder4('河村',getOrder(1,4));

return文 戻り値として返したい値や式を書く
関数から戻り値を返すようにしておくと、複数の関数を組み合わせて使うことができる

余談?
famctionw記法を使っても関数を定義できる
関数宣言
function 関数名(引数) {
関数で行う処理
}
関数式がある
let 変数名 = function引数) {
関数で行う処理
};

人形劇人形劇

#さまざまな引数02

6_2_1.js
let wokashi = (spring,summer,fall,winter) => {
    console.log(`春は${spring} 夏は${summer}
秋は${fall} 冬は${winter}`)
}

実引数と仮引数の数が一致していなくてもエラーにはならない

6_2_2.js
let wokashi2 =(spring,summer,fall,winter='つとめて') =>{
    console.log(`春は${spring} 夏は${summer}
秋は${fall} 冬は${winter}`);
}

値を指定がない引数はundefinedになる。 実引数が渡されなかった場合の仮引数の値

6_2_3
let introduceFriends = (...friends) => {
    for (friend of friends) {
        console.log(`${friend}は桃太郎の友達。`);
    }
}

introduceFriends();
introduceFriends('犬');
introduceFriends('犬','猿','キジ')

関数の定義に最後の引数の前に...を付けると、0個以上の引数が配列にまとめられ、その仮引数に渡されれる。(残余引数)
引数として書いたすべての値が配列にまとめられ、仮引数friendsに渡される

人形劇人形劇

#関数を引数として渡す03

c6_3_1.js
let words = ['beutiful','big','strong'];
let result = words.filter((word) => word.length > 6);

console.log(result);

関数というオブジェクトを返す式 代入文の右辺にアロー関数式を書く→関数を変数に入れる
関数というオブジェクトは他の値と同じように変数に格納したり、引数として関数を渡したりできる。
関数を引数として受け取るものがある。例filterメソッド(フィルター)
真偽値を返す関数を引数として受け取るメゾッド trueの要素だけ配列で返す

c6_3_2.js
let numbers = [1, 2, 3, 4, 5];
let squared = numbers.map(number => number ** 2);

console.log(squared);

mapメゾット もとの配列の要素に対して、受け取った関数を実行し、結果を新しい配列とする。

c6_3_3.js
let square = (number) => {
    return number ** 2;
}

let numbers2 = [1,2,3,4,5];
let squared2  = numbers2.map(square);

console.log(squared);

関数名をつけた関数を引数として渡す。オブジェクトとするときは()をつけない