$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
「闘魂とは、己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことだと思います」とアントニオ猪木さんは、引退試合でドン・フライ選手をくだしたあとのセレモニーで発言されました。
Elixirにおける"闘魂"とは、<<0xE99798::24, 0xE9ad82::24>>
のことです。
果たしてどういうことでしょうか!?
What is Elixir ?
Elixirという素敵なプログラミング言語があるのですね。
その素敵具合は「Elixir Saves Pinterest $2 Million a Year In Server Costs」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 $2 Million/年の節約ですってよ!、奥さん。
"闘魂"とは、<<0xE99798::24, 0xE9ad82::24>>のことです
Elixirの文字列はビットストリングの一種です。
論よりRunです。
iex> "闘魂" = <<0xE99798::24, 0xE9ad82::24>>
"闘魂"
マッチします。
iex> Kernel.match?("闘魂", <<0xE99798::24, 0xE9ad82::24>>)
true
true
です。
ビットストリング
ビットストリングとはこういうものです。
<<0b1000::4>>
2進数0b1000(10進数で8)を4bitで表現しています。
コードポイント
iex> ?闘
38360
iex> ?闘 |> Integer.to_string(2)
"1001010111011000"
?でコードポイントを調べることができます。
コードポイントをUTF-8で符号化する
の解説の通りです。
1001010111011000を4bit, 6bit, 6bitにわけて、先頭からE0, 80, 80を足すわけです。
Elixirではビットのパターンマッチもお手のものです。
iex> <<a::4, b::6, c::6>> = <<?闘::16>>
iex> a
9
iex> (a + 0xE0) |> Integer.to_string(16)
"E9"
iex> b
23
iex> (b + 0x80) |> Integer.to_string(16)
"97"
iex> c
24
iex> (c + 0x80) |> Integer.to_string(16)
"98"
iex> <<a + 0xE0, b + 0x80, c + 0x80>>
"闘"
"魂"も同じ要領で確かめてみてください。
使い所
たとえば、文字列の末尾が"Z"
のときにAの処理をしたい、それ以外はBの処理をしたいというようなときに使えます。(まあ文字列が3個の英字とかって言う時しか末尾のパターンマッチでは書きにくいのかもしれません。先頭なら書きやすいとおもいます。残りはrest::binary
でパターンマッチできるので)
defmodule Awesome do
def hoge(<<_, _, ?Z>>>), do: :a
def hoge(_), do: :b
end
実践例は以下にあります。
さいごに
Elixirにおける"闘魂"とは、<<0xE99798::24, 0xE9ad82::24>>
であることを示しました。
文字列はビットストリングの一部です。
人類は不老不死の霊薬を意味する素敵なプログラミング言語Elixirを手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って世界平和に貢献できることでしょう。
さあ、そこのあなたもElixirの世界へようこそ。
手始めにエリクサーチなんていかがでしょうか。私のオススメです。
闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。
$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$