自衛官からエンジニアへ Elixirから始める Web開発 Part８

この記事は「Elixir Advent Calendar 2023」8日目の記事です
東京にいるけどfukuokaexのYOSUKEです。

普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。

このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習　というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ！というノリで書いてみたいと思います。

なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第8回目です。

それでは、いくぞ！

## タプルにパターンマッチで銃を渡す
いいか、貴様ら！
前回、20式の銃について諸元を入れたな、我々が知るべき銃は20式だけでは当然ない！
というわけで、これから64式、89式もデータに起こして管理しよう。

### 20式
```elixir
%{ 
   "名称" => "20式5.56mm小銃" ,
   "種類" => "小銃" ,
   "製造国" =>  "日本" ,
   "口径" =>	"5.56 mm" ,
   "銃身長" => "330 mm" ,
   "使用弾薬" =>	"89式5.56mm普通弾" , 
   "装弾数" => "30発" ,
   "作動方式" => "ガス圧作動方式" ,
   "全長" =>	"851 mm (銃床最小 779 mm)" ,
   "重量" => "3.5 kg" ,
   "発射速度" =>	"650 – 850発/分" ,
   "有効射程" =>	"500 m以上"
}
```

### 89式
```elixir
%{ 
   "名称" => "89式5.56mm小銃" ,
   "種類" => "小銃" ,
   "製造国" =>  "日本" ,
   "口径" =>	"5.56 mm" ,
   "銃身長" => "420 mm" ,
   "使用弾薬" =>	"89式5.56mm普通弾" , 
   "装弾数" => "20発/30発" ,
   "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ロータリーボルト式" ,
   "全長" =>	"916 mm （固定銃床式）" ,
   "重量" => "3.5 kg" ,
   "発射速度" =>	"650 – 850発/分" ,
   "有効射程" =>	"500 m以上"
}
```

### 64式
```elixir
%{ 
   "名称" => "64式7.62mm小銃" ,
   "種類" => "軍用小銃" ,
   "製造国" =>  "日本" ,
   "口径" =>	"7.62 mm" ,
   "銃身長" => "450 mm" ,
   "使用弾薬" =>	"7.62x51mm NATO弾" , 
   "装弾数" => "20発" ,
   "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ティルトボルト式" ,
   "全長" =>	"990 mm （固定銃床式）" ,
   "重量" => "4.3 kg" ,
   "発射速度" =>	"500発/分" ,
   "有効射程" =>	"400 m以上"
}
```

これら３つの銃をそれぞれ、管理する為にタプルに格納してみよう。

```elixir

{ 
    %{ 
       "名称" => "20式5.56mm小銃" ,
       "種類" => "小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"5.56 mm" ,
       "銃身長" => "330 mm" ,
       "使用弾薬" =>	"89式5.56mm普通弾" , 
       "装弾数" => "30発" ,
       "作動方式" => "ガス圧作動方式" ,
       "全長" =>	"851 mm (銃床最小 779 mm)" ,
       "重量" => "3.5 kg" ,
       "発射速度" =>	"650 – 850発/分" ,
       "有効射程" =>	"500 m以上"
    },
    %{ 
       "名称" => "89式5.56mm小銃" ,
       "種類" => "小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"5.56 mm" ,
       "銃身長" => "420 mm" ,
       "使用弾薬" =>	"89式5.56mm普通弾" , 
       "装弾数" => "20発/30発" ,
       "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ロータリーボルト式" ,
       "全長" =>	"916 mm （固定銃床式）" ,
       "重量" => "3.5 kg" ,
       "発射速度" =>	"650 – 850発/分" ,
       "有効射程" =>	"500 m以上"
    },
    %{ 
       "名称" => "64式7.62mm小銃" ,
       "種類" => "軍用小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"7.62 mm" ,
       "銃身長" => "450 mm" ,
       "使用弾薬" =>	"7.62x51mm NATO弾" , 
       "装弾数" => "20発" ,
       "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ティルトボルト式" ,
       "全長" =>	"990 mm （固定銃床式）" ,
       "重量" => "4.3 kg" ,
       "発射速度" =>	"500発/分" ,
       "有効射程" =>	"400 m以上"
    }
}
```

よし、これらの銃を貴様らにそれぞれ渡してやろう。

田中、鈴木、高橋　前へ！
番号！　
* 「イチ、ニィ、サン」

よーし、今から貴様らにパターンマッチで小銃を渡すから大事に扱え！
いいなわかったな！

```elixir
{ tanaka, suzuki, takahashi } = 
{ 
    %{ 
       "名称" => "20式5.56mm小銃" ,
       "種類" => "小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"5.56 mm" ,
       "銃身長" => "330 mm" ,
       "使用弾薬" =>	"89式5.56mm普通弾" , 
       "装弾数" => "30発" ,
       "作動方式" => "ガス圧作動方式" ,
       "全長" =>	"851 mm (銃床最小 779 mm)" ,
       "重量" => "3.5 kg" ,
       "発射速度" =>	"650 – 850発/分" ,
       "有効射程" =>	"500 m以上"
    },
    %{ 
       "名称" => "89式5.56mm小銃" ,
       "種類" => "小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"5.56 mm" ,
       "銃身長" => "420 mm" ,
       "使用弾薬" =>	"89式5.56mm普通弾" , 
       "装弾数" => "20発/30発" ,
       "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ロータリーボルト式" ,
       "全長" =>	"916 mm （固定銃床式）" ,
       "重量" => "3.5 kg" ,
       "発射速度" =>	"650 – 850発/分" ,
       "有効射程" =>	"500 m以上"
    },
    %{ 
       "名称" => "64式7.62mm小銃" ,
       "種類" => "軍用小銃" ,
       "製造国" =>  "日本" ,
       "口径" =>	"7.62 mm" ,
       "銃身長" => "450 mm" ,
       "使用弾薬" =>	"7.62x51mm NATO弾" , 
       "装弾数" => "20発" ,
       "作動方式" => "	ガス圧利用（ロングストロークガスピストン式）、ティルトボルト式" ,
       "全長" =>	"990 mm （固定銃床式）" ,
       "重量" => "4.3 kg" ,
       "発射速度" =>	"500発/分" ,
       "有効射程" =>	"400 m以上"
    }
}
```

よし、これでそれぞれ、に小銃が渡ったな！

田中、貴様の小銃は何だ？
* はい、
```elixir
tanaka["名称"]
"20式5.56mm小銃"
```
* 20式5.56mm小銃であります！

よーし、鈴木、貴様の小銃は何だ！
* はい
```elixir
 suzuki["名称"]
"89式5.56mm小銃"
```
* 89式5.56mm小銃であります！

よーし、いいだろう。高橋、貴様の小銃は何だ！
* はい
```elixir
takahashi["名称"]
"64式7.62mm小銃"
```
* 64式7.62mm小銃であります！

よし！ それでは次回はお前らの班員 10名全員に一気にそれぞれ、銃を受け渡す方法を伝授しよう！

今日はここまで、それでは次回 Part9でまた会おう！