関数型言語とオブジェクト指向型言語って
うーん
どっちかって言うと千と千尋のほうが好きかな 自動的に並列化するのでマルチコア時代には関数型が優れているとHaskellの紹介サイトに書いてあったな。
ベンチも載ってたけど、平均してC/C++の10倍ほど速いみたい。 何を持って優れているとするかによるけど僕は関数型の方が好き. >>1
単純にどっちかが優れてるなんて言えるわけないだろう
ドラゴンボールのだれそれのどっちが強いってのと同じ程度に不毛な話 副作用を排除するっていうのは、どの言語でもできるだけ真似たほうがいいと思う
並列コレクション使うだけで並列化できるってのも、関数型言語だからじゃなく副作用がないからできることだし そもそも関数型とオブジェクト志向は背反する概念では無いだろ 外から見て同値であれば同一と見做すのが関数型。同値であっても異なる存在である場合があるのがオブジェクト。 背反ではないかもしれないけど、少なくともFPをちゃんとサポートした関数型言語においてはOOP的特徴は蛇足でしかない
オブジェクト指向言語でマルチパラダイムを謳っている言語でまともにFPできてる例もあんま知らない
オブジェクト指向言語は変に関数型を取り入れたりしないで素直にOOPを極めた方がいいと思うし、関数型言語はFPだけに特化した方がいいと思っている >>6
言語で束縛しなくても書き手が理解していたら出来ない事ないんだけどな
アルゴリズム中の読みやすくするための値を一時格納する変数は必要としても
全体処理の中にある散乱してる副作用はなんでこれで良いと思った?っていつも思う
副作用無しにするコードが書けてなくて、どのクラスもメソッドも万遍なく副作用を持ってるとか…
OOPにおいてもゴミだわ forthなんかは逆に副作用しか無い言語だけどコードの見通しはいいよな
環境という一つの値をパイプライン処理する
OOPってのは真ん中あたりかな? forthなど連鎖性言語と純粋関数型言語は主と副を入れ替えただけの同等物な気がしてきた パラダイムが違うから関数型用語で言い換えてる、念のため
演算は全て破壊的でなければいけないという教義の言語だけど、そのおかげでソース上ではその前後だけ見れば良い
預かり知らぬところで変なことが起きる事はない 何を指向しようがそれでコンシステントに書けば混乱は起きない
関数型だからとかは関係なくて、ただの一般論 全部イミュータブルにしとけば関数型もオブジェクト指向も同じことでは?
x.f()はf(x)と同じ
x = new X(p); x.f()はf(X(p))と同じ
ただ書き方が違うだけ
ただイミュータブルな前提ならオブジェクト指向のほうが業務的な意味合いをわかりやすく表現しやすい
なので関数型よりイミュータブルオブジェクト指向のほうが優れている それに関数型言語は現実世界に対応できない
副作用がない、は理想だけどそれはあくまでも理想だ
理想現実は違う オブジェクトってのはデータとメソッドをカプセル化したものであって、
レシーバを書けばオブジェクト指向ってわけじゃなかろう。 オブジェクト指向のほうが業務的な意味合いをわかりやすく表現しやすい←嘘 関数型言語=副作用がない って言ってる時点で関数型をちまたの注意をひくためだけの文言しかなぞってなくて
ちゃんと関数型言語を使ってないって自白してるのと同義だから、OOPしか使わない人の関数型ディスは読む価値がない 関数型にハマったバカとオブジェクト指向にハマった馬鹿を比べた場合、
関数型にハマったバカのがまだ話が通じる。 変数なんてまやかし、あるのはグローバル状態のみ
型もまやかし、キャストも甘え、あるのはビット列だけど、それも本質ではなく添字付けられる整数を表しているだけだ
Forthを感じろ OOPは駄目技術の烙印押された感は同意するけど、純粋関数型もコンパイラの最適化に頼りすぎてイマイチだろ
再帰はデメリットが目立ちすぎる。総てを無理やり賄おうとするより命令型のループで済ませ方が自然で可読性も高い
そもそも手続きの最適化を考えて書く行為が関数型の思想じゃないけど、これは組み込みとかで必須だし、これからも無くならない 最近、面白そうだと思って関数型勉強してるけど、正直
「記憶のスタックにいろいろプッシュしながら読ん
でいって、適宜それをポップする」って作業が
かなりつらい…。
わかると、ものすごい納得感があるんだけど、これって
一般的なのかなと。 >>24
だめとは言わんけど変な押し付けする奴はかなり出回った。
関数型も同じ道をある程度進むと思われるが、OOPほど主張として広がりは見せてないところは
まだ悪影響は少ないと感じる。 プログラミングテクニックの域を脱出してるの?これ。 テクニックを積極的にサポートするかしないかの違いだろ?
引数を取る機構とポインタさえ存在すれば常に関数型プログラミングはできるし、名前空間と継承&インスタンス関係を示すデータ構造があればクラスベースオブジェクト志向プログラミングはできる
後者のスタンス取ってるのはpythonだな、全てユーザー定義用と同じ辞書で実装してる(丸見え) 引数や名前空間機構すらないpsやforthでOOPや関数型プログラミングする為の小さいスクリプト落ちてるし、変に言語仕様で縛らない方がいいと思う
仕様で縛られない限り誰かがどこかで書いてるから、適宜自分の好きなスタイルに書き換えて使え 仕組みが用意されてるかどうかの違い
もともとは関数型言語の構造体を使って各自が実装していただけで、やってることは同じ 関数型とオブジェクト指向が合体したらいいのにな(´・ω・`) 最近のプログラミング言語の多くはマルチパラダイム言語だから
手続き・命令型、オブジェクト指向型、関数型などの宣言型プログラミングに
その言語なりのやり方で対応していたりする。
特定のプログラミングポリシーに特化された言語もあるけれども、
プログラマーの好みや用途に応じて臨機応変に使い分けられるんじゃないかな。