カプセル化は愚かな考え

■ このスレッドは過去ログ倉庫に格納されています
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)
719デフォルトの名無しさん
垢版 |
2020/08/30(日) 11:13:19.74ID:i3Iv6gG3
オブジェクト指向プログラミング言語とオブジェクト指向は違う!

>>718
>オブジェクト指向プログラミングも部品を組み合わせる様にプログラミングして行くので

オブジェクト指向とは、繋がっているけれども独立しているという意味で、俺の股間に付いているモノだ!
720デフォルトの名無しさん
垢版 |
2020/08/30(日) 11:24:47.62ID:i3Iv6gG3
オブジェクト指向とは、決してプログラミングの手法ではない!

>>718
>オブジェクト指向プログラミングも部品を組み合わせる様にプログラミングして行くので

オブジェクト指向とはまさに俺の股間に付いているのであって、それはプログラミングとは無関係である!
721デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:07:11.69ID:7OtexdeL
>>540
オシッコするときのチンポは「関数型」ね!
722デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:39:27.27ID:j2JU6h3h
https://ja.wikipedia.org/wiki/関数型言語#関数型プログラミングの例
VBAで書くとこういうことですな

手続き型
Function fibona(num As Integer) As Integer
 Dim x As Integer, y As Integer, tmp As Integer
 x = 1: y = 1
 For i = 2 To num
  tmp = x: x = y: y = y + tmp
 Next
 fibona = y
End Function

関数型
Function fibona2(num As Integer) As Integer
 If num < 2 Then fibona2 = 1 Else fibona2 = fibona2(num - 2) + fibona2(num - 1)
End Function

なるほど、「フィボナッチ数列は前2個を再帰的に足す」という要件が、下の方が見えやすいね
この場合は上の方が呪文
ただ下は要件は見えやすいが、なんとなくであって、動作に確証は持ちにくいわな

しかし引数が10の時、上は9ループだけど下は177回!
それ専用の言語はうまくコンパイルするのかな
723デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:46:58.39ID:j2JU6h3h
フィボナッチはたぶんSQLでは書けんね
SQLは全行同時処理するところに速さの秘訣があるので、逐次処理や再帰処理はその利点を生かせない
(T−SQLには制御文もあるので書くことは書けるが)
2020/08/30(日) 12:49:20.46ID:BWuiy1TR
最低限SOLIDくらい理解してから語ってくれよ。。
2020/08/30(日) 12:54:15.74ID:yxkdlNNK
>>723
CTEとか使えば標準でもできるよ
726デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:59:10.56ID:j2JU6h3h
Function fibona(num As Integer) As Integer
 Dim i As Integer, x1 As Integer, x2 As Integer
 x1 = 1: x2 = 1
 For i = 2 To num
  fibona = x1 + x2
  x1 = x2
  x2 = fibona
 Next
End Function
(さっきのは i の宣言が抜けてた)

こう書けば「前の2個を足す」という意味が分かりやすいのでは?
何言語を使おうとセンスの問題だったり
727デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:07:28.54ID:j2JU6h3h
>>725
言われてググって思い出したが、昔ちらっと使ってみたことあったようななかったようなw
WITHって覚えてるな
遅いからやめたんだっけかな
728デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:25:08.04ID:i3Iv6gG3
>>717
クリントン大統領もチンポがしこしこしてしまったのだが?
729デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:41:34.87ID:i3Iv6gG3
メッセージングとは「対話」ね!

>>155
>オブジェクト指向のコア概念メッセージングがなぜ提唱されたか察するに

オブジェクトは必ずオブジェクト同士の「対話」を伴う、これがメッセージングだ!

928 デフォルトの名無しさん 2018/11/21(水) 18:59:11.61 ID:8Yc2p7H1
>>922
>ナンチャッテメッセージングスタイルになったのは

チンポ.オシッコを出す
チンポ.オシッコを止める

さっきトイレでやってきた。


929 デフォルトの名無しさん 2018/11/21(水) 19:07:17.83 ID:8Yc2p7H1
>>915
>単なる動的なメソッド呼び出しをメッセージと称し、ただしコールするメソッドが見つからない場合だけメッセージを
>ハンドリングできる省コストなナンチャッテメッセージングスタイルに落ち着いた。

×
俺.オシッコを止める 俺.オシッコを出す

俺.チンポに力を入れる 俺.チンポから力を抜く
730デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:45:23.95ID:i3Iv6gG3
>>550
女子のブルマ姿に勃起してチンポがしこしこしてしまわないよう、あらかじめオナニーしとくことが大切。
それからチンポがしこしこしてしまった場合でも、急いでトイレに駆け込んでオナニーしておくことが大切。
オシッコが出るのか精液が出るのかは、本人にしかわからないことで「カプセル化」されている。
731デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:10:38.58ID:i3Iv6gG3
言葉の意味を追求しない統計的機械翻訳は、2010年のIBMワトソンでおしまい。

>現在の GUO では本質に関する議論を保留しており、多重継承を許容している。

自然言語のロゴスを徹底的に追求するには、オブジェクトの多重継承は必須!
732デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:14:03.24ID:j2JU6h3h
とはいえ、これを with でどうやって書くのか、ちょっと思いつかん
(これは2個ずつ処理してるので変数でやった方がいい処理だが)

select n, f =1 into #n
from (
select n =1
union select n =2
) n;

while (select max(n) from #n)<=10
begin

insert #n
select n.n, f =isnull(n1.f+n2.f,1)
from (select n =max(n)+1 from #n) n
left join #n n1 on n1.n=n.n-1
left join #n n2 on n2.n=n.n-2
order by n.n desc;

end;
go_end:

select * from #n;
drop table #n;
733デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:15:27.47ID:j2JU6h3h
あれ、
order by n.n desc;  ←これは余計
734デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:17:32.56ID:i3Iv6gG3
チンポがオシッコ出したり止めたり勃起したり射精したりするのは古今東西共通であり、

>>552
>俺が言ってるのは40にもなって
>オシッコとかチンポとか、恥ずかしくないのかってことなんだがw

恥ずかしがらずに「チンポがシコシコする」という新しい表現を受け入れることが大切!

「帽子」と言ってもいろんな帽子があるが、「チンポ」は一人につき一つであり、一対一の対話が可能!
735デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:22:00.66ID:i3Iv6gG3
クリントン大統領もチンポがシコシコしてしまったのであり、

>オントロジーは「情報の意味を定義するための概念」であり

官能小説はいくらでもあるし、アダルト映画もいくらでもある。チンポがシコシコという表現があれば、
アニメからホワイトハウスまであらゆるオントロジーを作成出来るはずだ!
736デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:29:52.73ID:i3Iv6gG3
>オントロジーは「情報の意味を定義するための概念」であり

977 デフォルトの名無しさん 2018/09/17(月) 07:24:42.74 ID:C7pw6n1T
自然言語処理の知識はゼロなのでわからないです。面白いアイデアだと思うので、Twitterの自然言語処理が専門の方々に聞いてみては?
https://peing.net/ja/q/417c9e29-35de-4c95-8323-afd6a50fcbc7

コンピューターのための自然言語理解シミュレ
ーターというのは可能ですか?

例えば第二次大戦の推移について、言葉ではな
くて動画で理解する方法もあります。
言葉で説明するよりもマインクラフトのような
創作ゲーム表現に変えたほうが分かりやすいで
す。
けれども自分が読み漁った人工知能や自然言語
処理の本にはそうしたアプローチは見つからな
かったです。
言語はただの記号の羅列で機械は現実世界を全
く知らない。でもそういうことなら、
テレビゲームのような仮想世界をインプットし
て、自然言語で操作したらいいと思います。
というか自然言語入力でときめきメモリアルみ
たいなゲームをやってみたいてす。
737デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:16:48.18ID:j2JU6h3h
よくよく考えると、フィボナッチで「定義」通りにやってるのは手続き型
なので10回の指定で9回計算し、途中経過を出力するとフィボナッチ数列になってる

関数型は最後のフィボナッチ数は出てくるが、177回も計算し、途中経過は意味不明な数字になってる
数列で欲しい場合、この関数を10回使うか、手続き型の別の関数を用意することになる
738デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:07:31.00ID:RyTJNMW1
>>737
ループと同じにするならこうかと

Function Fibo(n, a, b)
 If n = 1 Then
  Fibo = b
  Exit Function
 End If

 Fibo = Fibo(n - 1, b, a + b)
End Function
739デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:15:22.32ID:RyTJNMW1
ループの実装であっても
「関数は同じ引数を与えられた場合、同じ値を返す」
を満たすから参照透過性があると考えて
関数型プログラミングとみなしてもよいと僕は思います
740デフォルトの名無しさん
垢版 |
2020/08/31(月) 01:34:59.59ID:abwkhqHt
>>738
おお、これは
wiki は「関数っぽさ」の説明のためであって、ほんとはこうなのかな

共通テーブルは自己参照が1個しか書けないから、2個前が参照できず、
そのように前の加算結果も最新行に保持するしかないなと、思ったところで断念w

declare @n int =0;
select n =@n into #n;
while @n<10 begin set @n =@n+1; insert #n select @n; end;
--↑整数マスタがあるとして

with nn(n, f, f1) as (
select n, f =1, f1 =0 from #n where n>=2 and n<=10
union all
select n.n, f =n1.f1, f1 =n1.f+n1.f1
from #n n inner join nn n1 on n1.n=n.n-1
)
select sum(f)+1 from nn;

drop table #n;

最後の+1が逃げっぽいけどw
共通テーブルは1個の上に外部結合も許可されず(できたとろこでスマートになるかは不明)

しかし同じ発想のようで、そっちは途中経過が綺麗な数列
こっちは意味不明な45レコード
その上、意味不明度が上がるのでやめた方がいいなw
741デフォルトの名無しさん
垢版 |
2020/08/31(月) 01:56:42.46ID:abwkhqHt
共通テーブルのサンプルを見ると、20年前の若気の至りを思い出すな
リレーショナルだから、2列のキーのみで可変階層がスマートじゃないかと
できるからって工事の積算なんかに使うと、えらいことになる
20年前と今ではPCの性能違うだろうけど

現実には階層を固定で持っても十数列で済んだり、なんなら255列用意しても大したことない
泥臭くてもその方が圧倒的に速く、再利用性も高いのが現実
742デフォルトの名無しさん
垢版 |
2020/08/31(月) 09:44:30.49ID:wxThvNjw
構造化プログラミングの再帰処理で階乗やディレクトリ探索しか例がない理由を考えたことあるのか。
逆に、分岐条件や判定が複雑に入り混じったいわゆる手続きを関数型で実現する例が少ない理由を考えたことがあるのか。

関数バカは死ね。
2020/08/31(月) 09:55:23.77ID:zAiif6l8
> 構造化プログラミングの再帰処理で階乗やディレクトリ探索しか例がない理由を考えたことあるのか。

再帰処理をしたことがない人でも知っているものだからだよ

> 逆に、分岐条件や判定が複雑に入り混じったいわゆる手続きを関数型で実現する例が

例として持ち出す時、手続き型でも分岐条件や判定が複雑に入り混じったっものは使わないよ


理由はこれでいいと思うけど、
なんで関数バカは死ねって最後に捨て台詞はいたの?
744デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:08:51.82ID:f7jpNd8/
>>722
単純な再帰だと関数型言語でもスタック消費するけど、モナドのインスタンスになってる再帰関数や、末尾再帰はループにコンパイルされる。
(リストはモナドのインスタンスなので、リストを受け取ってリストを返す関数は再帰でもループになる。IOな関数も同じく)

手続き型言語でもC/C++とJavaScriptは末尾再帰のループ化は対応してる。
745デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:19:36.36ID:ZrRJaCUf
愚かな・・・なんて愚かな・・・

※戦場のピアニスト
746デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:30:50.52ID:f7jpNd8/
>>742

条件分岐や判定が複雑に入り混じった様なのは、むしろ関数型言語や論理型言語の得意分野だけど・・・。
今まで関数型言語が苦手と言うか、純粋さを捨てていた手続きってのは

putStrLn str
print n

みたいな戻り値が無い関数(voidな関数や戻り値を普段は使わない関数)が続く様な処理や入出力。
これを順番を保証するのが難しかった。

そこを圏論でプログラム丸ごと関数の様なものとして順番を保証しつつ参照透明性を確保する事で大きな意味での(個人的に純粋とは言わない気もするが)純粋関数型言語を実現した。

putStrLn str >>= \_ -> print n

上の糖衣構文

putStrLn str >> print n

do形式で手続き型言語っぽく(手続き型言語っぽいとはいえ、しっかり関数型言語なので一つの巨大な式に還元される)

do
putStrLn str
print n
747デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:40:25.41ID:ZrRJaCUf
これからの時代、多態性よりポリリズムのほうが重要。
2020/08/31(月) 14:31:14.55ID:3l02ZOhc
何回繰り返すんだ…
2020/08/31(月) 15:35:42.21ID:+mVf3WVi
x,y,zをpos2d,zで持つことはないよねって100万回復唱しろ
750デフォルトの名無しさん
垢版 |
2020/08/31(月) 17:14:59.79ID:PbFnPWGE
ネタスレのようだが

カプセル化は問題無い
隠蔽化が問題有る
2020/08/31(月) 18:06:13.87ID:+mVf3WVi
単純に実行しないとインターフェースから先に飛ぶことができないのも読みにくい
更にそこから先の処理の可能性がインターフェースを持つクラス全部とかこれまた読みにくい
更にそのクラスのインスタンスの違いについても追わなきゃいけなくて結果としてゴミクズ
2020/08/31(月) 18:45:27.41ID:Tn5kdrj1
カプセル化はいまいちメリットわからんよね
スコープの話なのに徹底できてない点がカプセル化の是非が定まらない原因
2020/08/31(月) 18:49:04.49ID:+mVf3WVi
カプセル化したくせにSetterとかGetter作ってるやつ見ると

「オメェ、ここおかしんじゃねーのか?」

って言いたくなる
アクセスをイベントに限定したいのか?
誰でもいつでもアクセスしたいのかスタンスをハッキリさせろよw
2020/08/31(月) 19:30:45.75ID:EhjC94Lv
>>747
なにをいまさら
2020/08/31(月) 20:27:11.07ID:JFSQLtY4
>>753
setterとgetterを準備するぐらいならいさぎよく
publicにした方が「私は」いいと思うけどな
2020/08/31(月) 20:59:45.24ID:I/LqRe2u
そうですか
2020/08/31(月) 21:33:12.45ID:+mVf3WVi
>>755
作るソース全部そんな感じの奴がいて邪魔くせぇ

wpfのINotifyPropertyChangedってさ関係ないイベントでも発火して制御できないよね
はじめはsetter、getterでやってたけどあかんわ
発火したいときとそうでないときと手動で分けられないとあかんわ
なんかこれ系のついでに何やらやっちゃおうシステムって開発終盤になると全部ゴミだな
758デフォルトの名無しさん
垢版 |
2020/08/31(月) 21:44:33.69ID:wxThvNjw
>>753
Java web appだと、lombock入れてカプセル化壊すのが当たり前になっちまった。
スマホアプリとか組み込み系とかでしっかりコーディングすればいいと諦めてる。

実際、Web アプリ界隈はバカばっかだし。割り切りも大切。
2020/08/31(月) 21:48:45.10ID:SA/5RSYf
>>758
https://codezine.jp/article/detail/7274

>  Javaは言語仕様上の制約により、ボイラープレートコード(自明だが省略できないお決まりのコード断片)が
> いくつかあります。例えば、メンバ変数を読み書きするだけのgetterメソッドやsetterメソッドがこれにあたります。
> Lombokを使えば、これらJava特有の冗長なコードを、見やすく簡潔なものにすることができます。
>
>  LombokではEclipseのような自動生成ではなく、アノテーションを付与することにより
> ボイラープレートコードを実装したのと同じ効果を得ることができます。

単にプロパティをアノテーションで書けるってだけだよね?
これのどこがカプセル化破壊になるの?
760デフォルトの名無しさん
垢版 |
2020/08/31(月) 23:12:59.79ID:KpYRvIVn
エラーチェックをしたいときはsetter
2020/09/01(火) 00:02:49.23ID:TdzDL303
もしかして
貧血ドメインモデル
2020/09/01(火) 00:41:56.64ID:EzjTWAdj
>>760
それ、エラーチェックをしたいときはpublicメソッド呼び出しと
言ってるのと同じことだけど、何の関係があるの?
2020/09/01(火) 00:52:29.54ID:PZXbhIm5
JavaBeansではセッタとメソッドは別の概念
セッタを通じて状態にアクセスすることでオブジェクトは
よりスマートになる
2020/09/01(火) 00:54:01.92ID:PZXbhIm5
一周回ってアクセサが再評価される段階に入った
2020/09/01(火) 02:05:29.12ID:ETu8a3Hk
>>763
なんねーよ
バカジャネーノ
ブッコロ
2020/09/01(火) 02:06:41.53ID:ETu8a3Hk
何がカプセル化だよ
settergetter使うなら丸出しと変わんねーよ
767デフォルトの名無しさん
垢版 |
2020/09/01(火) 02:27:10.74ID:/xk9LnpH
これからの時代、多態性よりポリフェノールのほうが重要。
768デフォルトの名無しさん
垢版 |
2020/09/01(火) 04:55:11.55ID:Z9W01AEm
下駄 雪駄
2020/09/01(火) 09:15:18.95ID:G32wsX1x
>>766
そんなわけないやろ。
2020/09/01(火) 09:26:14.90ID:PZXbhIm5
>>766
おいお前それはないよ
2020/09/01(火) 10:03:35.97ID:EzjTWAdj
>>766
お前もしかしたら全てのメンバ変数に
setter/gette作ってんのか?
お前が丸出しにしてるだけだろw
2020/09/01(火) 10:13:31.32ID:FqTPqd+i
これこそ露出狂という奴だなw
2020/09/01(火) 11:42:47.53ID:G32wsX1x
今時、意図せずフィールド丸出しはない
2020/09/01(火) 11:53:13.42ID:4pPofKRH
>>771
は?そもそもオブジェクト指向とか言うクソ使ってねーわ
775デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:14:48.18ID:lpkaZteT
>>774
オブジェクト指向は既に俺の股間に付いているのだから、オブジェクト指向プログラミング言語は要らない!
2020/09/01(火) 12:27:07.84ID:wBGQmF0I
だから適切なインターフェイス作成ができないなら素直に関数にしとけと。。
馬鹿に限って自分のクラス設計に自信持ってんだよな。。
777デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:50:13.91ID:/xk9LnpH
CSSはJavascriptで実装されただけあって、仕様も混沌としてるな。
動的確保前提の設計なので、いちいちイラっとする。
2020/09/01(火) 12:52:31.23ID:1Eq9ttpo
ハァ?
779デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:59:45.89ID:/xk9LnpH
教科書は「後で説明するので今はそういうものだと思ってください」というのは無い。
前から順番に読んでいくと、説明なく出てくるものが無いのである。

仕様を書くときは、教科書のように書くことを徹底する。
するとどうなるか?
相互参照が無くなるのである。
相互参照が無くなれば、変数の大きさは一意に決まる。
つまり不要不急の動的確保が無くなるのである。

これがC/C++の掟である。
780デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:15:28.27ID:Z9W01AEm
今まで見たもっともひどいクラス設計は?
2020/09/01(火) 13:22:15.49ID:EzjTWAdj
>>779
1+1=2なんです。今はそういうものだと思ってください。
って最初からやってるぞw
782デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:26:52.52ID:/xk9LnpH
Javaのようなお猿さん言語はプリミティブ以外はすべて参照、つまり動的に確保される。
だからいつでもどこでも動的でいいのだなどと思わないでほしい。
あなた方はお猿さん。
そしてお猿さん用言語を使っている。
しかし、世の中には人間もいることを忘れないでほしい。

人間はもっと効率の良い設計を求めるものだ。
2020/09/01(火) 13:31:17.95ID:EzjTWAdj
Javaのような人間用言語はプリミティブ以外はすべて参照、つまり動的に確保される。

というふうに入れ替えても問題ないんじゃね?w
784デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:35:01.05ID:/xk9LnpH
入れ替えた場合、C/C++は天才用言語になるからダメだ。
2020/09/01(火) 14:09:37.70ID:FqTPqd+i
>>779
小学生の教科書からやり直せ
2020/09/01(火) 14:12:06.91ID:ETu8a3Hk
脳筋プログラマばっかりだな
787デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:05:15.80ID:OC0cfHje
>>780
MFC
788デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:29:52.72ID:fuWow3G5
>>781
高校までの教科書は大学入ったら全部役に立たないよなω
789デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:31:01.61ID:fuWow3G5
>>787
あれはただのwrapper以下だからなー
790デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:51:55.50ID:/xk9LnpH
MFCは30年前のライブラリだからな。
よくまあここまで生き残ったわ。
791デフォルトの名無しさん
垢版 |
2020/09/01(火) 16:28:44.96ID:fuWow3G5
同じ時期かそれより前にあった OWL の方が10000倍マシだった
792デフォルトの名無しさん
垢版 |
2020/09/01(火) 20:39:35.27ID:QR4OvP6I
御子を捨てよ、良いな?
2020/09/01(火) 21:24:37.44ID:eOhMfKjO
Delphi最強
2020/09/01(火) 21:52:46.77ID:NYV7WRkk
>>779
Javaの教科書には

class Test {
public static void main(argv[]) {
System.out.println("Hello");
}

とりあえずこれで動きます。「あとで説明するので今はそういうものだと思ってください」
と堂々と書いてあるぞ。
2020/09/01(火) 22:55:07.49ID:RK7Kdsp4
>>794
× public static void main(argv[]) {
○ public static void main(String[] argv) {
796デフォルトの名無しさん
垢版 |
2020/09/01(火) 23:46:39.13ID:cXm81OcM
プロパティは、可変階層と同じく若気の興味本位系ではあるが
ベテランになってからも、いくつか使ったことはある

設定時処理のカプセル化
カプセル化と言っても隠したいわけじゃなく、設定する時に絶対にこの処理を通す、という便利機能
「発火」は未経験だが、下手な作りだとなり得る構造だね
ちゃんとできてたとしても、よほどの事情がない限り、普通の関数で書いた方がシンプルで理解もしやすいと思う

なぜ使ったのか、過去ソースを見てみたら、なるほどw
SET時だけでなくGET時にも複雑な処理があるものがあり、これをそれぞれ関数で書くと、関数名が2倍に増える
少なくとも関数名の数を半分にする効能はある
言ってみれば1つの関数に2つの内部関数がある構造なので
2020/09/02(水) 00:29:23.85ID:KTyhBksd
ベテランねー
798デフォルトの名無しさん
垢版 |
2020/09/02(水) 01:31:27.80ID:J/rUgEv/
関数でもできるな
引数が未設定ならGET動作に切り替わると
実際そういう関数も作る
プロパティだと逆に2個になってしまう言語の場合
2020/09/02(水) 01:58:36.95ID:HgpWbw0i
藻前ラ、モチツケ
https://i.imgur.com/DJzoN7F.jpg
800デフォルトの名無しさん
垢版 |
2020/09/02(水) 08:33:16.30ID:yy35G5fq
>>759
Lombok調べてきました感がw

お前が実務経験ないアマチュアってことはよくわかったから口出さないでくれ。
801デフォルトの名無しさん
垢版 |
2020/09/02(水) 09:26:13.66ID:9/rkp9iy
単純なValueオブジェクトはCとかだと
struct Color {
int r, g, b;
};
Color color;
int red = color.r;
みたいに書けるところをわざわざgetter/setter毎回作るの?
アホらしくない?
2020/09/02(水) 10:33:19.59ID:ifuz91bD
>>800
何も言い返さないのかよw
2020/09/02(水) 10:36:53.36ID:lZ/LLDT1
>>801
Valueオブジェクトって何か知ってる?
2020/09/02(水) 11:10:55.31ID:Hwtp1D+h
オブジェクト指向はフレームワーク実装者が意識すべきもの
フレームワーク利用者はその枠でただベタにアプリ実装すればよい

プロパティはフレームワーク実装側から見ると自分自身に対しては何も利益がないけど
フレームワーク利用者の行動をコントロールできるという点で利益がある
805デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:01:34.43ID:9/rkp9iy
ValueオブジェクトってDDD関連で出てくる単語だったのね
その意味では知らなかったけど、そんなこと聞きたいんじゃない
806デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:08:34.16ID:64Ct0prY
>>801
必要なら作っていいし、必要ないならCみたいに書けばいい
807デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:21:27.36ID:9/rkp9iy
ホントかなぁJava触ってるやつらは
getter/setter使わず単にpublicフィールドにしたら
文句行ってきそうなイメージだったけど
808デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:33:16.41ID:KTyhBksd
ValueObjectはReadOnlyが基本だからfinalにして変数をpublicにします
809デフォルトの名無しさん
垢版 |
2020/09/02(水) 13:30:42.14ID:FrAP3fk+
オブジェクト指向に対する愚痴を延々と続ける人には主に2つのタイプがある。

1つはその人にとってオブジェクト指向が新しいパラダイムでありそれを受け入れる事が出来なかった老害タイプ。

もう1つはJavaを通してしかオブジェクト指向を理解しようとしないJava屋の土方タイプ。

両方の属性を持ったタイプが最もタチが悪い。
2020/09/02(水) 13:31:38.92ID:6n47TPOy
>>809
そもそも誰もメリット説明できてないけどねw
811デフォルトの名無しさん
垢版 |
2020/09/02(水) 13:53:16.93ID:HxHRAGOQ
>>810
メリットがわからないなら使わなければいいだけ
2020/09/02(水) 13:56:40.83ID:6n47TPOy
メリットのつもりだけどちっともメリットになってないやつがいるよな
不必要な階層化が明らかにバグ増やしてるやつ

やめとけって
813デフォルトの名無しさん
垢版 |
2020/09/02(水) 14:23:36.56ID:b48j9NlC
>>779
ホントか?

https://ezoeryou.github.io/cpp-intro/

コレのHelloWorldには「コードの詳細な意味はさておくとして」とあるぞ
814デフォルトの名無しさん
垢版 |
2020/09/02(水) 17:14:55.68ID:KTyhBksd
C++のこれダサくない?
std::cout << "hello" ;

<<これダサくない?

イキりマンが設計したとしか思えない
2020/09/02(水) 17:53:01.12ID:6n47TPOy
>>814
俺もクソだと思う
816デフォルトの名無しさん
垢版 |
2020/09/02(水) 17:57:46.65ID:PicHUi2j
明らかに (hoge)printf の方が使い易い
2020/09/02(水) 18:23:05.03ID:oyfP4D/d
C++でそれ使った事無かったなw
何故かhello worldではそのコードが書かれている事が多いけどw
2020/09/02(水) 18:31:49.16ID:X9xcF9vI
std::cout << "hello" << std::endl;
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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