ふらっと C#,C♯,C#(初心者用) Part150

■ このスレッドは過去ログ倉庫に格納されています
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
596デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
垢版 |
2021/05/01(土) 13:47:26.99ID:GvoaCTGBM

つまりdiskとdiscについて話し合いたいってこと?

スレ違いでは??
2021/05/01(土) 14:03:33.45ID:v2ArV8E8D
>>581
結婚式場を出たら、もう披露宴会場が準備されていました
これを披露宴会場の支度を瞬時に終えたと言うことだと思うか?
2021/05/01(土) 14:26:22.67ID:CCHnejZpa
MIDIとかMMLの方がたとえ話としては適切だったかな
たった数10kBのMIDIファイル一つで16bit-48kHzの音を何分も出力できるのはなぜなのか。
1分音を鳴らすのに6MBの量子化データが必要なはずなのに
599デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
垢版 |
2021/05/01(土) 14:40:58.52ID:GvoaCTGBM
つまり薄っぺらな嘘を伸縮自在な愛で…
600デフォルトの名無しさん (ワッチョイ 6768-TNk6)
垢版 |
2021/05/01(土) 16:17:08.68ID:BCm84eaD0
>>586
10Gは大きいとか目安が分かるのすごいですね。
ゲーム制作者じゃなくてもわかるんですか?
>>587
そうなんですよ。テキストファイルを読んで、特定文字列の抽出カウントを
行いたいわけです。C#じゃなくてC言語なら夢見れますか?
低級感があって爆速なイメージですが。
>>588
難しいですがゲームプログラマが夢なんで、思考自体は高度になりがちです。
まず30kbってのはメモリ領域でですか?磁気領域でですか?

そもそも何でCPUの進化バージョンGPUは存在するのに
HDDの進化バージョンGHDDみたいなのは無いんですかね。

あったら困るんですかね?
2021/05/01(土) 16:28:44.50ID:LX/vNMTG0
うん、C#じゃなくてC言語がいいと思うよ。
頑張れ
2021/05/01(土) 16:29:01.53ID:5BASMYuN0
高度どころか怠慢な素人丸出しなんだが。

高度なことを望むならまず地道に足場を固めていくべきじゃない?
すごいことをやってる(みたいだ)から、その方法を教えて!じゃなくて、自分でその理由を調べることをしないと成長はないよ。
2021/05/01(土) 16:33:44.86ID:k3UheK6C0
少しずつ積み上げた方がいいという意味を早めに分かった方が良いかと思う・・・
2021/05/01(土) 16:35:36.04ID:qXtdoAsC0
GPUはCPUの進化バージョンではない。
テキストファイルから特定文字のカウントするのに、全部メモリに乗せる必要は無くて、適当なサイズずつ読み込みながら文字カウントしたら?
別にC#でもそんなに重くないと思うけど。
2021/05/01(土) 16:35:45.23ID:IqH/tXjj0
>>600
まだいたんか
ファイルの読出しにGPUが関係するとか変なこと言ってたから素人だとは思うけど
まず>>602が言うように足場から固めていった方がいいよ
ゲームは小さい処理の積み重ねなんだし

ファイルIO
データの圧縮展開
CPU/GPU制御
並列制御
アルゴリズム
etc・・・

一人でやるんだったら全部自分で制御しなきゃいけないんだし
2021/05/01(土) 16:52:35.85ID:qdLbyML+0
このセンスの無さすぎはひどいな
ゲーム作りたい中学生でも簡単に理解できる話なのに
2021/05/01(土) 17:23:02.96ID:v2ArV8E8D
597には応えてくれなかったな
質問を変えよう
母に呼ばれてリビングからダイニングに行ったら食事の用意がされていました
これはリビングから呼ばれた者がダイニングに行くまでの一瞬に、
母が食事を用意したと思うか?
2021/05/01(土) 17:36:18.28ID:h1NN14xsa
>>600
ストレージの「革新」については15年ぐらい前にこんなのがちょっと話題になった。
だけど、自分が知らないだけかもしれないけどその後の進展を聞かないね。
https://gigazine.net/news/20060710_mram/

NVRAM的な物のコストが下がれば記憶デバイスのカーストの中にある
メモリーとストレージの間の分厚い壁が崩壊するわけで、かなり革命的な
ことなはずなんだけど。
2021/05/01(土) 17:59:43.20ID:h1NN14xsa
しかしいつもの交通整理の人はこんだけ質問者が罵倒されてるのに何で黙ってるのかね。
ここはそういう行為が禁止されているはずのスレではなかったのか(笑)
2021/05/01(土) 18:12:14.87ID:4GddeLjJM
それ以前に連休で暇だとしてもなぜこんなみえみえの嵐に付き合うんだよ…
2021/05/01(土) 18:28:58.67ID:R4IHrQy80
外も嵐だからね(意味不明)
612デフォルトの名無しさん (ワッチョイ 6768-TNk6)
垢版 |
2021/05/01(土) 18:53:13.69ID:BCm84eaD0
>>607
いやわかりますよ。料理を調理する時間が
HDDアクセスってことですよね?ただ料理と違う部分は、煮えるまで待つとかなくて
目的のものをとってくるだけでいいから、一瞬でその場所にいけたら、
基本的には0秒なんですよね。HDDのシークバーがその場所から動く必要がなければ最速ってことですよね。

すいません、そろそろ去ります。
基本的にC#単独では無理という結論にしました。。。
2021/05/01(土) 20:10:11.18ID:GAZiMPha0
本人に聞きたいわけじゃないのだが、基本的に0秒ってどういう意味なんだろう
文中に出てくる一瞬って言葉は0秒じゃないし、なのに一瞬で行けたら基本的に0秒ってのはどういうことなんだろう
小数部は切捨てて整数部だけを考えることを基本的にって言うのかな?
2021/05/01(土) 20:12:10.14ID:IqH/tXjj0
蒸着スピードは0.05秒
2021/05/01(土) 20:14:14.93ID:nnvUFYDz0
薄さ0.02mmでも付けてるんだぜ
616デフォルトの名無しさん (ワッチョイ dfe6-HlUj)
垢版 |
2021/05/01(土) 20:16:16.11ID:hvNg7eLP0
HDDの代わりにGPUにデータファイルを置けば速いって意味だろ
2021/05/01(土) 20:18:32.92ID:5BASMYuN0
その後に思ったことなんだけど、ファイルI/O 以外の処理速度が気になる。
100MB だっけ。そのテキストファイルの中身がメモリにあったとして、検索が終了するまでの時間はどのくらいだったんだろう。
618デフォルトの名無しさん (ワッチョイ dfe6-HlUj)
垢版 |
2021/05/01(土) 20:22:53.83ID:hvNg7eLP0
>>617
流石に大学生をバカにし過ぎでは?
2021/05/01(土) 20:28:50.64ID:jUoUZG3Jr
>>612
君は面白いおもちゃだな

実際に1秒で100MBでしか読めなかったらそれを使ってどうやって派手だったりリアルな画面を作ってやろうかと思うのが
PGやゲーム制作者です
ハードに自分の要望を求めるのは単なる消費者です

昔はもっと制約が厳しかった
自分たちは子供のころからそればかり考えてた

あおりでもなんでもなくあなたには向いていません
2021/05/01(土) 20:30:35.88ID:Bazlrq4sd
いわゆる「ロード中」っていう処理待ちをさせずマップ切り替えが可能なゲームがあったけど、そういう話かな。
古い時代の話だから、今じゃ大したこと無いかもね。
2021/05/01(土) 20:32:10.77ID:jUoUZG3Jr
ハイドライド3
2021/05/01(土) 20:33:10.01ID:jUoUZG3Jr
1秒じゃなくて10秒だったな
2021/05/01(土) 22:04:23.51ID:u8jqB+2A0
そもそもPCのマザボに
CPU、メモリ、HDD、グラボ乗ってんだから
それぞれに行き来するのに時間かかるってわかるやろ

CPU↔メモリ↔HDD
メモリ↔グラボ

とりあえず物理的にどうやってくっついてるのか調べるべきだと思う
2021/05/02(日) 00:05:56.42ID:Jc9e5ibud
まぁ自作したことすらない子も多い。
うちの会社もゲームやゲームハードも作ってるとこなのに開発メンバーなのにスカジーケーブルすら知らん子が入ってきてる。
抽象化や隠蔽化が進んで上のレイヤーばかり意識するようになってるから地盤が無い。
2021/05/02(日) 00:19:41.09ID:9GC+BpRR0
>>618
そお?
動作を「速く見せる」ための制約条件としては確実に必要な要素なんだけどね。
いまさらだけど。
626デフォルトの名無しさん (アウアウウー Saab-TNk6)
垢版 |
2021/05/02(日) 00:23:00.38ID:BrJlALbya
>>624
SCSIなんか知らなくて当然だし別に何も問題ないと思うよ
むしろ「お前らこんなの知らないだろう」オジサンの方が問題だw
2021/05/02(日) 00:25:26.19ID:BrJlALbya
もうISAやCバスだって知らない人の方が多いよね。下手したらAGPも
それどころかPS/2やLPTみたいなちょっと前のレガシーポートだって
今の20代の大半は知らないだろう
2021/05/02(日) 00:29:06.70ID:Jc9e5ibud
その辺の事務や営業じゃなくて、コンピュータハード作ろうという子がバリバリ現役のスカジー知らんとか相当不勉強なんだけとw

Unityでちゅろっとゲーム作るような層じゃあるまいし。
2021/05/02(日) 00:35:00.92ID:BrJlALbya
>>628
SCSiが現役な程度にはISAバスだって一部の産業用途で現役だけど、
さすがにあなたもISA知らんのは不勉強とか言わんでしょ(笑)

要するにそれ自分中心主義なんだよ
そういうおじさんみっともないよマジで
2021/05/02(日) 00:42:55.47ID:smoYWJQA0
一部業界でしか生き残っていないものを知らなくて当然
SCSIが一般的でなくなってから相当経つからな
2021/05/02(日) 01:03:34.73ID:WAC22cE20
コンシューマゲーム機だとSCSI使ってたのは、ドリームキャストとかGBAの世代までだったなー
SCSIは相性があるから結構厳密に型番指定されてたっけ
そしてそれら以降のハードはみんなUSBだった気がする
2021/05/02(日) 11:04:21.93ID:9GC+BpRR0
「SCSIを知ってる」ってどのレベルでのことを言ってるんだろう。
名前を知っていればいいレベルなら、必要になったときに調べれば済むんじゃ。
昔に流行ったの技術を知らないのは不勉強、って言われても困るような気がする。
2021/05/02(日) 11:34:55.65ID:kVgm1y330
SCSIは抽象化されて残ってるじゃん
物理インターフェースだけの存在じゃない
iSCSIなら当たり前に見かけるだろ
そもそも0と0を超えた時間とを同一視し、
0にならないことをにわかには信じられないと宣う国公立大学生って嘘くさい
国公立中学生っぽいからまずは基本情報技術者の勉強でもして、
言語とハードウェアの関係から学ぶのがよさそうだね
2021/05/02(日) 12:23:17.90ID:i3WiXYxp0
sasはまだ現役でしょうに
2021/05/02(日) 12:30:57.35ID:smoYWJQA0
抽象化や隠蔽化の進んでいない下のレイヤーの話としてのSCSIケーブルだから
iSCSIやSASは想定していないと思うけどなぁ
2021/05/02(日) 13:02:24.18ID:PbhH3UoFD
それは今の必須知識じゃないからね
SCSIバスやケーブルの知識があっても、今となっては古いシリアル規格の知識でしか無い
2021/05/02(日) 13:16:44.85ID:bVQBnZjhM
> C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
> C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください

大事なことなので…
638デフォルトの名無しさん (ワッチョイ 2701-SFYt)
垢版 |
2021/05/02(日) 13:26:41.16ID:6VPLrRfP0
インターフェースって継承以外でインスタンス化してフィールドに持たせるように使う場合があるけど、それって違う場所に定義している関数を呼び出して使うような感じ?
いまいちインターフェースの使い方がわからぬ
2021/05/02(日) 13:41:54.97ID:Jc9e5ibud
「コントロールがきかない、再コンパイル依頼が効かない」第三者にバイナリのdllを公開してかつ、3年5年と更新しつづけていけばいやでもわかる。
2021/05/02(日) 13:48:58.41ID:JVX0w7410
オブジェクト指向の言語やってて、デザインパターンの勉強しない奴とか居るんだな。
2021/05/02(日) 13:51:59.04ID:gOHPQIPOM
それぐらいなら別にinterface要らんけどな
自社DLLの指し替えOKならメソッドの中身変えるのはできる
TypeScriptのinterfaceぐらいになったら便利だけどC#やJavaのinterfaceはそこまで重要じゃない
2021/05/02(日) 14:46:34.33ID:hSgvj4Ff0
>>638
実装を入れ替え可能にするために使う
インターフェースを使う側はインターフェースがどう実装されてるかを気にしない
関心事の分離や責務の分割というやつ

public class CustomerService
{
private readonly ICustomerRepository customerRepository;

public CustomerService(ICustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
}

CustomerServiceはcustomerRepositoryがどういう永続化技術を使ってるか関知しない
RDBMSを使った実装からKVSを使った実装に変更したとしてもCustomerServiceクラスは変更する必要がない
単一責任の原則や依存性逆転の原則というオブジェクト指向設計の基本原則に従ってる
2021/05/02(日) 14:53:27.70ID:vJ/g4PX7a
>>638
全然違うものを透過的に扱いたい場合ってあるでしょ?
例えばビデオゲームで入力デバイスとしてゲームコントローラーだけでなく、
キーボードやタッチパネルも使えるようにしたいとか。

とりあえずはInterfaceはそういう要求を満たすためのものだと
理解しておけばいいよ。それ「だけ」ではないけどね
2021/05/02(日) 15:09:58.26ID:vJ/g4PX7a
汎用性を高めるためって考えた方が分かりやすいかもね。

昔テレビデオってあったけど、世の中にHDMIみたいなインターフェイスが存在せずに
ああいうモノリシック構造の機械しか存在しなかったらどんだけ不便か考えれば
インターフェイスの意味なんてイチコロだと思うけどな
2021/05/02(日) 16:17:56.85ID:jdfWZ4dSM
最近はそういうのは関数を渡すんでよくなってる
2021/05/02(日) 17:53:29.91ID:two2wwYId
関数を渡すとしても、引数なり戻り値なりの型を定義しないとならんしな。
実装を含まない定義を切り出しておかないと、容易に循環参照になってクリーンビルド出来なくなるぞ。
2021/05/02(日) 18:03:29.16ID:sTlH4cY7a
>>645
デリゲートで済む用途に(無理に)インターフェイスを流用しなくて済むようになっただけ。
648デフォルトの名無しさん (ワッチョイ df61-Lr3t)
垢版 |
2021/05/02(日) 18:14:35.65ID:KSgMbN0G0
インターフェイスつかってるとVisualStudioで定義に飛んでもメソッドの実装見れないから腹立つんでやめてください。
2021/05/02(日) 18:16:04.86ID:two2wwYId
>>648
逆に、実装を見るなという意思表示では?
650デフォルトの名無しさん (ワッチョイ df61-Lr3t)
垢版 |
2021/05/02(日) 18:24:40.27ID:KSgMbN0G0
>>649
見られたくない恥ずかしい実装してるってことですねわかりました
2021/05/02(日) 18:25:03.65ID:t+a18Ga0M
class X: IX {
private IY y;
public X(IY yy) {y=yy;}
public T foo(U u) { ... }

↑こんなの冗長で面倒くさいだけじゃん
↓これでいいんだよ

static class X {
public static T foo(Func<...> y , U u) { ... }

C#最大の欠点はTSなどと違ってトップレベル関数を定義できないことだな
まあそのうち導入されるだろうけど

>>647
まあそうだね
そしてデリケートで済まない用途なんてのは、ないんだなこれが
2021/05/02(日) 18:48:49.12ID:sTlH4cY7a
OKでは

(1) IEnumerableと機能的に等価なものを実装してみせてほしい

(2) IComparable<T>はComparison<T>で置換できるが、
  (a) ジェネリックでIComparableで制約をかけるのと同じことはどうやって実現するのか?
  (b) 毎回いちいちComparisonを指定しなきゃならん煩雑さはどうしてくれる?
2021/05/02(日) 19:00:20.53ID:2vdkVbTy0
>>651
Funcの型と、Uはどこで定義した何なの?
俺ならUはインターフェイスにすると思うけど。
fooを呼ぶ側も、foo側からも参照できる型である必要があるよね。
なんとなくプリミティブしか意識してない気がする。
2021/05/02(日) 19:41:10.32ID:sTlH4cY7a
制約の問題はIComparableぐらいならコンストラクタで必要なデリゲートを指定しないと
インスタンス化できないようにするみたいなことで解決できるけど、
インターフェイスのメンバーが多かったりイベントを含んでたりするとそうもいかんね。
2021/05/02(日) 20:12:47.50ID:t+a18Ga0M
>>652
(1)
var (moveNext, getCurrent) = MyGetEnumerator(x);
シンタックスシュガーは流石にコンパイラのサポートないと無理よ

(2)
(a)言語サポートないと無理だね
逆にいうとそういう機能を言語でサポートすりゃいいんじゃない?
言語機能の利点であってinterfaceの利点じゃないよねこれ
(b)もっともらしいデフォルトを用意するだけ

>>653
Funcはシステム定義だが?
TやUは架空のコードでよくあるただのプレースホルダであって特に意味はない
どこかで定義されていると考えていいよ
2021/05/02(日) 21:45:53.38ID:2vdkVbTy0
>>655
プレースホルダはわかってる。
引数の型の定義場所が問題だって言ってんだけど。
実務したことない?
2021/05/02(日) 21:58:29.87ID:+xOhjhDaM
>>656
言ってること意味不明だから多分君なんか勘違いしてる
2021/05/02(日) 22:16:38.89ID:keNMubny0
>>648
Ctrl+F12でよくない?
2021/05/02(日) 22:20:11.10ID:/HNwvjpa0
>>648
実装へ飛ぶ的な右クリックメニューがある
2021/05/02(日) 22:52:19.04ID:vVweUfCP0
実装に移動なんてあったんだな
これかなり助かるわ
2021/05/02(日) 23:12:46.37ID:OnfmzaV30
>>657
クラスに実装するのなら、ドメインに焦点を当てたクラスにその実装も凝集されるけど、
外部からデリゲートで渡す場合はそのデリゲートをどこに定義すんのって事じゃない?

1回しか使わないのなら匿名関数でいいけど、複数箇所から同じ用途で使うのなら書き捨てじゃなくどこかで定義しておきたいと思うし、
更にそれが一体何のための処理なのかを設計に落とし込むなら適切な場所で宣言実装しないとだし

抽象的な話してると自分の頭じゃ理解しきれないな
こういう設計の場合こうすればよくね/こういう問題があるやんっていう具体例が欲しい
2021/05/02(日) 23:55:49.46ID:2vdkVbTy0
>>657
>>661が殆ど言った。
インターフェイスはインターフェイスで切り出しておかないと、
完全に単一のアセンブリでやらない限り、循環参照しがちだぞ。
AクラスのメソッドFooがBクラス受けてて、
BクラスのメソッドBarがAクラス受けてるだけで困ったことになる。
これはA.Foo(B)→B.Bar(C)→C.buz(A)と遠回りになってもそう。
2021/05/03(月) 00:35:06.67ID:AKP9VyEvM
>>661
構文レベルでクラスで書く意味はなく、関数でこう書けばいいでしょ、って意図のレスに対して
その疑問(設計レベルの問題)って方向性ズレてるってことは理解してる?
まあいいけど

ドメイン上のある責務に関連した処理をまとめたいって意図で聞いてるなら、モジュールで分ければいいよ
クラスは要らない

例えばOOPでIY, YがリポジトリでIX, XがリポジトリのCreateメソッドを使う何らかのサービスだったとするよ

関数で書くときはYモジュールにget, update, create, deleteなどの関数を定義する
Xにはfuncを定義して、もし関連性が高い別の機能もあればまあ一緒に定義してもいい
んで実行時にはX, Yをインポートして
func(create, u);
みたいにして呼び出すだけでしょ
funcとcreateをバインドして
_func = u => func(create, u);
みたいにしてDIでやってるようなこともできる

これならインターフェースもクラスも要らんよね?
関数だけがあればいい
構文上のムダが多いクラスを使う利点はほとんどないよ

>>662
相変わらずなにが言いたいかわからん
2021/05/03(月) 00:50:26.13ID:MrRb6D/k0
>>663
なんでわからんのかな。
2021/05/03(月) 01:00:53.01ID:ppBWlDH7M
>>663
できるできないの話ならアセンブラなら何でも実現できるよw

> 構文上のムダが多いクラス
と言うなら何がどうムダなのかを書かないと単なる個人の感想にしかならないよ
2021/05/03(月) 01:42:30.76ID:FYXS8pYUa
>>665
>できるできないの話ならアセンブラなら何でも実現できるよw
意外にこれが本質だろうね。

一昔前のOOP批判にも「構造体でも同じことが実現できる」ってのがあった。
そりゃできるに決まってるが、そういう批判には無理してそうやって
書いたコードが果たして人に理解しやすいのか、
人間の認知能力に親和的なのか、という視点が欠けていた。
2021/05/03(月) 01:44:06.35ID:p8zZzwHv0
おじいちゃんこないだから暴れ過ぎ
OOPもInterfaceも不要って何でC#使ってるんだろう
2021/05/03(月) 01:44:36.83ID:JIK/4A/q0
xview/sunview のAPIは全部構造体だったなぁ
2021/05/03(月) 01:46:57.30ID:el9v2bCt0
>>663
構文レベルでは引っかかるところは無いので、設計レベルの質問した感じ
自分の理解があやしいのは自覚してるので質問しつつ補おうとしてる ※自分は半人前くらいなので

663読んで見えてなかった場所が見えたのだけど、
>>651のコード例でいうとIYとYの定義が無くなって、代わりにYモジュール増えてるんだよね?
差し引きで言うほど構文が楽になってる?この辺は個人の感覚だけど、そんな変わらないような気がした

ついでにいうと、Xから見たときに何やってるのか解らなくなってる気がした
インターフェース使った時であれば詳細は良くわからんけどリポジトリ用のIYインターフェース使ってそっちに任せてるんだなという隠蔽だけど、
デリゲートでやると何か良くわからん関数受け取って処理させてるわってならない?
2021/05/03(月) 02:08:36.88ID:PW8YFNOca
>>666
関数のほうが認知しやすいよ
OOPみたいにあちこち参照しないし
interfaceのように不要なメソッドにも依存しなくなる

>>667
ぶっちゃけ昔は選択肢が少なくJavaよりC#のがマシだからって理由かな
あとは惰性

>>669
C#だとトップレベル関数がないからあんま変わらんかもな
C#も近いうちに変わっていくと思うよ
デリゲートが何やってるかわからないなら命名に失敗してるってこと
命名に失敗したらデリゲートだろうがinterfaceだろうが同じようにわからないよ
2021/05/03(月) 03:11:07.27ID:oM0LAQLj0
>>667
突き詰めるといらない
だってc言語で完成されてるし
だから場面場面で使用するメリットを説明できるかってのは重要になると思う

先読みでの将来的に〜になる見込みで
先行投資を現場のPGの勝手な判断で行ったってのは相当アホな所業
2021/05/03(月) 08:08:21.32ID:MrRb6D/k0
Interfaceが不要なメソッドってのも意味がわからんのだがな。
OOPでなくとも、型のキャスト可/不可には、インターフェイスがあったほうが良い。

これはGoみたいな、トップレベル関数で書ける他の言語でも同じ。
2021/05/03(月) 08:20:32.49ID:kW5Idv8oM
ここはC#初心者のためのスレのはずなんだけど
このおじいちゃん、なんでこのスレで自分の主義主張を振りまいてるんだろう?

自分の書き方が2021年時点で一般的な書き方と大きくかけ離れた時代錯誤なものと分かったうえで
初心者にもそういう書き方を強要したいの?
それとも誰かに構ってもらうのが目的なの? 自社の若手に煙たがれて敬遠されてるとこういうスレでクダを巻きたくなるのかな?


率直に言って、このおじいちゃんは
Rubyガイジ並みorそれ以上の害悪だからもうこのスレで書きこまないでほしい
2021/05/03(月) 08:36:10.53ID:MrRb6D/k0
どっちの指摘?
2021/05/03(月) 09:50:34.48ID:AZIpChV60
構う奴もガイジって20年前から言われてるはずだがいい加減学習できないのかねチンパン君
676デフォルトの名無しさん (ブーイモ MMcf-QYFT)
垢版 |
2021/05/03(月) 11:36:41.28ID:8gAH2GR/M
昨日は触れなかったけど、関数のメリットの中でも特に大きいのは、テストのしやすさね

インターフェースにしちゃうと、テストモック作んのが面倒くさすぎんのよ
いちおうモックフレームワークみたいなのもあるけど、ありゃプログラミングパズルみたいでマトモじゃない
長くメンテナンスするには疲弊が勝る
そもそもなんでモックが必要になるかって
、OOPでインターフェース使ってDI、なんてことをやるから無駄にオブジェクトの数とオブジェクト間の参照が増えていくからだ

関数なら簡単だ
都合のいいラムダを渡すだけ
関数には無駄なオブジェクトも参照もない
これ以上にシンプルなものはない

これを知ってしまうとOOPなんてやってられんくなるよ
2021/05/03(月) 11:37:53.09ID:WvqQmPZG0
まあ1対1のインターフェースは要らないな
複数のクラスを同じ仕組みで扱うときに有効になるものだ
2021/05/03(月) 11:42:45.35ID:KphYKkJEd
都合の良いラムダを渡すだけ。
そのラムダの引数の型は?

普通ベースクラスかインターフェイスでは?

なんか勘違いしてる気がする。
アセンブリ1つが前提になってる?
2021/05/03(月) 11:45:24.03ID:KphYKkJEd
>>677
そりゃそうね。
680デフォルトの名無しさん (ブーイモ MMcf-QYFT)
垢版 |
2021/05/03(月) 12:09:02.97ID:bhpArzgTM
>>677
それ関数でいいよ

>>678
意味不明
2021/05/03(月) 12:19:41.29ID:US3b2rihD
>>680
関数をオーバーライドするってことか?
2021/05/03(月) 12:43:57.15ID:KphYKkJEd
どう意味不明なのかマジでわからん。
OOを捨てて関数型推したいのはわかるけど。

IDisposableなんかはどう不要にしていく?
IEnumerableは?

IDbConnectionは不要で、クラスがだけあれば良いって話?
2021/05/03(月) 12:48:01.71ID:9l24SOSQ0
>>676
興味あるのですが、参考になるサイトとかありますか?
2021/05/03(月) 12:51:04.01ID:1Sg6AXuHM
初期のC++がCにトランスレートできてたようにクラスやインターフェースなんて無くてもコードは書けるわな
その方が楽とか言うならそれでいいと思う
俺のプロジェクトに関わらない限りは
685デフォルトの名無しさん (ブーイモ MMcf-QYFT)
垢版 |
2021/05/03(月) 13:04:29.64ID:57hGL+DgM
>>682
IDisposableとかIEnumerableのような、言語が特別扱いしてるインターフェースを代替することはできない、ないし難しいだろうね
そういう特別なインターフェースを引き合いに出して、インターフェースのほうが優れてると主張することはアンフェアだとも思う
実際きみたち、特別扱いのインターフェースでしか優位性を主張できてないよね?

ちなみにGoだとdeferという構文があって、
いちいち特別なインターフェースの実装を”強いられる”ことなく、破棄関数を遅延実行させることができる
こちらのほうが洗練されてるね
C++だとこれはデストラクタの仕事になる
インターフェース?関係ないね
C#はどういうわけか、破棄関数の遅延実行にIDisposableというインターフェースを選択したが、だからといって、それがインターフェースの優位性を示すということにはならない
2021/05/03(月) 13:14:13.33ID:KphYKkJEd
>>685
アンフェアでもなんでもない。
IDbConnectionみたいな、何らかのデータベースへのコネクション、を表すものの代替も出来てないよね。
具象クラスでは事足りないし「データベースへ接続する関数を渡すイニシャライザ」からの返り値は同じように、汎用的なインターフェイスにキャストされてないといかん。
Goでもこれはsqlパッケージの中にインターフェイスが定義されてるよね。

と言うか、アセンブリの循環参照もわかってないんじゃないの?

Goのdefer文は破棄の遅延実行ではない。その関数を抜けるときに必ず実行する、だけ。
破棄以外にも使えるんよ。
finally節だと思えば妥当でしょ。
2021/05/03(月) 13:30:48.18ID:QO7vn18f0
>>685
特別扱いされているinterfaceが例にあげられたのはそれがよく知られたinterfaceの一例というだけの話であって、特別扱いされていることは本筋ではないだろう
688デフォルトの名無しさん (ブーイモ MMcf-QYFT)
垢版 |
2021/05/03(月) 13:44:29.08ID:57hGL+DgM
>>686
データベース接続も関数でいいよ
同じシグニチャの関数セットを異なるモジュールに定義して必要なものを必要な時にインポートするだけ
2021/05/03(月) 14:15:02.88ID:KphYKkJEd
>>688
シグニチャが同じなら、引数も戻り値も同じなんよね。
DBごとに違うコネクションをどう表現するの?
GoでもDriverインターフェイスでさばくよね。DB。
具象クラスのメソッドが呼びたい時はアサーションするよね、
2021/05/03(月) 14:23:09.97ID:el9v2bCt0
無駄をなくしたとかシンプルにしたとか言ってるけど、言語仕様側で受け持ってた制約を無駄と評して人任せにしただけに感じてしまう
>666で言われてるけど
2021/05/03(月) 14:28:16.36ID:LjFlj8XQ0
その関数のシグニチャを定義して強制するのがインターフェイスじゃないのかね
2021/05/03(月) 14:43:05.66ID:KphYKkJEd
そう。結局インターフェイスのこと言ってるの。基底になるオブジェクトとかそういう話になるだろうけど。
定義場所の問題。
そんで、それを定義だけ外に出せないのが問題だと俺は思う。
2021/05/03(月) 15:09:53.18ID:JDQ36HZh0
>>682
それを許すならコールバックのがいいなー
結局、実装見てみないとそいつらってわかんなくない?

MSが作ったメソッドなら実装されているだろう多分って言えるけど
それって組む人間の信頼性の話でさ

昔のデバイスコンテキストみたいに
え?解放されてんの?されてないの?
どっち?
みたいなのソースから無駄にわからんじゃん
こういうの欠陥品として捨てていくべきだと思うよ俺は
2021/05/03(月) 15:24:55.90ID:KphYKkJEd
>>693
コールバックはどうかなぁ。
それこそ、呼んでくれるかどうかわからんくない?
例外のハンドリングがいよいよ大変になるから、async awaitみたいにうまく隠蔽してくれる方が良いかなぁ。

確かにまぁ、開放したはずが開放できてなくて再起動するはめになったりしたし、わからんでもないけど、それこそIDisposableなんかでハンドリングした方が良いんじゃないかな。
2021/05/03(月) 15:33:42.40ID:JDQ36HZh0
>>694
ぶっちゃけよんでるかどうかわからんのは退化だと思う
2021/05/03(月) 16:10:09.16ID:bSPfVkbS0
デリゲートvsインターフェースの戦いはつまるところ気軽に使いたい派vs丁寧に型付けしたい派の宗教戦争なのだろうな
JavaのFunctional Interface、TypeScriptのStructural Subtyping、オブジェクトリテラルがあれば両陣営とも納得すると思われる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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