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

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

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

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

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

それでは、いくぞ！

## 関数の調べ方「公式リファレンス」を読もう
前回、貴様らに便利な道具の使い方を１つ教えてやったのは覚えているな？
タプルをリストに変換するという便利な道具だ、この道具には、いろいろな種類の道具がある。
この道具のことを「```関数```」という。

この関数を色々使うことで便利に渡す方法が作れるのだ。
そこで、貴様らにはまず関数の調べ方を教えてやろう。

まずは、下記のリンクが公式のドキュメントの場所だ。
[https://hexdocs.pm/elixir/Kernel.html](https://hexdocs.pm/elixir/Kernel.html)

![スクリーンショット 2023-12-10 23.44.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72962/823430ea-5c5d-68ec-18c5-7a97a2e43975.png)

ここで、左上に検索フォームがあり、その下には```Elixir```と記載があり、その下にはさらに```v.1.15.7```とバージョン番号が書かれている。自分の利用しているElixirのバージョンに合わせろ、このバージョンが違うのは貴様の銃が20式なのか89式、または64式かの違いがある。

仮に貴様が使っている銃が20式にも関わらず、64式を調べていたとしよう。その違いは弾薬の違いにより動かないのと同じで、バージョンが違うものを見ているのは致命傷だ！

バージョンの調べ方がわからないだと！　いいだろう。特別に教えてやろう。Livebookでは```System.version()```という関数を使う事で教えてくれる

```elixir
System.version()
1.15.7
```

![スクリーンショット 2023-12-11 13.02.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72962/f5340dac-e833-04b9-4c44-871717a631ec.png)


ここで、たとえば前回利用した```Tuple.to_list()```について知りたいとしよう。
```Tuple```を扱っているので```Tuple```で検索をしろ！

右上の検索フォームで```Tuple```で調べると、一番上に```Tuple (module)```が表示されるのでそれをクリックしろ。
これで、貴様はTupleに関する便利な道具（関数）についての情報がまとまったページを見ることができるわけだ。

今回は、TupleをListに変更したいから、```Tuple.to_list()```と、とてもわかりやすい名前で書かれているものを見るんだ。

以下のように書かれてるのが見えたか？

```elixir
to_list(tuple)
@spec to_list(tuple()) :: list()
Converts a tuple to a list.

Returns a new list with all the tuple elements.

Inlined by the compiler.

Examples
tuple = {:foo, :bar, :baz}
Tuple.to_list(tuple)
[:foo, :bar, :baz]
```

よし、読み方を教えよう。

```to_list(tuple)```の```to_list```の部分は道具の名前だ、これを```関数名```と呼ぶ。
```to_list(tuple)```の```()```の中にある```tuple```とは道具を使う時に入れる値だ。今回は```tuple```と書かれているから```{}```この形が最低でも必要なわけだ。

もし、この```()```カッコの中に何も無い場合は、何も入れずに使える関数ということだ。

もし、この```()```の中に、```( tuple \\ {})```のように```\\```という記号があれば、それは```()```の中に何も入れなかった場合、何もしなくても```\\```この記号の右隣りにある値がデフォルトで入るという意味だ。

```{tuple \\{})```この例だと、tupleを引数に入れなかった場合はデフォルトで値の無い```{}```tupleがデフォルトで入ってくるという意味だ。

わかったか？

```@spec to_list(tuple()) :: list()``` これは、tupleを入れたらlistが帰ってくることを表してる
例えば、```@spec sum(tuple()) :: number()```この場合はtupleを入れたら数値が帰ってくることを意味してる。
詳しくは色々あるが、今の貴様らにはまだ早い、今のところは、上記の意味がわかれば充分だ！下手な詮索はよせ、貴様らが情報省隊なら話しは別だ！　しかし、情報ではない貴様らには詮索は禁物だ！

この部分は単なる説明だ、この関数が何をしてくれるものか説明が英語でされているだけだ。

```
Converts a tuple to a list.

Returns a new list with all the tuple elements.

Inlined by the compiler.
```
何？　英語は読めないだと？

貴様、まだそんな甘えたことを言っているのか！今の戦争は情報戦だ、いや、第２時世界大戦の時ですでに情報戦！
日本は情報戦において負けたのをもう忘れたのか！

貴様らがエンジニアを覚えるのはもはや、国防上に必要な知識だ、もはや武器だけで戦争をしていると思うな！
英語だろうが、プログラミング言語だろうが、我々はもはや多言語を制する必要があることを忘れるな！

そして、最後に、使い方の例が載っている。ここまで親切に書かれている。ありがたく思え！

```elixir
tuple = {:foo, :bar, :baz}
Tuple.to_list(tuple)
[:foo, :bar, :baz]
```

何？ 意味がわからないだと！
貴様らはどこまで腑抜けているのだ、わからないと言う前になぜ、試さない！
これを動かしたところで、失敗しても誰も死ぬわけじゃない、こんな生ぬるい訓練に怖気付いたのか？

そんな無駄なことに悩む前にさっさとコードを動かして試してみろ！わかったな。

* はい！

よーし、それでは 次回、このリストを使うことで便利にする関数を読んで、いよいよ動かすぞ。今日はここまで、それでは次回 Part12でまた会おう！