10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2023

Day 18

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

Posted at

この記事は「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でまた会おう!

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?