2021/12/03の回です。
前日は、@hisawayの「[Elixir] ラベル付きinspectのラベルを端折る」でした。
@hisawayさんは、自称メタプロ芸人
自称って、謙遜されていますけど、正真正銘、免許皆伝のメタプロ芸人だとおもいます
はじめに
- Elixirを楽しんでいますか
- |>の話をします
- よく使いますよね
- たとえばこんな風に、$\huge{Awesome}$ なプログラムを書けます
- QiitaのAPIエンドポイントがありまして
- |> GETするでしょ、いつやるの? 今でしょ!
- |> bodyを取り出します、いつやるの? 今でしょ!
- |> JSONデーコードするでしょ、いつやるの? 今でしょ!
- |> そうすると各要素がマップのリストが得られるので、情報量が多いからとりあえずタイトルとURLだけにするでしょ、いつやるの? 今でしょ!
Mix.install([{:jason, "~> 1.2"}, {:httpoison, "~> 1.8"}])
"https://qiita.com/api/v2/items?query=tag:elixir"
|> URI.encode()
|> HTTPoison.get!()
|> Map.get(:body)
|> Jason.decode!()
|> Enum.map(& Map.take(&1, ["title", "url"]))
- Elixirのプログラミングではよく使います
-
|>
を使わずに書いた場合、こんな感じになります
Enum.map(
Jason.decode!(Map.get(
HTTPoison.get!(
URI.encode("https://qiita.com/api/v2/items?query=tag:elixir")),
:body)),
& Map.take(&1, ["title", "url"]))
次の関数の第2引数なんだよなあ〜
- ただ、|>を使う上で、前の値を次の関数の第2引数以降にセットしたいときに困ります
- タイトルは「第2引数」とだけ書きましたが、第3引数でも第4引数でも事情は同じです
- 代表例はFile.write/3です
- 第一引数がファイルのパス
- 第二引数がcontent
- 第三引数は、リンク先をみてください(私、
modes
なんて指定したことないです)
- たとえばAzureのText to Speech APIを使って、文字列 -> 音声データへと変換して、音声データをファイルに書き込むときに困るわけです
|>を使わない
- 困るとか言うのなら、|>で無理につなげなくてもいいんじゃないの
- アリだとおもいます
content = "awesome"
↑以降のプログラムで使うcontent
変数には、共通して$\huge{Awesome}$が束縛されているものとします。
File.write("output", content)
無名関数でカッコ(格好)つける
content |> (fn content -> File.write("output", content) end).()
- 『仁義なき戦い』では、「格好つけんにゃならん」とか何とかという言葉が飛び交います
無名関数でカッコ(格好つける) -- その2(&表記でキメる)
content |> (&File.write("output", &1)).()
then/2を使う
- Elixir 1.12で追加されています
-
@koga1020 さんの「【Elixir v1.12】tap/2, then/2が便利」で知りました
- ありがとうございます!
content |> then(fn content -> File.write("output", content) end)
content |> then(&File.write("output", &1))
Wrapping up
- Enjoy Elixir
- Elixirのプログラムには、|>がよくでてきます
- |>を使ってスイスイ、プログラミングしていくことができます
- 次の関数の第2引数なんだよな〜 というときは、無理につなげないか、Elixirの1.12以上を使ってthen/2を使うとよいでしょう
コミュニティ
-
elixir.jp Slack workspaceに参加してみてください
- マヂ、やさしい人ばっかりのコミュニティ
- あなたの困ったをきっと解決してくれるでしょう
- たくさんのコミュニティがあります
- @kn339264 さん作の素敵な資料をご紹介します
- Elixirコミュニティ の歩き方〜国内オンライン編〜
(@piacerex さん作 )
もっとElixirのことを知りたい方へオススメの書籍
- プログラミングElixir(第2版) -- オーム社
- Elixir実践ガイド -- インプレス
- アルケミスト − 夢を旅した少年 -- KADOKAWA
明日は、@t-yamanashiの「LiveViewで匿名SNSを作ろう piyopiyo.ex#2」です。
お楽しみに〜