$\huge{元氣ですかーーーーッ!!!}$
はじめに
闘魂とElixirが出会いました。
闘魂 meets Elixir.です。
Elixir meets 闘魂.でもよいです。
本日は、Enum.map/2を説明します。
iex> "Elixir" |> String.graphemes() |> Enum.frequencies()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}
Enum.map/2
Enumerableなものの要素ひとつひとつに関数を適用して、得られた結果が要素となるリストを作ることができます。
Input(元)のEnumerableなものの長さと、Enum.map/2を通して変換されたOutputのリストの長さは同じです。
「Enumerableなもの」がはてな? の方は、前日の記事「闘魂Elixir ── 06. Enumモジュール」を振り返ってくださいませ。
言葉にするとなんだか難しいかもしれませんが、こちらの図をみてください。
上図の説明をします。1
整数1〜5の5個の要素からなる、[1,2,3,4,5]
をInputにしています。
各要素に適用する関数は、f = fn x -> x * 2 end
です。この関数はinputの値を2倍する関数です。
Enum.map([1,2,3,4,5], f)
の実行結果は、[2, 4, 6, 8, 10]
が得られます。
IExで確かめてみましょう。
iex
IExが立ち上がったら、以下のプログラムを実行してみてください。
iex> f = fn x -> x * 2 end
iex> Enum.map([1,2,3,4,5], f)
[2, 4, 6, 8, 10]
[1,2,3,4,5]
=> [2, 4, 6, 8, 10]
の変換ができました
ワンポイントレッスン
ここでは、絵がごちゃごちゃするので、各要素に適用する関数をf
という変数に束縛しました。
これは変数f
を使わずに、以下のように書いても動きます。
iex> Enum.map([1,2,3,4,5], fn x -> x * 2 end)
[2, 4, 6, 8, 10]
そしてこちらの書き方のほうが圧倒的に多く使われるので、この書き方に慣れてください。
また、&を使って書くこともできます。
iex> Enum.map([1,2,3,4,5], & &1 * 2)
[2, 4, 6, 8, 10]
こちらもよく見かけるので慣れておくと吉です。
&の説明は以下をご参照ください。
今日の闘魂
今日は、『孟子』から言葉を引きます。
為さざるなり、能はざるに非ざるなり(孟子)
解説は、こちらをご参照ください。
猪木さん流に言うと、「危ぶむなかれ 危ぶめば道はなし 踏み出せばその一足が道となり その一足が道となる 迷わず行けよ 行けばわかるさ」ということです。
みなさまもぜひ猪木さんが残されたメッセージを通じて、直接猪木さんから「元氣」をもらってください。
さいごに
Enum.map/2を説明しました。
闘魂の意味は、 「己に打ち克ち、闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
$\huge{1、2、3 ぁっダー!}$
Elixir Advent Calendar 3の7日目は、毎日数コラムをイカれたペースでリリースする @torifukukaiou さんで、今回は、アルケミストなら誰でも使いこなす、Enum .mapの回です💁♂️https://t.co/fO16qeirRI
— piacere (love Elixir, Gravity and VR/AR/Metaverse) (@piacere_ex) December 7, 2022
なんだか手書きの図で説明が入っています😜
その続きには、こんな図も出てきます…タイトル回収😝 pic.twitter.com/BmomruLX4y
$\huge{元氣があればなんでもできる!}$
-
図は、https://excalidraw.com/ を使って作成しています。スゴ腕ハッカーが書いたかのような手書き風の絵が書けるので最近の私のお気に入りツールです。 ↩