探検


オブジェクト指向はオワコン? part2

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2026/08/13(木) 14:38:03.02ID:pdAcKRXu
前スレ
オブジェクト指向はオワコン?
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
883デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:15:06.41ID:kmT7Vw9O
>>882
そうだ、それで良い
必要ないオブジェクトを作るのはオブジェクト指向ではない
884デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:16:01.79ID:kmT7Vw9O
オブジェクトを最小限にすることもオブジェクト指向である
885デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:16:52.90ID:kmT7Vw9O
Pythonは数値さえもオブジェクトだったりするんだよな
Pythonで書かれたプログラムはすべてオブジェクト指向の賜物
886デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:24:18.32ID:kmT7Vw9O
メッセージパッシングがーと言ってるやつは自分で書いてみろ
できないんだったらメッセージパッシングによるオブジェクト指向は
現実では使い物にならないことの証拠である
2026/08/25(火) 17:37:38.64ID:1v+8FLb+
オブジェクト指向でプログラミングすること
言語の機能やライブラリがオブジェクト指向で実装されていること
この二つは異なる
違いがわからない人はいないと思うが
888デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:43:28.83ID:kmT7Vw9O
>>887
同じですね、オブジェクト指向エアプか?
889デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:44:24.87ID:kmT7Vw9O
オブジェクト指向がなかったらライブラリも構築できないんだから
オブジェクト指向のライブラリを使うこともオブジェクト指向プログラミングだよ
890デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:48:20.35ID:kmT7Vw9O
オブジェクト指向で構築されたライブラリを使ってプログラム書いてオブジェクト指向ではありませんは無理がある
濃厚セックスしておきながら私エッチなことに興味ありませんけどみたいな顔してる女みたいなもの
891デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:54:21.90ID:kmT7Vw9O
オブジェクト指向以前からベテランの開発者は優れたデータ構造を選んでコードがシンプルにせよと言ってたんだよな
そのように考えるとオブジェクトは言語機能の代替と考えてそれらを使ってロジックを手続き型や関数型でシンプルに書くのがオブジェクト指向の良いプログラムといえるのではないだろうか
892デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:55:18.50ID:kmT7Vw9O
誤:コードがシンプルにせよ
正:コードをシンプルにせよ
2026/08/25(火) 17:57:28.72ID:r1bVOdaF
>>866はオブジェクト指向プログラミングの要素が1つもないな
894デフォルトの名無しさん
垢版 |
2026/08/25(火) 18:00:20.67ID:kmT7Vw9O
>>893
そんなに他人のコードに文句があるなら自分で書きなよ
自分が思う最高のオブジェクト指向プログラムってやつをさ
895デフォルトの名無しさん
垢版 |
2026/08/25(火) 18:02:14.96ID:gX3JeEsp
手段の目的化の極み
2026/08/25(火) 18:10:28.36ID:a1NtL2p3
>>866
読んでみた
糞コードだと思った点の一つはCallable
それは非常に古い使い方でオブジェクト指向に対応していないC言語などで用いる方法
オブジェクト指向プログラミングに対応した言語はその点を解決している
2026/08/25(火) 18:19:04.63ID:hVPTaWzW
あーキレ散らかしてるのはJavaで書いた人かw
2026/08/25(火) 18:22:52.56ID:V26zP6ij
>>896
コメントありがとん。変数名・関数名が分かりづらいとかそういった方向の批判は予想していたんだけど、正直そこにツッコミが入るとは思わなかった。
たとえばwoof_ruleがなかったとして、classic_rule, digits_rule, boom_ruleがいずれも真偽値を返す述語関数だったとしたらどう? それともコールバック関数を渡すこと自体がダメという感じ?

>>897
そんなことないでしょ。出力例とかだいぶ参考にさせてもらったんだけど。
2026/08/25(火) 18:24:13.18ID:FPo7YXHj
>>878
車載コンピュータの演算装置とかは
データマトリックスをROMに書いてるんだぜ
8ビットマイコンの乗除演算とか複雑な計算をリアルタイムに近づける工夫さw
900デフォルトの名無しさん
垢版 |
2026/08/25(火) 19:27:33.50ID:kmT7Vw9O
なんて言えば良い!!なんて言えばいいのこれ!!?
901デフォルトの名無しさん
垢版 |
2026/08/25(火) 19:40:39.17ID:wEZKKEj5
オワコンっていうかやって当たり前
902デフォルトの名無しさん
垢版 |
2026/08/25(火) 19:41:00.03ID:3wAPU5Xr
メッセージを送ってなんちゃらかんちゃら。small talkはうんざりだよ。所詮、コンピュータ上のお遊び
2026/08/25(火) 19:47:15.35ID:aTZ3N5IY
What Killed Smalltalk Could Kill ほにゃらら, Too
2026/08/25(火) 19:57:57.21ID:2ED0hgJy
BIG MOUTH👄
2026/08/25(火) 20:19:20.51ID:1JhonwiJ
拡張FizzBuzzも結局Fizzの出力を0回か1回かそれ以上かのバリエーションになっているため
ID:V26zP6ij氏のカウント数を返す抽象化は正しいよ

あとはカウント数を返す抽象メソッドを共通インターフェースとして定めて
各ルールがそのインターフェース実装すればオブジェクト指向になるね

共通インターフェースの例

trait FizzBuzzRule {
fn count(&self, target: usize, number: usize) -> usize;
fn divisible(&self, target: usize, number: usize) -> bool {
target % number == 0
}
fn contains(&self, target: usize, number: usize) -> bool {
target.to_string().contains(&number.to_string())
}
}

count()は各ルールが実装すべき抽象メソッド
残りは各ルールが共通に使える具象メソッド
2026/08/25(火) 20:21:14.02ID:1JhonwiJ
あとは各ルールがcount()だけ実装すればOK

struct Classic;
impl FizzBuzzRule for Classic {
fn count(&self, target: usize, number: usize) -> usize {
self.divisible(target, number) as usize
}
}

struct Digits;
impl FizzBuzzRule for Digits {
fn count(&self, target: usize, number: usize) -> usize {
self.contains(target, number) as usize
}
}

struct Boom;
impl FizzBuzzRule for Boom {
fn count(&self, target: usize, number: usize) -> usize {
(self.divisible(target, number) || self.contains(target, number)) as usize
}
}

struct Woof;
impl FizzBuzzRule for Woof {
fn count(&self, target: usize, number: usize) -> usize {
self.divisible(target, number) as usize + self.contains(target, number) as usize
}
}
2026/08/25(火) 20:37:39.47ID:DTj/Nd7/
>>881
そしたらなぜ君の書くプログラムはそんなに分かりにくいのよ?
908デフォルトの名無しさん
垢版 |
2026/08/25(火) 20:57:36.49ID:kmT7Vw9O
>>907
そこは謎のままで良いじゃないですか、謎のままにしときましょう
909デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:11:25.28ID:RlQeYlwg
オブジェクト指向という幻想

概念はわかりやすい理想的なものだが
実装したところで無駄ばかりで趣味の世界
910デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:12:58.03ID:2JbrJHvg
なんていうか、猿でも作れるツクール的な感じ
だけどツールでもないしな

プロでも作れないオブジェクト指向のための言語になってる
2026/08/25(火) 21:16:16.70ID:1JhonwiJ
>>909
無駄じゃないだろ
2026/08/25(火) 21:20:57.24ID:DTj/Nd7/
>>911
削り落とせるぞ
913デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:21:16.82ID:2JbrJHvg
CPUはかなり遠回りで無駄なことをしてるんだよ
人間様用の高級言語のせいでね
2026/08/25(火) 21:22:14.14ID:DTj/Nd7/
つまり0721か
915デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:34:08.05ID:kmT7Vw9O
>>912
それが無駄な作業なのでは?
916デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:39:26.92ID:kmT7Vw9O
オブジェクトをなくしたところで状態が必要なくなるわけではないからなあ、状態を管理しようと思ったらオブジェクトで操作とセットにしておけばわかりやすいだろ、その努力こそがオブジェクト指向なんだよ
917デフォルトの名無しさん
垢版 |
2026/08/25(火) 21:42:54.15ID:kmT7Vw9O
状態も操作もバラバラにあっちこっちに散りばめたら管理できなくなる、100億を超える大規模なシステム開発が失敗して損害賠償の裁判が起きたという話をたまに聞くだろ、ああいうのも元をたどればオブジェクト指向が原因なんですか?
2026/08/25(火) 22:04:51.61ID:hHo/2XBn
>>599 ruby
https://ideone.com/TZGLeB
・>>846の委譲でなんとかするやつの移植
・Javaの発想からスタートしたからRubyっぽくないかも

>>884
> オブジェクトを最小限にすることもオブジェクト指向である

かもね
やっぱクラスにせよインスタンスにせよ不必要に増やしたらあとで苦しいよ
2026/08/25(火) 22:13:35.74ID:1JhonwiJ
異なる種類のオブジェクトを共通のインターフェースに結びつけることは
オブジェクトの意味と立ち位置をはっきりさせる
オブジェクト間の関係もはっきりさせる

それらを使う側から見ると
インターフェース抽象型として同一に扱える
つまりコードの共通化ができる
インターフェースを実装してないオブジェクトに間違って適用してしまうバグも防げるため型安全性もある
C言語の関数ポインタやPythonのCallableと比べると使い勝手も安全性も格段に良くなっている

インターフェースを用いたオブジェクト指向プログラミングは可読性も保守性も良くなりバグも減らす
2026/08/25(火) 22:35:05.17ID:E8remrnh
>>919
最初の3行はいいこと言ってると思うがコードが>>905じゃ説得力が無いな
2026/08/25(火) 22:44:34.17ID:1JhonwiJ
>>920
もっと良いコードを示してくれるなら歓迎するよ
そのコードはID:V26zP6ij氏の>>866のコードのCallableを使っているルール部分をインターフェース化したもの
2026/08/25(火) 23:21:32.61ID:DTj/Nd7/
>>915
それなら最初から無駄を付けない・省くのが最強だろ
923デフォルトの名無しさん
垢版 |
2026/08/25(火) 23:24:12.29ID:jUy9So8k
プログラマじゃなく管理する側に都合のいいのがオブジェクト「至高」
プログラムを書かないのでどんな処理をするにはどんな書き方があるとか分かって無いけど、オブジェクト指向なら纏められるってので飛びついてオブジェクト指向が目的となってる
2026/08/25(火) 23:33:49.21ID:ERS3Iam5
インターフェイスを共通にするというのは良いとしても、コールバック関数で済むことなら個人的にはわざわざオブジェクトにはしたくないとやっぱり思っちゃうかな。
Pythonならユーザー定義クラスを作って継承するなりtyping.Protocolを使うなりすることはできるけど、特に状態管理が必要な場合等でなければコールバック関数の方が好ましいと思っちゃうな。
2026/08/25(火) 23:38:44.16ID:0Y/Xd6X8
>>924
全てオブジェクトなのにオブジェクトにしたくないとはどういう意味?
2026/08/25(火) 23:40:53.88ID:DTj/Nd7/
>>920
言葉に酔って本質を見失うタイプでしょw
2026/08/25(火) 23:44:47.08ID:ERS3Iam5
あー、ごめん、ユーザー定義クラスのインスタンスにはしたくないというニュアンスで受け取ってもらえれば。関数1つで済むところを、その代わりにクラスを作ってメソッドを定義するというのは、もちろんメリットもあるのだろうけど、本当に手間に見合うだけのメリットなのかというくらいの感じ。
2026/08/25(火) 23:45:31.01ID:yTdodo0t
>>924
そこで使えるコールバック関数一覧をどうやって管理するのかな
2026/08/25(火) 23:49:02.90ID:ERS3Iam5
FizzBuzzの拡張ルールくらいならそんなに多くはならないだろうし、仮に数十個、数百個になるというなら、専用モジュールを作ってそれに放り込んでおけばいいんじゃない?
2026/08/26(水) 00:12:54.49ID:qdTH26se
インターフェースは異なる型に対して共通のメッセージを送れる仕組み
一般的にはコールバックに置き換えられない
2026/08/26(水) 00:17:59.86ID:z15V+4Gv
インターフェイスが一般的にはコールバックに置き換えられないというのはもちろんそうで、今疑問を提示しているのは、コールバックで済むような場合に、わざわざインターフェイスを持ち出す必要はないのではないかということね。
2026/08/26(水) 00:30:47.65ID:aHX34kXI
コールバックが複数あってそれぞれに異なる名前を付けるということは複数のオブジェクトを作っているのと同じだね
それならメソッドとして実装した方が型安全性もよいかな
2026/08/26(水) 04:39:13.97ID:g57AhbG+
本当は君らプログラミングやソフトウエア開発が苦手なんじゃない?
苦手なのにその自覚がないだけなんじゃない?
2026/08/26(水) 04:49:18.83ID:suXVoFGf
プログラミングで一番大事なことは型安全だからラップして別の型に
2026/08/26(水) 04:56:22.38ID:g57AhbG+
違うだろ、もっとも必要なものは合理的な考え方だろ
2026/08/26(水) 05:05:16.08ID:qkiKzIk8
全てをイミュータブルにすることが大切
2026/08/26(水) 08:14:33.47ID:FBlplv6V
関数定義はユーザー定義クラスを定義する等してオブジェクトを作るより簡単だし、コールバック関数は渡された関数内で呼ばれるだけだから、呼び出そうとしたメソッドが存在していなかったという類の問題はもともと生じないと思うんだけど。
たとえば、Pythonの組み込み関数sorted(あるいはlist.sort)は引数keyとしてコールバック関数を取るんだけど(str.lowerなんかを指定する)、これを、特定のインターフェイスを備えたオブジェクトを受け取る形に変更した方が望ましいということにはならないと思う。
938デフォルトの名無しさん
垢版 |
2026/08/26(水) 09:19:21.67ID:sdi3yqbK
>>936
話は聞かせてもらいました
https://paiza.io/projects/CjTaDF7rHaOKmYUeN_Vavw
2026/08/26(水) 10:04:49.49ID:HFCsEuKA
>>938
ミュータブルを使うな
for (var i = 1; i < to + 1; i++) {
940デフォルトの名無しさん
垢版 |
2026/08/26(水) 10:06:16.63ID:sdi3yqbK
>>939
バカ乙
2026/08/26(水) 10:24:33.47ID:XAtO2pPN
>>937
メソッドが一つならともかく
複数のメソッドがあるとその組み合わせを毎回渡すことになってしまうぞ
各オブジェクトを渡す方がよい
2026/08/26(水) 10:42:25.83ID:p1kFnG2q
Woofのルールは303ならFizzFizzじゃなくてFizzFizzFizzみだいたよ
2026/08/26(水) 10:45:24.36ID:NdwH3mi0
>>938
toやdivやinがイミュータブルで作られていない
やり直し
944デフォルトの名無しさん
垢版 |
2026/08/26(水) 10:45:25.18ID:sdi3yqbK
>>942
キャー助けてー
945デフォルトの名無しさん
垢版 |
2026/08/26(水) 10:46:01.13ID:sdi3yqbK
>>943
バカ乙
2026/08/26(水) 11:07:33.27ID:HZ2sBvRV
>>938
オブジェクト指向のスレなのにMainしかなくて酷いコード草
947デフォルトの名無しさん
垢版 |
2026/08/26(水) 11:16:45.19ID:sdi3yqbK
>>946
酷いのはお前の頭で大草原、シマウマさんが走ってるわ
2026/08/26(水) 11:20:56.72ID:C23DyjBn
>>942
そうなの? だとすると、>>866のwoof_rule関数は、
if str( given_nubmer ) in str( i ): satisfied_count += 1 の行を
satisfied_count += str( i ).count( str( number ) ) に修正する感じかな。

ついでに引数名もちょっと変えてみた。本質的な変更ではまったくないのだけれど。
https://paiza.io/projects/0xwLMmS5rjnLke8sh9ExMg
2026/08/26(水) 11:25:19.71ID:sC8u3BU+
>>938は関数型プログラミングをわかっていないのだと思われる
foldやreduceを知らない
2026/08/26(水) 11:28:41.50ID:C23DyjBn
>>941
コールバック関数を渡す設計にするのは、1つの引数に1つの関数を渡すというケースだと思うけど。複数のメソッドを持つオブジェクトを渡すことが必要な場合ならもちろんオブジェクトで渡すけれども、sortedのkey引数のように単一の関数を渡せば済むようなケースで、あえて単一メソッドのオブジェクトを作って渡す必要はないんじゃないかと思う。
951デフォルトの名無しさん
垢版 |
2026/08/26(水) 11:38:52.55ID:sdi3yqbK
>>949
バカ乙
2026/08/26(水) 11:39:45.46ID:N0ZXk9lg
>>950
メソッドを通常関数に置き換えるにはオブジェクトの値も必要だよ
オブジェクトの値はどうやって渡すの?
953デフォルトの名無しさん
垢版 |
2026/08/26(水) 11:55:56.95ID:JrGcaWVK
オブジェクト指向はオワコン? part3
https://mevius.5ch.io/test/read.cgi/tech/1787712923/
954デフォルトの名無しさん
垢版 |
2026/08/26(水) 11:58:22.44ID:sdi3yqbK
>>953
ありがとー仕事が早い
955デフォルトの名無しさん
垢版 |
2026/08/26(水) 12:04:02.43ID:sdi3yqbK
オブジェクトの状態を変えられるか否かが可変性(ミュータブル/イミュータブル)
変数への再代入ができるか否かが再代入可能性(リアサイナブル/ノンリアサイナブル)
これらは異なるものなんよ
2026/08/26(水) 12:08:33.08ID:C23DyjBn
>>952
たとえば、Pythonの組み込みソート関数sortedの引数keyには、引数を1つとって1つの値を返すコールバック関数を渡すんだけど、このコールバック関数の引数になるのはソート対象のコンテナの各要素なので、イメージとしてはコンテナの各要素に対して(コンテナの各要素を引数として)コールバック関数を呼び出す感じになる。
で、このコールバック関数を仮にオブジェクトのメソッドに置き換えるとした場合、何をレシーバーにする(どのオブジェクトに属するメソッドにする)のが、設計上無難なのかというのは、コールバック派の自分にはよく分からないかな。何らかの管理用オブジェクトを作ってそのメソッドにする方向になるのかなとも思うけれども。

メソッドのレシーバーをどのように渡すのかという問いに対しては、そもそもどういったものがレシーバーとして想定されているかがよく分からないのでそれを明らかにしてもらえると助かるかなという感じなのだけれど。
2026/08/26(水) 12:10:23.44ID:sU6/QjKC
>>955
バカだろ
オブジェクトを変数に入れれば書き換えてもいいんだな
958デフォルトの名無しさん
垢版 |
2026/08/26(水) 12:16:38.05ID:sdi3yqbK
>>957
何をデスカ?
オブジェクトがイミュータブルならオブジェクトを変数に入れてもオブジェクトの状態は書き換えられませんよ
変数への代入とオブジェクトの状態を変える操作はまるで違うものだということを理解したが良い
2026/08/26(水) 12:25:10.38ID:5yDcdQ0U
>>956
その例は既に暗黙の引数として対象コンテナがsortedに渡されているからたまたま上手くいってるってことなのね
sortedは例として良くない例ですね
他の例を持ってきましょう
960デフォルトの名無しさん
垢版 |
2026/08/26(水) 12:36:00.57ID:vdIJI+q7
>>958
そこは言語によって千差万別だから意味のない主張
さらに全てがオブジェクトの言語もあれば
言語仕様にオブジェクトの概念が存在せず型とその値とそれを格納する変数しか存在しない言語も多い
オブジェクトだけがイミュータブルという主張こそ馬鹿げている
2026/08/26(水) 12:36:50.80ID:C23DyjBn
「コールバック関数で済む場合に、わざわざオブジェクトを渡す設計にする必要はないよね」という主張なので、「コールバック関数で済む場合もたしかにあるね」ということになると、主張の対立するポイントがなくなって話は終わってしまうのだけど。別に何でもかんでもコールバックでやりましょうと言いたいわけではないので。
962デフォルトの名無しさん
垢版 |
2026/08/26(水) 12:43:56.53ID:sdi3yqbK
>>960
イミュータブルなオブジェクトを変数に代入しても
オブジェクトが可変になるわけじゃないでしょ

> オブジェクトを変数に入れれば書き換えてもいいんだな

と言っておられたからオブジェクトの状態は書き換えられないよってこと
再代入しても良いかという問いならやりたければやれば良いと思う、が僕の主張だよ

言語によって千差万別だというのが君の主張だね
その主張に意味があるとは僕は思えないな、シマウマ追っかけてた方がまだ有意義だよ
2026/08/26(水) 12:51:45.29ID:wdN0r8cQ
>>961
横からだが
特化した処理部分をコールバック関数という形で受け取って処理するか
インターフェースを実装したオブジェクトを定義して特化した処理をメソッドの中に書くか
を比較してるんじゃないのかな?
2026/08/26(水) 12:53:37.51ID:nPTCa+m2
>>961
コールバック関数が一つだけなら大丈夫だよ
しかし今回は多数の種類があるから話が別かな
多数ある関数が同じ場所で使われる同類だとコード上で示す必要があるよ
たまたま同じ型の関数が間違って使われることを防ぐことも必要だね
それらを一気に解決する方法としてラップがあるよ
値オブジェクとも言われてその値だけをラップしたオブジェクトを作る方法
今回の場合はコールバックとして使われる関数をすべて同じオブジェクトとしてラップだね
もちろんメソッドは要らないし他の値は持たないから手間もかからないよ
これだけで同種のオブジェクトとしてコード上に明示されると共に型安全性も保証されるメリットがあるよ
2026/08/26(水) 12:58:49.29ID:yH/m4JlP
>>938
大量にミュータブル変数があるなあ
全てをイミュータブルにすることが大切
2026/08/26(水) 12:58:58.05ID:wdN0r8cQ
>>964
色んな種類の関数を受け取れるようにするためにコールバック関数があるんだから多数の種類がない場合なんてない
967デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:01:35.44ID:sdi3yqbK
>>965
ローカル変数がミュータブルでも関数が純粋であることには変わりはないから
変数への再代入を禁止することが大切だというのはただの君の思い込み
君は昔から思い込みが激しい、僕のコードを100回読んで心を浄化したが良い
礼はいらないよ、僕のコードで君が救われるなら本望だ
968デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:05:31.82ID:sdi3yqbK
ミュータブル変数と言った場合は変数の型がミュータブルであることを表すから
再代入できるという意味なら可変束縛の方が良いかもね
2026/08/26(水) 13:09:45.53ID:NsymNjtw
>>966
内部利用ならそれで全く問題ない
しかし今回は色んなグローバル変数にコールバック関数が入っているから区別して型安全にする義務があるところ
2026/08/26(水) 13:22:13.27ID:C23DyjBn
>>963
その比較で「コールバック関数で済む場合もある」と「オブジェクトを渡す方が常に優れている」との違いというのが見解の実質的な対立点かなと。

>>964
同種の機能・役割を果たすことを示すための箱・入れ物としてオブジェクトを使うというのは、(それしか道具立てがない言語なら仕方ないのかもしれないけれど)ちょっと抵抗感があるかな。もし本当にそうすることが必要なら(そのような場合がどの程度あるのかというのも考え方が分かれそう)名前空間なりモジュールなりを使うのが最近の言語の考え方なのかなと。
たまたま同じ型の関数が誤って呼ばれることを防ぐということを型安全性と呼ぶなら、もしそれが本当に深刻な問題になるようなケースなら、Protocolとかインターフェイス的なものを使うことになると思うけれども(ラップはうーん……どうなんだろう)、そんなケースがどの程度あるのかな。少なくとも、ソートのkey引数に指定するのが裸のコールバック関数なのは型安全性に欠けて困ると思ったことはないけど。
2026/08/26(水) 13:22:47.79ID:MCEvoZYr
>>967
純粋関数かどうかは副作用がなく参照透過であるかどうかということであって別の話
イミュータブルで書く能力がないために言い訳ばかりしてるようだな
972デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:26:32.89ID:sdi3yqbK
>>971
そうだよ、別の話だよ
だからこそ再代入を禁止する意味がないよねって論旨だよ
意味は自分の思い込みを他人に押し付けようと必死だね
973デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:26:54.38ID:sdi3yqbK
> 意味は
君は
974デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:27:39.42ID:/aytuK8b
>>970
型安全性のためのラップはオブジェクトやオブジェクト指向とは独立してそれ以前からある技術です
受け付ける側がラップ型しか受け付けなくなるためラップして持つだけで型安全性が保証されます
生で扱うのはやめましょう
2026/08/26(水) 13:37:15.37ID:KzCaqnIk
まだやってんの?
手続き型で数十行で済んじゃうコードを
わざわざ複雑にしてw
オブジェクト指向プログラミングってのは
そんな馬鹿な使い方の為にあるんじゃ無いのにw
2026/08/26(水) 13:39:01.55ID:C23DyjBn
>>974
そのラップというのは、メンバー・属性として持ついわゆるhas-a的なものという理解でいいのかな。
正直、そこで想定されているような意味での型安全性が深刻な問題になる場合がどの程度あるのかという点についてかなり懐疑的に思っているんだけど。
sorted( some_iterable, key = wrapped_cb ) と書きなさいということでしょ。その方が良いよと言われても、にわかにうんとは言いづらいかな……。
977デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:39:39.63ID:sdi3yqbK
>>975
>>599 やってみ、お手並み拝見
978デフォルトの名無しさん
垢版 |
2026/08/26(水) 13:40:11.49ID:sdi3yqbK
>>975 が手続き型で数十行で書けるってよ、みんなで見ようぜ
2026/08/26(水) 13:47:55.93ID:fGjq5Quw
引数が値だけの関数だけではなく

引数にミュータブルなオブジェクトの不変参照を渡しても
その時のオブジェクトの値が使われるだけなので問題ない

同様にミュータブルなオブジェクトの可変参照を渡しても
その時のオブジェクトの値が使われるだけであり
変更が反映される対象は使う側が可変参照を渡したオブジェクトだけに限定されるためこれも問題がない

問題が起きるのはグローバル変数の変更だ
使う側から見て指定していないものが変更されるからである
これを副作用と言う
副作用を持たない関数を純粋関数と呼ぶ
オブジェクトがミュータブルかどうかは関係ない話だ
2026/08/26(水) 13:55:17.86ID:i+Y8ddFj
>>978
ばーか
手続き型で45行で書けることは既に>>948で示した
2026/08/26(水) 14:05:33.88ID:C23DyjBn
948を書いた者としては、「示された」としてもらえたらよりありがたかったかな。手続型ベースと評価されるのは別に構わないんだけど、一応、オブジェクト指向で設計された組み込みライブラリを利用しているよ。
2026/08/26(水) 14:10:28.01ID:FMhbZ524
>>981
オブジェクト指向でブログラムを書くことと
ライブラリを使うことは全く別の話
4つの組み合わせ全てが可能
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況