16
3

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 19

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

Last updated at Posted at 2023-11-15

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

はじめに

Elixirの値はイミュータブルです。

死んでも破壊的操作をしない」という刺激的で、過激なプロレスつまりストロングスタイル、過激なセンチメンタリズムな記事を拝見しました。

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

Elixirの値はイミュータブルです。書き換えたくても書き換えられません。上の記事で推奨されている書き方しか採用できないのです。
果たして、本当にそうか!? を確かめてみたいとおもいます。

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

What is Elixir ?

Elixirという素敵なプログラミング言語があってがですね。
その素敵具合は「Elixir Saves Pinterest $2 Million a Year In Server Costs」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 $2 Million/年の節約ですってよ!、奥さん。

サンプルコード

元の記事で推奨されている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で同じようなことをしようとすると、オススメの書き方でしか書けないのです。
なぜなら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の場合、再束縛(=で左辺の変数に右辺の値をマッチさせる)ことは可能なのでそこだけ気をつけておけば、すみずみまで見なくても安心して値を理解できます。
これは可読性をあげ、保守性をあげ、めぐりめぐって世界文化の進展に大きく寄与することでしょう。

さいごに

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

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

さあ、そこのあなたもElixirの世界へようこそ。
手始めにエリクサーチなんていかがでしょうか。私のオススメです。


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


$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$

16
3
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
16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?