闘魂Elixir ── イミュータブルの恩恵 〜ある記事を読んで改めて感じたすばらしさ可読性を上げ保守性を上げめぐりめぐって世界文化の進展に大きく寄与する〜

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>

<b><font color="red">$\huge{闘魂とは己に打ち克つこと。}$</font></b>
<b><font color="red">$\huge{そして闘いを通じて己の魂を磨いていく}$</font></b>
<b><font color="red">$\huge{ことだと思います}$</font></b>



# はじめに

[Elixir](https://elixir-lang.org/)の値はイミュータブルです。

「[死んでも破壊的操作をしない](https://qiita.com/kobori_akira/items/2782fc7c3672e478a1db)」という刺激的で、過激なプロレスつまりストロングスタイル、過激なセンチメンタリズムな記事を拝見しました。

https://qiita.com/kobori_akira/items/2782fc7c3672e478a1db

そうだよなあと感心しました。気をつけておかないと痛い目を見る。すみずみまで全部をみないとメソッドを安心して使えない。そんな気持ちになりました。
値がミュータブルだからプログラムを書く人が気をつけてコーディングしないといけないのです。

[Elixir](https://elixir-lang.org/)の値はイミュータブルです。書き換えたくても書き換えられません。上の記事で推奨されている書き方しか採用できないのです。
果たして、本当にそうか！？　を確かめてみたいとおもいます。

この記事はずっと書こう書こうと思いつつグズグズしていたらアドベントカレンダーの季節になりました。ちょうどいいネタなので書きます。


# What is [Elixir](https://elixir-lang.org/) ?

[Elixir](https://elixir-lang.org/)という素敵なプログラミング言語があってがですね。
その素敵具合は「[Elixir Saves Pinterest $2 Million a Year In Server Costs](https://paraxial.io/blog/elixir-savings)」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 **$2 Million/年の節約ですってよ！、奥さん。**

https://paraxial.io/blog/elixir-savings

# サンプルコード

元の記事で推奨されているPythonでのコード例です。

```python
class User:
    name: str

    def remove_half_space(self):
        """ 半角スペースを取り除いたあとのuserインスタンスを返却する """
        name = self.name.replace(" ", "")
        return User(name=name)

user = User(name="コボリ アキラ")

# 数10行の処理...

user_with_removed_half_space = user.remove_half_space()

# 数10行の処理...

print(user.name) # 当然userインスタンスの中身は変わらない
```

[Elixir](https://elixir-lang.org/)で同じようなことをしようとすると、オススメの書き方でしか書けないのです。
なぜなら[Elixir](https://elixir-lang.org/)は値がイミュータブルだからです。

```elixir
defmodule User do
  defstruct [:name]

  def remove_half_space(%User{name: name}) do
    new_name = name |> String.replace(" ", "")
    %User{name: new_name}
  end
end

user = %User{name: "awesome yamauchi"}

# 数10行の処理...

user_with_removed_half_space = User.remove_half_space(user)

# 数10行の処理...

IO.puts user.name # => もちろん「awesome yamauchi」が出力されます！
```

値がイミュータブルであるということは、知らず知らずのうちに大きな恩恵を受けていることを理解しました。
[Elixir](https://elixir-lang.org/)の場合、再束縛(=で左辺の変数に右辺の値をマッチさせる）ことは可能なのでそこだけ気をつけておけば、すみずみまで見なくても安心して値を理解できます。
これは可読性をあげ、保守性をあげ、めぐりめぐって世界文化の進展に大きく寄与することでしょう。


# さいごに

[Elixir](https://elixir-lang.org/)の値はイミュータブルです。
知らず知らずのうちに使っているというか、そうなっているわけですが、これは意識にすらのぼっていないところで多くの恩恵を受けていることに改めて気づきました。
そのことに気づかせてくれた「[死んでも破壊的操作をしない](https://qiita.com/kobori_akira/items/2782fc7c3672e478a1db)」という刺激的で、過激なプロレスつまりストロングスタイル、過激なセンチメンタリズムな記事にこの場をお借りして御礼を申し上げます。

人類は不老不死の霊薬を意味する素敵なプログラミング言語[Elixir](https://elixir-lang.org/)を手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って本当の世界平和を必ず実現します。世界文化の進展に寄与できます。

さあ、そこのあなたも[Elixir](https://elixir-lang.org/)の世界へようこそ。
_手始めに[エリクサーチ](https://elixir-lang.info/)なんていかがでしょうか。私のオススメです。_

---

**闘魂**とは、  **「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」** との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
**アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。**

---

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>
<b><font color="red">$\huge{１、２、３ ぁっダァー！}$</font></b>