この記事は「Elixir Advent Calendar 2023」15日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。
このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習 というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ!というノリで書いてみたいと思います。
なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第15回目です。
それでは、いくぞ!
関数の定義とC-4爆弾
よーし、貴様ら!前回までは関数を使うことを中心にやってきたな、そしてちょっとした仕事をするやり方も教えた。さらには、仕事を連携する方法も教えた。
今日は、とうとう、ちょっとした仕事ではなく、大掛かりな仕事を作る方法を教えてやろう!
何? 今まで作ってきた関数のような、ちょっとした関数とは何が違うのか?だと!
貴様、例えば、敵地潜入の際に鋼鉄の扉を開ける必要があった時、c-4爆弾を利用して、隙間に埋め込み信管をつけて、c4の量を計算して爆発が及ばない場所で爆破するという芸当がちょっとした関数でできると思うのか?
答えは否! きちんとした制御と工程を理解しなければ危険だろう!
そして、そのような任務を個人のスキルに任せていいのか?マニュアル化して誰もが利用できるように整備する必要があるだろう。それと同じだ!
よーし、では、c-4爆弾を誰でも作れるようにマニュアル化(関数)する方法を今からやるぞ! いいな、この訓練の失敗は死と隣り合わせだ、絶対に忘れてはならない!わかったな!
- はい
まず、c-4爆弾など爆弾を扱うためのまとめる場所を作ろう。爆薬庫のようなものだ。そして、その爆薬庫の名前をつける必要がある。この名前をつけることをモジュールを定義するという
今回は爆弾を扱うのでTNT
という名前にする。ちなみにモジュールは必ず大文字の半角英字で書き始めるルールがある。
では、モジュールの定義を書いてみよう。
defmodule TNT do
end
defmodule
で始まり、TNT
とモジュールの名前をつける。そして、do
からend
の範囲にこのモジュールで扱う仕事を作っていく。
次に、モジュールの中に今度はc4爆弾を作成する仕事をさせてみよう。c4爆弾の構成物質は大体、以下の構成だ。
{"RDX", "45.5g"}
{"ポリイソブチレン", "10.5g"}
{"モーターオイル", "0.8g"}
{"セバシン酸ジオクチル", "2.65g"}
{"ガソリン", "25ml"}
これらの素材が正しく、かつ正しい分量だった時にc4爆弾を生成する関数を作成していく。
これらの関数をどのように作っていくか、実は様々だ。どのように作るかは貴様らのアイデア次第で如何様にもなる!
ただ、いきなり高度なアイデアを披露しても貴様らはついて来れないだろう!
そこで、まずはチープなアイデアから入り、徐々に高度なアイデアにしていく。
まずは、関数の名前を決めよう。爆弾を扱うのだからわかりやすい名前にする必要がある。
今回はcreate_c4
という名前にしよう。
def create_c4() do
end
関数を作るには、def
というものを先につけ、次に create_c4
という関数の名前をつける。関数の名前は小文字始まりで作るところがモジュールとは違う所だ、次に()
は引数
を入れる入れ物として準備する。そして、do
からend
の範囲にこの関数で扱う仕事を作っていく。
モジュールと合わせるとこんな感じになる。
defmodule TNT do
def create_c4() do
end
end
よし、それでは、入り口を作って、材料を受け取り、{"RDX", "45.5g"}
、そのまま返す
defmodule TNT do
def create_c4(rdx) do
rdx
end
end
それでは作った関数を実際に使って見せてやろう。
よし、これでまずは土台ができた。これを仕上げて行くとしよう!
しかし、この先を始めると長くなるので、貴様らに眠くなりながらの爆弾作りは危険すぎる!
ということで、今日はここまで、それでは次回 Part16でまた会おう!