【激突】関数型言語 VS オブジェクト指向言語2
■ このスレッドは過去ログ倉庫に格納されています
0001営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 21:26:47.61一部には関数型言語を崇拝している人もいます
どちらが上なのか、この際はっきりさせましょう
前スレ http://toro.2ch.net/test/read.cgi/tech/1331328955/
0068営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 17:55:38.95オレのコードは誰も褒めてくれなかった。それどころかオセロの難解コートと同列扱いされる始末…orz
0069営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 17:59:46.60出てこないのはやっぱりって感じ
オブジェクト指向・・・設計部分の実装
関数型 or 手続き型 ・・・ 一処理の実装
といわれるのはこういうとことか
0070営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 18:18:58.67発想の基点は恐らく、リスト内包表記でしょうね
勝手に全ての組み合わせを生成してくれますし、条件で生成される組み合わせを絞り込める
それを柔軟に扱えるようにしない手は無いな。と
じつは、昔、別のスレでリスト内包表記と再帰の合わせ技は見掛けてたんですよ
発想だけ貰って、自分で自作しました
関数脳の作り方は今も昔も、どう言う関数?どう動くべき?です
このメソッドを使ってとか、ここはポインタで・・・とかの発想は無いです
最初にベタな発想があって、流用できる関数があれば、流用する
Q:lengthは何をする関数?
A:リストを受け取って、長さを返す関数
Q:lengthはどう動くべき?
A:先頭から、1ずつ足して行くべき
Q:リストが空っぽになったら?
A:足しても変わらない0を返す
length [] = 0
length (_:xs) = 1 + length xs
流用版
length xs = sum [1 | _ <- xs] -- 上のQ&Aと、要素数と同じ数だけ1が入ったリストを生成して足し合わせるのは等価
多分、手続き脳ですでにプログラミング出来てる人は、最初から抽象的に考える素養はあると思うので、仕様をそのまま書いてる感覚さえ分かれば、一気に関数脳になると思います
0071営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 18:35:37.90これは局所的なコードは手続き型のほうが恩恵あることを示している。
C++やJavaが受け入れられたのは局所的でないところでは
OOの援用が有効だということを示している。
関数型と対峙するのは手続き型。
受け入れられるとしたらOOと手続き型の中間地点なんじゃないかな。
0072営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 18:46:14.25俺の場合、まず >>67 のように書いてから、それを発展させて初めて関数的コードになる感じになる
実は前スレの >>172 を書いたのも俺なんだが、同じようなコードをまず書いて、それを inject に直した
そこから更に発展させると関数型言語のコードとして成り立つようには出来ると思うが(inject→foldlの変換は難しくないし)
本当に関数型な人のアプローチとはやはり違う形になってしまうんじゃないかなと思う
0073営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:03:33.53関数に焦点があたってるけどさ、
それより大きな範囲のオブジェクトはどうするのさ?
0074営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:06:22.94昔は、手続き型とか関数型とかの選択肢より、切実にメモリやCPU速度が足りなくて、Cが選択されて、速度を損なわずOOP出来るC++が選択されてきた(OOPも最初はメモリの無駄が多いと敬遠されてきた)
PCの進化とともにLLが選択される場面が増えて来たのと同様に、関数型言語が選択される場面が増えても不思議ではない
・・・けど、C系列の言語が多く選ばれるんだろうな
do記法も、モナドが何となく分かってくると順番が重要な処理をこれまた仕様通りに書いてるだけって気付くし、手続き型を見事に矛盾無く関数型言語でエミュレートしてる事に気付いて鳥肌立つんだが
順序の無い関数の世界で順序の概念をエミュレートしてるって凄い!って
前スレの「テキストファイル読み込んで、行番号つけて表示せよ」ってのを読みやすく?書いてみた
import System.Environment
numbering xs = unlines $ map (\(x,y) -> show x ++ y) (zip [1..] (lines xs))
main = do
fnames <- getArgs
fstrings <- mapM readFile fnames
let numfstrings = map numbering fstrings
putStr $ unlines numfstrings
0075営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:17:21.85とくにJavascriptは関数型風にも書けるけどただの趣味の範囲で終わってる。
0076営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:18:44.83ブラウザで動く言語はJavaScriptで決まりだよ。
0077営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:22:04.440078営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:24:17.120079営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:57:11.75関数型言語は無駄が多いからね。
0080営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 20:42:28.52Objective-CとC#は局所的であることを怖れないが、そういうのは受け入れられにくい
C++とJavaが受け入れられたのは、局所化でないところが実在するのではなく
漠然と、どこかそういうところに行きたいという願望があっただけだろう
0081営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 20:43:30.860082営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:27:01.14意味が分からない
親が動物クラスで子が犬クラス・猫クラスとかのあれ?
型の性質を引き継ぐと言うのは型クラスとか有るけど・・・
ええと・・・で、そのオブジェクトで何をしたいの?どう拡張したいの?それって、オブジェクトである必要あるの?
犬か猫かに合わせて泣き声変えるんなら
data Animals = Dog | Cat deriving (Eq,Show)
voice a | a == Dog = "wan wan!"
voice a | a == Cat = "nya- nya-!"
これで十分なんだけど・・・そして、どっちもanimals型
犬は猫じゃないし、猫も犬じゃない
taroは犬で、taroという名前で、7歳
taro = (Dog,"taro",7)
miiは猫で、miiと言う名前で、3歳
mii = (Cat,"mii",3)
taroは猫じゃないし、miiは犬じゃない
let animalCategory (x,_,_) (y,_,_) = x == y
animalCategory taro mii
>False
0083営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:30:52.01全部受け入れられている言語だと思うが・・・
言語なんて金になるかどうかで受け入れるかどうかが決まるもんだよ
関数型言語で金になる話が無いだけ
と言うわけで関数型言語でスマフォアプリ作れる環境を(ry
0084営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:32:33.29犬とか猫を
どうやって関数型言語で表現するの?
0085営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:35:40.55これを本気でいうからなぁ
0086営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:54:02.37犬とか猫を
どうやってオブジェクト指向言語で表現するの?
まさか class Dog のインスタンスが犬なの?www
0087営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:54:21.43言いたい事は分かったが、なんでUMLで分析しないの?
金銭の概念をオブジェクト指向分析すればいいのに、なぜ犬と猫なんだ?
0088営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:57:00.90型と値の区別ついてるかな?
0089営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:58:20.34もちろん
だからクラスではなくインスタンスだって言ってるだろ
0090営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:08:10.34え、表現できてるでしょ?
むしろ、DogもCatもAnimalsに属してるのであって、オブジェクト指向のDogとCatがAnimalの子って言う関係の方が不自然だよ
そして、SnakeやLionが増えても、Animals型である限り、同じ関数が使えるし、せいぜい1つの機能に付き、一つの関数書き換えで済む(泣き声変えるために、いちいちクラスごとにvoiceメソッドを書く必要も無い)
OOPLでもジェネリックやテンプレートで型ごとにメソッド書くでしょ?
でもそれって、OOPLの利点じゃないと言うか、むしろ関数型言語の方が強力
voiceメソッドがAnimalクラスや、その子クラスにあるのは良いけど、animalCategoryメソッドをAnimalクラスが保持するのは不自然。そうなると、関数型では存在しない第3のクラスを作る必要が出てくる(Categoryクラスみたいな?)
関数型言語のデータはデータ。関数は関数。という関係の方が、シンプルに思える
0091営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:08:18.460092営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:12:10.32それって、関数型言語でオブジェクト指向やってるだけですよね?
0093営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:19:51.16一応さ、型クラス使った方が良いと思うので貼っとくね
Animalに動物足すたびに代数データ型を変更するのはアレなんで
class Animal a where
voice :: a -> String
data Dog = Dog deriving (Eq, Show)
instance Animal Dog where
voice _ = "wan wan!"
data Cat = Cat deriving (Eq, Show)
instance Animal Cat where
voice _ = "nya- nya-!"
taro = (Dog, "taro", 7)
mii = (Cat, "mii", 3)
0094営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:35:52.14いや、プロじゃないんでUML触ったこと無い
名前しか知らん
プロの視点で関数型言語とオブジェクト指向言語の生産性の比較とかやって欲しいところ
素人視点(=感覚的)では、LLとの比較でも、rubyやpythonは記憶力勝負(多くのメソッドを記憶してれば効率的。むしろ、何もメソッド知らない状態だとほぼ何も出来ない)
Haskellは少ない知識で割と素人でも何とかなる(既存の関数知ってる方が効率的なのはLLと変わらないが、何も知らない状態での開発効率に雲泥の差がある)
初学者へのモチベーション維持と言う意味では、関数型言語の方が向いてると思う
そして、最終的な生産効率はLLと変わらないか若干劣る(読みやすさ重視だとほぼ差がなくなる)
昔、length関数をrubyでどう書くの?と言う質問に対して、メソッドとクロージャ駆使して短いコードが返ってきた
素人じゃとても書けないと思った
Haskellなら基本的な再帰関数の作り方覚えるだけで作れるものが、LLだとそれなりの知識を必要とするのだと感じた瞬間だった
0095営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:43:11.49Haskellばかり話題に登るのでMLに触れておくと、
MLにはモジュール(関数とデータの集合)というものがあり、
さらにモジュールを引数に取ってモジュールを返す関数(Functor)がある
これはOOPでいうとクラスからクラスへの関数を定義できるようなもの
カプセル化?差分プログラミング?全部余裕ですよ
0096営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:48:52.63余計なこと考えるだけのメリットが聞きたいのに
0097営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:56:12.60例えば文字列のリストのjoinを
",".join(strlist) とするか
strlist.join(",") にするかみたいなね
0098営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:05:31.47・・・・え?
オブジェクト指向設計って事?
意識したこと無いけど、これがそうなのか・・・
まあ、関数型言語は色んな角度の視点を許容する感覚はあるかな
何だろう。破壊的な代入が出来ない分、そのものの性質を見ようとする体質に自然となるような・・・
Haskell でリストの要素を swap する 9 つの方法
http://jutememo.blogspot.jp/2011/04/haskell-swap-9.html
>>70のlengthも視点の角度が違うだけで等価なものだしプログラミングHaskellの付録Aに書いてるlengthの定義もまた違う視点
length = foldl (\n _ -> n + 1) 0 -- 初期値0とリストの先頭要素を受け取るが、初期値に+1を繰り返すだけ、リストが空になったら蓄積変数(初期値0のもので、リストが空になるまでひたすら+1されてた変数)を返す
仕様の表現の仕方に色んな表現があるけど、OOPLや手続き型は表現自体を制限されてる感じ
だから、そのまま仕様をコードに落とせないと感じるのかも・・・
0099営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:08:49.080100営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:11:21.470101営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:16:53.030102営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:23:09.41でも、ぶっちゃけOOの定義定まってないだろ、このスレで
下手すりゃデータと関数を一纏めにしたらOO、くらいの勢いだぞ
0103営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:32:16.09HaskellでもFancterやArrow使うと表現が広がるってのは良く見かけます
自分もMonadoやFancter・Arrowを自作できると楽しみが広がりそうで楽しみに学習続けてます
(でも現時点でさえ、Rubyでどう書くの?って処理もHaskellで書けてるのですでに関数型言語マンセーですが)
短く書けても、そもそも知識がないんじゃ書けないなら意味がない(と言うのは言い過ぎだが、学習コストが高い)
と言うのが私の持論です
0104営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:42:25.23んなこたー無い
そもそも、ライフゲームはプログラミングHaskellで載ってる
入門書でライフゲーム書かせるOOPLの入門書って何があるよ
ちゃんと読めばdo表記やIOモナドの洗練されてる事が分かる
0105営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:42:42.99OOはオブジェクトを起点としたプログラミング(設計)
関数型ならλ計算を起点としたプログラミング
OO側は最小公倍数を前提してるものが多いのに対し
関数型は言語サポートでそれもできるというレスが多い(Haskeller以外のことね)
俺は関数型のメリットは副作用の排除の明示にあると思ってるから
OOベースの言語に相当の機能追加すればいいんじゃないのっていうスタンス
状態をベースにしないということはモナドで状態を表現して状態を引数
実際D言語はpureキーワードあるけどね
細部の状態を追い出すのは本末転倒(メリットが少ない)だと思うし
GUIやOSを見れば分かるように大枠から状態ベースをやめるのは直感的じゃないと思う。
状態を排除する方向じゃなくコーディングレベルで状態を追い出せる記述力を持たせる。
0106営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:44:50.01もちろん読んでるから知ってるし自分で書いたよ
あれ書いててあれば作りやすいというならば完全に平行線だし
おれの感想は「うそつき」だね
ちなみにライフゲームはOOで書く必要ない。
「状態」をオブジェクト分割する必要性がほぼ無いから
0107営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:51:09.92http://www.cs.nott.ac.uk/~gmh/life.lhs
0108営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:02:29.16というお題の章に乗ってるんだけどな。
つまり書けますよといっているだけでよりメリットがあるとは言っていない。
0109営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:06:55.06部分であってライフゲームじゃない
そしてHaskellでもIO使えば無理じゃないことを学ぼう、という
内容になってるのはちゃんと読んだなら知ってるな
0110営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:08:26.13間違いなく手続きでシンプルにかけるんだが
0111営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:11:56.68それを言うなら、手続き型ベースに、OOと関数型が乗っかる、だ。
だって、関数型OO言語は嫌なんだろ?
0112営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:13:17.49状態を引数に追い出すことにより副作用がなくなるというのは
分かりやすくなる場面が必ずある。
ただ今のところD言語のpureキーワード以上のメリットはあまり感じられない。
0113営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:17:31.33オブジェクトを起点としたプログラミングって何?
ていうか、オブジェクトって何?
関数型言語では関数は第一級オブジェクトなんですが、その場合
関数を起点にしたらその時点でオブジェクト指向なんですかね?
それとも「第一級オブジェクト」でいうところのオブジェクトとは違う
別のオブジェクトの定義があるんですかね?
0114営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:17:48.26うーん別にそれでもいいが、
歴史的にはC言語のグローバル連発からC++のオブジェクト分割って流れだし
設計の面でもフローチャートよりオブジェクト指向分析のほうが大枠だし。
粒度で見ればオブジェクト指向>手続き/関数型が自然な解釈だと思うよ。
0115営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:28:37.22そこの見分け方は「メモリ」です。
>関数を起点にしたらその時点でオブジェクト指向なんですかね?
オブジェクト指向として捉えれば正しいとみることもできるけど
(関数オブジェクトや関数ポインタをオブジェクトとして解釈する)
それは関数型の視点ではない。
関数型特有の視点は一級オブジェクトを「引数」にできるという視点であって
ここでの関数を起点というのはそういう意味。
これが納得いかないのならOOPLにも関数型言語にも両方のフレーバーはあるねというだけ。
別にオブジェクト指向のメリットを取り入れている関数型言語を全否定しないし
関数型の考え方を利用しているOOPも否定しない。
0116営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:32:33.68あーはいはい。俺が変わりに答えるよ。
オブジェクトは日本語で「対象」とか「目的語」とかに訳されるね。
そんで何に対しての「対象/目的」かというと、それは述語、つまり、関数。
だから、
func1( a, b ); の func1 はオブジェクトとして扱われてない。
func2( func1 ); のfunc1 はオブジェクトはオブジェクトとして扱われてる。
つーわけで、引数に取れる=第一級オブジェクトってわけ。
>関数型言語では関数は第一級オブジェクトなんですが
引数に取れる訳だから、第一級オブジェクトで間違いないが、「指向」はしてない。
引数によって関数の呼び出し先がスイッチして始めてOO。
な、OOってつまらねーだろ。
0117営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:38:32.38それでは f x を x の型で(型クラスで)スイッチしたらOOなんですね
ただ型を集合で括っただけでオブジェクトを指向した記憶は無いんですが
確かにつまらないというか、ただの多態ですね
0118営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:40:07.49| fs |
fs := {
[| n | n := 0. [:str | (n := n +1) asString, ' ', str]] value.
[:str | str, ',']
}.
FileStream fileNamed: 'text.txt' do: [:file |
[file atEnd] whileFalse: [
Transcript show: (fs inject: file nextLine into: [:line :f | f value: line])]]
0119営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:41:46.800120営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:43:14.06そそ。
関数型言語でも、型システムがあったりして、
引数の型によって呼び出し先がスイッチするんなら、OOってことになるな。
だから、関数型言語のOOってのも普通にあるわな。(知ってるだろうけど)
0121営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:47:13.80違うのですか?
違うなら説明してもらわないと分かりませんよ
0122営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:48:34.65すでにループだと思うんだけど>>105
0123営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:50:51.79OOPで良くある x.f y z という表記は分かり難くないですか?
なんで x だけ f の前に来てるんですか?
0124営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:54:44.64だからオブジェクトを起点にしてるとだけ言われても分かりませんよ
なんとなくの気分の問題なんですか?
0125営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:56:04.83正直それで分からないときついと思うんだけど。
オブジェクト指向分析とかイメージできる?
0126営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:01:54.50設計者の心の中にしか無いのではないですか?
設計/分析されたものだけを見てオブジェクト指向か否か判定できるのですか?
0127営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:03:10.45その基準を教えてください
0128営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:06:40.85それは正しいとも言えるし正しく無いとも言える。
設計者本人がどう設計したかを100%証明することはできないという意味では正しいが
OOPLで書かれたコードをみてどう設計したかったを推測することは可能。
正直君のレスは哲学レベルの話でソフトウェア工学の話じゃない。
0129営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:09:01.03ソフトウェア工学の話じゃないのは>>115の説明ですよ
>>116の話は分かりますよ?ソフトウェアの機能について言及してますからね
0130営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:10:37.96じゃあどこが理解できないか説明してもらえるかな
あまりに共通言語なさそうだから説明は無理かもしれないけど。
0131営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:11:06.70お前のことだろw 自分で >>105 読み直してみろよw
0132営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:11:39.42どこがか指摘してね
0133営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:18:56.56「起点にする」を正しく定義してください
それはソフトウェアの機能として定義できますか?
プログラマの心理状態として定義するのですか?
それとも哲学的な何かとして定義するのですか?
0134営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:20:45.64えーと正直あほらしいです。
Wikipediaで気分に近い文章を引用してみます。
>ソフトウェア工学において、ソフトウェア (システム) を相互作用するオブジェクトの集まりとしてモデル化 (オブジェクト指向モデリング) する、オブジェクト指向に基づくソフトウェア開発の方法である。
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%88%86%E6%9E%90%E8%A8%AD%E8%A8%88
0135営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:24:59.21その定義は大分>>105や>>115と違いませんか?
それはともかく、それでは関数がオブジェクトの関数型言語では
関数が相互作用してるのでオブジェクト指向ですね
0136営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:29:44.35より一般的な、より抽象度の高い何かとして
オブジェクト指向を定義しようとするあまり
ナンセンスの域に到達してると思いますよ
0137営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:32:10.630138営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:33:20.29自己言及文ですか?
0139営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:57:40.04システム開発は行われるんだよ。
たとえ関数型言語を使ったとしてもね。
だって考えるでしょ?
関数型言語で多態を実装するにはどうしようか?とか。
0140営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 02:02:55.92結局OOか否かは本人の胸先三寸で決まる
伊達にオブジェクト"指向"を名乗ってないな
他にないもんな"指向"なんて付いてるの
0141営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 02:05:04.000142営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 02:17:29.46オブジェクト指向言語で使うのは inclusion polymorphism
関数型言語でよく使うのは parametric polymorphism で、
あと Haskell なら ad-hoc polymorphism も使う(type class)
さて、parametric polymorphism や ad-hoc polymorphism を使ったところで
オブジェクト指向と言えるのかい?
0143営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 02:30:41.890144営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 02:49:26.49クロージャも関数も変数も条件分岐もループも再帰も
全部OOの機能だね、すげぇ
0145営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 03:27:47.51そうは言ってないだろ。
GenericsやtemplateやオーバーロードをOOの機能と認めないなら、
parametric polymorphism や ad-hoc polymorphism を使ったところで
オブジェクト指向といえないし、
逆に、GenericsやtemplateやオーバーロードをOOの機能と認めるのなら、
parametric polymorphism や ad-hoc polymorphism を使ったら
オブジェクト指向といえる。
0146営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 06:17:57.25考えねぇよ
リストとかが多態なだけで、自分はあくまでリスト型を受け取って何かを返す関数作ってるだけ
0147営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:13:50.81JavaやC++よりもMLにparametric polymporhismが入った年のほうが早くね?
それなのにオブジェクト指向が起源になっちゃうの?
0148営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:22:12.21map f [] = []
map f (x:xs) = f x : map f xs
を定義しただけでOOとは、OOの範囲はすごいなぁw
0149営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:40:02.660150営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 14:11:18.890151営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 17:38:02.23モナドは両方使って定義されてるからOOの機能だな
0152営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 18:07:22.23「全てobject oriented」って何だよ意味分からん
「全てオブジェクト」って言いたいのか?
だとしても、Javaのようにブロックすらオブジェクトでない言語も
OOPを名乗ってるから事実と異なる
0153営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 18:25:42.02モナドは両方使って定義されてるから、モナドにはOOが使われている、が正解。
0154営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 18:28:02.270155営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 18:31:10.09あちらさんの言葉で言うところで、だよ。
0156営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 19:09:26.44=> parametric polymorhism は OOPL の必要条件じゃない
オーバーロードが無いRubyがオブジェクト指向言語を名乗ってる
=> ad-hoc polymorhism は OOPL の必要条件じゃない
0157営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:40:19.99そして、オブジェクト”指向”言語
名前からして比較するべきものじゃないんだよ。
オブジェクト指向は、指向って書いてあるとおり考え方。
手続き型言語を使ってオブジェクト指向が出来るように
関数型言語を使ってもオブジェクト指向が出来る。
ではオブジェクト指向言語とは何か?
答えは、オブジェクト指向を素直に表現するのに
便利な構文を持っている言語
だから必須条件なんてものは存在しない。
オブジェクト指向を代表する機能が一つでもあれば
それはオブジェクト指向言語
0158営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:49:59.980159営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:55:14.86Simula,Smalltalkから1985年ころのflavorまでの流れ、その後C++1.0がcfrontとして登場しオブジェクト指向が一旦退化、
C++はその後複雑化の一途を辿っていること。
また、当初アプレットのためにC++を単純化したようなJavaが登場ししばらくはぱっとしなかったこと。
その後2000年ころのITバブルを機会にtomcat,WSDL,UDDIと合わせてWEBサービスで使われるようになり、
Java自体がが中庸のプログラマ向け言語としてソフトウエア開発分野の裾野へ普及していったこと、
素人向けの誤ったのOO本が入門者に誤解を与えいま変なOO感が普及し弊害が目に付くようになったこと、
それとは別の流れとして、haskellのparottなどでの成功を契機に関数型の利点の認識が広まってきたこと…
時代の節目かな。
0160営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:57:58.20OO感→OO観
0161営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:57:59.82オブジェクト指向を取り入れる方向で進化してるよね。
0162営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:59:11.07parottはなかろう…
0163営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:00:32.51関数型言語の利点を取り入れ、
関数型言語はそれだけではアプリを作りにくと
現実的な選択肢としてオブジェクト指向を取り入れる。
0164営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:01:15.18最近楽しいなと思うのは10年くらい前に産声を上げたオデスキーのScalaがここ近年
実用に使われるようになってきたこととか、Clojureというもう一つの選択肢がでてきたこととかetc
0165営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:02:41.73あ、いや成功したのはparottでは(まだ)なく、parottの実装でhaskellが注目されたこと
0166営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:03:54.88関数型もまた、珍しい技術から単なる常識になりつつある
ただそれだけのことだろ
0167営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:05:12.46■ このスレッドは過去ログ倉庫に格納されています