RGB 10進数 -> 16進数へ変換 (Elixir)


はじめに

  • Elixir楽しんでいますか
  • Integer.to_string/2
    • これが肝です
    • もう少し具体例をまじえて書いておきます

10進数 -> 16進数へ変換したい

  • 一般的にはスポイトツールとでもいうのでしょうか、macOSならその他 > Digital Color Meterというものです
  • 10進数のRGBを16進数に変えたいことありますよね
  • たとえば、autoracexというグループを立ち上げましてですね、背景色をElixir色にしたいわけですよ

  • IEx(Elixir's interactive shell)を立ち上げて以下のような感じで変換できます
iex> [74, 46, 94] |> Enum.map(&Integer.to_string(&1, 16)) |> Enum.join() |> String.downcase() |> (&("##{&1}")).()
"#4a2e5e"
  • (&("##{&1}")).()なんて書き方は格好つけているだけです
    • そうです
    • 文字通り、
    • $\huge{カッコ()ばっかりつけているだけです}$
  • 次に書いているものは、の別な書き方です
iex> (
...> [74, 46, 94]
...> |> Enum.map(fn i -> Integer.to_string(i, 16) end)
...> |> Enum.join()
...> |> String.downcase()
...> |> (fn s -> "#" <> s end).()
...> )
"#4a2e5e"
  • IO.inspect/2を途中にはさみながら書くとそれぞれの関数を通ったあとの結果がみれて、ありがとナイスです
(
[74, 46, 94]
|> Enum.map(fn i -> Integer.to_string(i, 16) end)
|> IO.inspect()
|> Enum.join()
|> IO.inspect()
|> String.downcase()
|> IO.inspect()
|> (fn s -> "#" <> s end).()
)

(IExにそのまま貼れます)

使っている関数たち

使っているマクロたち

リンク先の公式ドキュメントをみていただくとExamplesが書いてあってわかりやすいです
たとえばEnum.map/2

Wrapping Up 🎍🎍🎍🎍🎍

  • と、ここまで書いたところで、Digital Color Meterは16進数表示もできることに気づきました
    • 表示 > 値を表示 > 16進
  • まあ、そんなこともあるさということで筆をおきます
  • Enjoy Elixir