Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

IT勉強会での初プレゼンなどお助けします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチできます。スライドのレビューや録画したリハへのアドバイスなどなど。Twitter@jyukutyoまでメンションでもDMでもお気軽にご連絡ください。

私はIT講師の経験があり、プレゼンはデブサミやJJUG CCCなど200人規模の経験が豊富で最大800人の前でプレゼンしました。海外ではDevoxxUSで。デブサミ2017では公募スピーカー1位、デブサミ関西2012アワードで5位となりました。

モナドについて調べていく

ScalaのAdvanced Exampleがもうモナドを使うものしか残っていないので、
いい加減モナドと正面から向き合うしかない。


といってもちょっと調べてわかるくらいなら苦労はないわけで、
折りを見て何度も学び直して、1年後には習得したい。


間違いやアドバイスがあればどしどしお願いします!

モナドとは

モナドとは、関数型言語において参照透過性を維持しつつ手続き型的な記述を行なうための枠組みを言う。

モナド (プログラミング) - Wikipedia


参照透過性?

計算機言語の概念の一種で、文脈によらず式の値はその構成要素(例えば変数や関数)によってのみ定まるということを言う。具体的には変数の値は最初に定義した値と常に同じであり、関数は同じ変数を引数として与えられれば同じ値を返すという事になる。当然変数に値を割り当てなおす演算である代入(Assignment)を行う式は存在しない。

参照透過性 - Wikipedia


なるほど。関数型言語は特に値が不変であるというのが基礎概念っぽいもんね。
ということは、
「参照透過性を維持しつつ手続き型的な記述を行なう」

「値を割り当て直さずに手続き型的な記述を行う」
ということか。


ちなみに、Haskellのような純粋関数型言語は完全に参照透過性を維持しているけど、Scalaは純粋関数型言語ではない関数型言語
varで宣言すれば代入できるからね。
Scalaで純粋関数型言語のように「も」記述することができるってこと。


関数型言語では遅延評価がありそのままでは実行の順序を制御できないので、順序を制御するために出てきた概念なのかな??