2回めの登場の、エンジニアの SH です。
RCO の開発で使われている言語は主に Java, Python, Ruby, Perl で、最近 Scala が増えてきている感じです。
これらの言語は、似た世代の似たパラダイムの言語で、プログラム言語人気ランキングの上位常連の言語たちです。
それらの言語でただ開発を続けるだけでは視野が狭くなるので、新しい言語や別パラダイムの言語の機能を知り、学ぼうということで、勉強会で
について紹介をさせて頂きました。
私自身、Java と Python が主戦場で、新しい言語の新しい機能を触る機会は少ないのが正直なところです。
Haskell や Objective Caml, Scheme, Go言語, D言語 などの言語を学んだ経験がありますが、業務では全然使っていません(Goは近いうちに使うかも)。ただ、それらの言語を使わないとしても、考え方や機能を理解しただけで、既存言語の書き方が良い方向に変化した実感があります。
値や型や条件によって、関数の定義や処理を切り替える仕組みのパターンマッチ処理を使うことと、ポリモーフィズムやオーバーロードと比較しながら、パターンマッチの利点を紹介しました。
特に、マッチ処理と値の取り出し処理が一体になっていることや、ガード式やパターンマッチによって、可読性やメンテナンス性が非常に高くなる事を紹介しました。
失敗や値なしを NULL で表すのではなく、Optional 型で表すことで、
というメリットがあることを紹介しました。あわせて、Scala には Optional 型として Option[T]
があるけど、Java のライブラリを使うと普通に null
を返すし、Haskell の head []
も普通に実行時エラーを投げつけてくるから、理想通りには行かないよね、という話をしました。
あと、Optional 型から値を取り出すときにはパターンマッチが便利だよ、という話と、CoffeeScript の便利な ?.
についての余談も紹介しました。
現行言語の RAII 構文を、
を比較し、Go 言語の defer 文、D 言語の scope 文 について紹介をしました。
final, val, const, const pointer, const オブジェクト の比較と紹介、Immutable コンテナの比較とあわせて、値が不変になるメリット
などについての紹介をしました。
これからも新しいプログラム言語を学んでいきたいですね!
.NET core がオープンソースになったので、良いタイミングだから .NET 系の言語をしっかりと勉強してみるのも良さそうだなと思っています。F# や C# が狙い目かなー。