SlideShare a Scribd company logo
Rubyのenum系高階関数を elixirでも使いたい
Hello!!
新卒4年目、音楽と植物が好きです。
taskeyというスタートアップでpeepというチャット小説?サービスを作っています。
(peep.jpで検索)
Serverメインの何でも屋さんです。
来月頭から転職してElixirエンジニアになります。
Name : Sota Tashiro
contact me at @tashiro_web
RubyエンジニアがElixirを学んでの所感
REnumのご紹介(本題)
チョットダケ宣伝
今日話すこと
Rubyエンジニアが、
Elixirを学んで思った事
他関数型言語でも(おそらく)
同じであろう部分での感想
● 値が不変なのは安心感ある
● パターンマッチって最高だったんですね
● ガード(関数定義でのwhen)って良いですねぇ、、
● 関数の中でreturnが書けなくて、びっくりしました
● Protocol好きかもです。。。
Elixir特有(であろう)ことでの感想
● パイプライン演算子最高ですね、脳のストレス軽減
● Rubyの文法と同じなのはdef, do ~ endくらい。
● 並列化の可能性にワクワクしております。
● メタプロもそこそこやりやすい
※ パイプライン演算子に関しては既出だと思うので、割愛します。Google is your friend.
RubyやRailsのメソッドは便利なものが多いので、それらを
Elixirでも使えるようにしたライブラリを作りました。
REnumの紹介
REnumとはなんぞ
ElixirのEnum, List, Map, Range, Streamといった、列挙可能系moduleで、
RubyやRailsで定義されている関数を使えるように拡張したライブラリ
何故作るか?
ちょっと調べればわかるけれども、
ちょっと調べないとわからない事
● Rubyだと配列からnullを排除する時 Enumerable#compactで出来たけど、
Elixirだとどう書くんだろう。。
● あれ、Enum.select って無いのか Enum.filterを使えばいいのね!
Native関数の挙動を担保
RubyのEnumerableから移植してきたおすすめ関数
RailsのActiveSupportから移植してきたおすすめ関数
その他、個人的に解せなかった部分を解消した関数
便利関数
RubyのEnumerableから移植してきたおすすめ関数
compact(enumerable)
与えられたenumerableからnil以外のすべての要素を排除。
RubyのEnumerableから移植してきたおすすめ関数
each_slice(enumerable, amount, func)
each_slice(enumerable, amount)
amount毎に与えられたenumerableを分割し各ブロック毎にfuncを実行。
RubyのEnumerableから移植してきたおすすめ関数
grep(enumerable, func_or_pattern)
与えられた関数やパターンに一致する要素を選んで返却。
RubyのEnumerableから移植してきたおすすめ関数
Ailias
● select(filterのalias)
● detect(findのalias)
● each_with_object(reduce/3のalias)
● inject(reduceのalias)
● include?(member?のalias)
RailsのActiveSupportから移植してきたおすすめ関数
exclude?(enumerable, element)
Enum.member?の逆。elementがenumerableに含まれない場合にtrue
RailsのActiveSupportから移植してきたおすすめ関数
without(enumerable, elements)
elements を除いて enumerable を返却。
RailsのActiveSupportから移植してきたおすすめ関数
pluck(map_list, keys_or_key)
map_list から、与えられたkeysのvalueを返却。
RailsのActiveSupportから移植してきたおすすめ関数
blank?(any)
any が空白、偽、空、または空白文字列である場合にtrueを返却。
例えば、nil, "", " ", [], %{}, falseはtrueに該当する。
その他、個人的に解せなかった部分を解消した関数
list_and_not_keyword?(enumerable)
keyword listとlistを区別する関数。
その他、個人的に解せなかった部分を解消した関数
map_and_not_range?(enumerable)
is_map(1..3) == trueなのが解せなくて作った関数。
以上。
宣伝
REnum手伝ってくれる方いたら声かけてください!
関数が多くて一人だと大変でした!笑
poke makeという可愛いCLIを作りました!
makeの代わりに使えるpokeコマンドを提供します!
勿論Elixir製です!
brew install tashirosota/homebrew-tap/poke_make
Rubyのenum系高階関数を elixirでも使いたい
ありがとうございました!!
contact me at @tashiro_web
参考
[Elixir]RubyやRailsのメソッドは便利なものが多いので、それらをElixirでも使えるようにした
ライブラリをリリースしました。
Elixirでuseされた時に全ての関数を移譲するというパワー系コードを書いてみました。

More Related Content

PDF
Perlbeginnes 9 lt_ytnobody
PDF
F#談話室(3) LT
PDF
F#とトランスレータ
PDF
プログラミング言語PRPR
PDF
Scalaで学ぶ関数型超入門
PPTX
楽しいプログラミング
PPTX
Php入門
PDF
Python勉強会 2015-12-02
Perlbeginnes 9 lt_ytnobody
F#談話室(3) LT
F#とトランスレータ
プログラミング言語PRPR
Scalaで学ぶ関数型超入門
楽しいプログラミング
Php入門
Python勉強会 2015-12-02
Ad

Rubyのenum系高階関数を elixirでも使いたい

Editor's Notes

  • #6: パイプライン演算子最高。左から右に読むという自然な自然な行為ができるのは脳のCPU負荷的にいい パラダイムがそもそも違うので、def end, do以外は以外は意外と真新しかった Frow等の並列化用Moduleが便利そう、深堀りするのが楽しみ use x quote, unquoteマクロで色々と出来る、が、Rubyほどではない
  • #7: パイプライン演算子最高。左から右に読むという自然な自然な行為ができるのは脳のCPU負荷的にいい パラダイムがそもそも違うので、def end, do以外は以外は意外と真新しかった Frow等の並列化用Moduleが便利そう、深堀りするのが楽しみ use x quote, unquoteマクロで色々と出来る、が、Rubyほどではない
  • #9: 現在はv0.3.2でそれぞれのElixirNativeの実装 + Enumの拡張まで完了しております。 0.4.0の作業中で、RubyのArrayClassのmoduleをElixirのListModuleへ移植中です。
  • #10: 自分の為、ひいては同様な困り毎をしている人の為にライブラリにしました。 RubyやRailsはその歴史の長さや、コミュニティの厚さにより、便利なmethodや直感的なaliasが多数定義されてます。 これらを享受する事も目的の一つです
  • #11: 特徴として、Nativeの挙動を担保しておりますので、EnumをgrepしてREnumに置き換えてもバグりません。
  • #12: REnumが提供する便利な関数を紹介していきます。 もしこれ良いなという関数がありましたら、他言語の方も実装して是非使ってみてください。Elixir使いの方はREnumをよろしくおねがいします。
  • #13: compact、便利です、 なんだかんだnilって混ざることがあるので、パッと消したい時に重宝しますね。
  • #24: REnumが提供する便利な関数を紹介していきます。 もしこれ良いなという関数がありましたら、他言語の方も実装して是非使ってみてください。Elixir使いの方はREnumをよろしくおねがいします。