この記事は「Elixir Advent Calendar 2023」18日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。
このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習 というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ!というノリで書いてみたいと思います。
なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第18回目です。
それでは、いくぞ!
貴様らはまず ifによる判定処理 をマスターしろ
前回、貴様らが作ったものを改良していこう。これはアイデア次第ではどのようになるが、貴様らの書いた読みにくいこのコードをさらに今回から何回かに分けていくつかのバリエーションを見せてやろう。
前回書いたコードは覚えてるか?
何覚えてないだと、よーし、今から思い出させてやろう!貴様ら前回書いたコードを提示してやるから文字数分腕立てだ!
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
よーし、思い出したようだな。そして、それを踏まえてさらに、いくつかの書き方を見せてやろう。まずは、以下の場合だ。
defmodule TNT do
def create_c4({"RDX", rdx}, {"ポリイソブチレン", polyisobutylene}, {"モーターオイル", motorOil}, {"セバシン酸ジオクチル", dioctylSebacate}, {"ガソリン", gasoline}) do
materials = [rdx, polyisobutylene, motorOil, dioctylSebacate, gasoline]
Enum.map(materials, fn material ->
# 単位を取り除く
numeric_part = material
|> String.trim_trailing("g")
|> String.trim_trailing("ml")
# 小数点の有無に基づいて数値に変換
if String.contains?(numeric_part, ".") do
String.to_float(numeric_part)
else
String.to_integer(numeric_part)
end
end)
end
end
ここで、貴様らには初めて目にするものがあるな、そう if
, else
だ 貴様らが前回書いたクソコードは貴様らに足りない知識が多いということだ。
そこで、注目!今からElixirの判定処理、ifとelseについて基本を叩き込む。耳をダンボにしてよく聞け、これは貴様らのプログラミング戦場で生き残るための必須知識だ!
ifとは何か?
Elixirにおけるifは条件判定を行う。これは「もし条件が真(true)なら、このコードを実行しろ!」という命令だ。たとえば
if 条件 do
# 条件が真の場合に実行されるコード
end
ここで重要なのは、条件が真のときだけ指定されたコードが実行されるということだ。貴様らの頭に叩き込め!
elseとは何か?
では、条件が偽(false)の場合はどうするか?ここでelseが登場する。elseは「もし条件が偽なら、こっちのコードを実行しろ!」という命令だ。
if 条件 do
# 条件が真の場合に実行されるコード
else
# 条件が偽の場合に実行されるコード
end
注目! ifの注意点を伝達する
Elixirでは、if文は必ず値を返す。条件が真ならifブロックの値を、偽ならelseブロック(あるいはデフォルトでnil)の値を返す。だが、注意せよ!Elixirでは偽と評価されるのはfalseとnilだけだ。それ以外はすべて真として扱われる!
さあ、これで貴様らもifとelseの基本はマスターしたはずだ。だが油断するな!プログラミングは常に変化し、新しい挑戦が待ち受けている。常に学び、練習し続けるのだ。
それでは、今日はここまで それでは次回 Part19でまた会おう!