カプセル化は愚かな考え

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2020/07/29(水) 17:17:58.13ID:u638n5uE
■危険性

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性(RFC 3439)」として「カプセル化は絶対にやめろ」としている。

大雑把にいうと、教科書の上では素晴らしく、開発を始めた最初のうちは良いが、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
844デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:23:09.61ID:zzSWw99B
>>839
「ズンドコベロンチョ」は、俺の股間に付いている!
2020/09/04(金) 18:26:08.59ID:/hJPKHew
>>843
> F#ならnew Buttonで作れる
そりゃオブジェクト指向の機能を使ってるからな
846デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:27:32.23ID:0wfgbo8M
>>845
関数型言語ではオブジェクト指向の機能を使います
2020/09/04(金) 18:33:51.31ID:/hJPKHew
>>846
単に「オブジェクト指向の機能を使います」で十分でしょw
848デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:35:52.20ID:0wfgbo8M
>>847
何の話ですか?
2020/09/04(金) 18:37:23.97ID:/hJPKHew
>>848
どの言語でもオブジェクト指向を使うという話です。
850デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:39:00.61ID:0wfgbo8M
>>849
つまり関数型言語ではオブジェクト指向の機能を使うってことですね
851デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:40:16.94ID:0wfgbo8M
関数型言語は「どの言語」に含まれます
852デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:41:18.57ID:0wfgbo8M
> ボタンを作るにはどうすればいいんだ?
関数型言語だからといって悩む必要などないのです
ボタンはnew Buttonで作れます
2020/09/04(金) 18:42:55.29ID:67e8l95x
>>850
「関数型を名乗っている言語でも」っていうのが正確ですね
なので純粋な関数型では不可能なんです。
2020/09/04(金) 18:43:21.23ID:67e8l95x
>>852
さっきも書いたように、それはオブジェクト指向の機能です。
2020/09/04(金) 18:44:27.17ID:67e8l95x
F#はオブジェクト指向言語+関数型言語
オブジェクト指向言語に関数型を取り入れた言語なんです。
純粋な関数型ではないんです。
856デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:46:57.81ID:0wfgbo8M
>>853
ボタンの機能にはGUI Toolkitが必要です
HaskellでGtkを使う例
https://www.stackbuilders.com/tutorials/haskell/gui-application/
857デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:48:03.77ID:0wfgbo8M
>>854
関数型言語ではオブジェクト指向の機能を使います
2020/09/04(金) 18:52:10.66ID:67e8l95x
結局の所、有用なものはすべてオブジェクト指向なんです。
859デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:55:33.07ID:0wfgbo8M
関数型言語も有用なのでオブジェクト指向と言って良いでしょう
860デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:57:15.82ID:0wfgbo8M
オブジェクト指向関数型言語を省略したものが関数型言語なのでしょうね
オブジェクトを作れない、オブジェクトを操作できない関数型言語は存在しません
861デフォルトの名無しさん
垢版 |
2020/09/04(金) 19:44:45.33ID:0q9nxY6X
>>849
オブジェクト指向は俺の股間に付いている!
2020/09/04(金) 22:01:21.46ID:7/5Xc9M6
>>657
どうにかして、そのパンティーに俺のおちんちんを突っ込みたい。
2020/09/05(土) 01:24:48.25ID:Tue1Ajzg
https://video.twimg.com/ext_tw_video/1256123469747703808/pu/vid/392x360/Vrjt4lsyRUbuGK8R.mp4?tag=10
2020/09/05(土) 02:33:11.09ID:7d8HPhGj
それも有用なのでオブジェクト指向と言って良いでしょう
結局、都合の良いことはすべてオブジェクト指向なんです
2020/09/05(土) 02:35:09.52ID:Rig+HVkc
オブジェクト指向の考え方が現れる以前も
有用なものは実はオブジェクト指向を使っていたんです
2020/09/05(土) 02:36:47.70ID:yxLRF7gq
そもそも関数型はオブジェクト指向の考え方から生まれた概念だったんです
2020/09/05(土) 02:39:27.42ID:LysGX1WG
>>865
さすがあなたは分かっていらっしゃる
信じるものは救われる   かも
ザーメン
2020/09/05(土) 02:43:18.04ID:8p8cEJTs
それは真理に対する冒涜です
オブジェクト指向は幻想だったのです
2020/09/05(土) 02:44:53.71ID:Z6T2tUbK
都市伝説、インチキ、ナンチャッテ工学モドキだったのです
でも、それを言っちゃー、お仕舞よ
2020/09/05(土) 02:58:46.45ID:reBScYEy
https://www.youtube.com/watch?v=40W_hc_q8XU&;hd=1
2020/09/05(土) 03:04:42.31ID:reBScYEy
https://www.youtube.com/watch?v=K-JtRGYbC8w&;feature=youtu.be
872デフォルトの名無しさん
垢版 |
2020/09/05(土) 09:07:55.71ID:D1vNohy2
>>854
オシッコする時は制御型、勃起する時は自律型。
2020/09/05(土) 10:44:21.72ID:pH42N7I+
>>872
あらあら、隠蔽してるわね
これがカプセル化かしら
874デフォルトの名無しさん
垢版 |
2020/09/05(土) 11:09:12.76ID:8SDdoWCb
>>814
思想的にはSICPに書いてるストリームそのものだ
ttps://sicp.iijlab.net/fulltext/x350.html
2020/09/05(土) 11:40:32.92ID:HNHK9ynw
SICPの思想ってダサいんですね
2020/09/05(土) 14:30:58.08ID:OV3VFUME
なんでマキマはパワー殺したんや?

パワーちゃんを返せ!!(´;ω;`)ブワッ
2020/09/06(日) 00:18:58.13ID:EHj/0lhS
結局の所クローズドソース、外部ライブラリ全否定でしかないな
OS、ドライバ、アプリすべてを自分で作れが結論になってしまう歪んだ主張
2020/09/06(日) 02:07:24.98ID:cRkvTnxS
状態を持つかどうか
2020/09/06(日) 04:06:37.81ID:YGBdC9vb
関数型で、状態を持たせなければいい!じゃなくて
関数型で状態をどうやってもたせるかって話をしてくれ
状態っていうのはなくすのは不可能なものなんだ
2020/09/06(日) 05:18:42.56ID:SNogxihD
>>879
レコード作るだけじゃん
2020/09/06(日) 05:53:21.72ID:YGBdC9vb
>>880
関数型言語一般の用語で言ってくれませんか?
2020/09/06(日) 06:01:14.89ID:SNogxihD
>>881
ググってみ
2020/09/06(日) 07:07:15.01ID:YGBdC9vb
ググったけど、F#専用の用語だった
2020/09/06(日) 10:33:46.44ID:SNogxihD
ハスケルでも使うわハゲ
2020/09/06(日) 10:36:37.41ID:SNogxihD
関数型にわかのうえに検索力も無い
関数型に憧れてるだけのアホ
2020/09/06(日) 10:42:40.26ID:JCtY/Fts
関数型言語の「関数型」は
関数を変数として扱える=関数型という変数の型を持っている
ということを表していて、
関数型言語を単純に定義すれば、関数型を持っている言語
ということでいいの?
887デフォルトの名無しさん
垢版 |
2020/09/06(日) 11:03:01.77ID:5MBR0P77
参照透過性があってメモ化が可能で状態の無いピュアな関数だけだから関数型だ
2020/09/06(日) 11:18:28.00ID:JCtY/Fts
>>887
それは関数型言語ないしは関数型言語によるプログラミングの理想形であって
関数型の定義というか要件ではないように思える

定義、要件、理想、本質、それによってもたらされた機能…
そういうのがごちゃ混ぜになって話がまとまらなくなってる気がする
889デフォルトの名無しさん
垢版 |
2020/09/06(日) 11:57:32.78ID:SNogxihD
>>886
〜型言語の「型」はdata typeの訳語ではなくて
ある特徴を持っているという意味だよ

最新型ノートパソコンの「型」と同じ働き
2020/09/06(日) 12:21:24.89ID:gGwX7R3F
>>880
レコードってタプルやコレクションと同列のただのデータ型じゃね?
891デフォルトの名無しさん
垢版 |
2020/09/06(日) 12:25:15.66ID:nDvuYYqI
関数型プログラミングがわからない、
でも勉強したくないし、チュートリアル数ページすら読まない

こういう輩を相手に何言っても無駄
理解出来ないだけでなく、理解しようという気がないから
892デフォルトの名無しさん
垢版 |
2020/09/06(日) 12:28:26.25ID:SNogxihD
>>890
C言語でいうところの構造体だね
2020/09/06(日) 12:32:39.91ID:n2EZq4Ad
privateがなくてpublicしかない構造体
内部データを持てない構造体
2020/09/06(日) 12:46:56.99ID:gGwX7R3F
>>892
じゃあレコードでなければならない理由はないんだよな。
895デフォルトの名無しさん
垢版 |
2020/09/06(日) 12:58:13.53ID:SNogxihD
>>894
なにが?
2020/09/06(日) 13:03:09.55ID:gGwX7R3F
>>880が。
897デフォルトの名無しさん
垢版 |
2020/09/06(日) 13:04:50.70ID:SNogxihD
>>896
ないんじゃね、レコードしかないとは>>880さんは言ってないし
2020/09/06(日) 13:23:08.96ID:cRkvTnxS
関数へのポインタが使えるCは関数型言語
2020/09/06(日) 13:36:39.46ID:F+CgsiXq
ポインタ含む参照型がある言語は関数型ではない
関数型は参照型禁止、値型しか無い
2020/09/06(日) 13:40:27.64ID:gGwX7R3F
>>897
つまり>>880は「値作るだけじゃん」と読み替えても同じということ?
901デフォルトの名無しさん
垢版 |
2020/09/06(日) 13:43:40.01ID:SNogxihD
状態が不変なら参照型も値型も扱い方は同じ
値のコピーを取る値型よりも参照型の方が効率的
902デフォルトの名無しさん
垢版 |
2020/09/06(日) 13:44:34.03ID:SNogxihD
>>900
違うんじゃね、>>880さんはレコードと言ってる
レコードと値は別のもの
2020/09/06(日) 14:03:17.00ID:NTBgE1bF
関数型で状態管理するのは別にそんな複雑な話でもなくて、状態を戻り値にした関数作るだけだぞ。
コネクション管理だったりreduxの作りだったりで見かけたりはする。
別にいいとも悪いとも思わんが。
2020/09/06(日) 14:05:16.32ID:rO2fthBs
問題はその状態がpublicだから誰でも見れちゃうという所
2020/09/06(日) 14:08:22.94ID:NTBgE1bF
>>904
いやそれがパブリックかどうかを気にするようなスコープで使ってることのが問題
2020/09/06(日) 14:09:37.52ID:gGwX7R3F
>>902
>>880はレコード型の値を作ることを言っているかと思ったんだが?
907デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:16:55.47ID:SNogxihD
>>906
>>880さんが言ってるのは「レコード作るだけじゃん」ってことだよ
読み直してごらん、それ以外のことを言ってない

>>906さんが「値作るだけじゃん」と言ったのであって
>>880さんはそんなこと言ってません
2020/09/06(日) 14:33:58.57ID:gGwX7R3F
>>880で作るといっていた「レコード」がレコード型の値のことでなければ何だったんだろうか。
まさかレコード型の方か?
909デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:36:14.18ID:SNogxihD
>>908
レコードを作ると言ってるんだからレコードのことに決まってます
910デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:38:21.85ID:SNogxihD
マリオ「ドラキュラはにんにくが嫌いだ」
ルイージ「にんにくは野菜だからドラキュラはにんにくという野菜が嫌いなんだ」
ルイージ「ドラキュラは野菜が嫌いだとマリオが言っていたので
  僕はとっておきのにんじんをドラキュラに投げつけてやるんです」
2020/09/06(日) 14:54:38.53ID:gGwX7R3F
値でも型でもない「レコード」というと、はて…?
まさかデータベースとか円盤とかではあるまいが。
912デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:57:16.66ID:SNogxihD
>>911
レコードは関数やオブジェクト、参照、ポインタって可能性もありますね
DBは正式にはタプルかな、CSVではフィールドの集まりと定義されてる
913デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:58:50.00ID:SNogxihD
いずれにしても>>880さんは「レコード作るだけじゃん」と言っておられるのだから
レコードを作るだけなんだなあと受け取るのが正しい理解
914デフォルトの名無しさん
垢版 |
2020/09/06(日) 14:59:33.93ID:SNogxihD
マリオ「ドラキュラはにんにくが嫌いだ」
正しいルイージ「ドラキュラはにんにくが嫌いなんだなあ」
2020/09/06(日) 15:09:57.16ID:NTBgE1bF
おまえらはご飯論法とか藁人形論法ってやつから勉強しなおしだな
2020/09/06(日) 15:11:11.31ID:gGwX7R3F
>>913
つまり>>880は適当なことを言っていたので煙に巻こうとしていると。
917デフォルトの名無しさん
垢版 |
2020/09/06(日) 15:13:56.70ID:SNogxihD
>>916
>>880さんは正しいこと言ってると思いますよ
918デフォルトの名無しさん
垢版 |
2020/09/06(日) 15:22:52.23ID:SNogxihD
ダルビッシュ → すごい
日本人 → すごい

レコード → 状態
値 → 状態

この論理展開が正しいと思ってる人はいるっぽい
919デフォルトの名無しさん
垢版 |
2020/09/08(火) 11:27:04.86ID:M9fpICKB
>>879

>649-651に書いてる。
920デフォルトの名無しさん
垢版 |
2020/09/08(火) 13:03:50.09ID:dd3/c9tT
Haskellも当初はstreamで、それが何かしらの不都合が合ってmonadにしたんだろ
2020/09/08(火) 16:00:21.90ID:7o8rcsWh
>>919
書いてない。10個ぐらいの状態を保存するコードを書いてくれ
922デフォルトの名無しさん
垢版 |
2020/09/08(火) 16:11:26.42ID:98huypqy
>>921
引数を10個+αにしたり、10個の値の入ったリストなりタプルなりを渡す末尾再帰にすれば良いだけですが・・・。

もしくは>911の様な理解でも良い。
同様な物としてGUI部品そのもの(が確保してるメモリ領域)に保持させる。
Haskellから見れば外部から値を受け取って、外部に値を返すだけの「関数の様に振る舞う物(圏論で言う射)」になる。
923デフォルトの名無しさん
垢版 |
2020/09/08(火) 16:28:58.38ID:r41CjiKh
状態を変えずに10個の状態を保存する例
https://paiza.io/projects/Bnk3OVs0L5TawdxlD4MHbw
2020/09/08(火) 20:38:03.15ID:7o8rcsWh
> 引数を10個+αにしたり、10個の値の入ったリストなりタプルなりを渡す末尾再帰にすれば良いだけですが・・・。

その延長だとHTMLのボタンとかだと
引数が30個とかそれ以上になるんでしょうねw
2020/09/08(火) 22:02:06.87ID:jZ8u+myy
>>924
チュートリアル1ページくらい読めってw
https://guide.elm-lang.org/

button [ onClick Decrement ] [ text "-" ]

buttonに渡してるのはattributeのlistと子要素となるHTMLのlistの2つだけ
HTMLを理解してればこれで十分って分かるよね?
926デフォルトの名無しさん
垢版 |
2020/09/09(水) 11:00:16.10ID:3XOrsz21
>>924
そう言うのんはHaskellの外側だから、ライブラリの初期化関数に読み込ませて、必要な関数に対応させるだけだお。

純粋関数型言語だから状態を持てないんじゃ無くて、状態をHaskellの外に置くのか、関数の引数にして引き回すのかの違いだけ。
副作用が無いとか、状態が無いとかは捉え方の問題で、状態も持つし副作用も有る。
参照透明性が崩れないのが普通の言語との違い。
927デフォルトの名無しさん
垢版 |
2020/09/11(金) 12:24:48.69ID:RHaf2uZH
キンタマはチンポに含まれるか否かだが、オシッコするときは含まないが射精するときは含む。
2020/09/11(金) 17:27:46.63ID:NYYME8Ut
ハスケラーはまずモナドのわかり易い説明をここでしないとチン子さんとか納得しないんじゃないか
929デフォルトの名無しさん
垢版 |
2020/09/11(金) 17:43:18.98ID:+vDFdDgu
モナドは入れ物から取り出して、なんかして、また入れ物に戻す動作。
そんな動作に付けられた名前がモナド。
2020/09/11(金) 18:36:34.58ID:f71Kzwl/
では穴を掘ってまた埋める動作に付けられた名前は?
2020/09/11(金) 20:38:25.73ID:mVOjSWLc
死の家の記録?
2020/09/12(土) 01:37:20.53ID:QNK+KyLB
https://video.twimg.com/ext_tw_video/1302046042913873920/pu/vid/1280x720/N8oOVAS-fmlhoZDn.mp4
933デフォルトの名無しさん
垢版 |
2020/09/12(土) 14:18:08.44ID:sCUhPtXX
>>930
その動作もモナドで表現出来る。
失敗する可能性のある処理に使うMaybe型もモナドなので、何も埋まってない穴を掘って何も埋まってない穴を埋め戻すのはNothing を受け取ってNothingを返すのと同じ。
(Nothing(答えが存在しない) がMaybe型の空っぽに相当する表現)

Nothing >>= f = Nothing

空っぽになったら無条件で空っぽを返すので、戻り値を捨てて新しい値を作らない限り、何度掘ってもNothing。


Nothing >>= f >>= f = Nothing
934デフォルトの名無しさん
垢版 |
2020/09/12(土) 14:38:29.60ID:sCUhPtXX
500円貯金をMaybe型で、fが500円入れる。gがx円取り出す。

Just 500 >>= f >>= f >>= g 1500

f x = Just (x + 500)

g x y | x >= y = Nothing
g x y = Just (y - x)

Out:
Nothing


Just 500 >>= f >>= f >>= g 500

f x = Just (x + 500)

g x y | x >= y = Nothing
g x y = Just (y - x)

Out:
Just 1000
2020/09/12(土) 16:08:34.35ID:bxqUAjH/
やっぱりhaskell出張スレになったか
936デフォルトの名無しさん
垢版 |
2020/09/13(日) 10:20:25.96ID:faTCmF/o
繋がっているけれども独立している、単語と文章と文脈は、繋がっているけれどもそれぞれ独立している。
チンポは自分と繋がっているけれども独立している。
937デフォルトの名無しさん
垢版 |
2020/09/13(日) 21:59:48.77ID:EskaTVcj
データベースというグローバル変数
938デフォルトの名無しさん
垢版 |
2020/09/13(日) 22:13:23.88ID:lu6eiMc4
管理しきれればグローバル変数だろうがなんだろうがいいんだ
2020/09/13(日) 22:20:22.63ID:C9gyjUSw
>>937
テスト用のDBに切り替えられるようなコードにしとけよ。
940デフォルトの名無しさん
垢版 |
2020/09/13(日) 22:36:45.09ID:BuLbEsQM
>>937
データベースに頼る統計的機械翻訳はオシマイ、自然言語処理はオブジェクト指向で。
繋がっているけれども独立している、オシッコするときのチンポは制御型、勃起するときのチンポは自律型。
941デフォルトの名無しさん
垢版 |
2020/09/14(月) 00:48:24.64ID:LBeWsbwt
>>937
それは単にデータベースのデータの管理とデータベース製品の使い方を知らないだけ
942デフォルトの名無しさん
垢版 |
2020/09/14(月) 02:30:40.99ID:BcrTLwn4
>>936
チンポと言えば、あわしろいくや。
2020/09/14(月) 09:05:52.30ID:rs21NGsW
>>938
規模の拡大に伴って急激に管理しきれなくなるから問題なんだよ
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。