闘魂Elixir ── 13. Map.replace

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>

https://qiita.com/advent-calendar/2022

https://qiita.com/advent-calendar/2022/elixir

# はじめに

闘魂と[Elixir](https://elixir-lang.org/)が出会いました。
闘魂 meets [Elixir](https://elixir-lang.org/).です。
[Elixir](https://elixir-lang.org/) meets 闘魂.でもよいです。

本日は、[Map.replace/3](https://hexdocs.pm/elixir/Map.html#replace/3)を説明します。

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

# [Map.replace/3](https://hexdocs.pm/elixir/Map.html#replace/3)

マップから指定したキーが存在する場合に、値を置き換えたマップが得られます。
マップとはキーと値のアレです。はてな？　の方は、「[闘魂Elixir ── 11. Mapモジュール](https://qiita.com/torifukukaiou/items/2421ccca8784e192ebac)」をご覧になってください。


こちらの図[^1]をみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/110f5eb1-a7c8-0ca1-2d70-1e63eb4cddbc.png)







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

[IEx](https://hexdocs.pm/iex/IEx.html)で確かめてみましょう。

```:CMD
iex
```

[IEx](https://hexdocs.pm/iex/IEx.html)が立ち上がったら、以下のプログラムを実行してみてください。

```elixir
iex> Map.replace(%{a: 1, b: 2}, :a, "123da-")
%{a: "123da-", b: 2}
```

マップの中のキー`:a`の値が、`"123da-"`に変わったマップが得られました :tada: 

# ワンポイントレッスン

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

## 元のマップが変更されているわけではない

```elixir
iex> m = %{a: 1, b: 2}  
%{a: 1, b: 2}
iex> Map.replace(m, :a, "123da-")
%{a: "123da-", b: 2}
```

[Map.replace/3](https://hexdocs.pm/elixir/Map.html#replace/3)を実行したあと、`m`は変更されていません。

```elixir
iex> m
%{a: 1, b: 2}
```

ね、変わっていませんよね。
専門家の間では、イミュータブルと呼ばれます。



## 指定したキーが存在しない場合は、インプットと同じ内容のマップが返る

```elixir
iex> Map.replace(%{a: 1, b: 2}, :inoki, "123da-")
%{a: 1, b: 2}
```




# 今日の<font color="#d00080">闘魂</font>

今日は、王陽明先生から言葉を引きます。

---
山中の<ruby>賊<rt>ぞく</rt></ruby>を破るは<ruby>易<rt>やす</rt></ruby>く心中の賊を破るは<ruby>難<rt>かた</rt></ruby>し
---

解説は、[こちら](https://kotobank.jp/word/%E5%B1%B1%E4%B8%AD%E3%81%AE%E8%B3%8A%E3%82%92%E7%A0%B4%E3%82%8B%E3%81%AF%E6%98%93%E3%81%8F%E5%BF%83%E4%B8%AD%E3%81%AE%E8%B3%8A%E3%82%92%E7%A0%B4%E3%82%8B%E3%81%AF%E9%9B%A3%E3%81%97-514275)をご参照ください。
猪木さん流に言うと、「闘魂」ということです。

闘魂とは、**「己に打ち克ち、闘いを通じて己の魂を磨いていくことである」**

> 相手と闘う前に、まずは恐怖心に打ち克ち、自分自身との闘いに勝たなければならない。己に勝てなければ相手に勝つことはできない。

:book:『[アントニオ猪木 最後の闘魂](https://www.amazon.co.jp/dp/4833481057)』:book:から引きました。
みなさまもぜひこの本をお手にとられて、猪木さんが残されたメッセージを通じて、直接猪木さんから「元氣」をもらってください。

https://presidentstore.jp/item/008105.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/be8933f5-e3e2-d5f4-1561-f65f75abdf38.png)




# さいごに

[Map.replace/3](https://hexdocs.pm/elixir/Map.html#replace/3)を説明しました。

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

<font color="red">$\huge{１、２、３ ぁっダー！}$</font>


<iframe width="910" height="512" src="https://www.youtube.com/embed/AWxwmqzbOaw" title="燃える闘魂 アントニオ猪木  追悼VTR" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

https://www.youtube.com/watch?v=FSz7N5hCltw

---

https://qiita.com/torifukukaiou/items/5e96f4e9f12ec3c4b3f4

---

# Twitter

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Elixir Advent Calendar 2の13日目は、毎度お馴染み <a href="https://twitter.com/torifukukaiou?ref_src=twsrc%5Etfw">@torifukukaiou</a> さんで、、Mapモジュールの続き、Map .replaceです😌<a href="https://t.co/5Qvd35Qr4h">https://t.co/5Qvd35Qr4h</a><br><br>「元のマップが変更されているわけではない」、そう、これこそElixirや、イミュータブルを理解する上で、もっとも大事なこと😋 <a href="https://t.co/506kf9bhuF">pic.twitter.com/506kf9bhuF</a></p>&mdash; piacere (love Elixir, Gravity and VR/AR/Metaverse) (@piacere_ex) <a href="https://twitter.com/piacere_ex/status/1602547880702926848?ref_src=twsrc%5Etfw">December 13, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

---


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