やまろうブログ

プログラミングやゲーム開発、ニコ生、自己啓発、社会のことを書きます。

Scalaの関数型としての機能

ニコ生にて、Scalaの話題。

http://live.nicovideo.jp/watch/lv176056484?ref=community

 

・関数型としてのScala

Scalaは知れば知るほどオブジェクト指向っぽくてガッツリ関数型を求めてた僕にはちょっと…って感じでした

確かに手続き的にバリバリ書いてるといきなり副作用ない書き方は戸惑いますよね

 

Scalaって最適化どれくらいしてくれるんだろう>再帰

余りに難しい再帰だとOCamlHaskellのようには最適化出来ないみたいな記述を見た気が

基本的には末尾再帰の形にしていれば問題なく最適化してくれそう

遅延評価は基本しないかんじ?それともデフォルト?

Scalaは遅延評価はデフォじゃないですよね、確か

まあ正格評価じゃないと普通にかけないですもんね

 

・遅延評価

遅延評価させるには変数の前にlazyってキーワードつけるんだけなんですね

遅延評価、最近はオブジェクト指向言語でも取り入れてたりしますよね

僕が知ってる中ではD言語とか

Rubyがたしかできるようになってたような

Pythonも遅延評価的な機能用意したりしてますね

 

・副作用のないプログラミング

確かに計算の依存関係が把握できれば並列計算とかも自動で実装出来そうな気が

副作用無いとバグを埋め込みにくくなったり、単体テストしやすくなったりとかっていうのは聞きますね

でもプログラミングってほぼ副作用しかないことに気づきますよw

Haskellとかはモナドを使ってうまく副作用を分離してる部分が利点な気がします

IOモナドを何も考えずに使うとあたかも手続型のようになりますよw

命令型みたく処理するなら、初めからRubyとかPHP使えばいい→そうなんですよねー

http://live.nicovideo.jp/watch/lv176056484?ref=community