12
0

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.

$\huge{元氣ですかーーーーッ!!!}$

はじめに

闘魂とElixirが出会いました。
闘魂 meets Elixir.です。
Elixir meets 闘魂.でもよいです。

本日は、Enum.sort/2を説明します。

iex> "Elixir" |> String.graphemes() |> Enum.frequencies()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}

Enum.sort/2

Enumerableなものの要素を並び替えた、あらたなEnumerableなものを作ってくれます。

言葉にするとなんだか難しいかもしれませんが、こちらの図をみてください。

image.png

上図の説明をします。1
リスト[5, 4, 3,2, 1]をInputにしています。
Enum.sort/2を呼び出すと、並び替え(ソート)がそーっとできます。
どういう順番で並び替えるのかをsorterで指定します。ソーターです。蒼太の包丁ではありません。

sorterはあえて難しい書き方をしました。みんなそろそろElixir に慣れてきたところだとおもいますので。
以下のように書いても同じです。

sorter 別のかきかた その①

& &1 <= &2

sorter 別のかきかた その②

fn a, b -> a <= b end

それでは、IExで確かめてみましょう。

CMD
iex

IExが立ち上がったら、以下のプログラムを実行してみてください。

iex> sorter = &<=/2

iex> Enum.sort([5, 4, 3, 2, 1], sorter)
[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1] => [1, 2, 3, 4, 5]の変換ができました:tada::tada::tada::tada::tada:

ワンポイントレッスン

ワンポイントレッスンです。

イミュータブル

Elixirの値はすべてイミュータブルです。
どういうことか説明しますね。

iex> input = [5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]

iex> output = Enum.sort(input, &<=/2)           
[1, 2, 3, 4, 5]

上記を実行したあと、inputの値を確認してみましょう。

iex> input
[5, 4, 3, 2, 1]

わかりますかね、inputの値は変わらないのです。

疑り深いあなたのために outputも出力しておきます。

iex> output
[1, 2, 3, 4, 5]

これがなんの役に立つの? とおもわれる方はいらっしゃるとおもいます。
ごめん、わたしにはちゃんと説明できません。
この性質があることで、Webアプリケーションの開発につきまとう様々な問題の回避策となったり、なによりもElixirの利点として挙げられる高い並列処理の背景となっていたりします。

イミュータブル

(どなたかマヂ編集リクエストをしていただくか、いい記事へのリンクを教えてください :pray: :pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5: 。イミュータブルだー って書き始めたけどわたしには上記くらいしか書けませんでした)


2022-12-18 追記

読者の方からお便りをいただきました。
イミュータブルについてよくまとまっている記事(動画)がありましたのでご紹介しておきます。

こちらの記事(動画)では、TypeScriptを例にしてイミュータブルなクラスとミュータブルなクラスで説明が展開されています。
結論として、イミュータブルいいぞという内容です。
Elixirは言語仕様のレベルですべてイミュータブルです。ですから、 Elixirはいいぞー! コノヤロー!!! というわけです。

@mokichi さん、コメントありがとうございます!!!

異なる型でも大小比較が可能

Elixirの言語仕様です。

iex> "100" < 1000000000
false

文字列を数値とみなして比較するとかそういう話じゃありません。
データの型に大小関係が定義されています。

Term orderingに詳しく書いてあります。

iex> 1 < :an_atom
true
number < atom < reference < function < port < pid < tuple < map < list < bitstring

これが何の役に立つのかは、なにかありました。どこかで聞いたか自分で発見したかしたことがあるのですが、忘れました。
ここもどなたか、ナイスな編集リクエストをお待ちしております。Term orderingが一体何の役に立つのかお便りをお待ちしております。

今日の闘魂

今日は、『孟子』から言葉を引きます。


天のまさに大任をの人に降さんとするや、必ずず其の心志しんしを苦しめ、其の筋骨きんこつを労せしめ、其の体膚たいふえしめ、其の身を空乏くうぼうせしめ、其の為さんとする所に払乱ふつらんせしむ

解説は、こちらをご参照ください。

猪木さん流に言うと、「道はどんなに険しくとも、笑いながら歩こうぜ」ということです。
破壊王橋本真也選手流に言うと、四字熟語「道険笑歩」です。
:book:アントニオ猪木 最後の闘魂:book:より引用します。

長い人生、その道のりはけっして平坦ではない。むしろ、人生とは険しい道の連続なのかもしれない。だからといって、いつも「つらい、苦しい、もうやめたい……」と嘆いてばかりいても事態は好転しない。逆に暗い気持ちばかりが先に立って、状況はさらに悪化することもあるだろう。だからこそわたしは、人生において明るいこと、楽しいこと、嬉しいことばかりを考えてきた。そこに笑いがあれば、苦しい事態も好転するのではないか? プラス思考でいれば、ネガティブな感情が入り込む余地はなくなるはずだ。

志(夢)を持ち、その志(夢)の実現のため、一歩踏み出す ーー 元氣があればなんでもできる! なのです。
元氣、やる氣や氣力、氣骨は時には、挫けそうになる時があります。
その氣を支えるのが、志(夢)です。
「志は氣の帥なり」と「元氣があればなんでもできる!」は2つで1つのことを言っているのです。

そうはいっても、志(夢)の達成には険しい道が続きます。それは天があなたに与えてくれた試練です。途中であきらめてよいのですか。途中であきらめていいようなものは、「志(夢)」とは言えません。人生は長くありません。すぐに次のことへ一歩を踏み出したほうがいいかもしれませんし、「石の上にも三年」ともいいます。どちらを選ぶのかはあなたの決断です。自己責任です。自分で決めてください。人のせいにしない。「己に克つ」ということです。つまりは「闘魂」です。この漢字を手で書いてみてください。ファイトが湧いてきます!

:book:アントニオ猪木 最後の闘魂:book:
みなさまもぜひこの本をお手にとられて、猪木さんが残されたメッセージを通じて、直接猪木さんから「元氣」をもらってください。

image.png

さいごに

Enum.sort/2を説明しました。

闘魂の意味は、 「己に打ち克ち、闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。

$\huge{1、2、3 ぁっダー!}$



Twitter


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

  1. 図は、https://excalidraw.com/ を使って作成しています。スゴ腕ハッカーが書いたかのような手書き風の絵が書けるので最近の私のお気に入りツールです。

12
0
2

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
12
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?