はじめに
- Elixir 楽しんでいますか
- @bon_engさんの「【Ruby】RubyのAPI問題」をElixirでやってみました
- @piacerex さんが$\huge{beautiful}$にしてくださいました!
- 2021/1/25(月)に開催したautoracex #5の成果とします
- なんと7名の方が参加してくださいました!
準備
うまくいかなかったら
- 何事にも準備が肝心です
- ここが一番つまらないし、謎にハマってしまうことが多いのですが、がんばってください!
- うまくいかなかったら、思い切って僕の胸に飛び込んで来てほしい (by 長嶋茂雄 読売ジャイアンツ終身名誉監督)
-
elixirjp.slack.com slack workspaceかNervesJP workspaceに入ってきていただいて、
@torifukukaiou
へご質問ください - たとえ私が答えられなくても、マジみんな親切で優しい人が多いので、きっと解決できるでしょう
-
elixirjp.slack.com slack workspaceかNervesJP workspaceに入ってきていただいて、
mix new
$ mix new awesome
$ cd awesome
ソースコードを書く
イカしている
-
2021/01/25 追記
- https://qiita.com/torifukukaiou/items/6a4649c1d72bf49c92f0#comment-8cab49ab9751181a36ad
- @piacerex さんが$\huge{beautiful}$にしてくださいました!
- $\huge{こちらが本線です}$
lib/awesome.ex
defmodule Awesome do
@doc """
missing_char
## Examples
iex> Awesome.missing_char("kitten", 1)
"itten"
iex> Awesome.missing_char("kitten", 2)
"ktten"
iex> Awesome.missing_char("kitten", 3)
"kiten"
iex> Awesome.missing_char("kitten", 4)
"kiten"
iex> Awesome.missing_char("kitten", 5)
"kittn"
iex> Awesome.missing_char("kitten", 6)
"kitte"
"""
def missing_char(str, n) do
str
|> String.to_charlist()
|> List.delete_at(n - 1)
|> List.to_string()
end
end
-
文字列(≒バイナリ)は、リストに変換すれば、EnumやListが使える…というイディオムを押さえておくとグッドです 正規表現もRegex .compileで動的なパターンマッチを構築できるってのも、これまた強力な処理系を構築するためのワザです
- @piacerex さんの解説
イケていない
- 私が当初、記事に掲載していたもの
lib/awesome.ex
defmodule Awesome do
@moduledoc """
Documentation for `Awesome`.
"""
@doc """
missing_char
## Examples
iex> Awesome.missing_char("kitten", 1)
"itten"
iex> Awesome.missing_char("kitten", 2)
"ktten"
iex> Awesome.missing_char("kitten", 3)
"kiten"
iex> Awesome.missing_char("kitten", 4)
"kiten"
iex> Awesome.missing_char("kitten", 5)
"kittn"
iex> Awesome.missing_char("kitten", 6)
"kitte"
"""
def missing_char(str, n) do
String.split_at(str, n - 1)
|> (fn {s1, s2} -> s1 <> String.slice(s2, 1..-1) end).()
end
@doc """
missing_char_other
## Examples
iex> Awesome.missing_char_other("kitten", 1)
"itten"
iex> Awesome.missing_char_other("kitten", 2)
"ktten"
iex> Awesome.missing_char_other("kitten", 3)
"kiten"
iex> Awesome.missing_char_other("kitten", 4)
"kiten"
iex> Awesome.missing_char_other("kitten", 5)
"kittn"
iex> Awesome.missing_char_other("kitten", 6)
"kitte"
"""
def missing_char_other(str, n) do
codepoints = String.codepoints(str)
Enum.slice(codepoints, 0, n - 1)
|> Kernel.++(Enum.slice(codepoints, n..-1))
|> Enum.join()
end
end
Doctests
-
## Examples
の下にあるものは、Doctestsと呼ばれるものでテストできるんです
Compiling 1 file (.ex)
..............
Finished in 0.09 seconds
13 doctests, 1 test, 0 failures