AD-TECH
Lab BLOG
アドテクLab ブログ

NEWS
  • リクルートデータ組織のブログをはじめました。※最新情報はRecruit Data Blogをご覧ください。

RCO社内アドテク部勉強会:新し目の言語の新しい機能について話しました

2015/01/14SH

このエントリーをはてなブックマークに追加

2回めの登場の、エンジニアの SH です。

RCO の開発で使われている言語は主に Java, Python, Ruby, Perl で、最近 Scala が増えてきている感じです。

これらの言語は、似た世代の似たパラダイムの言語で、プログラム言語人気ランキングの上位常連の言語たちです。

それらの言語でただ開発を続けるだけでは視野が狭くなるので、新しい言語や別パラダイムの言語の機能を知り、学ぼうということで、勉強会で

  • パターンマッチ
  • Optional 型
  • リソース開放
  • Immutable データ

について紹介をさせて頂きました。

私自身、Java と Python が主戦場で、新しい言語の新しい機能を触る機会は少ないのが正直なところです。

Haskell や Objective Caml, Scheme, Go言語, D言語 などの言語を学んだ経験がありますが、業務では全然使っていません(Goは近いうちに使うかも)。ただ、それらの言語を使わないとしても、考え方や機能を理解しただけで、既存言語の書き方が良い方向に変化した実感があります。

パターンマッチ

値や型や条件によって、関数の定義や処理を切り替える仕組みのパターンマッチ処理を使うことと、ポリモーフィズムやオーバーロードと比較しながら、パターンマッチの利点を紹介しました。

特に、マッチ処理と値の取り出し処理が一体になっていることや、ガード式やパターンマッチによって、可読性やメンテナンス性が非常に高くなる事を紹介しました。

Optional 型

失敗や値なしを NULL で表すのではなく、Optional 型で表すことで、

  • 値を取得と値の有無チェックを不可分にできる
  • 値があった場合に関数を適用する、という処理が簡潔に書ける

というメリットがあることを紹介しました。あわせて、Scala には Optional 型として Option[T] があるけど、Java のライブラリを使うと普通に null を返すし、Haskell の head [] も普通に実行時エラーを投げつけてくるから、理想通りには行かないよね、という話をしました。

あと、Optional 型から値を取り出すときにはパターンマッチが便利だよ、という話と、CoffeeScript の便利な ?. についての余談も紹介しました。

リソース開放

現行言語の RAII 構文を、

  • Java の try-with-resources 構文
  • C# の using 文
  • Python の with 文
  • Ruby の ブロックを引数に取る関数
  • C++ のデストラクタによる RAII

を比較し、Go 言語の defer 文、D 言語の scope 文 について紹介をしました。

Immutable データ

final, val, const, const pointer, const オブジェクト の比較と紹介、Immutable コンテナの比較とあわせて、値が不変になるメリット

  • 読みやすさ、メンテのしやすさ
  • コンパイラやランタイムによる最適化
  • 並列実行

などについての紹介をしました。

最後に

これからも新しいプログラム言語を学んでいきたいですね!

.NET core がオープンソースになったので、良いタイミングだから .NET 系の言語をしっかりと勉強してみるのも良さそうだなと思っています。F# や C# が狙い目かなー。

TAGS :

#イベント