関数型言語でのデザイン手法

オブジェクト指向でのOOA,OODみたいなものが関数型言語でもあるか
58
前へ 1 ・・ 5 6 次へ
Keigo Imai @keigoi

関数型言語がエキゾチックなのは関数内に書ける関数と代数的データ型くらいのもので、しかも前者はコモディティたるJavaScriptにも載ってるシロモノ。パラメータ多相はJavaやC++にあるし、型推論に至っては何も考えなくても使える(値多相?単相性制限?シラネ)。なんも難しくないお

2010-10-06 23:09:48
Keigo Imai @keigoi

ただライブラリ(map/fold)とか文化(破壊的操作をしない)に慣れる必要はあるだろうけど、オブジェクト指向みたいな怪しいことは言わないよたぶん

2010-10-06 23:13:27
Keigo Imai @keigoi

たとえば代数的データ型を使ったり関数的にソフトウェアを構成すればより整理されたかたちでソフトウェアを構成できるだとか、そうやって「どう使うのか」を議論するのが重要であって、興味もないのに乗せられて型理論とかλ計算を勉強するのは(そんな人が居ればの話だけど)あんまり意味ないような

2010-10-06 23:20:16
Keigo Imai @keigoi

.@hkuwa ただ、関数型にはNullPointerExceptionがないのと、型推論があるのとが工学的に多少有利じゃないかなーと。そのためだけに関数的なものの見方を強要されるのは苦痛かもしれませんが、そういう人は Scala や F#に流れるのかもしれません。

2010-10-07 00:03:44
Keigo Imai @keigoi

あとはやっぱりソフトをimmutableな部分とそうでない部分に分けて作るやりかたを関数型プログラマは熟知しているはずなので、それを形式知にしていくのが重要じゃないかなーとか。 代数的データ型を使えば信頼性あがるよーとか。誰がやるのか知りませんが…笑

2010-10-07 00:08:34
おしいれのぼうけん @osiire

はげしく同意。RT @keigoi 難しいことを知らなくても関数型言語は使えるんですよ!と言いたかったんですがどうもなんかネガティブなこと書いちゃっていかんですね。まあ論文書けないとそーなるってことで

2010-10-07 00:10:21
おしいれのぼうけん @osiire

むしろ最も人間が楽できる言語でしょ > 静的型付け関数型言語

2010-10-07 00:14:45
KUWABARA Hiroaki @hkuwa

.@keigoi NullPointerExceptionとか型推論はそうだと思いますが、自分でやればいい話なので。まぁあまり現実的ではないですが、見方を変えるよりはコストが低い(と錯覚している)のかもしれないですね。

2010-10-07 00:18:56
Nobuo Yamashita @nobsun

@hkuwa むしろどの言語で考えるかで見え方が変わるのだと思います.

2010-10-07 00:19:16
KUWABARA Hiroaki @hkuwa

言語に慣れる(馴染む)のと、その言語にあわせた見え方がしてくるのは同時進行なのだろうと思う

2010-10-07 08:36:05
KUWABARA Hiroaki @hkuwa

これには同意。個人的には関数型に馴染んでるとどう見えるかが知りたい。ので関数型ちゃんとやらないとね。 QT @nobsun ... 「見え方が変わる」という体験は,新しい言葉を学ぶというコスト(?)に対する報酬(?)とも思えます. ...

2010-10-07 08:39:58
Keigo Imai @keigoi

Scalaにはchecked exceptionがない。あったら型がめんどくさいことになりそう。でも意外にJavaでは頼ってた気がする。 そうMaybeみたいに

2010-10-07 12:20:26
Keigo Imai @keigoi

入力は Source.fromFileがあるのにファイル出力にはJavaのWriter使うってマジ?

2010-10-07 12:44:23
Keigo Imai @keigoi

checked例外がないからといってファイル操作をtry-catchで囲まないわけにはいかないと思うんだけど、そうするとコードがJavaのごとくグダグダなアレになるわけでやっぱりcommons-io使おうねという

2010-10-07 13:35:54
Keigo Imai @keigoi

例外をただしく処理しないならせっかくの型安全性も台無しだと思うんだけど、まあOCamlもList.assocが例外を返しやがります的な意味では同じか。

2010-10-07 13:42:13
Keigo Imai @keigoi

いくら関数型といっても関数でないものを関数単位で抽象化して再利用するとかアホなことはせず普通はモジュールでまとめる。 SICPとかに「関数にメッセージを渡す」例は出てくるけどあれはクロージャってオブジェクトと同じく強力な表現能力を持ってますよとかそういう話だったような気がする。

2010-10-07 17:38:55
Jun Furuse @camlspotter

コンピューテーション式は coroutine っぽいインターフェースをを関数型言語で実現するためのちょっとプログラマブルな糖衣構文、ですね?

2010-10-07 20:51:09
Keigo Imai @keigoi

昼間も書いたんですがScalaでIOするときvar out : Wrinter = null; try { out = new PrintWriter(…) } finally { if(out!=null)… }なんてダサイこと書くわけないと信じてるんですがどうなんでしょう

2010-10-07 22:47:03
Keigo Imai @keigoi

.@hkuwa Javaがダサいと言いたいわけではなくて、Java文化ならjakarta commons-io使えばさくっと短く書けるし、それがデファクトスタンダードだと思ってるんですけど、ScalaはScala流の何かがないのかなーと思って。

2010-10-07 23:08:36
kmizu @kmizu

@keigoi 今のところ、(標準ライブラリのみという前提なら)自前でdef using(...)みたいなメソッドを定義してやって、それを利用するしか無いのではないかと。scala-armとかみたいなライブラリ使うという手もありますが。 #scala

2010-10-07 23:16:38
kmizu @kmizu

@keigoi このusingみたいなメソッドはScala界隈ではloan patternとか呼ばれてるので、一応Scala流といえばScala流かと思います。 #scala

2010-10-07 23:18:46
おしいれのぼうけん @osiire

あれ?returnとかbindとかあるので汎用的なpa_monadっぽいものかと思ってました。@camlspotter コンピューテーション式は coroutine っぽいインターフェースをを関数型言語で実現するためのちょっとプログラマブルな糖衣構文、ですね?

2010-10-07 23:19:09
kmizu @kmizu

@keigoi ちなみにscala-armは http://bit.ly/9GhjFi を見るとわかりますが、forを使ってリソースの自動closeを楽に書けるようになっています。 #scala

2010-10-07 23:21:43
Keigo Imai @keigoi

.@kmizu ARM… automatic resource managementですか。例も面白いですね。 さすがScala! http://bit.ly/99p6EH 文句ばっか言っててスミマセン、ありがとうございます…

2010-10-07 23:23:34
前へ 1 ・・ 5 6 次へ