【学習記録】『スラスラ読める　JavaScriptふりがなプログラミング』読書感想　 ４章編 （後半）　〜N予備校の復習を添えて〜

【学習記録】『スラスラ読める　JavaScriptふりがなプログラミング』読書感想　 ４章編（前半）(https://qiita.com/Molly95554907/items/fbadbec14c4b02c4ee3a ) の続き

<h5>・戻り値を返す関数</h5>
つまり、ただ処理を実行したり、引数を表示したりするのではなく、何か計算をしてその答えを返す関数。
戻り値＝関数の答え

```js
let 関数名 = () => {
//関数内で実行する文
return 結果の値;
};
```
↓
関数名();
を実行すると、　

結果の値　

が出力される。

例）

```js
let square = (number) =>{
return number * number;
};
console.log(square( 3 ));
```
↓
9が出力される（戻り値）


<h5>・オブジェクトを用いて複数のデータを一つの変数にまとめる</h5>
重要項目。つまるところオブジェクトって何なんだろ………

オブジェクトを、複数のデータを記録する入れ物として使う。

変数 = { プロパティ1 : 値a, プロパティ2 : 値b }

オブジェクトからプロパティを取り出す際は、
「変数.プロパティ1」と書くと、値a　が取り出せる。
変数['プロパティ1']と書いても、値a　が取り出せる。

例）

```js

let myfavoritebooks = { title:'１９８４', author: 'George Orwell', publicationYear: 1949, pages: 328}; 

console.log( myfavoritebooks.title );　　　//１９８４と出力（値が出る）
console.log( myfavoritebooks.pages );　　　//328と出力（値が出る）
```

※オブジェクトを表のタイトル、プロパティを表の項目、値を表の中身と思うと理解しやすい！！


<h5>・配列の中にオブジェクトを入れる</h5>
先ほどのオブジェクトは、
「好きな本」オブジェクトの中に{「タイトル」プロパティ、「著者」プロパティ、「出版年」プロパティ、「ページ数」プロパティ}が入っていた。

→好きな本を複数「好きな本」オブジェクトに入れるには…
オブジェクトを入れた配列を作る！

```js

let myfavoritebooks = [
{ title:'１９８４', author: 'George Orwell', publicationYear: 1949, pages: 328},
{ title:'コンビニ人間', author: '村田沙耶香', publicationYear: 2016, pages: 160}
];

console.log( myfovoritebooks[0].author ) 　//George Orwell　が出力
console.log( myfovoritebooks[1].title )   //コンビニ人間　が出力
```


<h5>【N予備校　三章「集計処理を行うプログラム」】</h5>
<img width="670" alt="スクリーンショット 2020-03-24 0.35.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595580/bd93013d-4046-6c21-3fdf-26ef7c8f9370.png">

ここでは、４つのプロパティ（集計年,都道府県名,10〜14歳の人口,15〜19歳の人口）を持つCSVのデータストリングを「,」で区切り、
columnsという変数の箱の中に、配列としてデータを格納していく。

CSVの最初のプロパティの値（columns[0])を整数化し、変数yearに代入する。
CSVの二つ目のプロパティの値(columns[1])を変数prefectureに代入する。
CSVの四つ目のプロパティの値(column[3])を整数化し、変数popuに代入する。


<h5>・関数を組み合わせる</h5>

「関数定義」、「データ」、「関数呼び出し」を組み合わせてプログラムを作る。
一つのファイルに書くとプログラムが長くなるので、複数のファイルに分割すると良い。

例）
『スラスラ読める　JavaScriptふりがなプログラミング』P149のコードを利用

```js

関数定義

//メールを作る関数
let createMail = (recv, bill) = >{
let mag = `${recv}様
PT企画の斎藤です。
今月の請求額は${bil}円です。`
console.log(msg)
};

↑
引数を二つ持つ関数

//手数料を追加する関数
let addCharge = (bill) => {
return bill * 1.07;
};


↑
返り値を持つ関数

<h6>データを貼り付ける</h6>
//送付先データ
let data = [
{name:'山本', bill:40000, crg:true } ,
{name:'吉田', bill:25000, crg:false }
];

↑
配列の中にオブジェクトを入れる。オブジェクトの中のプロパティは、本文に貼り付けたい順に入れている。

//メール作成実行
for(let rec of data){
let bill = rec['bill']
if(rec(['crg']){
bill = addCharge(bill);
}
createMail(rec['name'],bill);
}

↑
data配列の中のオブジェクトをひとつづつ、変数recに入れていく。
変数recの中のbillプロパティを持った値を、変数billとする。
もし変数recの中のcrgプロパティーを持った値がtrueなら、
変数billに、関数addCharge(bill)の戻り値を代入する。
createMail関数を実行する。引数には変数recの中のnameプロパティを持った値と、変数billをとる。
```

<h5>疑問点</h5>
・疑問①
javaScriptは関数が上から下に実行される性質を持つんだよね？
なのに、プログラムの最初に登場するbillは、
プログラムの最後にlet billで定義されるってどういうことなんだろう。

・疑問②
関数内で作った変数は「ローカル変数」
関数外では呼び出せないんだよね？
なのに。for(let rec of data){}
の繰り返し文の中で作ったbill変数が、プログラムの最初の
let createMail = (recv, bill) =>{}
で呼び出されているのは何故だろう。

<h5>・関数の呼び出し</h5>

作った関数は、

module.export = {
関数名,
};

を使うと、同じフォルダ（ディレクトリ）の別ファイルからもこの関数が参照できるようになる。

<h5>【N予備校では、三章「秘密の掲示板作り」などで登場】</h5>

<img width="315" alt="スクリーンショット 2020-03-22 12.12.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595580/9f697e73-705e-1a31-1d04-c6542adb26e4.png">