GASでプログラミング入門 Vol.9

# GASでプログラミング入門 Vol.9

社内サークルにてエンジニアから非エンジニアの方向けにプログラミングを教えるという活動を行っています。<br>
今回はその教材第9弾です。
前回の記事は[こちら](https://qiita.com/YoshinagaYuta/items/c3a547ce6b49a8ae826f)

## 前回の演習問題の解答例

(1). 下記のような実行結果になるように連想配列を作成して下さい。
連想配列のキー名などは任意の名称をつけて下さい。

実行結果

```
ユーザーID：U0001
ユーザー名：鈴木一郎
メールアドレス：suzuki@example.com
電話番号：xxx-xxxx-xxxx
```

解答例コード

```js
function myFunction(){
    let user = {id: "U0001", name: "鈴木一郎", mailaddress: "suzuki@example.com", tel: "xxx-xxxx-xxxx"};
    console.log("ユーザーID：" + user.id);
    console.log("ユーザー名：" + user.name);
    console.log("メールアドレス：" + user.mailaddress);
    console.log("電話番号：" + user.tel);
}
```

(2). 下記のような実行結果になるようにプログラムを作成して下さい。
連想配列は下記のコードを使用して下さい。

```js
let persons = [
    {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
    {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
    {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
    {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
    {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
    {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"}
];
```

実行結果

```
年齢が27才以上の人は下記の人たちです。
鈴木一郎さん、趣味はドライブ
田中次郎さん、趣味はスノーボード
杉本沙耶香さん、趣味はアロマセラピー
------------------------------
年齢が26才以下の人は下記の人たちです。
山田太郎さん、誕生日は2000/08/30
佐藤花子さん、誕生日は1996/05/10
市井由美子さん、誕生日は1994/03/03
```


解答例コード

```js
function myFunction(){
    let persons = [
        {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
        {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
        {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
        {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
        {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
        {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"}
    ];
    console.log("年齢が27才以上の人は下記の人たちです。");
    for(person of persons){
        if(27 <= person.age){
            console.log(person.name + "さん、趣味は" + person.hobby);
        }
    }
    console.log("------------------------------");
    console.log("年齢が26才以下の人は下記の人たちです。");
    for(person of persons){
        if(person.age <= 26){
            console.log(person.name + "さん、誕生日は" + person.birthday);
        }
    }
}
```

なお解答例はあくまで例なので、必ずしも上記のようになっていないといけないわけではありません。

## nullについて

`null`というのはオブジェクトの値が存在しないことを表す値です。
連想配列のような`オブジェクト`の初期値などで用いることが多く、目的のオブジェクトが見つからなかったなどの状態を指す意味で用いられることがあります。
例えば連想配列の中から任意のデータを検索する際に、見つかった場合は見つかった連想配列のデータを、見つからない場合には`null`をというようにすれば、データが見つかったか見つからなかったかをプログラム内で判定することが可能になります。

```js
let persons = [
    {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
    {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
    {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
    {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
    {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
    {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"}
];
let search = null;
for(person of persons){
    if("田中次郎" == person.name){
        search = person;
    }
}
if(search == null){
    console.log("該当するユーザーが見つかりませんでした。");
} else {
    console.log("ユーザー名：" + search.name);
    console.log("年齢：" + search.age);
    console.log("誕生日：" + search.birthday);
    console.log("趣味：" + search.hobby);
}
```

## break文

for文のような繰り返し処理を行っている最中に、途中で繰り返し処理を中断したいことがあります。
そのような場合に、`break`というキーワードを使うと繰り返し処理を中断することが可能です。

```js
let persons = [
    {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
    {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
    {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
    {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
    {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
    {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"}
];
let search = null;
for(person of persons){
    console.log(person.name);
    if("田中次郎" == person.name){
        search = person;
        break;
    }
}
if(search == null){
    console.log("該当するユーザーが見つかりませんでした。");
} else {
    console.log("ユーザー名：" + search.name);
    console.log("年齢：" + search.age);
    console.log("誕生日：" + search.birthday);
    console.log("趣味：" + search.hobby);
}
```

上記コードを実行すると下記のようになります。

```
鈴木一郎
山田太郎
佐藤花子
田中次郎
ユーザー名：田中次郎
年齢：27
誕生日：1993/07/20
趣味：スノーボード
```

仮にbreakを書かなかった場合は下記になります。

```
鈴木一郎
山田太郎
佐藤花子
田中次郎
杉本沙耶香
市井由美子
ユーザー名：田中次郎
年齢：27
誕生日：1993/07/20
趣味：スノーボード
```

コード内では`田中次郎`を検索しているので、見つかった以降の`杉本沙耶香`、`市井由美子`は処理する必要がないので、`break`を書かなかった時に比べると繰り返し処理が2回余計に実行されてしまっています。
このように任意のデータを検索するような処理で、見つかった場合にそれ以降の処理を行う必要がないような時には`break`を使用して中断することで、無駄な処理を行わずにすみます。

## 論理演算子

論理演算子とはif文などの条件式に記述する際に、複数の条件式を全て満たす、いずれか満たす、否定するなどの際に使用します。
※[論理演算](https://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97)についてはリンク先を参照してください。

### 論理積（and）

複数の条件を全て満たす時に使用します。
記述は`条件式1 && 条件式2`と記載します。
これは条件式1と条件式2をどちらも満たす時を表現しています。

```js
for(person of persons){
    console.log(person.name);
    if("田中次郎" == person.name && 27 == person.age){
        // 名前が田中次郎でかつ年齢が27歳の時
        search = person;
        break;
    }
}
```

先ほどのコード例で言うと、例えば田中次郎さんと同姓同名の方がリスト内にいた場合に、どちらの田中次郎さんかを特定する為に、年齢も条件式に加えるなどを行いたい時に用います。

### 論理和（or）

複数の条件をいずれかを満たす時に使用します。
記述は`条件式1 || 条件式2`と記載します。
これは条件式1と条件式2をいずれかを満たす時を表現しています。

```js
for(person of persons){
    console.log(person.name);
    if("田中次郎" == person.name || 27 == person.age){
        // 名前が田中次郎、もしくは年齢が27歳の時
        search = person;
    }
}
```

先ほどのコード例で言うと、例えば田中次郎さんと同い年の人も条件に引っ掛けたい時などに使用します。

### 否定（not）

条件を満たさない時に使用します。
記述は`!条件式`と記載します。
これは条件式を満たさない時を表現しています。

```js
for(person of persons){
    console.log(person.name);
    if(!"田中次郎" == person.name){
        // 名前が田中次郎ではない時
        search = person;
    }
}
```

先ほどのコード例で言うと、例えば田中次郎さん以外の人を条件に引っ掛けたい時などに使用します。

## 演習問題

(1). 想定していた実行結果になるようにプログラムを修正して下さい。

```js
function myFunction(){
    let persons = [
        {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
        {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
        {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
        {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
        {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
        {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"},
        {name: "鈴木一郎", age: 20, birthday: "2000/04/19", hobby: "ボルダリング"}
    ];
    let search = null;
    for(person of persons){
        if("鈴木一郎" == person.name){
            search = person;
            break;
        }
    }
    if(search == null){
        console.log("該当するユーザーが見つかりませんでした。");
    } else {
        console.log("ユーザー名：" + search.name);
        console.log("年齢：" + search.age);
        console.log("誕生日：" + search.birthday);
        console.log("趣味：" + search.hobby);
    }
}
```

想定していた実行結果

```
ユーザー名：鈴木一郎
年齢：20
誕生日：2000/04/19
趣味：ボルダリング
```

実際の実行結果

```
ユーザー名：鈴木一郎
年齢：30
誕生日：1990/04/02
趣味：ドライブ
```

(2). 下記のような実行結果になるようにプログラムを作成して下さい。
連想配列は下記のコードを使用して下さい。

```js
let persons = [
    {name: "鈴木一郎", age: 30, birthday: "1990/04/02", hobby: "ドライブ"},
    {name: "山田太郎", age: 20, birthday: "2000/08/30", hobby: "登山"},
    {name: "佐藤花子", age: 24, birthday: "1996/05/10", hobby: "ショッピング"},
    {name: "田中次郎", age: 27, birthday: "1993/07/20", hobby: "スノーボード"},
    {name: "杉本沙耶香", age: 32, birthday: "1988/02/23", hobby: "アロマセラピー"},
    {name: "市井由美子", age: 26, birthday: "1994/03/03", hobby: "漫画"},
    {name: "鈴木一郎", age: 20, birthday: "2000/04/19", hobby: "ボルダリング"}
];
```

実行結果

```
personsに含まれる人数は7人です。
personsの平均年齢は25.571428571428573才です。
```

## まとめ

いかがでしたでしょうか。
今回はnull、break文、論理演算子について紹介しました。
今回紹介した例ではリストデータの中から任意のデータを検索するなどの処理で使用されることが多いので、どのような目的でどんな風に使用されていたかをしっかりと理解しておくと良いと思います。
それではまた次の記事でお会いしましょう。