この記事は「Elixir Advent Calendar 2022」8日目の記事です
東京にいるけどfukuoka.exのYOSUKEです。
簡単 Elixirシリーズでは小ネタをサクッと書いていこう。というコンセプトで作っていきます。
仕事柄、Elixir以外の言語を使ってサンプルコードを作成する。または教材を作ることをやっています。最近、RGBをカラーコードに変換してくれる関数を作りなさい。というお題のJavaScriptのコードを書いたので、Elixirで書くとどうなるか?を試してみようという記事です。
ちなみに、カラーコードをRGBに変換するも書いたのですが長くなるので、それは次回にしたいと思います。(そう、この記事はサクッとがコンセプトW)
まずはJavaScriptでtoRGB("#DB7093")
を入力して[ 219, 112, 147 ]
や、toRGB("$DB7093")
、toRGB("#DB709")
の入力の場合にはCode Error
を返すようにしたいと思います。
function toRGB(string){
if(string.split('')[0] == '#' && string.length == 7){
const head = string.split('');
const RGB = head.filter(item => item.match(/[a-fA-F_0-9]/));
const r = RGB.slice(0,2).parseInt(R.join(''), 16)
const g = RGB.slice(2,4).parseInt(G.join(''), 16)
const b = RGB.slice(4,6).parseInt(B.join(''), 16)
const rgb = [r, g, b]
console.log(rgb)
}else{
console.log("Code Error")
}
}
defmodule Change do
def toRGB( "#" <> color_code \\ "#000000") when is_binary("#" <> color_code) do
[r, g, b] = color_code
|> String.codepoints()
|> Enum.chunk_every(2)
|> Enum.map(fn [a,b] -> a<>b end)
r = String.to_integer(r, 16)
g = String.to_integer(g, 16)
b = String.to_integer(b, 16)
[r, g, b]
end
end