■危険性
かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性(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)
カプセル化は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/07/29(水) 17:17:58.13ID:u638n5uE257デフォルトの名無しさん
2020/08/21(金) 10:42:26.76ID:cTh5+k8G >>256
必要な引数が多かったらどうすんの?
必要な引数が多かったらどうすんの?
258デフォルトの名無しさん
2020/08/21(金) 10:49:23.77ID:FlbTfju5 >>257
処理を分けるかそれができなければ
その引数はそのメソッドに必要なものなので潔く引数にズラズラ並べる
こうすることで
引数を通した時点で型チェック
メソッドを呼び出した頭で値のチェックができ、適切なエラーが出せるし出しやすい
無くしてしまっては何にもわからない
呼び出した側はその変数がそのメソッドに使われているかどうかすらわからない
エラーを出してもそれが内包されてるメンバ変数では一体何が起こったのかさっぱりわからない
処理を分けるかそれができなければ
その引数はそのメソッドに必要なものなので潔く引数にズラズラ並べる
こうすることで
引数を通した時点で型チェック
メソッドを呼び出した頭で値のチェックができ、適切なエラーが出せるし出しやすい
無くしてしまっては何にもわからない
呼び出した側はその変数がそのメソッドに使われているかどうかすらわからない
エラーを出してもそれが内包されてるメンバ変数では一体何が起こったのかさっぱりわからない
259デフォルトの名無しさん
2020/08/21(金) 10:57:12.37ID:wUhiKu+g >>258
俺はお前が何をやってるのかさっぱりわからないよw
結局のところ、お前はお前の言うやり方で、現実的に意味のある動作をするそれなりの規模のプログラムを書いたことはあるの?
実際のスケール感を無視して、頭の中の小さなサンプルだけをイメージしながら机上の空論を並べ立ててるだけでないの?
そりゃ自分に都合のいいモデルだけをイメージしてれば、サイキョーのカンペキな理論ができるわな
俺はお前が何をやってるのかさっぱりわからないよw
結局のところ、お前はお前の言うやり方で、現実的に意味のある動作をするそれなりの規模のプログラムを書いたことはあるの?
実際のスケール感を無視して、頭の中の小さなサンプルだけをイメージしながら机上の空論を並べ立ててるだけでないの?
そりゃ自分に都合のいいモデルだけをイメージしてれば、サイキョーのカンペキな理論ができるわな
260デフォルトの名無しさん
2020/08/21(金) 10:58:41.37ID:xkZp2iCS もうこのバカ相手にするのやめません?
261デフォルトの名無しさん
2020/08/21(金) 11:01:10.93ID:cTh5+k8G262デフォルトの名無しさん
2020/08/21(金) 11:01:36.84ID:cTh5+k8G263デフォルトの名無しさん
2020/08/21(金) 11:01:59.90ID:cTh5+k8G >>260
おもちゃを取り上げないでくれないかな?w
おもちゃを取り上げないでくれないかな?w
264デフォルトの名無しさん
2020/08/21(金) 11:11:15.32ID:FlbTfju5265デフォルトの名無しさん
2020/08/21(金) 11:29:37.79ID:cTh5+k8G266デフォルトの名無しさん
2020/08/21(金) 11:30:05.87ID:cTh5+k8G 何度言っても理解できない。アホなのか?本当のアホなのか?
267デフォルトの名無しさん
2020/08/21(金) 11:33:26.05ID:cTh5+k8G 引数で渡すと、この値なんなんですか?ってなる
「内部で使用するフラグです。」
初期化関数を呼んだら内部で必要なデータを返しますので
次呼ぶときに渡してください。
ファイルハンドルっていうんです。
みたいなね。
内部情報が一つだけならいいが
複数あったらどうするのか?
ファイルハンドルは内部に確保したメモリに
シーク位置を紐付けて保存してるんですよ
なんてことになるw
「内部で使用するフラグです。」
初期化関数を呼んだら内部で必要なデータを返しますので
次呼ぶときに渡してください。
ファイルハンドルっていうんです。
みたいなね。
内部情報が一つだけならいいが
複数あったらどうするのか?
ファイルハンドルは内部に確保したメモリに
シーク位置を紐付けて保存してるんですよ
なんてことになるw
268デフォルトの名無しさん
2020/08/21(金) 11:47:09.66ID:UrYJ9hGn >>247
ボタンごときに膨大なプロパティがあるのがおかしい
整理できてないw
さておき、実際にはほとんどデフォルトで使うから、「クラスなら面倒がない」と言いたいのかな
関数でも名前付き引数、あるいはコレクション渡しで未設定ならデフォルト、で省略できると思うが
まあコレクションはオブジェクト指向の基礎なので、これを使えば既にオブジェクト指向なんだろうけど
WinAPIもスタティック関数でオブジェクトを動かすので、スタティック関数は別にオブジェクト指向の対立概念ではないが
ボタンごときに膨大なプロパティがあるのがおかしい
整理できてないw
さておき、実際にはほとんどデフォルトで使うから、「クラスなら面倒がない」と言いたいのかな
関数でも名前付き引数、あるいはコレクション渡しで未設定ならデフォルト、で省略できると思うが
まあコレクションはオブジェクト指向の基礎なので、これを使えば既にオブジェクト指向なんだろうけど
WinAPIもスタティック関数でオブジェクトを動かすので、スタティック関数は別にオブジェクト指向の対立概念ではないが
269デフォルトの名無しさん
2020/08/21(金) 12:00:44.90ID:pQPzrAvT >>267
内部で〜はお前が出してるメッセージの問題だよね?
内部で〜はお前が出してるメッセージの問題だよね?
270デフォルトの名無しさん
2020/08/21(金) 12:03:46.30ID:pQPzrAvT271デフォルトの名無しさん
2020/08/21(金) 12:08:14.57ID:cTh5+k8G >>268
> ボタンごときに膨大なプロパティがあるのがおかしい
現実見ろよ
お前が言う方法で、create_button関数作ってみ
ボタンの属性として、ボタンの値、無効ボタンかどうか、
位置x、y、z座標、文字の色、ボタンの色、枠のスタイル、
ボタンの余白、文字の右寄せ・左寄せ、フォント、
まだまだあるが、これぐらいでいいだろう?
ボタンを作ったらこれだけの属性が初期設定として
設定される
はい、引数で作ってみてください
あと将来の拡張性も考えてね。
増えるかもしれない
> ボタンごときに膨大なプロパティがあるのがおかしい
現実見ろよ
お前が言う方法で、create_button関数作ってみ
ボタンの属性として、ボタンの値、無効ボタンかどうか、
位置x、y、z座標、文字の色、ボタンの色、枠のスタイル、
ボタンの余白、文字の右寄せ・左寄せ、フォント、
まだまだあるが、これぐらいでいいだろう?
ボタンを作ったらこれだけの属性が初期設定として
設定される
はい、引数で作ってみてください
あと将来の拡張性も考えてね。
増えるかもしれない
272デフォルトの名無しさん
2020/08/21(金) 12:24:30.10ID:FlbTfju5 構造体でも作れば見た目シンプルになるで
273デフォルトの名無しさん
2020/08/21(金) 12:28:47.71ID:AwYjNd+Z274デフォルトの名無しさん
2020/08/21(金) 12:32:51.09ID:AwYjNd+Z 結局、引数で複数の情報を与えるのはずらずら何十個の並べれば
また可能だとしても、戻り値が一つしかないから現実的じゃないんだよね
クラスを使うのは、一つのメソッドで
複数のプロパティを操作することがあるからなわけ
例えばcreate_buttonだったら複数のプロパティを初期化する
戻り値で複数の値を返せないし、戻り値を構造体とかクラスにして返すとしたら
結局それはお前の言うクラス内のグローバル変数と同じになってしまう
引数の構造体(クラス)のうちどこを変更するかわからないからね
また可能だとしても、戻り値が一つしかないから現実的じゃないんだよね
クラスを使うのは、一つのメソッドで
複数のプロパティを操作することがあるからなわけ
例えばcreate_buttonだったら複数のプロパティを初期化する
戻り値で複数の値を返せないし、戻り値を構造体とかクラスにして返すとしたら
結局それはお前の言うクラス内のグローバル変数と同じになってしまう
引数の構造体(クラス)のうちどこを変更するかわからないからね
275デフォルトの名無しさん
2020/08/21(金) 12:50:37.55ID:AwYjNd+Z 引数で渡すと将来の修正時の拡張性と互換性が犠牲になる
これはいい知見だ
これはいい知見だ
276デフォルトの名無しさん
2020/08/21(金) 12:51:17.64ID:7UnAdk+W 変数のスコープと型の違いも区別できてないようだと
どういうやり方しても泥スパゲッティしか出来上がらない
どういうやり方しても泥スパゲッティしか出来上がらない
277デフォルトの名無しさん
2020/08/21(金) 12:53:26.97ID:Q2DXCe4b 関数型を否定するのか。
278デフォルトの名無しさん
2020/08/21(金) 12:57:43.17ID:AwYjNd+Z 関数型は否定してないよ
少数の引数と一つの戻り値だけで実現できることなら関数型でやればいい
それができないことまで無理してやろうとするのはデメリットしか無いという話
引数で渡せばメリットが有る、だから引数で渡すようにしよう!
これは間違いで
引数で渡せる場合は、関数型にメリットが有るが
そうでない場合にはむしろろデメリットになる
条件に応じて関数型にするかに分岐するのであって
関数型にするために条件を無理やり歪めてはいけないということ
少数の引数と一つの戻り値だけで実現できることなら関数型でやればいい
それができないことまで無理してやろうとするのはデメリットしか無いという話
引数で渡せばメリットが有る、だから引数で渡すようにしよう!
これは間違いで
引数で渡せる場合は、関数型にメリットが有るが
そうでない場合にはむしろろデメリットになる
条件に応じて関数型にするかに分岐するのであって
関数型にするために条件を無理やり歪めてはいけないということ
279デフォルトの名無しさん
2020/08/21(金) 13:56:53.08ID:YabcZt9w 構造体でまとめることによって引数で渡せるようになるのなら、そうした方が関数型的な考え方に親和的ということはない?
戻り値が引数以外に依存するのはできるだけ避けるというのが関数形的な発想かと思っていたが、
戻り値が引数以外に依存するのはできるだけ避けるというのが関数形的な発想かと思っていたが、
280デフォルトの名無しさん
2020/08/21(金) 14:03:53.99ID:AwYjNd+Z >>279
そうすると結局、クラス内のメンバ変数のどこがいじられるかわからないというのが
引数の構造体のどこがいじられるかわからないという問題に変わるだけで
関数型を使うメリットが無くなる
じゃあもうクラスでいいじゃんとなる
何度も言うように、関数型が優れてるから関数型に移行するのではなく
関数型が優れてる場合は限られてるので、そこだけ関数型にすればいい
関数型にメリットがないならオブジェクト指向にすればいい
その例が、ボタンの生成のように一つの関数で
複数のメンバ変数を初期化するような例
そうすると結局、クラス内のメンバ変数のどこがいじられるかわからないというのが
引数の構造体のどこがいじられるかわからないという問題に変わるだけで
関数型を使うメリットが無くなる
じゃあもうクラスでいいじゃんとなる
何度も言うように、関数型が優れてるから関数型に移行するのではなく
関数型が優れてる場合は限られてるので、そこだけ関数型にすればいい
関数型にメリットがないならオブジェクト指向にすればいい
その例が、ボタンの生成のように一つの関数で
複数のメンバ変数を初期化するような例
281デフォルトの名無しさん
2020/08/21(金) 14:05:27.74ID:AwYjNd+Z × 戻り値が引数以外に依存するのはできるだけ避ける
○ 戻り値が引数以外に依存するのが "避けられる場合に限って" 関数型を使いましょう
○ 戻り値が引数以外に依存するのが "避けられる場合に限って" 関数型を使いましょう
282デフォルトの名無しさん
2020/08/21(金) 14:22:18.92ID:7UnAdk+W 関数型を実践したこともないのに
知ったかして関数型関数型と連呼しちゃうのは
日本を出たこともなく日本のことしか知らないのに
欧米では〜欧米では〜と連呼してるのと同じ
知ったかして関数型関数型と連呼しちゃうのは
日本を出たこともなく日本のことしか知らないのに
欧米では〜欧米では〜と連呼してるのと同じ
283デフォルトの名無しさん
2020/08/21(金) 14:28:24.68ID:Tdq0GS4g 自分で経験したことしか信じない人っていますよね
284デフォルトの名無しさん
2020/08/21(金) 14:42:05.45ID:Tdq0GS4g じゃあグローバル変数を使って大規模なプログラムを組み上げたことがない人はグローバル変数を批判してはいけないのか
実践せずともわかるだろうが、関数型も欧米も想像で十分
実践せずともわかるだろうが、関数型も欧米も想像で十分
285デフォルトの名無しさん
2020/08/21(金) 15:11:36.49ID:AwYjNd+Z だから多数のプロパティを持つcreate_buttonを関数型で実装してほしい
286デフォルトの名無しさん
2020/08/21(金) 15:22:29.34ID:xkZp2iCS それもグローバル変数を使わずに
287デフォルトの名無しさん
2020/08/21(金) 15:23:39.17ID:xkZp2iCS 押下されたらちゃんとその状態も反映すること
288デフォルトの名無しさん
2020/08/21(金) 15:27:03.62ID:Q2DXCe4b 1クラス1メソッドの原則を守れば可能。
289デフォルトの名無しさん
2020/08/21(金) 15:29:04.16ID:2S3OsUgZ 1クラス1メソッドの原則なんて言葉はお前が考え出したものだろ?w
290デフォルトの名無しさん
2020/08/21(金) 15:38:01.82ID:YabcZt9w ボタン自体は状態を持つものだから、オブジェクト指向で実装するのが自然でしょ?(関数型でも抜け道があるのかもしれないが、自分は関数型には詳しくないのでわからない)
しかし、上でされていた議論はそういう話ではなくて、関数の戻り値が依存する情報を、@全て引数として与えることも、A一部はメンバ変数から引っ張ってくることもできるという状況の場合に、どちらを選択するかという問題設定だと思っていたんだが。
しかし、上でされていた議論はそういう話ではなくて、関数の戻り値が依存する情報を、@全て引数として与えることも、A一部はメンバ変数から引っ張ってくることもできるという状況の場合に、どちらを選択するかという問題設定だと思っていたんだが。
291デフォルトの名無しさん
2020/08/21(金) 15:41:01.39ID:2S3OsUgZ292デフォルトの名無しさん
2020/08/21(金) 15:47:59.93ID:xkZp2iCS グローバル変数未使用で関数のみを使って状態にも対処できる!
オブジェクト指向なんて選択肢はない!
と言い張る子の霊圧が消えた...
オブジェクト指向なんて選択肢はない!
と言い張る子の霊圧が消えた...
293デフォルトの名無しさん
2020/08/21(金) 15:49:18.62ID:x4g5r5SE294デフォルトの名無しさん
2020/08/21(金) 15:50:37.63ID:xkZp2iCS そして日本語もまともに読めないらしい
295デフォルトの名無しさん
2020/08/21(金) 16:05:07.06ID:xkZp2iCS はよこいつにとどめさしてあげて
296デフォルトの名無しさん
2020/08/21(金) 16:24:00.01ID:2S3OsUgZ もう死んでね?w
ボタンを関数型で作れなかったんだから
ボタンを関数型で作れなかったんだから
297デフォルトの名無しさん
2020/08/21(金) 17:27:54.83ID:Tdq0GS4g >>296
お前作れんの?
お前作れんの?
298デフォルトの名無しさん
2020/08/21(金) 17:28:26.23ID:Tdq0GS4g 作れなかったら>>296の負けだから
299デフォルトの名無しさん
2020/08/21(金) 17:33:06.64ID:UrYJ9hGn >>271
たしかC++ってそういうもんだがw
しかも同じく嫌いだよw
整理できてない
で、なんでクラスだとそれが楽になるのかね
>さておき、実際にはほとんどデフォルトで使うから、「クラスなら面倒がない」と言いたいのかな
こういうことかね、て先回りして聞いてるんだが
たしかC++ってそういうもんだがw
しかも同じく嫌いだよw
整理できてない
で、なんでクラスだとそれが楽になるのかね
>さておき、実際にはほとんどデフォルトで使うから、「クラスなら面倒がない」と言いたいのかな
こういうことかね、て先回りして聞いてるんだが
300デフォルトの名無しさん
2020/08/21(金) 17:34:24.29ID:Q2DXCe4b Reduxみたいなやつな。
はよ作れ。
はよ作れ。
301デフォルトの名無しさん
2020/08/21(金) 17:49:58.82ID:xkZp2iCS ちなみに俺はGUIを実装したことある
302デフォルトの名無しさん
2020/08/21(金) 17:50:12.82ID:xkZp2iCS オブジェクト指向でな!
303デフォルトの名無しさん
2020/08/21(金) 17:54:10.24ID:xkZp2iCS 作れもしないくせにど素人が楯突くな
304デフォルトの名無しさん
2020/08/21(金) 17:57:19.01ID:UrYJ9hGn そんなにうじゃっとしてないか
https://bituse.info/winapi/5
//ボタンコントロール作成
hwnd_button=CreateWindowA("button","ボタン",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
50,50,100,100,hwnd,(HMENU)CHILD_ID,hInstance,NULL);
親ウィンドウの準備がイラっとするのかな
https://bituse.info/winapi/5
//ボタンコントロール作成
hwnd_button=CreateWindowA("button","ボタン",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
50,50,100,100,hwnd,(HMENU)CHILD_ID,hInstance,NULL);
親ウィンドウの準備がイラっとするのかな
305デフォルトの名無しさん
2020/08/21(金) 17:59:06.13ID:xkZp2iCS そんなお膳立てされたAPI使っていいって誰が言った?
306デフォルトの名無しさん
2020/08/21(金) 18:03:32.36ID:UrYJ9hGn ちなみに多くの人が、「クラスオブジェクト指向な記述で」を「オブジェクト指向で」と言ってるようだね
スタティック関数で動かすオブジェクト指向もあるので(C++、WinAPI)
略すなら「クラスで」と言った方がいい(これも不正確だが)
スタティック関数で動かすオブジェクト指向もあるので(C++、WinAPI)
略すなら「クラスで」と言った方がいい(これも不正確だが)
307デフォルトの名無しさん
2020/08/21(金) 18:22:59.95ID:iO1OXKqS windows apiはc言語でしょ
308デフォルトの名無しさん
2020/08/21(金) 20:03:28.77ID:Q2DXCe4b システムワイドでReduxのような仕組みを適用するのは無理だろうか?
309デフォルトの名無しさん
2020/08/21(金) 20:12:46.04ID:7ttzM/39 思うに、このスレに集まってる人らの
業務内容が違うんから議論がズレるんじゃないか?
Web系の場合メモリ上の
オブジェクトは一瞬で役目を終えるから
正直カプセル化とかいらない
node.jsやPHPでデータベースのへselect文投げると
連想配列オブジェクトの配列が帰ってくるから
つまりテーブルから動的にクラスののオブジェクトが
生成するから正直クラス定義もいらない
staticでなんの問題もないと思う。
状態管理は特有のセッションに保持するだろう。
でもゲーム系だとキャラのHPみたいなゲージ管理や
持ち物、装備品などいつまでもメモリ上に
居座って状態管理が必要だからオブジェクト指向
とカプセル化は大切。
業務内容が違うんから議論がズレるんじゃないか?
Web系の場合メモリ上の
オブジェクトは一瞬で役目を終えるから
正直カプセル化とかいらない
node.jsやPHPでデータベースのへselect文投げると
連想配列オブジェクトの配列が帰ってくるから
つまりテーブルから動的にクラスののオブジェクトが
生成するから正直クラス定義もいらない
staticでなんの問題もないと思う。
状態管理は特有のセッションに保持するだろう。
でもゲーム系だとキャラのHPみたいなゲージ管理や
持ち物、装備品などいつまでもメモリ上に
居座って状態管理が必要だからオブジェクト指向
とカプセル化は大切。
310デフォルトの名無しさん
2020/08/21(金) 20:23:39.45ID:Q2DXCe4b うーん。
職業プログラマが5chで情報交換してたら、ちょっとひどすぎない?
俺は自分の職業の板なんて行かない。
見たことはもちろんあるけど、素人が玄人のフリしてうんちく述べてるだけで、俺らが何か書き込むことは無いと思うよ。
それとも職業プログラマってそんなに程度低い?
素人とうんちく語り合うほど?
職業プログラマが5chで情報交換してたら、ちょっとひどすぎない?
俺は自分の職業の板なんて行かない。
見たことはもちろんあるけど、素人が玄人のフリしてうんちく述べてるだけで、俺らが何か書き込むことは無いと思うよ。
それとも職業プログラマってそんなに程度低い?
素人とうんちく語り合うほど?
311デフォルトの名無しさん
2020/08/21(金) 20:24:45.30ID:Q2DXCe4b プロが匿名掲示板で情報交換して得るものなんてないでしょ。
あったら怖いわw
あったら怖いわw
312デフォルトの名無しさん
2020/08/21(金) 20:34:27.65ID:x4g5r5SE >>309
常駐プログラム云々いっちゃうと、GCが優れてる!いや、C++のデストラクタの方が!
とか、そういう話にもなっちゃうからオブジェクト指向云々は関係ないような。
優秀なCプログラマならCでもリークしないプログラム書くでしょ。
static云々言ってるバカは、オブジェクト指向でもリーク起こすと思うわ。
常駐プログラム云々いっちゃうと、GCが優れてる!いや、C++のデストラクタの方が!
とか、そういう話にもなっちゃうからオブジェクト指向云々は関係ないような。
優秀なCプログラマならCでもリークしないプログラム書くでしょ。
static云々言ってるバカは、オブジェクト指向でもリーク起こすと思うわ。
313デフォルトの名無しさん
2020/08/21(金) 20:49:57.82ID:xkZp2iCS オブジェクトのライフサイクルとカプセル化がなんの関係あるんだ?
314デフォルトの名無しさん
2020/08/21(金) 20:50:21.42ID:xkZp2iCS 素人発言が目立ちだしたな
315デフォルトの名無しさん
2020/08/21(金) 20:51:44.98ID:xkZp2iCS 素人が玄人のフリしてうんちく述べてるのがうざいから消えてほしいとは思ってる
でも中にはプロっぽい人も紛れてる
でも中にはプロっぽい人も紛れてる
316デフォルトの名無しさん
2020/08/21(金) 20:55:22.67ID:Q2DXCe4b いや、無いない。
素人が適当なこと書いてるから訂正するか?
無い無い。
レベルが違いすぎるのよ。
それとも何か?
プログラマという職業に限ってそんなにレベルが低いか?
素人と言い争うほどか?
素人が適当なこと書いてるから訂正するか?
無い無い。
レベルが違いすぎるのよ。
それとも何か?
プログラマという職業に限ってそんなにレベルが低いか?
素人と言い争うほどか?
317デフォルトの名無しさん
2020/08/21(金) 20:57:07.65ID:xkZp2iCS 自分が素人って認めたんかpublic staticくん
318デフォルトの名無しさん
2020/08/21(金) 21:01:52.55ID:2S3OsUgZ >>304
誰もWinAPIの話とは言ってないが、それボタンはウインドウハンドルを返すのよ
つまりクラスのメンバ変数に状態を持ってインスタンスのポインタを返してるのと同じ
オブジェクト指向なんだよね
こういうのって本質的に複数の状態を持ってるわけだから
関数型で作るの大変でしょ?
誰もWinAPIの話とは言ってないが、それボタンはウインドウハンドルを返すのよ
つまりクラスのメンバ変数に状態を持ってインスタンスのポインタを返してるのと同じ
オブジェクト指向なんだよね
こういうのって本質的に複数の状態を持ってるわけだから
関数型で作るの大変でしょ?
319デフォルトの名無しさん
2020/08/21(金) 21:09:07.17ID:Q2DXCe4b Windows自体がオブジェクト指向だから、関数型と相性悪いのかもしれないな。
もしかすると、それが原因でWindowsが無くなるのかもしれないな。
もしかすると、それが原因でWindowsが無くなるのかもしれないな。
320デフォルトの名無しさん
2020/08/21(金) 21:13:17.11ID:xkZp2iCS 頭のネジ外れてんな
締め直してこい
締め直してこい
321デフォルトの名無しさん
2020/08/21(金) 21:15:49.53ID:2S3OsUgZ >>319
だからWindowsの話はしてないんだって
勝手にWin32の話にしておいてWindowsのせいにするなよ
なんでもいいから関数型で複数のプロパティを持つボタンのようなもの作ってみろって
一つの関数で複数のプロパティを操作することもある
そして将来の拡張性も考えないといけない
関数型でできるんか?
だからWindowsの話はしてないんだって
勝手にWin32の話にしておいてWindowsのせいにするなよ
なんでもいいから関数型で複数のプロパティを持つボタンのようなもの作ってみろって
一つの関数で複数のプロパティを操作することもある
そして将来の拡張性も考えないといけない
関数型でできるんか?
322デフォルトの名無しさん
2020/08/21(金) 21:17:53.68ID:Q2DXCe4b ホビーの奴と話し合うことなど、一ミリたりとも無いけどな。
レベルが全く違う。
プログラマに限っては、そんなにレベルが低いか?
アマチュアと話し合うことがあるのか?
レベルが全く違う。
プログラマに限っては、そんなにレベルが低いか?
アマチュアと話し合うことがあるのか?
323デフォルトの名無しさん
2020/08/21(金) 21:19:50.51ID:Q2DXCe4b >>321
ウェブ界では、状態をすべて外に追い出すのが流行ってるようだけどな。
ウェブ界では、状態をすべて外に追い出すのが流行ってるようだけどな。
324デフォルトの名無しさん
2020/08/21(金) 21:20:35.07ID:2S3OsUgZ 関数型っていうのは結局ガイドラインみたいなもんやろ
引数だけから戻り値が決定する関数はテストがしやすいから
可能であればそうするようにしましょう
実際には可能でない場合が多い
何十個の引数と専用の戻り値型でも作れば
理論上は可能かもしれないが使いづらくなる
引数だけから戻り値が決定する関数はテストがしやすいから
可能であればそうするようにしましょう
実際には可能でない場合が多い
何十個の引数と専用の戻り値型でも作れば
理論上は可能かもしれないが使いづらくなる
325デフォルトの名無しさん
2020/08/21(金) 21:21:00.45ID:2S3OsUgZ >>323
それって結局グローバル変数なんだけどねw
それって結局グローバル変数なんだけどねw
326デフォルトの名無しさん
2020/08/21(金) 21:21:03.27ID:yq0UM+AD あおりではなく
カプセル化をうまく説明してあるサイトを長い間探しているんだが
決定版はどこ?
カプセル化をうまく説明してあるサイトを長い間探しているんだが
決定版はどこ?
327デフォルトの名無しさん
2020/08/21(金) 21:21:51.79ID:Q2DXCe4b いや俺は状態をすべて外に追い出すというのが目からうろこよ。
最終的にどうなるのか知らんけど、これは突き詰めて結果を導いてほしいな。
最終的にどうなるのか知らんけど、これは突き詰めて結果を導いてほしいな。
328デフォルトの名無しさん
2020/08/21(金) 21:23:58.46ID:Q2DXCe4b 頑張ったけど駄目でしたという場合もあるだろうけどな。
その結果が納得できるところまで突き詰めてほしいな。
その結果が納得できるところまで突き詰めてほしいな。
329デフォルトの名無しさん
2020/08/21(金) 21:24:48.58ID:2S3OsUgZ ウェブでは状態を全て追い出いたために、巨大な「状態オブジェクト」ができて
複数の関数から、共有の状態オブジェクトを変更するようになってしまってる
引数から戻り値が決まる関数型とは別のものだよ
分離された状態オブジェクトを読み書きして
状態オブジェクトが変更される
複数の関数から、共有の状態オブジェクトを変更するようになってしまってる
引数から戻り値が決まる関数型とは別のものだよ
分離された状態オブジェクトを読み書きして
状態オブジェクトが変更される
330デフォルトの名無しさん
2020/08/21(金) 21:26:23.35ID:Q2DXCe4b >>329
状態を入力に取れば良いだけだろ。
状態を入力に取れば良いだけだろ。
331デフォルトの名無しさん
2020/08/21(金) 21:27:19.73ID:7UnAdk+W >>309
ゲームの種類にもよるけどアクションやシューティングの場合
基本は以下3ステップの無限ループでTODO管理アプリみたいなものと核は同じ
1. 入力を処理
2. 状態を更新
3. 出力を生成
ReactでもElmでもRxでも関数型のパラダイムなら
直前の状態と入力(ユーザー操作やタイマーや衝突など)から
新しいバージョンの状態を作ってそれをもとに出力を生成して画面を更新する
ゲームの種類にもよるけどアクションやシューティングの場合
基本は以下3ステップの無限ループでTODO管理アプリみたいなものと核は同じ
1. 入力を処理
2. 状態を更新
3. 出力を生成
ReactでもElmでもRxでも関数型のパラダイムなら
直前の状態と入力(ユーザー操作やタイマーや衝突など)から
新しいバージョンの状態を作ってそれをもとに出力を生成して画面を更新する
332デフォルトの名無しさん
2020/08/21(金) 21:28:09.14ID:2S3OsUgZ333デフォルトの名無しさん
2020/08/21(金) 21:29:07.77ID:xkZp2iCS アマチュアと話し合ってるんじゃなくて
アマチュアがボケ倒してるからつっこんでるんだろw
アマチュアがボケ倒してるからつっこんでるんだろw
334デフォルトの名無しさん
2020/08/21(金) 21:29:17.98ID:2S3OsUgZ Reactなんかでいう「状態」というのはオブジェクトのこと
335デフォルトの名無しさん
2020/08/21(金) 21:29:25.77ID:Q2DXCe4b336デフォルトの名無しさん
2020/08/21(金) 21:30:03.37ID:xkZp2iCS どんだけかまってほしいんだよ
337デフォルトの名無しさん
2020/08/21(金) 21:32:12.90ID:2S3OsUgZ もともとC++のクラスっていうのは構造体の拡張なんだよね
この構造外がReactなんかでいう状態のこと
関数(状態=構造体へのポインタ, 引数1, 引数2, ...)
というのが
構造体へのポインタ->関数(引数1, 引数2, ...)
に変わったのがC++
この2つは書き方が違うだけで本質的には同じもの
この構造外がReactなんかでいう状態のこと
関数(状態=構造体へのポインタ, 引数1, 引数2, ...)
というのが
構造体へのポインタ->関数(引数1, 引数2, ...)
に変わったのがC++
この2つは書き方が違うだけで本質的には同じもの
338デフォルトの名無しさん
2020/08/21(金) 21:32:44.45ID:Q2DXCe4b >>333
無い無い。
小学生がごっこ遊びしてるところにプロが違う違うと口挟むか?
自分の職業の板を見てもそんな感じよ。
突っ込もうなんて思わないし、実際突っ込んでるプロも見たことが無い。
素人同士でわいわい言い争ってる。
レベルが違いすぎんのよ。
輪に入るわけがない。
職業プログラマは素人の輪に入れるのか?
無い無い。
小学生がごっこ遊びしてるところにプロが違う違うと口挟むか?
自分の職業の板を見てもそんな感じよ。
突っ込もうなんて思わないし、実際突っ込んでるプロも見たことが無い。
素人同士でわいわい言い争ってる。
レベルが違いすぎんのよ。
輪に入るわけがない。
職業プログラマは素人の輪に入れるのか?
339デフォルトの名無しさん
2020/08/21(金) 21:33:20.00ID:2S3OsUgZ340デフォルトの名無しさん
2020/08/21(金) 21:35:42.95ID:Q2DXCe4b 考えてみろよ。
園児が模型の飛行機でブーンとやってるところに、職業パイロットが通りすがったら、違う違う対気速度が低下するからこうだなどと口をはさむか?
そのくらいのレベルの差があるわけよ。
それともなに?
職業プログラマは素人と大した変わらんとでも?
園児が模型の飛行機でブーンとやってるところに、職業パイロットが通りすがったら、違う違う対気速度が低下するからこうだなどと口をはさむか?
そのくらいのレベルの差があるわけよ。
それともなに?
職業プログラマは素人と大した変わらんとでも?
341デフォルトの名無しさん
2020/08/21(金) 21:37:03.29ID:Q2DXCe4b342デフォルトの名無しさん
2020/08/21(金) 21:41:12.88ID:2S3OsUgZ >>341
そりゃオブジェクト指向でもそれは可能なんだから当たり前やろw
そりゃオブジェクト指向でもそれは可能なんだから当たり前やろw
343デフォルトの名無しさん
2020/08/21(金) 21:43:15.03ID:e1ADUqIj >>151-152
ついにこのへんに言及したレスが出てきたな
状態がある問題をプログラミングする以上
どっちの方法がマシかを問うのが次に取るべき立場
状態は悪、関数型は神、みたいな話はもうみんな飽きたろ?
ついにこのへんに言及したレスが出てきたな
状態がある問題をプログラミングする以上
どっちの方法がマシかを問うのが次に取るべき立場
状態は悪、関数型は神、みたいな話はもうみんな飽きたろ?
344デフォルトの名無しさん
2020/08/21(金) 21:43:58.68ID:xkZp2iCS 俺は容赦なく模型飛行機で遊んでいる園児(お前)を空爆する
345デフォルトの名無しさん
2020/08/21(金) 21:45:13.13ID:Q2DXCe4b >>344
だからお前はアマチュアとバレてるわけよ。
だからお前はアマチュアとバレてるわけよ。
346デフォルトの名無しさん
2020/08/21(金) 21:47:12.41ID:Q2DXCe4b >>343
状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。
状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。
347デフォルトの名無しさん
2020/08/21(金) 21:47:34.18ID:2S3OsUgZ >>343
前から言ってるが、関数型は少数の値型と一つの戻り値で十分な関数としての要件を
満たしているときに便利なもので、そうでないものを無理やり対応させても不便なだけという話
関数型が優位なのは理論上の話で、理論上の話だと数十個の引数でもOKという扱いだから
前から言ってるが、関数型は少数の値型と一つの戻り値で十分な関数としての要件を
満たしているときに便利なもので、そうでないものを無理やり対応させても不便なだけという話
関数型が優位なのは理論上の話で、理論上の話だと数十個の引数でもOKという扱いだから
348デフォルトの名無しさん
2020/08/21(金) 21:48:43.03ID:u4nsg/nb349デフォルトの名無しさん
2020/08/21(金) 21:49:03.22ID:2S3OsUgZ >>346
> 状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。
「関数型の恩恵にあずかれるなら」
結局そこ
「関数型の恩恵にあずかれるなら」関数型
「関数型の恩恵にあずかれないなら」オブジェクト指向
適切なものを組み合わせて使うべき
「関数型の恩恵にあずかれない」例の一つがボタン
> 状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。
「関数型の恩恵にあずかれるなら」
結局そこ
「関数型の恩恵にあずかれるなら」関数型
「関数型の恩恵にあずかれないなら」オブジェクト指向
適切なものを組み合わせて使うべき
「関数型の恩恵にあずかれない」例の一つがボタン
350デフォルトの名無しさん
2020/08/21(金) 21:52:29.11ID:Q2DXCe4b ボタンこそ、恩恵にあずかれるのでは?
351デフォルトの名無しさん
2020/08/21(金) 21:52:48.76ID:2S3OsUgZ >>348
> オブジェクトの内部状態が変わるのと戻り値だけが変わるのとでは影響範囲が違うだろう。
今話をしてるのは
オブジェクトの内部状態 "すべて" を "一つの" 戻り値にしたとき
影響範囲はオブジェクトの内部状態を変えるのと同じことになってるという話をしてる
例えばボタンのスタイルは前景色、背景色、座標、フォント、余白などいろんなスタイルあるが
オブジェクト指向ではボタンのスタイルとしてオブジェクトの内部状態に組み込んでる
これらの前景色、背景色、座標、フォント、余白などをあわせてスタイルオブジェクトとして
関数からスタイルオブジェクトを返すからテストしやすい!といっても
何がテストしやすいのさっぱりわからない
> オブジェクトの内部状態が変わるのと戻り値だけが変わるのとでは影響範囲が違うだろう。
今話をしてるのは
オブジェクトの内部状態 "すべて" を "一つの" 戻り値にしたとき
影響範囲はオブジェクトの内部状態を変えるのと同じことになってるという話をしてる
例えばボタンのスタイルは前景色、背景色、座標、フォント、余白などいろんなスタイルあるが
オブジェクト指向ではボタンのスタイルとしてオブジェクトの内部状態に組み込んでる
これらの前景色、背景色、座標、フォント、余白などをあわせてスタイルオブジェクトとして
関数からスタイルオブジェクトを返すからテストしやすい!といっても
何がテストしやすいのさっぱりわからない
352デフォルトの名無しさん
2020/08/21(金) 21:54:15.43ID:2S3OsUgZ 色を変える関数を作るとするならば
スタイルオブジェクト = setColor(スタイルオブジェクト, 色)
これが関数型
この時、setColorがどの属性をいじるかなんてコードを見ないとわからない
スタイルオブジェクト = setColor(スタイルオブジェクト, 色)
これが関数型
この時、setColorがどの属性をいじるかなんてコードを見ないとわからない
353デフォルトの名無しさん
2020/08/21(金) 21:56:32.11ID:2S3OsUgZ ボタンのスタイルオブジェクトの場合、関数型ではこうなるのだろうか?
ボタン.スタイル = setColor(ボタン.スタイル, 色)
本質的に関数型に適合しないようなものを
無理やり関数型にしても意味ないよ
ボタン.スタイル = setColor(ボタン.スタイル, 色)
本質的に関数型に適合しないようなものを
無理やり関数型にしても意味ないよ
354デフォルトの名無しさん
2020/08/21(金) 21:59:18.77ID:xkZp2iCS どこに状態持っとくかで状態管理のしやすさが変わるんだよな
あるComponentでそれと関係のない状態変数が無造作に置かれてるよりは
必要な場所からのみアクセスできるようになってるほうがありがたい
必要ない場所でその状態変数について気にしなくていいから
あるComponentでそれと関係のない状態変数が無造作に置かれてるよりは
必要な場所からのみアクセスできるようになってるほうがありがたい
必要ない場所でその状態変数について気にしなくていいから
355デフォルトの名無しさん
2020/08/21(金) 22:01:46.81ID:2S3OsUgZ >>353はドットでつないでるから関数型には見えないw
実際はこうなのだろうか?
ボタン = setStyleColor(ボタン, 色)
ボタンには色以外の複数のスタイル属性や
ボタンの有効無効などの属性を持っている
つまりsetStyleColorという関数は
ボタンという連想配列データの一部分をいじる関数になる
それはオブジェクト指向でボタン.スタイル.setColor(色)の場合に
色というメンバ変数を書き換えてるのと大差ない
実際はこうなのだろうか?
ボタン = setStyleColor(ボタン, 色)
ボタンには色以外の複数のスタイル属性や
ボタンの有効無効などの属性を持っている
つまりsetStyleColorという関数は
ボタンという連想配列データの一部分をいじる関数になる
それはオブジェクト指向でボタン.スタイル.setColor(色)の場合に
色というメンバ変数を書き換えてるのと大差ない
356デフォルトの名無しさん
2020/08/21(金) 22:02:23.83ID:2S3OsUgZ >>354
そうやってできたのがオブジェクト指向やなw
そうやってできたのがオブジェクト指向やなw
■ このスレッドは過去ログ倉庫に格納されています
