以前からメタプログラミングという単語を耳にしたことはあり、存在は認知していた。メタプログラミングという階層になっている)要するに言語拡張のために使う言語に用意された機能というわけだ。言語の仕様を気軽に書き換える・追加してしまうことが可能なため仕様には注意を払わねばならない拡張をしすぎた結果、誰も仕様を追えなくなってしまうということが起こり得る。これがマクロが黒魔術と呼ばれる理由であるそれを理解した上で、言語拡張を行いたい場合やOSSのソースコードを読もうと思う時にマクロの知識が必要になってくる(勉強会でOSSのコードを読んで撃沈した。マクロ難し杉内)マクロに惨敗した勉強会のレポートはこちらですwww.okb-shelf.work今回はgumiの幾田さんのqiita記事を参考にしながら、プログラミングElixirのマクロの章(20章)を読み進めていく形にした。Schoolのメタプログラミング読んだけど、よく分からなかった方を自身含めて少しでも救済できればと思いますマクロの仕組みElixirはマクロを用いてAST(抽象構文木)というデータ構造をいじるという操作を行う。ASTという単語をコンピューターサイエンスを集中的に勉強した時にお目にかかったことがある。list}先出しとなるが、quoteを使うことでASTとなったコード表現を確認することが出来る。["nice"]}もう少しだけ、複雑な処理のASTを確認してみる。]}何かたくさん出てきた。このquoteをいつ使うのという話になるが、現状の理解で処理の通り、コード表現をASTに変換する必要がある時だその前にdefmacroについて触れておく。defmacroはdefmodule内でのみ使用することが可能で、引数で受け取った値をASTの形式として解釈をして内部のASTをElixirでの実行結果として返す。]}この場合にだけ、ASTの状態で値がreturnされた。Elixir}ありゃ、変数がquoteのブロック内部では上手く値が読み込まれない模様。["nice"]}黒魔術(マクロ)入門プログラミングElixirを参考にmyifの作成をしてみよう。Main.main()boatおお、いいですね。それっぽいことが出来た。ちなみに今更だが、defmacroの引数として受け取っている値は受け取り時に評価されずにマクロの実行時に評価される。IO.inspect()niceboat:ok:okプログラミングElixirの練習問題に挑む程よいレベル感の問題が付属されていたので、チャレンジしてみた。関数として扱いたい場合はアトムにするという点で若干詰まった20分程で理解出来たが、こんなことが出来ていいの?という驚きは隠せない。今回で第12回目の勉強会を開催致しました。日)22歳の新卒エンジニアです。elixirという言語に惹かれています。人より少し自転車を漕ぐのが速めです。無駄なことを覚えるのが得意です。(2)月別アーカイブ広告はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。