この記事は「Elixir Advent Calendar 2023」17日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。
このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習 というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ!というノリで書いてみたいと思います。
なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第17回目です。
それでは、いくぞ!
貴様らには文字列操作をしてもらおう
defmodule TNT do
def create_c4({"RDX", rdx},{"ポリイソブチレン", polyisobutylene},{"モーターオイル", motorOil},{"セバシン酸ジオクチル", dioctylSebacate},{"ガソリン", gasoline}) do
[
rdx,
polyisobutylene,
motorOil,
dioctylSebacate,
gasoline,
]
end
end
貴様ら、前回は引数でパターンマッチして、取得した数値は文字列のままだ、これをきちんと利用できるように文字で受け取ったデータを重量を表す部品を取り除き数値に変換する手順を考えて作成していくアイデアを考えろ、いいな!
もちろん、どんな便利な道具があるかリファレンスを色々と物色しながらでいいぞ!
- はい!
- できました!
よーし、貴様らが考えたアイデアを見せてみろ。
- はい、まずは、文字列を分解して、最後の文字を一つ削除して、また文字に戻して最後に数字へ変換しました。
"45.5g" |> String.codepoints() |> List.delete_at(-1) |> List.to_string() |> String.to_float()
- 次に
"25ml"
と最後の文字1つだけでなく2つ削除することが必要なものもあるので、以下のようにしました。
"25ml" |> String.codepoints() |> List.delete_at(-1) |> List.delete_at(-1) |> List.to_string() |> String.to_integer()
- これで、
g
とml
の作業を分ける必要があるので次に以下のようにして分割しました。
["45.5g", "10.5g", "0.8g", "2.65g", "25ml"]
|> Enum.split(-1)
{["45.5g", "10.5g", "0.8g", "2.65g"], ["25ml"]}
- これらをこのように組み合わせてこうなりました!
defmodule TNT do
def create_c4({"RDX", rdx},{"ポリイソブチレン", polyisobutylene},{"モーターオイル", motorOil},{"セバシン酸ジオクチル", dioctylSebacate},{"ガソリン", gasoline}) do
{ g , ml } =
[ rdx, polyisobutylene, motorOil, dioctylSebacate, gasoline ]
|> Enum.split(-1)
g_results =
Enum.map(g, &(String.codepoints(&1) |> List.delete_at(-1) |> List.to_string() |> String.to_float()))
ml_result = "25ml" |> String.codepoints() |> List.delete_at(-1) |> List.delete_at(-1) |> List.to_string() |> String.to_integer()
g_results ++ [ml_result]
end
end
- 実行すると以下のようになります!
TNT.create_c4({"RDX", "45.5g"}, {"ポリイソブチレン", "10.5g"}, {"モーターオイル", "0.8g"}, {"セバシン酸ジオクチル", "2.65g"},{"ガソリン", "25ml"})
[45.5, 10.5, 0.8, 2.65, 25]
よーし、初めてにしては上出来だ!
まずは、貴様らは実行できる所まで、やれれば良い! ちまたでは、やれ綺麗なコードがとか、冗長性がとか、コードの書き方でマウントする輩が多いが、そんな声には惑わされるな!
汚くても、貴様らが今日書いたクソみたいなコードでも実行できればまずは十分だ!
いいか、貴様らはまずは任務の遂行を優先しろ! 綺麗なコードを書く練習は怠るな! ただし、それは任務達成してからじっくりやれば良い!あとは自己練習だ!
毎日訓練中に2時間走ってるが、それに加えて優秀な奴は早起きして毎朝鍛錬を自らしてるだろう。それと同じだ。
貴様らが、稼業外も自己鍛錬するのは、貴様らはプロの戦闘集団だからだろう。プロとアマチュアの違いは、考え方だ。
自分の仕事を全うし完遂するために自分で日々鍛錬するのはプロとして当たり前の心構えだ。
わかったな!
- はい、
よーし、わかれば良い、では貴様らが書いたクソコードを次回以降で少しづつ改善していこう。
なぜ、このクソコードが生まれたか、それは知識不足だ。貴様らにはまだまだ教えることが腐るほどある。
しかし、教わるばかりだと追いつかない。
貴様らも、自己学習に励め!
では、今日はここまで、それでは次回 Part18でまた会おう!