◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

ふらっと C#,C♯,C#(初心者用) Part150 YouTube動画>1本 ->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1616471904/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ 2b02-+i0H)
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://2chb.net/r/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
http://2chb.net/r/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
2デフォルトの名無しさん (ワッチョイ 5168-u+xM)
2021/03/23(火) 18:03:39.73ID:VsSEePUk0
List<乙>
3デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/23(火) 21:59:18.80ID:EIK7uDnA0
コンソールでRPGみたいなゲーム作ろうとしてるけど
クラスの作り方がいまいち思い浮かばない
例えば
レベルアップした時にHPとかMPとかのクラスのフィールドをいじりたいけど、レベルクラスに入れるとステータス取るときに毎回status.level.hpみたいにレベルを通らないといけないのが厄介
かといってステータスクラスの中にレベルクラスとHPクラスを内包してしまうとレベルクラスのメソッドが呼び出された時にhpクラスのメソッドが呼び出せない…(staticはなしとして)

どうすれば良いのだ
4デフォルトの名無しさん (ワッチョイ 9301-lXNI)
2021/03/23(火) 23:03:31.32ID:CY92qFOb0
レベルやHPをクラスにしたい理由は?
どういうメソッドを想定してるの?
5デフォルトの名無しさん (アウアウウー Sa5d-7TK3)
2021/03/23(火) 23:04:14.83ID:zRupaTqla
>>3
単純に、ステータス、レベル、HP、MPをメンバ変数に持つクラスにすりゃええんちゃう?
レベルアップメソッドを呼ばれたら、それぞれを更新するだけ

最初は難しく考えないで、ありのまま設計して実装してみる
で、破綻しそうなら設計を変えて再実装
そういう試行錯誤も楽しいかもよ
6デフォルトの名無しさん (ワッチョイ 51a7-FMtt)
2021/03/23(火) 23:32:37.84ID:3AlrkluQ0
ゲームはすべてのリアルタイムデータをエクセルに並べるつもりでプログラムを組め
物体同士の相互作用処理が一番多くてかつそれが7つも8つも同時に関わるので
オブジェクト指向言語の機能が役に立たないどころか悪影響すら及ぼす
絶対に使わないほうが楽に組めるぞ
まあ、まずやってみろ
7デフォルトの名無しさん (オッペケ Sr85-DLm1)
2021/03/23(火) 23:52:01.54ID:oR7E8wqDr
偉そうなやつだな
8デフォルトの名無しさん (ワッチョイ b102-+i0H)
2021/03/23(火) 23:59:45.77ID:ACoFzk2L0
でもまあ、とにかくやってみるってのには賛成。
根気よく続けて、それにちょっとした向上心があるなら、そのうちそれなりにはなる。

>>3 の人は、直接的なアドバイスを求めてるんだろうけど、ちょっとアドバイスしたくらいでどうにかなるようなもんでもないなぁって感じ。
9デフォルトの名無しさん (ワッチョイ 5168-u+xM)
2021/03/24(水) 03:06:14.87ID:hZzg7ROH0
>>3
オブジェクト指向言語だからクラスは物、オブジェクトであって、
RPGのキャラはそれぞれステータスを持つオブジェクト=クラス。
キャラにはステータスがあるなら、それぞれのキャラクラスにはステータスクラスが保有されるべき。
・・・などと自分なりに整理して、設計してみてはどうか。
その設計で厄介なことがあっても、設計に納得出来るなら、それは通るしかない厄介事なのかもしれない。
それを回避したり厄介を軽減する手段はいろいろ有ると思う。
やってれば身についてくる。その過程がまた楽しい。
設計が正しいかどうか、それは自分が決めればいいが、想像が付かないなら書籍を漁る。
10デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 06:37:38.52ID:k6isLik00
3だけど
一応4回くらい違う設計で同じ処理のコードを作ってみたんだが、やりたいことは
親クラスに子クラス1,2がいて
子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい

一応現状はref使ってインスタンスされてる子クラス2のアドレスを保存して子クラス1で間接的に更新してるけど
子クラス3,4,…って増えた時に毎回コンストラクタの引数変えて処理追加させるのは冗長的だなぁと思って違うやり方したいと考えてるけど思いつかない…
11デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 06:43:09.14ID:k6isLik00
>>4
パラメータクラスに最大値、最小値、現在値をプロパティで持つようにして
HP、MP、LV、EXP、クラスをパラメータクラスを継承して作ろうとしてる
さいごにステータスクラスとしてHPからEXPをフィールドに持つようにしてコンストラクタでインスタンス化させるようにしてる
12デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 07:00:45.85ID:k6isLik00
class Prameter{
private int _Max;
public int Max{
set MaxUpdate(value);
get return _Max;
}

protected virtual
void MaxUpdate(int val){
_Max=val;
}

最小値も上と同様
現在値も上と同様※
}

※少し実装とは違うけどざっくりとしたらこんな感じのクラスを現状HP,MP,Level,exp全クラスにそれぞれ継承してる
レベルアップとかは現在値の更新時処理のoverrideで処理変えたりして実装してるんだ
13デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 07:19:03.14ID:k6isLik00
>>6
やっぱりそうか。Cのような関数での設計なら単純で作りやすいんだがオブジェクト指向の練習と思ってやってると意外と難しかった。
ちょうど7つも8つもパラメータが増えてきていちいち引数変えたりするの面倒やしクラスにするメリットがあまりないな…
14デフォルトの名無しさん (ワッチョイ 51a7-FMtt)
2021/03/24(水) 07:39:20.22ID:IIHDBzfT0
>>13
7つ8つはパラだけじゃなくてオブジェクトもやぞ
アクセスを限定するオブジェクト指向言語の機能は絶対に役に立たん
15デフォルトの名無しさん (ワッチョイ 9301-lXNI)
2021/03/24(水) 12:54:19.52ID:C9/npL5e0
>>11
ステータスクラスがHP, MP, LV, EXPの最大値、最小値、現在値をそれぞれ直接int等で持つ構成と
ステータスクラスがHP, MP, LV, EXPの各クラスのインスタンスを保持する構成とを比較して
後者にどういうメリットがあるのか、もしくはないのかを考えればいいんでないのかな?

>>10
>親クラスに子クラス1,2がいて
親クラス・子クラスという表現は一般的に継承関係を指すので
あるクラスが別のクラスのインスタンスを保持してる場合は親クラス・子クラスという表現は使わないほうがいい

>子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい
今回のケースで使うべきかどうかは微妙だけど
フィールドが更新されたときにそれをイベントとして通知するようなパターンを使えば
クラス1のコードでクラス2を参照する必要がなくなって通知先が増えてもクラス1を変更しなくてよい
16デフォルトの名無しさん (ワッチョイ 9301-lXNI)
2021/03/24(水) 13:06:41.79ID:C9/npL5e0
https://paiza.io/projects/jSt0Q60s11SN8n8JJzO_7Q
これ、とあるゲームのキャラクターステータスだけどベタなキーバリューペアで管理してる
スキルや装備によってバトル中のHPや攻撃力/防御力とかが変化するから本来の値と底上げされた値は別項目で管理されてる
17デフォルトの名無しさん (ワッチョイ 5168-4Ddi)
2021/03/24(水) 15:14:08.35ID:hZzg7ROH0
何か既存のRPGでやってるステータス計算の再現なのかな。
C#の仕組みを凝ると、デバッグが怖そう。
18デフォルトの名無しさん (スププ Sd33-PDCb)
2021/03/24(水) 17:52:37.32ID:JXkKcrLid
なるほど、
皆様、様々なアドバイスありがとうございます。
特に親、子クラスとかのニュアンスや使い方の指摘はありがたい。

ちなみにゲームの再現はしてないけど、イメージはCUIのドラクエのイメージ。それをオブジェクト指向の練習としてクラスで作ってみようとして一番最初で詰んだという経緯っす。

メリットデメリットは正直オブジェクト指向が初めてだからよくわからないってのが本音。ただ知識として幅は広がってる気がする。MVCモデルとかで実現するのかなーとか考えたりイベントをリストで管理するのかなーとか色々模索はしたけど結局いい感じにならず苦難中。
19デフォルトの名無しさん (ワッチョイ 937c-4Ddi)
2021/03/24(水) 17:59:16.27ID:HEdEJwPg0
最初はあんまり沢山クラス作らない方がいいかと思う
段々とここは分離した方がいいとか継承した方がいいとか分かってくるので
とにかく動くものを作れるかどうかで勉強するにしても先に進めるかどうかの分岐点になるからな
20デフォルトの名無しさん (ワッチョイ 0b33-zgiT)
2021/03/24(水) 18:09:40.53ID:spck33He0
オブジェクト指向の学習が目的なら、ポケモンで学ぶオブジェクト指向みたいなのがいくつかあるから
そういったPOSTを眺めるとなんとなく雰囲気がつかめるかもしれない
21デフォルトの名無しさん (アウアウウー Sa5d-oXDN)
2021/03/24(水) 18:29:08.45ID:c5QGfFFqa
ゲーム自体があんまりOOP向きの題材じゃないかもしれないよ。

モデル化する必要があるのはゲームの世界を成立させている「舞台装置」
であってプレーヤーの目に見える表層的なキャラじゃなかったりすると思うんだけど
前者は得てして抽象的な存在になるし、どうしても後者に引きずられてしまう。

知らんけど。

大昔シューティングゲームとかボードゲームがいかにOOP向きじゃないかって
論争があったねw
22デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 18:34:43.36ID:7kvkVNgG0
そうか…
既にOOPに対して嫌悪感を抱き始めるこの始末。
とはいえ継承ができたりオーバーライドして変更したりできるのは良いね
〇〇/××って形の表示するのもは全部同じパラメータクラスで扱えるし、ちょこっと変えたいとなるとオーバーライドで消したりオーバーロードで処理増やしたりできるもんね。

うーん、やっぱC#はよーわからんw
23デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 18:43:27.34ID:1tcqqVj20
ちなみに、C#(プログラミング)初心者が理解しやすそうな題材ってあります?
まだhelloworldから変数作って弄るよりかはゲームのほうが楽しめるんかなと思ってそれで始めたらドツボ入ったんだよね。
難易度も低めが良いけど…(マルチスレッドやGUIでないようなもの)
24デフォルトの名無しさん (ワッチョイ 937c-4Ddi)
2021/03/24(水) 18:57:55.30ID:HEdEJwPg0
どういうものを最終的に作りたいかによるけどゲームが目標なら
最初からUnityで勉強するのもアリかなと思う

勉強ならコンソールアプリの方が文字だけの世界だから分かりやすいけど
最初からWinFormsのプロジェクト作ってボタンやテキストボックスなど配置して
GUIのアプリのつくり方を勉強するのも良いかも知れない
GUIだとButtonにはClickイベントが、TextBoxにはTextChangedイベントがあるとか
(デザイン画面のボタンなどをダブルクリックすれば、上記の説明した一番使うであろうイベントの
実装が追加されるようになっている)
そういうイベントにより処理を行うみたいな形になるので、リアルタイムのゲームとは違った感じになるかと

どっちにしてもプログラムしてみて動かしてを繰り返し出来る方が望ましいかな
25デフォルトの名無しさん (ワッチョイ d901-PDCb)
2021/03/24(水) 19:03:33.84ID:1tcqqVj20
なるほどなー
よく考えたら最終的にはGUIのアプリケーションプログラムが作りたいと思ってた。ゲームは特に好きじゃないけど好きな人が多そうだから説明する時にも役立つかなとは思ってゲームにしてた具合。
先にFormやるのもありかも
26デフォルトの名無しさん (スププ Sd33-n6qz)
2021/03/24(水) 21:14:45.45ID:6P4Y/Xh7d
ライフゲーム
27デフォルトの名無しさん (ワッチョイ 9301-lXNI)
2021/03/24(水) 21:41:45.26ID:C9/npL5e0
いろんな種類のキャラを動かす系のゲームはOOPに向いてると思うけどな
実際そういうゲームのほとんどがオブジェクト指向で作られてるわけで

プログラミングを学ぶ目的に適してるかと言われると微妙だが
28デフォルトの名無しさん (ワッチョイ 51a7-FMtt)
2021/03/24(水) 21:51:54.97ID:IIHDBzfT0
>>27
向いてない
オブジェクト指向って
オブジェクト同士の処理を綺麗に書く
ように作られてない

全オブジェクトが存在するシーンにほぼすべての処理を記述することになる
マップ情報がないとキャラは移動すらできないことがすぐにわかる
ではマップとキャラのデータが混在した処理をどこに記述するべきか?
シーンに決まってる
なのでゲームシステムに関わるほぼすべての処理をシーンに記述することになる
もう仮にオブジェクト個別の処理が2~3個見つかった程度で個別のクラスなんかに書くのはバカってぐらい
全部シーンに書くことになる
29デフォルトの名無しさん (ワッチョイ 5168-4Ddi)
2021/03/25(木) 06:17:54.99ID:PnLvSLd80
言語そのものよりライブラリに何があるのか把握しきれなくて辛い。
自分でクラスを作ったら、もう既に.Netにあったりするし。
辞書を熟読するような事前の勉強が必要なのかな。
30デフォルトの名無しさん (ワッチョイ 51de-FMtt)
2021/03/25(木) 07:11:43.36ID:/8oIOqtL0
>>29
必要なのは作る前にググる癖じゃね?
31デフォルトの名無しさん (ワッチョイ d133-3UcT)
2021/03/25(木) 08:33:30.77ID:tiLz+LJ90
>>29
わかる。会社に入るとドキュメントの無いライブラリも加わる。
32デフォルトの名無しさん (ワッチョイ 5924-FrbH)
2021/03/25(木) 08:39:46.38ID:qKMPIZcm0
ゲームって普通にOOP学習にはもってこいじゃね?
一見全く種類の違う自キャラや敵やNPCなどを一つのベースクラスから派生させたりとかオブジェクト指向の有難みを享受しやすいジャンルだと思うけどな
まぁそういうことせずとも一度C言語を使ってみればC#を使ってる時点でデフォでめちゃくちゃオブジェクト指向の恩恵に授かってるというのを認識できるけど
33デフォルトの名無しさん (スフッ Sd33-u+xM)
2021/03/25(木) 09:28:18.12ID:WBb7w08Pd
ゲームだと単純に楽しいし、良く知ってる世界だし。
異世界小説が流行るのも、みんなリアルよりゲームのほうが詳しいからね。
34デフォルトの名無しさん (ブーイモ MMcb-92UB)
2021/03/25(木) 13:24:44.00ID:P2foE7HjM
ゲームはOOPより関数型のがやりやすい
OOPだとゲーム状態が大量のオブジェクトに分散してしまい管理が追いつかなくなる
35デフォルトの名無しさん (ワッチョイ 5335-n6qz)
2021/03/25(木) 13:26:41.67ID:KsV0Sf9V0
パラメータ管理とレンダリングは別視点
36デフォルトの名無しさん (ワッチョイ 695f-R0OD)
2021/03/25(木) 13:29:23.03ID:Nsykn7+b0
unityやwpfで何か作ったらいいんじゃない?
嫌でもOOPを使うことになるし
37デフォルトの名無しさん (ワッチョイ 8bbb-Q5Cn)
2021/03/25(木) 15:14:45.90ID:mlbm7rgK0
Unityはやめといたほうがいいんじゃん?
ゲーム特有の定石が多い上にあまり公開されていないので、なかなかOOPを活かせるようなコードが書けるもんじゃない
38デフォルトの名無しさん (ワッチョイ f568-UUyU)
2021/03/26(金) 06:50:34.94ID:M+ibeJ+i0
なんか作るとき、ついつい無駄にインターフェース作ったり、クラスを継承させたりしたくなる。
後で使うかもって置いといても、結局、役立たずで無駄になったり。
39デフォルトの名無しさん (ラクッペペ MM96-3uWH)
2021/03/26(金) 08:06:06.50ID:kpMAymvOM
YAGNI原則
40デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
2021/03/26(金) 14:55:15.51ID:OgsXGrRW0
質問です。
'string[][]'と'string[*,*]の違いは何ですか?

List<string[]> lists = new List<string[]>();

string[,] = lists.ToArray();
で二次元配列にしようとすると、

CS0029: Cannot implicitly convert type 'string[][]' to 'string[*,*]'

とエラーが出て困っています。
41デフォルトの名無しさん (ブーイモ MMa6-OegW)
2021/03/26(金) 14:58:50.52ID:jmlXC9C1M
[][]は配列の配列
[,]は二次元配列
42デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
2021/03/26(金) 15:04:21.89ID:OgsXGrRW0
>>41
なるほど、理解出来ました。
ありがとうございました。
43デフォルトの名無しさん (エアペラ SD95-H12r)
2021/03/27(土) 08:26:55.12ID:8mKnzpiaD
>>1
関連スレ
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
http://2chb.net/r/tech/1469538912/
44デフォルトの名無しさん (ワッチョイ 6924-Q1TI)
2021/03/28(日) 08:30:33.61ID:w0FgUNmI0
>>38
「いつか使うだろう」という動機で作る機能の9割は結局使われないという法則があってだな
45デフォルトの名無しさん (ワッチョイ 6502-12p/)
2021/03/28(日) 10:40:20.81ID:i/QSKAGe0
でも、ついでだし作っとくか、で作ったやつがその後のバグ対に効果大なこともあったな。結構。

「起こる可能性のあることはいつか必ず起こる」ってのはマーフィーの法則だっけ。
アタマの片隅にでも置いておくと、後で助かることがままある。
46デフォルトの名無しさん (ワッチョイ b662-GHqT)
2021/03/28(日) 11:33:59.11ID:wZjOpvsr0
一人で作ってるならいいんだけど別の人が対応する時に混乱させるだけなことが多いからな
チーム開発では起こらないことを無駄に考えてしまうのはよくないって場面の方が多い
47デフォルトの名無しさん (テテンテンテン MM96-e9+l)
2021/03/28(日) 12:40:48.84ID:UWp6RwLlM
個人的には>>45に同意
要件レベルだと「いつか使うかも」で入れた機能はゴミでしかないが、
開発者が気を利かせて入れたものは役に立つことが多い
48デフォルトの名無しさん (ワッチョイ f6de-q+au)
2021/03/28(日) 13:48:24.42ID:mEH1r/L60
>>47
センス悪い奴って絶望的じゃん
ユースケースを脳内で構築できないっつーの?
49デフォルトの名無しさん (アウアウウー Sacd-1mGO)
2021/03/28(日) 14:10:23.36ID:maSv/WgVa
必要になると思って書いておいたプロパティやメソッドが結局まったく使われなかった、
っていうのはないことはないと思う。

YAGNIって普通はこういう話じゃないの?

>>38が言ってるような要らんInterfaceや要らん継承関係を作ってしまうって
YAGNIとちょっと違う気がするし、そもそも普通はあんまりやらん気がするなあ。
50デフォルトの名無しさん (ワントンキン MM46-e9+l)
2021/03/28(日) 14:18:03.89ID:YWsxET0EM
コードレベルで呼び出されないのと運用上使用されないのは別問題だよ
前者はほぼ例外なく無駄無価値無意味なんで、俺がコードレビューするなら基本的には消させる
51デフォルトの名無しさん (ワッチョイ 2578-UUyU)
2021/03/28(日) 20:04:07.22ID:GjVtou7p0
スレチ
議論は議論スレでどうぞ
52デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
2021/03/28(日) 20:15:57.09ID:AfIP7Kkq0
>>44-50
横から便乗で質問ですけど、
「いつか使うだろう」とインターフェースや継承関係を作っておく自体は推奨されることですか?

例えば、インターフェースや継承関係が無くても、直付けで作れてしまう訳じゃないですか。
むしろ、そっちの方が楽(というか、直付けでしか作れない人もいますし)。
ただし、物事が複雑化してきたときに、インターフェースや継承関係があると拡張しやすい。

これって上級者なら、(どんなに小さいプログラムだろうが)常にインターフェースや継承関係を作った方がいいのか、
それとも、ケースバイケースで「このぐらい複雑ならインターフェースや継承関係が要る」という判断基準に則って作った方がいいんですか?
53デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
2021/03/28(日) 20:16:36.58ID:AfIP7Kkq0
>>51
すれ違いになりました。
議論スレ、行きます。
54デフォルトの名無しさん (アウアウウー Sacd-1mGO)
2021/03/28(日) 20:49:47.68ID:qVTIlpQ/a
>>52
推奨する人は確実にいないと思うよ。
「ついやっちまう」ことも普通はまずないんじゃないか。
IClonableみたいな実例があるから皆無とも言えないけど。
55デフォルトの名無しさん (ワッチョイ 328b-UUyU)
2021/03/29(月) 18:40:55.68ID:dJ0caBH40
Seleniumで closeとquitをセットで使ってましたが
quitさへ使えばプロセス残りも防げて万能という認識で良いでしょうか?
56デフォルトの名無しさん (ワッチョイ 328b-UUyU)
2021/03/29(月) 18:41:48.60ID:dJ0caBH40
というのもなぜか、最近アップデートされたChromeドライバーのバグなのか
driver.close();を実行するとやたらと時間が掛かる様になり、ストレスを感じています。
57デフォルトの名無しさん (スププ Sdb2-uiCP)
2021/03/31(水) 11:53:07.69ID:/skdgMDzd
演算子のオーバーロードを定義したクラスを継承してそのクラスのオブジェクト同士を足したりしたいんだけど、
継承した子クラス同士足し算してもオーバーロードしてるのが親クラス返してエラー出る…
なんとかなりませんか…
58デフォルトの名無しさん (エアペラ SD89-H12r)
2021/03/31(水) 12:51:53.66ID:rGwDN8jFD
コーのせられる?
59デフォルトの名無しさん (アウアウウー Sacd-1mGO)
2021/03/31(水) 14:43:21.83ID:FnhDsC03a
>>57
当たり前のことが起るべくして起こってるようにしか聞こえんよ
何か盛大に勘違いしてない?
60デフォルトの名無しさん (スププ Sdb2-uiCP)
2021/03/31(水) 17:43:40.43ID:/skdgMDzd
>>59
その当たり前の事がわからないのですが…
子クラスのクラス変数に親クラスのインスタンスを入れれないのはわかりますが、それに対してどうすれば良いのですかと質問しています。
61デフォルトの名無しさん (アウアウエー Sada-OegW)
2021/03/31(水) 18:12:45.92ID:k0t0X50Ga
子クラスどうしの演算子を新しく定義する
62デフォルトの名無しさん (ワッチョイ d573-XUMB)
2021/04/02(金) 02:49:16.07ID:4F6/LV520
いやいやゲームはメチャクチャOOPに向いてる。
ゲームエンジンがプロパティペインで物を制作管理していくのが中心になってるってことは
全体としてOOPと相性がいい。

そらそうよ、鋳型と各オブジェクト、その相互作用、隠蔽やインターフェース、
まさにオブジェクト指向言語の基礎サンプルやエクササイズが綺麗にヒットしやすいのがゲームよ。
63デフォルトの名無しさん (ワッチョイ 4ba7-WZCG)
2021/04/02(金) 03:35:33.76ID:p2YnI9xf0
>>62
エアプ乙
ゲームはオブジェクト同士の関連処理が一番多い
それを綺麗に書く処理はオブジェクト指向言語には無い
これを議論するといっつも言語機能に用意されてないもんだから色んなワンダーランドがご披露されるだけのクソ展開になる
いいか
そんなもんないんだ
お前がどう書くかなんて俺は興味ない
ただ言語の機能にない
それだけだ
64デフォルトの名無しさん (オッペケ Sr01-26+2)
2021/04/02(金) 16:59:32.21ID:kD/N/lyPr
たんに解がひとつではないだけの話じゃね?
そんなの普通のGUIアプリ一つ取ってもそうじゃん
65デフォルトの名無しさん (ブーイモ MMa9-ehU2)
2021/04/02(金) 17:30:53.01ID:bweg+I/EM
文面見ればオブジェクト指向を理解して言ってるのかどうかわかるやろ
66デフォルトの名無しさん (ワッチョイ 0d68-0pr0)
2021/04/02(金) 21:13:27.05ID:qd7mj8LF0
議論スレに行った方が良いのか判らないけど、
俺も初心者なんだけどC#の機能を試したくってさ。
基本キャラからキャラ種類別にクラス継承させたりして楽しんでたよ。

でもゴリゴリにスペックを切り詰めるようなゲームだと、そんな余裕はないのかもな。
67デフォルトの名無しさん (エアペラ SD2b-/UL4)
2021/04/02(金) 21:22:46.60ID:nM9RZYDRD
ゴリゴリにスペック使うような案件にC#使うとは思えないけど
68デフォルトの名無しさん (ワッチョイ a3e6-JnQU)
2021/04/02(金) 21:33:37.08ID:iQ+JaQcP0
日本産のスマホゲーと大陸産のスマホゲーぐらいの速度差は出るだろうな
69デフォルトの名無しさん (ワッチョイ 2d02-xz58)
2021/04/02(金) 21:37:00.93ID:L8b3h71w0
オブジェクト同士の関連処理を綺麗に書く機能、って具体的にどんな感じの物なのか興味はある。
70デフォルトの名無しさん (ワッチョイ 0d7b-1jBW)
2021/04/02(金) 21:37:57.13ID:JUK+seey0
ここ「初心者の質問スレ」で「初心者の雑談スレ」じゃないんだけどテンプレ読めないの?
マ板でやれ
71デフォルトの名無しさん (ワッチョイ 6524-dLXn)
2021/04/02(金) 23:15:46.39ID:jbXSiLa80
>>68
中華の大手どころってマルチプラットフォーム対応なソシャゲもUnityとか使わずにそもそも自前エンジンで開発してね?
72デフォルトの名無しさん (ワッチョイ 1dae-lQ1w)
2021/04/03(土) 00:11:57.23ID:nqPdKYBV0
むしろUnityじゃないの見たことない
73デフォルトの名無しさん (アウアウウー Sae9-p1/t)
2021/04/03(土) 01:51:35.91ID:2NRf1R7da
>>69
まあ言語機能云々は意味不明に聞こえるねw

前も書いたけど、ゲームの場合Mediator的な装置を用意すべき場面でも
目に見えるオブジェクトに引きずられて変な設計してしまいがちだと
いう意味なら分からんでもない。

バブルボブル(おっさんにしか分からんかも)で泡の相互作用を
Bubbleクラスに無理に実装したらたぶんハマるよね。
74デフォルトの名無しさん (ワッチョイ 55b5-vyem)
2021/04/03(土) 02:58:34.81ID:RiNFSwHX0
ちきしょー、分かっちまった
75デフォルトの名無しさん (ワッチョイ 8d2d-kjVL)
2021/04/03(土) 04:13:43.36ID:a3PJiZ4L0
linq便利だなーって使いまくってたけど
最近自分が手続き型の思考をしなくなってきたことが怖くなってきた
これプログラミング能力が低下するのでは..
76デフォルトの名無しさん (スフッ Sd43-+5Lz)
2021/04/03(土) 10:48:17.75ID:UQC8gxiad
>>75
でもLinqって古くから有る技術の延長にある気がする。
SelectしてWhereで選んでSortしてっていうのは、コマンドプロンプトでパイプリダイレクションとかいう手法に似てる。
ラムダ式とかは新しいのかな。数学の世界とかそういう所では古いのか。
77デフォルトの名無しさん (ワッチョイ 8d33-eEFg)
2021/04/03(土) 11:15:26.55ID:vVgJyrul0
やっててよかったラムダ式。
やらなきゃよかった苦悶式。
78デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/03(土) 12:27:40.46ID:4GR7Zrkb0
>>76
君はLISPを何だと思っているのかね?
79デフォルトの名無しさん (ワッチョイ 5d7d-Cvkr)
2021/04/03(土) 12:41:49.44ID:msrmgqC70
そうか、C#だとメソッドチェーンすらも一般的ではないのか…
いやそんな馬鹿な
Unity制御スクリプトとしての利用が多いから?
いいや雑談だし
80デフォルトの名無しさん (ブーイモ MM6b-VtYg)
2021/04/03(土) 12:56:50.93ID:49uAy5SrM
>>75
そりゃ脳みそは使わないと衰えるだろうね
最適化重視で副作用を容認したコードを書こうとすると詰まることが増えた気がする
81デフォルトの名無しさん (ワッチョイ e54f-lQ1w)
2021/04/03(土) 13:57:02.33ID:PWpcDrEf0
いきなりメソッドチェーンとか持ち出したのはLinqの話に絡めてか?
全然違うものだと思うが。
82デフォルトの名無しさん (ワッチョイ e501-26+2)
2021/04/03(土) 18:55:38.38ID:a2otFyvK0
Linqのクエリ式自体はメソッドチェーンのシンタックスシュガーじゃん
83デフォルトの名無しさん (アウアウウー Sae9-p1/t)
2021/04/03(土) 19:11:52.27ID:CmPk+yxPa
メソッドチェーンの元々の意味はvoidのメソッドをthisを返すようにして....
ってことだったんだと思うよ。

個人的にはこういう重箱の隅を突く話は好きじゃないけど
84デフォルトの名無しさん (ワッチョイ 2d02-xz58)
2021/04/04(日) 13:52:07.93ID:U9Ytphde0
>>73
純粋に、自分が知らない有用な書き方があるなら知りたいとは思うんだよな。
別スレの LINQ がらみの話題もやるかどうかは置いておいて勉強にはなったし。
もしくだんの人が出てきてくれて講釈してくれるなら専用のスレぐらいは立てる。
85デフォルトの名無しさん (ワッチョイ 2b02-kjVL)
2021/04/04(日) 17:58:30.84ID:a8juFvNn0
初歩的な事かもしれませんが教えて下さい。

以下のような独自クラス「Group」のリストがあります。
このリストをクラスのAgeListをキーにGroupByしたいのですが上手くグループ化できません。
どうすれば良いでしょうか。

public class Group{
/// グループID
public int Id {get; set;}
/// グループ名
public int GroupName {get; set;}
/// グループ所属の年齢一覧
public List<int> AgeList {get; set;}

public Member()
{
List = new List();
}
}
86デフォルトの名無しさん (ワントンキン MMa3-7UwS)
2021/04/04(日) 19:15:49.58ID:LnRN74zvM
>>85
どうすればいいじゃなくてどうしたいのかをお前が決めろ
平均年齢なのか最大年齢なのかそれともまた別の基準なのか
グループ化に使うキーが一意に定まらないならグループ化のしようがない
87デフォルトの名無しさん (ワッチョイ ad78-0pr0)
2021/04/04(日) 19:55:19.53ID:m/N7RFml0
>>85
最低限ビルドできるコードを例に挙げろよ
88デフォルトの名無しさん (ワッチョイ b501-5QI3)
2021/04/04(日) 19:59:05.44ID:gm8Ka2TU0
そもそもの設計ヤバない?AgeはMemberに持つのでは?
89デフォルトの名無しさん (ブーイモ MM6b-ehU2)
2021/04/04(日) 20:15:49.42ID:+2DTDHawM
デフォルトで使われる比較関数じゃ欲しい結果が得られないからGroupByに独自の比較関数を渡すか、Groupクラスに比較方法を定義しておくかのどちらか
90デフォルトの名無しさん (ブーイモ MM6b-ehU2)
2021/04/04(日) 20:17:26.34ID:+2DTDHawM
新卒研修の課題とかだろうから設計にツッコミいれてもしょうがないような
91デフォルトの名無しさん (ワッチョイ a37c-6/vn)
2021/04/04(日) 20:45:41.30ID:C0fdEpC00
初心者以前の話だよな
何がしたいか位は分かるように書けよと思う
92デフォルトの名無しさん (アウアウウー Sae9-yx92)
2021/04/04(日) 20:52:52.48ID:ufNVz0O6a
何がしたいかはなんとなくわかるだろ
93デフォルトの名無しさん (ワッチョイ a37c-6/vn)
2021/04/04(日) 20:55:57.89ID:C0fdEpC00
>>92
動かないあれを見て分かるか?
そもそも構造すら間違ってるやろ
94デフォルトの名無しさん (テテンテンテン MM4b-/elG)
2021/04/04(日) 21:09:17.93ID:ghBYdtOLM
>>92
わかるんなら説明してくれよw
メンバーの年齢だけを保持してるグループってあまり見かけないし
95デフォルトの名無しさん (ワッチョイ 1bda-UCZ0)
2021/04/04(日) 21:13:12.33ID:xvT8M2vo0
俺はこういう場合、独自解釈して好きなように作る。
今回ならAgeListをソートしてカンマ区切りの文字列にして、をれをキーにする。
でGroupByだな。

過去この独自解釈が5割くらいそのまま仕様になってる
96デフォルトの名無しさん (アウアウウー Sae9-yx92)
2021/04/04(日) 21:16:41.13ID:jr3tMa1na
>>93
>独自クラス「Group」のリスト
>このリストをクラスのAgeListをキーにGroupByしたい

List<Group> list = new List<Group>();
// なんか処理
list.Groupby(x => x.AgeList)
ってしたいって理解したんだけど違うんかな

宣言でそもそも間違ってるのは知らん
97デフォルトの名無しさん (ワッチョイ 552c-s+Uo)
2021/04/04(日) 22:12:27.02ID:0QnJQanX0
Ruby なら、こういう感じ

members = [ {id: 1, age: 30}, {id: 2, age: 20}, {id: 3, age: 50} ]

p members.sort_by{ |member| member[ :age ] }

出力
[{:id=>2, :age=>20}, {:id=>1, :age=>30}, {:id=>3, :age=>50}]
98デフォルトの名無しさん (ラクッペペ MM4b-M4Sc)
2021/04/04(日) 22:18:00.59ID:LUDq5H1sM
>>97
C#なら?
99デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/04(日) 22:23:09.43ID:ciXsbyqc0
>>97
APLなら?
100デフォルトの名無しさん (ワッチョイ 55b5-vyem)
2021/04/04(日) 22:32:47.74ID:glgnW2pm0
そんな議論はさておき、俺様が>>100を掻っ攫う
101デフォルトの名無しさん (ワッチョイ a37c-0pr0)
2021/04/04(日) 22:38:41.33ID:C0fdEpC00
Rubyガイジは無視して同じコードをちょっと書いてみた
https://paiza.io/projects/XRdHMEMPrv4_lIhlB8WYuw
102デフォルトの名無しさん (ブーイモ MM6b-VtYg)
2021/04/04(日) 22:45:22.63ID:7UKH0ZmwM
ピザくいたい
103デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/04(日) 22:48:28.83ID:ciXsbyqc0
この時間だからラーメンにしておきな
104デフォルトの名無しさん (スップ Sd03-nQQ9)
2021/04/07(水) 14:11:22.94ID:/xOeegWId
C++とJavaを業務でやっていてc#始めた初心者です。
Xamarin.Mac でmacOSのアプリを作りながら学んでるけど
恐ろしく情報が少ない…。Macでc#使う人って少ないんでしょうか?
105デフォルトの名無しさん (ワッチョイ a37c-0pr0)
2021/04/07(水) 20:43:30.57ID:keBvs1o20
そもそもXamarinで作る必要あるのかという感じがする
正直流行ってないからね
Java出来るならJavaでいいんじゃね?
もっと新しい技術ということならelectronをお勧めしておくわ
Windows限定アプリならVisualStudioでC#は楽でいいけどね
106デフォルトの名無しさん (スフッ Sd43-+5Lz)
2021/04/07(水) 21:57:44.60ID:5xSMK6sJd
MacといえばSwiftじゃないの?
107デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/07(水) 22:41:15.43ID:fLp1VLDK0
>>104
人脈作りから始めよう。

objective cとcocoaの方が需要あるやろ
108デフォルトの名無しさん (ワッチョイ e501-nQQ9)
2021/04/08(木) 03:06:33.38ID:AfyS2Eek0
>>105-107
回答ありがとうございます。
マジですか。。。C#以外をお勧めされて複雑ですが
その言語も調べておきます。
まだC#学習して1ヶ月程度ですが機能が盛り沢山で面白いので
Macでも普及して欲しいですね(´・ω・`)
109デフォルトの名無しさん (スフッ Sd43-+5Lz)
2021/04/08(木) 03:47:40.98ID:mAebMgXVd
機能は盛りだくさんでもPythonやJavaの方が人気なんだよね。
それぞれ良し悪しや向き不向きがあるだろうけど。
110デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/08(木) 04:49:18.36ID:SlRPMViD0
今、統計的な素養があってPytorch触れると
月単価150万からだもんなぁ。
111デフォルトの名無しさん (ワッチョイ a37c-0pr0)
2021/04/08(木) 14:03:49.02ID:3r6MsATA0
>>108
どうしてもC#がいいなら採用出来るかどうかは別にしてもUnityという手はあるけどね
112デフォルトの名無しさん (ワッチョイ 55b5-vyem)
2021/04/08(木) 14:17:05.70ID:d++ONVxC0
>>110
TensorFlowでもええん?ダメなん?
113デフォルトの名無しさん (ワッチョイ 2d5f-KShf)
2021/04/08(木) 16:37:37.25ID:kfGdZKXS0
これってDLL importとかしなくなるってことですか?
https://www.atmarkit.co.jp/ait/articles/2101/29/news113.html
114デフォルトの名無しさん (ワッチョイ e384-bVUD)
2021/04/08(木) 17:10:27.78ID:eSL736QZ0
>>113
MSが共通Wrapper作りましたってことでDLL importは必要なくなるし、アンマネージ
部分についてもお約束を守ればよくなるみたいだけど、サンプル見ると色々手続きが
面倒臭そうで使い勝手は良くなさそう
115デフォルトの名無しさん (アウアウウー Sae9-kjVL)
2021/04/08(木) 17:48:44.06ID:4s+x/uBpa
void*とかobjectにするしかないだろうしアホみたいなオーバーロードの山になるだろうし
始まる前から破綻の予感しかしない

っていうか何で今更
116デフォルトの名無しさん (テテンテンテン MM4b-/elG)
2021/04/08(木) 18:56:34.79ID:HxWbcod1M
そもそもガンガンWin32API使うなら素直にC/C++使うし、C#だとちょっとつまみ食いする程度にしか使わんから今のままでもいいや
117デフォルトの名無しさん (ワッチョイ a3e6-JnQU)
2021/04/08(木) 19:11:09.64ID:7Q+Xoj4V0
apiで使う構造体とかの面倒くささが無くなるならいいんじゃない?
118デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/08(木) 20:07:04.02ID:SlRPMViD0
>>112
需要と供給で単価は決まるからなぁ
119デフォルトの名無しさん (ワッチョイ 2d5f-MW8P)
2021/04/08(木) 20:11:07.35ID:Rugi+GK60
Cじゃない言語でOS作り直してくれよもう
120デフォルトの名無しさん (ワッチョイ cbda-2D+M)
2021/04/08(木) 20:20:01.96ID:SlRPMViD0
アセンブラけ?
121デフォルトの名無しさん (ワッチョイ 0d68-0pr0)
2021/04/08(木) 21:41:44.08ID:oExYloS10
OSのようなハードに近いレベルの言語となると、Rustが流行ってるのかな。
C#でそういうのも出来ると良いのにね。
122デフォルトの名無しさん (ワッチョイ 9b42-0pr0)
2021/04/08(木) 22:08:07.77ID:5uUtmx9J0
>>113
https://dot-sharp.com/net-getdetailsof/
Shell32.dllを使うとき、com参照を追加するだけでC#のライブラリと同じ程度の手軽さで使えました
これが増えるってならいいんじゃないかな
123デフォルトの名無しさん (ワッチョイ 6fb5-KVJ7)
2021/04/09(金) 01:46:32.36ID:tMeqLsRz0
>>118
PyTorchはずっと不人気だったのに
今調べてみたら、ここ二年ぐらいでTensorFlowと拮抗してんな
ま、いいや、どっちか使えりゃ問題ないだろ
124デフォルトの名無しさん (ワッチョイ 8eda-789v)
2021/04/09(金) 04:55:29.41ID:dxRxz0Yw0
C#をネイティブコンパイルできうようにすればいいだけだと思うが。
なぜ回り道をするのか
125デフォルトの名無しさん (ワッチョイ c6da-z9yU)
2021/04/09(金) 05:03:11.50ID:mVBnPI5w0
>>123
無理せずPaddlePaddle使ってたんでえぇで

日本では需要ないけど
126デフォルトの名無しさん (ワッチョイ 6fb5-KVJ7)
2021/04/09(金) 10:06:28.56ID:tMeqLsRz0
>>125
PaddlePaddleはダメダメだな
日本だけじゃなくて、世界でもダメな奴
127デフォルトの名無しさん (ワッチョイ 86bb-eWep)
2021/04/09(金) 15:11:32.43ID:Sg2n4mcl0
AI関連は、何を使えるかよりどこの博士号を持ってるかの方が重要なんだろ?
128デフォルトの名無しさん (ワッチョイ c6da-z9yU)
2021/04/09(金) 19:20:58.42ID:mVBnPI5w0
CNTKの求人って見ないな
https://www.bigdata-navi.com/
129デフォルトの名無しさん (ワッチョイ 67da-MIQy)
2021/04/10(土) 07:46:10.33ID:qc4cGBnV0
以前画面解像度切り替えのツールを作った時にvanaraといwin32apiのラッパー使ったな
構造体も用意してあって簡単に使えた
130デフォルトの名無しさん (ワッチョイ 1724-uCSv)
2021/04/10(土) 09:05:48.65ID:Zw7mVk6D0
win32って一々ラッパー挟まずとも実はC#側で結構調節してくれるんだよな
GetProcAddressみたいなANSI版しかないような関数でもstringそのまま放り込んでもちゃんと機能してびっくりした
131デフォルトの名無しさん (ワッチョイ 6743-1WRr)
2021/04/10(土) 20:01:50.03ID:00IQtlCT0
人はそれをマーシャリングと呼ぶのである
132デフォルトの名無しさん (ワッチョイ bb2d-ksEv)
2021/04/10(土) 21:24:18.51ID:mb0ile8c0
a={1, 2, 3, 4}という配列が与えられて
更に10進数x=5が与えられた時、5を2進数にして101なので
(最下位ビットがa[0]になります)
配列の要素1と3の和を出力せよという課題が出ました

var r = 0;
for (int i = 0; i < a.Length; i++)
if ((x & i << 1) == 0)
r += a[i];
で求める答えが出そうだと思ったのですが
4ではなく3が出ます。どこが間違っているんでしょうか
133デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/10(土) 22:21:05.25ID:ZQT/KDjfa
>>132
わざと間違えてない?w
static int GetBit(uint x, int position)
{
  return (int)((x >> position) & 1);
}
134デフォルトの名無しさん (ワッチョイ bb2d-ksEv)
2021/04/10(土) 22:33:06.71ID:mb0ile8c0
>>133
その書き方だと通るんですよね..
下のように解説してるサイトがあったのでそう書いてみたのですが
なんかおかしいんです

ビット bit に i 番目のフラグが立っているかどうか if (bit & (1<<i))
135デフォルトの名無しさん (ワッチョイ cb02-+YuK)
2021/04/10(土) 23:55:58.75ID:GWhpBmtX0
え。
>if ((x & i << 1) == 0)
>if (bit & (1<<i))
136デフォルトの名無しさん (ワッチョイ bb2d-ksEv)
2021/04/11(日) 00:13:20.51ID:Zc34G5gB0
あ、やっと気づきました
bit操作理解せずに、コピペで済ませてた弊害が出ました

ありがとうございました
137デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/11(日) 00:18:38.88ID:gSPWaQTLa
>>134
それはたぶんC#ではなくてCのコード
「bit & (1<<i)」この式の型は何?
Cと違ってC#のifの()の中の式はboolでなければダメ

まあこれは初心者が知らずに混乱しても仕方ないかもしれない。
でも>>132のコードの何が間違ってるかは初心者でも自分で考えれば分かるでしょ。

とりあえず問題を小さい問題に分けて分割統治することから始めましょう。
>>133はそういう意味で書きました。
138デフォルトの名無しさん (スフッ Sd02-gbe5)
2021/04/11(日) 06:53:51.52ID:+8zEqMg4d
Typescriptじゃインターフェース名にI(アイ)をつけないのが推奨されてるけど、
C#もそうなったりするのかな。
139デフォルトの名無しさん (ワッチョイ 0b78-CoCA)
2021/04/11(日) 08:10:38.23ID:JfLfucqJ0
破壊的変更を.NETユーザーが受け入れてくれるなら良いんじゃね
140デフォルトの名無しさん (ワッチョイ d74f-1WRr)
2021/04/11(日) 08:23:58.76ID:DcU1Z0EW0
付けろと言ってる
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/identifier-names
141デフォルトの名無しさん (ワッチョイ 8e62-2UTP)
2021/04/11(日) 12:26:31.31ID:y6cz0vLM0
C#でIが取れなかったのはCOMの影響があったからとかなんとか
今更C#の方針を変えることはないだろうね
142デフォルトの名無しさん (アウアウエー Sa3a-PnGn)
2021/04/11(日) 13:01:27.23ID:+MjFaIzva
エディタで色分けしてくれればいclass, struct, interface, abstract
143デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/11(日) 17:06:24.47ID:LOxmuPpta
プリフィクスのIは字面からインターフェイスだと分かるようにしたい、という強迫神経症的な動機というより、
単純に名前のバッティングを機械的に回避できる点が大きいんじゃないの?
144デフォルトの名無しさん (ワッチョイ df01-slfm)
2021/04/11(日) 17:51:20.56ID:v+npbxj+0
どうせインターフェースにIを付けなくなっても、実装クラスのいい名前が思いつかずになんとかImplってサフィックスつけるんだろ?
145デフォルトの名無しさん (ワッチョイ 7b68-CoCA)
2021/04/11(日) 19:02:53.13ID:jqn7J9El0
Delphiだと、クラスにはTypeのT、パラメータにはFieldのFを付けるんだよね。
InterfaceのIはその名残なのかな、とか思ったんだよ。
そして、そういうのは無くしていく傾向なのかな、と。
146デフォルトの名無しさん (ワッチョイ 227c-YIZl)
2021/04/11(日) 20:39:38.45ID:9ef64+I30
>>144
付けないよ
そんなの付けるのJavaやってたやつくらいやろ
147デフォルトの名無しさん (ワッチョイ e290-nwb8)
2021/04/11(日) 21:55:51.16ID:XlCnUXyn0
命名規則で一番上手くいってるのはC#と思う
インターフェースにプリフィックスIをつけるから命名で困った時にImplとかやらなくてすむし
プロパティ名は大文字で始めるから小文字で始めるローカル変数とぶつかりにくいし
148デフォルトの名無しさん (ワッチョイ e290-nwb8)
2021/04/11(日) 22:00:03.96ID:XlCnUXyn0
で、最近は名前がさらぶつかりにくくなるようにメンバ変数はm_を付けるスタイルに個人的に変更した
149デフォルトの名無しさん (ワッチョイ 6793-I7Om)
2021/04/11(日) 23:11:51.93ID:Jjs5QDLf0
キャメルケースwww
150デフォルトの名無しさん (ワッチョイ 47ac-0zu2)
2021/04/11(日) 23:30:29.10ID:gtdLzQZJ0
まあVSの恩恵でかいよなあって
151デフォルトの名無しさん (ワッチョイ 8e62-2UTP)
2021/04/12(月) 00:03:30.52ID:5s47Rc9D0
>>147
こういう適当な名前を付けるやつがいることにピキってるっぽいね
適切な名前にすりゃブッキングしねえから名前付けをサボるなってことらしい
152デフォルトの名無しさん (ワッチョイ d7f2-GYEe)
2021/04/12(月) 00:35:55.51ID:z0nrn9OY0
なるほどなぁ
ちなみにIListはなんて名前にすればより適切だと思う?
153デフォルトの名無しさん (ワッチョイ e290-nwb8)
2021/04/12(月) 00:41:39.46ID:JfC2SlE/0
おまえ馬鹿か
たいていぶつかるのはローカル変数や外部に公開しないクラス名だろ
JavaのImpl使うのだって、内部クラスや非公開や内部のエンジンクラスとか
154デフォルトの名無しさん (ワッチョイ e290-nwb8)
2021/04/12(月) 00:43:02.12ID:JfC2SlE/0
そんなのに適切な名前なんかブッキングできねぇよカス
155デフォルトの名無しさん (ワッチョイ 7b68-CoCA)
2021/04/12(月) 04:43:49.73ID:FczQKoXE0
>>152
Microsoftの推奨する命名規則を参考にすれば良いんじゃない?
つまり、I付きPascal形式でスペル省略不可のフルネームで名詞を表せば良いのかな。
自由に付けても良いけど、.Net Frameworkと調子を合わせると違和感が無いと思う。
156デフォルトの名無しさん (ワッチョイ 2b54-USUf)
2021/04/12(月) 06:14:41.91ID:nRLgqnE00
うちの会社、昔から変数名の1文字目にデータ型の略称(?)をつける文化みたいで、
intのListがiListだったり、longのListがlListだったり、ちょっと困惑した。
157デフォルトの名無しさん (ワッチョイ c6da-GYEe)
2021/04/12(月) 06:47:12.36ID:HnVQKAJ10
>>156
郷に入っては郷に従え!

君の使って良い変数はI150からI300までな!
そこはFortran出身者の支配する村であった
158デフォルトの名無しさん (エアペラ SD02-I7Om)
2021/04/12(月) 07:54:06.97ID:lF7oqfJtD
MSの.NETプログラムにおける命名ガイドラインな
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/naming-guidelines
159デフォルトの名無しさん (スフッ Sd02-gbe5)
2021/04/13(火) 07:46:13.80ID:FVP0aIINd
皆さんコメント入れる? 命名規約とか守ってたらコメント要らないような気がしてきた。
160デフォルトの名無しさん (ワッチョイ 2b54-USUf)
2021/04/13(火) 08:25:02.43ID:lZomqcCZ0
>>159
いわゆるドキュメンテーションコメント的なものは入れる。
あと、実例みたいなの。
//引数にXXとYYとZZを渡したら、戻り値はAAになる。
161デフォルトの名無しさん (アウアウウー Sabb-VfxA)
2021/04/13(火) 08:48:00.08ID:cGgJVHDFa
>>159
入れる
162デフォルトの名無しさん (ワッチョイ 227c-CoCA)
2021/04/13(火) 09:02:05.69ID:t+pv5GMk0
visualstudioだとクラスやメソッドの1行前に///入力で自動補完されるからそれは使ってるかな
163デフォルトの名無しさん (アウアウエー Sa3a-PnGn)
2021/04/13(火) 09:08:35.29ID:gWbnUgF3a
日付、所属、名前、旧コードはコメントに残すのが常識でしょ
164デフォルトの名無しさん (ワッチョイ 2349-0zu2)
2021/04/13(火) 09:19:57.30ID:Ehg3izfw0
ギャグかな?
165デフォルトの名無しさん (ワッチョイ cb5f-wtuO)
2021/04/13(火) 11:05:10.28ID:fFoE8jgx0
バージョン管理ツール使ってるのに旧コード残すやつにはイラッとする!
特に不具合のコードをコメントアウトして残されてると、当てつけなのかと思ってしまう
166デフォルトの名無しさん (ワッチョイ bb33-qZRM)
2021/04/13(火) 12:14:15.55ID:YrXVy+xO0
コメントって入れるものだったんだ。
書くものだと思ってた。
167デフォルトの名無しさん (エアペラ SD02-I7Om)
2021/04/13(火) 12:48:28.16ID:ZNHsyNhsD
>>159
コメントには「なぜ」を書くんだよ
168デフォルトの名無しさん (ワッチョイ df01-AJCP)
2021/04/13(火) 14:24:24.21ID:ovEIWddm0
なぜこんなコード書いたんですか?と書いて旧コードを残すわけですね
169デフォルトの名無しさん (ブーイモ MM93-GYEe)
2021/04/13(火) 14:40:11.12ID:cQExUzr8M
168が仕様を理解せずおかしな実装を
したので辻褄合わせの辞書を実装しました by 167
170デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/13(火) 16:02:36.93ID:ct/xqAfva
>>159
コメントは基本的には必要悪なので必要がない限り書かないのが正しいけど、
少なくともパブリックメンバーについては単純に「必要」かもしれんね。

ないと書いた人の意図を変に誤解してないか不安になって
結局中のコードを覗きたくなるかもしれない。
そんなことしなくて済むためのカプセル化のはずなのに
171デフォルトの名無しさん (ワッチョイ f784-AglQ)
2021/04/13(火) 17:44:15.92ID:Kc5TdA4a0
1年後に自分の書いたコード読んで、何をやっているかちゃんと理解できるならば
書かなくてもよいんじゃないかなw
172デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/13(火) 18:24:41.93ID:arsZDomXD
>>171
何をやってるかなんてコード読めば解るんだから、
そんなことのためにコメントは不要
「なぜ」そんなメソッドが必要か、
「なぜ」そのデータ構造やアルゴリズムを選択したか
なんていう、コードから見えない情報を記すのがコメント
173デフォルトの名無しさん (ワントンキン MM92-qfGw)
2021/04/13(火) 18:31:59.11ID:KJ4k5XjpM
MS含めアメリカ製の高品質なコードって「なぜ」のコメントが無茶苦茶充実してるよな
日本だとだいたい // 〇〇処理 みたいな無意味なコメントか、ほとんど無いかのどちらか
SaaSとか一般的にレベル高いと思われてるはずの現場では、だいたい後者のパターンでほぼコメントが無い
根本的に論理的な言語能力に差があるんだろうなと思わざるを得ないわ
174デフォルトの名無しさん (アウアウウー Sabb-VfxA)
2021/04/13(火) 18:37:50.47ID:781G2uFla
コードレビューでコメントを書けって指摘されるじゃんw
175デフォルトの名無しさん (ブーイモ MM3e-PnGn)
2021/04/13(火) 18:43:17.63ID:/XAQKj46M
コメントなんて要らないんだよ
コミットログを見ればいいんだから
176デフォルトの名無しさん (ワッチョイ df01-qZRM)
2021/04/13(火) 18:48:56.00ID:2mKMjuav0
private なプロパティってフィールドにするべきですか?
177デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/13(火) 18:55:44.96ID:ufUQjDoVa
>>172
言いたいことは分かるけど「何をやってるかなんてコード読めば解る」というのは
あくまで理想であって常にそうできるわけじゃない。

何をやっているか書いてくれた方がありがたい場合もあるよ。

>>176
そんなことをルールで強制する理由はないと思うよ。
178デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/13(火) 19:02:46.98ID:arsZDomXD
>>177
何をやってるかがコメントとコードで乖離してる事があるのが問題
英語でthirteen daysって言ってるのに、
字幕には2ヶ月って書かれる戸田奈津子の翻訳みたいな事が起きうる
179デフォルトの名無しさん (ワントンキン MM92-qfGw)
2021/04/13(火) 19:08:03.49ID:KJ4k5XjpM
>>178
逆に、コメントを書かせることでコメントを書きやすいコードになるという面はあると思うよ
クラスやメンバの責務が十分に明確ならコメントと実態の乖離なんてそう起きるものではない
180デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/13(火) 19:14:53.40ID:ufUQjDoVa
>>178
コメントはバグる可能性があるからコメント書くな、
なんて言ったらバグる可能性があるのはコードも同じなんだから
コードも書くなってことになっちゃうよw

「不必要なコメントは有害無益」は正しいけど、それは
必要なコメントを否定する根拠にはなりえない。
181デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/13(火) 19:40:32.77ID:arsZDomXD
>>180
コメントがバグるって話じゃなく、
書いた人の「つもり」がコメントとして残るのが危うい
実行時にどう動くかを決めるのは、コメントではなくコードなのだから、
コメントを読んでコードを読んだつもりになれるのも危うい
182デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/13(火) 19:42:57.23ID:arsZDomXD
入門書の多くがコメントの書き方を蔑ろにしてるのが元凶だと思うんだよね
ほぼ単なるメモ機能としての記載しかされてない
183デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/13(火) 19:46:12.88ID:arsZDomXD
続いちゃったので議論スレに移します
http://2chb.net/r/tech/1469538912/82
184デフォルトの名無しさん (ワッチョイ cb02-+YuK)
2021/04/13(火) 19:48:22.85ID:DZHUx02Q0
「コードを読めば何してるか分かる」のだから、メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
・・・たまにブチ切れたくなることがあるけどな。
185デフォルトの名無しさん (ワッチョイ 4f5f-AJCP)
2021/04/13(火) 19:53:58.09ID:1xWi7ZbJ0
>>182
あれは解説を見ないとプログラムが理解できない人向けの本なんだからそれをコメントに書くのは当たり前じゃん
186デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/13(火) 20:27:38.26ID:vPRWCVoWM
>>184
> 「コードを読めば何してるか分かる」
ならコメントなんていらんだろw
187デフォルトの名無しさん (ワッチョイ c6da-z9yU)
2021/04/13(火) 20:43:00.23ID:YIOTduDg0
>>172
YOLOv5をC#に移植して内容を説明しては
くれまいか?

そんなに簡単な話なら誰も論文なんて読まないよ~ :-p
188デフォルトの名無しさん (ワッチョイ cb5f-CoCA)
2021/04/13(火) 21:22:13.67ID:51HoYqEa0
ドキュメント代わりにしてるから入れる
///<summry>
の形式のやつ

doxygenで出力してモジュール設計書として納品して一丁上がり
189デフォルトの名無しさん (ワッチョイ 06a7-ucxl)
2021/04/13(火) 21:30:50.70ID:cA2aWYvl0
クラス図もシーケンス図もねぇのになにいってんだこのバカ
190デフォルトの名無しさん (ワッチョイ 8e62-2UTP)
2021/04/14(水) 05:43:13.79ID:C2CdPm+G0
>>186
だから要らないって話だろ
var hoge = items.First();
で最初の要素を取得するなんてコメントは要らん
記載するならwhy何故取得するのかだけ書けばいい

もし動作について記載したくなったなら、それはメソッド化するとかを検討した方がいい
191デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/14(水) 06:13:30.67ID:NHvKxhVFM
>>190
だからと言って
> メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
ってアホだろ、って言う指摘なんだが…w
192デフォルトの名無しさん (ワッチョイ 8e62-2UTP)
2021/04/14(水) 07:02:48.39ID:C2CdPm+G0
それはアホだけどコメント入らないも的外れって指摘なんだが
193デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/14(水) 07:55:29.84ID:IRkO9LrOM
>>192
>>184の全文読んでから出直してこいよw
194デフォルトの名無しさん (ブーイモ MM3e-Y7rb)
2021/04/14(水) 10:15:09.46ID:+thTLvERM
宗教が合わないと作成者本人が綺麗に作ったつもりでも読みにくくてしょうがないからブロック毎に動作の概要ぐらいはコメントで書いといて欲しいわ
195デフォルトの名無しさん (ワッチョイ 6fb5-KVJ7)
2021/04/14(水) 10:31:27.70ID:GNdqlmcr0
なんだよ、せっかく議論スレに移ったのについてきてねーじゃん
正直者が馬鹿を見る世界
もう移らん、絶対移らん(笑)

俺はコメント入れてほしい派

読めば判るっつってもさ、
コード書いてる本人ですら
何やってるか分かってない場合もあるからな(笑)
せめてコメントで
「ここではこんなことをしてる(つもり)」
って書いてくれら「全然そうなってないだろ!」と突っ込める
196デフォルトの名無しさん (ワッチョイ c602-Pg6q)
2021/04/14(水) 11:35:41.20ID:pb7R6DhS0
xxxInternal
xxxPublic
xxxOverride
197デフォルトの名無しさん (ブーイモ MM3e-D3kA)
2021/04/14(水) 11:40:36.85ID:tyZiRMgdM
パワーポイントやエクセル内の文字列を検索するクラスってありますか?
windowsの検索窓ではなく…
198デフォルトの名無しさん (ワントンキン MMf7-qfGw)
2021/04/14(水) 11:48:50.60ID:RaIqb6oIM
>>197
Windows Searchを使えば検索窓と同等の機能がプログラムから使える
199デフォルトの名無しさん (ブーイモ MM3e-D3kA)
2021/04/14(水) 11:53:46.39ID:tyZiRMgdM
>>198
素早い回答ありがとうございます!
そんなのあったのですね!検索力不足を痛感しました…
調べてみます。
200デフォルトの名無しさん (ワッチョイ 6793-I7Om)
2021/04/14(水) 14:15:46.62ID:MmF8o4I50
議論スレに移れないってことは、
コメント付けたところで読めない無能だから無意味って証明になったな
201デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/14(水) 14:21:26.07ID:IGhCcGj6a
>>200
何度も言うけど、真の無能はそれが自分を棚上げした物言いである、
という簡単な事実に気づく程度のこともできないお方だよ。

これ割とマジで大丈夫かと思うわ
202デフォルトの名無しさん (アウアウウー Sabb-ksEv)
2021/04/14(水) 14:23:38.27ID:IGhCcGj6a
ついでに、これも何度も言ってるが、そんなくだらない「交通整理」に誰も従わないのは
「交通整理」の欺瞞性とそれを主張している人間の卑しい動機に普通は気が付くから。
203デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/14(水) 17:19:19.99ID:gLzfQxv5D
>>202
卑しい動機って何?
204デフォルトの名無しさん (ラクッペペ MM8e-tPyg)
2021/04/14(水) 17:43:05.15ID:fKew9GPPM
他人を見下し自分が主導権を握りたいという自分勝手な承認欲求が行動原理
205デフォルトの名無しさん (ワッチョイ 0663-oziv)
2021/04/14(水) 17:58:45.23ID:d4l1z4pL0
>>202
暴れて飛行機から下ろされ
飲食店で入店拒否されて暴れて警察を呼ばれ
警察を殴った誰かはTwitterで同じこと言ってたなw
206デフォルトの名無しさん (ワッチョイ cb02-+YuK)
2021/04/14(水) 19:48:09.33ID:5dAhuQZZ0
>>193
その 184 だけど。w
「コードを読めば何してるか分かる」な人は、そもそもコメントがなくてもいいんだから、書かれていても無視すればいい。
コメントが欲しい人は、コメントの弊害(メンテ忘れとか)の現状を承知の上でそう言ってるんだから、そもそも問題ない。

つまり、コメントがいる/いらないの論争は無意味だからやめとけってことなんだよ。
その上で「コードを読めば何してるか分かる」ように丁寧な書き方を目指せば済むことじゃん。

まあ自分はブロックと言うか処理単位でのコメントは出来るだけ書くけど。
207デフォルトの名無しさん (ブーイモ MM3e-8zEc)
2021/04/14(水) 19:57:35.09ID:un1gf4OwM
だってコメント邪魔なんだもん
208デフォルトの名無しさん (ブーイモ MM3e-PnGn)
2021/04/14(水) 20:17:08.74ID:22Gnyx3vM
・コメントがあるとノイズになり視認性が落ちる
・コメントには嘘が混ざっていたり情報が欠落していることがあるので常にコードとコメントの整合性を確認しながら読まなくてはならない
・コメントに嘘を混ぜたり情報を欠落させないために細心の注意を払わないとコードを更新できなくなる
209デフォルトの名無しさん (ワッチョイ cb02-+YuK)
2021/04/14(水) 21:19:55.23ID:5dAhuQZZ0
これは茶化しで書くけど。
コメントがなければストレスなく読める美しいコードなんて見たことないなあ。
210デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/14(水) 22:05:49.52ID:MpN5sHI3M
>>206
> つまり、コメントがいる/いらないの論争は無意味だからやめとけってことなんだよ。
誰もそんな論争してませんよ…
もしかして>>186をコメント不要という主張だと思ったのか?w
211デフォルトの名無しさん (ワッチョイ cb02-+YuK)
2021/04/14(水) 22:33:48.02ID:5dAhuQZZ0
そーなのか。
じゃあバカな私に分かるようにおまえ様の主張をきちんと述べてみてくれ。
212デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/15(木) 07:44:33.23ID:UZqM7amYM
>>211
>> メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
> ってアホだろ、って言う指摘なんだが…w
213デフォルトの名無しさん (ブーイモ MM3e-VRFv)
2021/04/15(木) 08:01:46.43ID:PPG2Aw5dM
改修履歴をコメントで残すとかいうのさえなけりゃ
他のコメントはコード読むのに邪魔になりはしない
214デフォルトの名無しさん (エアペラ SD7a-I7Om)
2021/04/15(木) 08:08:37.68ID:OPERSbUtD
>>211
>>183
215デフォルトの名無しさん (アウアウウー Sabb-VfxA)
2021/04/15(木) 09:10:14.90ID:UMT499lla
必要だからどの言語もコメント機能が有るのでは?
216デフォルトの名無しさん (ワッチョイ 4e42-CoCA)
2021/04/15(木) 10:39:52.56ID:V+OBz7ue0
言語ではないけどjsonってのが有ってだな
217デフォルトの名無しさん (ワッチョイ e202-OeC+)
2021/04/15(木) 11:20:52.75ID:ZYoZizjK0
>>209
ほんこれ
218デフォルトの名無しさん (テテンテンテン MM8e-VoLZ)
2021/04/15(木) 11:28:50.53ID:VIeSEXX8M
>>216
あれなぜコメントの機能を持たせないのか不思議だわ
{
"$comment": "コメント"
}
みたいな形でコメント書くという方法もあるみたいだけど気持ち悪いし
219デフォルトの名無しさん (ワッチョイ 4e42-CoCA)
2021/04/15(木) 11:44:04.13ID:V+OBz7ue0
最初に作った人が「コレはデータだからコメント不要」って取り付く島もないんだとか
VsCodeの設定ファイルみたく独自で拡張してjsonもどきになっているよな
220デフォルトの名無しさん (ワッチョイ 4ede-ucxl)
2021/04/15(木) 20:44:07.32ID:ggX3n8E30
jsonなんて人間の読めるもんじゃないと思う
ダブルコーテーションが目にキツイ
221デフォルトの名無しさん (ワッチョイ d74f-1WRr)
2021/04/15(木) 20:56:31.12ID:yv1G2zip0
>>218
JSON自体は仕様がもう確定してるから。
jsoncとかJSON5とかRelaxed JSONとか拡張した別仕様ならある。
222デフォルトの名無しさん (ワッチョイ cb5f-wtuO)
2021/04/15(木) 23:45:13.23ID:025iJfef0
json便利だけど、protobufを使うようになってから使用頻度減ったなー
223デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/16(金) 21:25:28.58ID:UPAcC/fc0
1つの一連の処理で一度に10回以上は失敗する可能性があるんだけど
例外って複数ストックできる?
224デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/16(金) 21:36:31.59ID:WuJ5uN/Q0
できるよ
ValidationでエラーためてIsValidで確認するのと同じ
225デフォルトの名無しさん (ワッチョイ b733-UBeK)
2021/04/16(金) 21:41:19.41ID:AE+nXjed0
try{
...
}catch(Exception ex){
exceptions.Add(ex);
}finally{
continue;
}

こんな糞コード見たことないけどな。
226デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/16(金) 21:41:25.62ID:UPAcC/fc0
デーモンコアと
マイナスドライバーを設定
try{
while(米が勝つまで回す){
①測る
②マイナスドライバーを動かす
}
}
finally
{
③デーモンコアを離す
④if(青い光りが見えた){
⑤みんなを退避
⑥逃げる
⑦救急車を呼ぶ
⑧遺書を書く
}
}

大体こんな処理なんだけど
③~⑧は途中で例外起きても
最後までやってほしいらしい
っていう一連の処理なんだ
どのエラーや例外も全部保存したい

>>224
なんかサンプルないですかね?
227デフォルトの名無しさん (ワッチョイ 572d-pvza)
2021/04/16(金) 21:53:27.03ID:XmBIRBCo0
溜めておいた例外を最後にAggregateExceptionのInnnerExceptionsにセットして投げれば
228デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/16(金) 21:54:23.20ID:UPAcC/fc0
>>227
なんかそういう処理の書き方の流れが知りたい感じです
229デフォルトの名無しさん (ワッチョイ ff63-7LQ7)
2021/04/16(金) 22:18:19.07ID:57BTnFcs0
年内に死にそう
230デフォルトの名無しさん (ワッチョイ bf42-tdH6)
2021/04/16(金) 22:48:51.32ID:yteCGRud0
NlogつかってファイルかDBに残すのが現実的じゃね?
https://nlog-project.org/
こんなやつ
231デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/17(土) 00:39:50.34ID:v4ZcCEOKa
>>223
失敗してても処理が継続される時点でそれを例外を呼ぶべきか、そもそも疑問に感じるね。
232デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/17(土) 01:02:22.39ID:v4ZcCEOKa
class DaemonSequenceException:Exception
{
  public Exception FooResult { get; set; }
  public Exception BarResult { get; set; }
....
}
とかみたいに他の部分の成否と無関係に実行できる各部分に名前をつけて、
その部分の例外をプロパティーで持つとかするのかね知らんけど
233デフォルトの名無しさん (ワッチョイ ff02-L6pe)
2021/04/17(土) 10:56:45.87ID:F6GtSG/H0
DirectoryInfo.GetDirectories は例外を送出するけど処理は継続する
234デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 20:32:02.82ID:mfYtpggw0
まあ、結論としては
c#的にはこういう複数の処理が失敗するまたは終了処理も失敗するケースは言語的には完全に想定外ってことですかね
235デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/17(土) 20:42:29.21ID:IkH2FR7eM
>>234
そもそも一体何をしたいのかさっぱりわからん
記録したいだけなのか失敗毎になにか処理したいのか
236デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 20:47:08.33ID:mfYtpggw0
>>235
1メソッドでたくさん失敗するんです
でも例外って1つしか返せないじゃないですか?
237デフォルトの名無しさん (ワッチョイ 572d-pvza)
2021/04/17(土) 20:47:45.31ID:7MTKb57l0
>>234
地道に処理毎にtry{}catch(){}で囲めばいいだけ
言語のせいにするのはお門違い
238デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 20:50:06.01ID:mfYtpggw0
>>237
そもそも例外で返すのが間違いということでしょうか?
239デフォルトの名無しさん (ワッチョイ 572d-pvza)
2021/04/17(土) 20:56:09.74ID:7MTKb57l0
>>238
<1>
var exceptions = new List<Exception>();

<2> (処理の数だけ作る)
try
{
 処理
}
catch( Exception e )
{
exceptions.Add( e );
}

<3>
throw new AggregateException( exceptions );
240デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 20:59:45.02ID:mfYtpggw0
>>239
ありがとうございます
それって受け側ってどう書くんでしょうか?
241デフォルトの名無しさん (ワッチョイ 777b-B9Cj)
2021/04/17(土) 21:15:57.36ID:PG7156wz0
>>240
受け側って何を指すのかわからないけどエラーをcatchしておいて投げなおしているだけじゃね
>>230の考え方でエラー起こるたびに「~の処理中に~のエラーが起きました」って全部記録する形から作っていけば?
エラー発生しても続行させる処理の方が大変になると思うしとりあえず一通り作ってみた方がいい
242デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/17(土) 21:17:13.40ID:8nmJAkjBM
>>236
だから受け側で何をしたいんだよ…
243デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 21:20:05.07ID:mfYtpggw0
>>241
普通に

try
{
}
catch(exception ex)
{
}

でaggregateexceptionってキャッチできますか?
244デフォルトの名無しさん (ワッチョイ 3778-tdH6)
2021/04/17(土) 21:23:05.33ID:gq87BRHm0
簡単なサンプルで試してみればいいでしょ…
245デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/17(土) 21:24:17.27ID:3+8Yd0vAa
たぶん欲しいのはエラーのログなんだろうね。
あるいはPOSTでやるようなチェックリスト?

例外オブジェクトをエラーを表す目的で使ってもいいとは思うけど、
何がしたいのか目的をはっきりさせずに「例外をストックできるか?」とか質問するから
みんな混乱する。
246デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/17(土) 21:38:41.80ID:8nmJAkjBM
なぜかこういう人は何をしたいのか書かないんだよな…
まあもういいや、相手もしてもしょうがなさそうだし
247デフォルトの名無しさん (ワッチョイ 572d-pvza)
2021/04/17(土) 21:38:56.54ID:7MTKb57l0
>>243
それで出来るけど、catch( AggregateException ex )で受けた方が
AggregateException.InnerExceptionsを参照しやすくていいんじゃない
248デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 21:42:46.43ID:mfYtpggw0
>>246
正直
俺もよくわからない(笑)
249デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/17(土) 21:43:49.75ID:mfYtpggw0
>>247
ありがとうございます
受け側はなんの例外がくるかしらないんですよ多分
250デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/17(土) 21:51:17.10ID:6GAIvEwc0
例外を見ればどの処理で発生した例外なのか確実に分かる場合はいいけど
そうじゃないならList<Exception>だとたぶん困るよね
251デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/17(土) 22:17:04.15ID:svTSVNg/M
>>250
どこで発生した例外かを知りたいなら例外にその情報を入れとけば良いだけだろ
252デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/17(土) 22:42:26.62ID:6GAIvEwc0
>>251
>>239の例ではそれをやってないから困るんじゃねって話なんだけどさ
253デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/17(土) 23:35:25.92ID:svTSVNg/M
>>252
ExceptionでもSourceに入れるとかMessageの一部に入れるとかやりようはいくらでもあるだろ
254デフォルトの名無しさん (ブーイモ MMcf-eihA)
2021/04/17(土) 23:49:44.95ID:CX6JLVJZM
エスパー回答すると、Disposeをしっかり作ってusingを使え、が顧客が本当に欲しかったもの
255デフォルトの名無しさん (ワッチョイ d768-B9Cj)
2021/04/18(日) 00:46:37.58ID:hpbx6fns0
C#の話と関係無いかもしれませんが、パッケージの開発環境って今の時代何がありますか?
完全にオフラインで使える開発環境とかって無いんでしょうか?コマンドプロンプトしか無いんでしょうか?
256デフォルトの名無しさん (ラクッペペ MM8f-aCHF)
2021/04/18(日) 01:09:20.83ID:IgLv47etM
落ち着け(´・ω・`)
パッケージ、開発環境、コマンドプロンプト
全然話が繋がっていない
257デフォルトの名無しさん (ワッチョイ bf62-rOyz)
2021/04/18(日) 08:55:30.53ID:v8qpskqd0
開発環境と言われても困るな
聞きたいのはここら辺?
https://it-kyujin.jp/article/detail/1512/
258デフォルトの名無しさん (ワッチョイ 3754-n3xY)
2021/04/18(日) 18:43:20.44ID:H0K908230
なんとなくエスパーすると、開発ソフトをインストールさえすれば、その後はネット非接続で何でも開発出来る環境が理想ってこと?
なら、たぶん無い。

.net sdk使って、標準ライブラリだけ使うなら出来るんかな?
結局必要なライブラリやらランタイムをDLするか、他のPCでDLして開発PCに入れる事になりそうだけど。
259デフォルトの名無しさん (ワッチョイ 97b5-Ct9k)
2021/04/18(日) 18:52:54.76ID:qPyS0oex0
>>258
待て待て、標準ライブラリだけでもオフラインで開発できるなら、回答しては「Yes」じゃないか?
特に、その「他のPCでDLして開発PCに入れる事になりそうだけど」が出来るんだしさ

>>255
目的を話せ
俺のエスパー能力をフル発揮すると、
セキュリティ上、スタンドアローンで動かさんといかんPCがあって、そこで開発したいだよな?
260デフォルトの名無しさん (ワッチョイ d768-B9Cj)
2021/04/18(日) 21:38:47.12ID:hpbx6fns0
>>258
ありがとうございます!!!
環境を自分で作る以外ないんですかね。無謀すぎますね。
コンパイラ作るわけじゃないですからね統合環境は。
>>259
そうそう単にセキュリティの心配です。
オフラインだと全く外部に漏れる心配ないわけじゃないですか。
めちゃくちゃ安心するじゃないですか。

何でインターネットに繋いでないとプログラミング環境が整わないような
状況なんでしょうか?どう考えたってオフラインのほうがよくないですか?
261デフォルトの名無しさん (ワッチョイ d7ac-HAyt)
2021/04/18(日) 23:39:25.09ID:svx6jcyS0
今はネットワーク繋いでなんぼの時代だから
262デフォルトの名無しさん (テテンテンテン MM8f-LzhE)
2021/04/18(日) 23:42:54.47ID:4BU0O/MkM
そういうセキュリティの気にし方をするのであれば、普段使いのPCとは別に
個人情報を一切入れないPCを1台用意して開発勉強専用にするのが一番安心できると思うよ
外に漏れて困るようなレベルのコードを書くならダメだけどさ

というかMicrosoftDocsやGitHubやStackOverflow/Qiitaとか一切閲覧できない環境で
NuGetやNPMに登録されてる出来合いのライブラリもまったく利用しない縛りを入れて
自分の能力だけで1から100までコードを書けるなんてすごいなあ
俺にはそんな縛りプレイしてたらとてもじゃないけど開発にならないや
263デフォルトの名無しさん (ワッチョイ 9fad-EDaw)
2021/04/19(月) 01:35:18.62ID:X+u8pzLd0
インターネットにつながっていないが故に管理がおろそかになってパッチ適用がされない弊害の方がやっかい
日立のランサムウェアなんかはまさにそれ
264デフォルトの名無しさん (ワッチョイ bf68-tdH6)
2021/04/19(月) 01:49:10.86ID:c6NDAp6p0
構造体(値型)を関数の参照渡し以外で、参照する方法ってありますでしょうか?
配列の構造体にアクセスするコードを書いているのですが、
逐一配列の添字計算が入るのも嫌なので避けたいと思っています。
添字の数は関数の中では変わりません。
今は関数の参照渡しで使っていますが、他に方法は無いのかなと思いまして。
265デフォルトの名無しさん (ワッチョイ 375f-QJa2)
2021/04/19(月) 02:02:38.37ID:Kd9UEe0s0
>>264
refローカル変数じゃあかんの?
266デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 02:03:15.10ID:lMV2Jqgd0
>>264
理想形が見えねぇ
267デフォルトの名無しさん (ワッチョイ b733-UBeK)
2021/04/19(月) 02:06:16.22ID:4lrHWi0u0
配列の構造体って何?
268デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/19(月) 02:06:36.98ID:XVH2We7ia
>>264
策士策に溺れてはいけない
愚直に一時変数を使いましょう
269デフォルトの名無しさん (ワッチョイ bf68-tdH6)
2021/04/19(月) 02:14:43.49ID:c6NDAp6p0
>>265
ref ってローカル変数に使えるんですね!
前に軽く試した時には右辺値にしかrefを記載してなかったので、
左辺の定義にもrefを記載すれば行けました。
有難うございました!
270デフォルトの名無しさん (ワッチョイ fff2-9WMT)
2021/04/19(月) 03:18:25.46ID:RtpbkBzw0
オフライン環境での開発だけど、
VS Community2019のオフラインインストーラをダウンロードして
オフライン環境に持ち込んで使ってる
c#でフォームのデスクトップアプリしか作らんので特に困ってない
271デフォルトの名無しさん (ワッチョイ 5724-DdNk)
2021/04/19(月) 07:43:09.06ID:rq760clV0
>>264
var p = &array[5];
272デフォルトの名無しさん (ブーイモ MMbb-Vz79)
2021/04/19(月) 07:51:00.81ID:trWXRHySM
ゆう君みたいにCSCで開発するのだ
273デフォルトの名無しさん (ワッチョイ 9fad-EDaw)
2021/04/19(月) 08:22:30.53ID:X+u8pzLd0
>>270
バグや脆弱性対応は?VS2019って頻繁に更新されてるけど
274デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/19(月) 08:27:27.76ID:eEvFTkhNM
>>273
offlineインストーラーも知らないのは開発者としてどうかと思う
275デフォルトの名無しさん (ワッチョイ 9736-pvza)
2021/04/19(月) 09:01:07.98ID:qHBf6kdf0
getsetプロパティをFuncで呼び出せるようにしたいのですが可能でしょうか?
メソッドで括って呼び出せば良いのだろうけど直接Funcに入れる方法があるならそうしたいです
276デフォルトの名無しさん (ワッチョイ 7f7c-xwMB)
2021/04/19(月) 09:10:46.59ID:a1UfxEQG0
よく分からん
Func<string> func = () => person.Name;

Func<string> func = person.Name;
みたいに書きたいってことか? 無理だけど
func = person.Name.Surname;
のときperson.Nameがいつ解決されるのか判断つかないし
277デフォルトの名無しさん (ワッチョイ 9736-pvza)
2021/04/19(月) 09:26:07.33ID:qHBf6kdf0
>>276
返信ありがとうございます

イメージとしては複数のクラスで
public bool hoge {set => test = value; }
が複数あって
List<Func<bool, bool>> func;
に追加していってキャンセルとか何らかの処理後に一括して戻したい、と言うような処理です

やはりプロパティってメソッドみたくできないFuncに入れる事ができないんでしょうか
他の方法ですっきりする方法はないですかね?
278デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 09:56:26.88ID:lMV2Jqgd0
やりたいことがさっぱりわからんな
ダイアログのキャンセル押したら画面ごと破棄でいいじゃん
279デフォルトの名無しさん (ワッチョイ bf62-rOyz)
2021/04/19(月) 10:04:55.77ID:aTPYfb0+0
>>277
List<Action<bool>> list;
list.Add(b => hoge = b);
こういうこと?
280デフォルトの名無しさん (ワントンキン MM4f-Ct+I)
2021/04/19(月) 10:21:06.38ID:8YZTYag9M
まあ気持ちはわかる
(Webでなく)GUIアプリで独学した初心者って、エンティティオブジェクトをアプリ全体で生存させるような設計をしちゃうんだよな
オブジェクト指向を普通に解釈すりゃそれが自然なんだけど、実際そういう設計はしないんだよ
ドメインモデルだろうとトランザクションスクリプトだろうと、エンティティはトランザクション毎に作る
281デフォルトの名無しさん (ワッチョイ 9fad-EDaw)
2021/04/19(月) 10:39:20.82ID:X+u8pzLd0
>>274
知らないって決めつけてるのはどうかと思う
単にどうしてるのか聞いているだけ
282デフォルトの名無しさん (ベーイモ MM4f-XYuH)
2021/04/19(月) 10:44:42.24ID:7XobiDdgM
>>278破棄と生成できれば良いのですがちょっと難しい。ユーザーコントロールでバインドしていて各コントロールは値を参照しあってます
今回は画面が切り替わったときに表示非表示を変える戻す、なので直接は関係ないのですが影響度を減らしたい
>>279
>>276見直してプロパティを直接でなくてもラムダ式でいけそうなことに気付き>>279さんの形を思い浮かびました、今出掛けてるので確認は後ですが多分解決できそうです

皆様ありがとうございます
解決しなければまた聞くかもです
ありがとうございます
283デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/19(月) 10:58:10.70ID:Ee/wQKnTM
>>281
知ってて聞くのはもっとどうかと思う
284デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 12:13:19.27ID:lMV2Jqgd0
>>282
なんだかとってもおかしいよ
285デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 12:18:18.64ID:lMV2Jqgd0
これあれじゃね?
開始日と終了日に期間制限があると値が設定できないやつ(笑)
286デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/19(月) 12:41:53.53ID:/vkKNniZa
何がしたいのかよく分からないね。

キャンセル要求が発生したら初期状態に戻したいなら
素直に初期状態をまるごとキャッシュしておく方が分かりやすいんじゃないかと思うけど

もっと素直なのはそもそもApplyするまでUIの値をモデルに反映しないことだよね。

まあたぶん要件を説明しきれてないんだろうけど
287デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/19(月) 12:42:25.65ID:eG8AP0Ht0
>>282
元に戻す処理を管理したほうがいいケースなのか
元の状態を管理したほうがいいケースなのかを考えたほうがいいよ
288デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 13:39:27.50ID:lMV2Jqgd0
まあ、設定画面がモードレスでリアルタイムで値を変えたいときもあるかもしれんが
それやると
地獄の一丁目にご招待って感じ(笑)
289デフォルトの名無しさん (ワッチョイ ff02-L6pe)
2021/04/19(月) 13:46:03.66ID:0ewLpJwG0
Contract?
290デフォルトの名無しさん (ブーイモ MMcf-Vz79)
2021/04/19(月) 13:50:22.81ID:wot3CwpcM
>>288
更にundo/redoの機能を付けてくれまいか?

で更なる深淵へw
291デフォルトの名無しさん (ワッチョイ ffa7-zL3N)
2021/04/19(月) 14:13:33.61ID:lMV2Jqgd0
>>290
影響する値でエラーが出てもそれとは関係ない表示はできる限り続けて欲しい(プレビューが見えないから)
エラーが出てるときは値の変更で表示は変わっても最後の反映はできないようにしてほしい
でも値を変更してる最中のundo,redoは効くようにして欲しい

って割とありがち要求だよね

モードレスやった時点で地獄を覚悟しろって感じ
292デフォルトの名無しさん (ラクッペペ MM8f-ZP9E)
2021/04/19(月) 14:17:30.66ID:5/g8GOz6M
そのためのMVVMですから!
293デフォルトの名無しさん (ワッチョイ 9fad-EDaw)
2021/04/19(月) 16:11:25.84ID:X+u8pzLd0
>>283
めんどくさいのに本当にしてるのか気になったから聞いたんだけど何かおかしい?
294デフォルトの名無しさん (ワッチョイ 57ad-IUyB)
2021/04/19(月) 16:13:54.25ID:LEIxqEAm0
うちにも本当にしてる端末はあるぞ。
むしろ自動で上げたくないしな。
既知の問題でワークアラウンドがあるならそれで良いというケースもあるし。
リリースノートめちゃくちゃ読む。
295デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/19(月) 16:51:10.44ID:qG+FkDTLM
>>293
ネットに繋げないならそうするしかないし言うほど面倒でもないだろ
そもそもネットに繋いでる場合でもアップデートがある度に適用なんてしないよ
>>294が書いてるように修正内容見て影響ないとかワークアラウンドがあるなら適用しない
296デフォルトの名無しさん (スッップ Sdbf-EDaw)
2021/04/19(月) 16:56:35.95ID:Ly5FRhD3d
オフラインがめんどうとか何言ってんの?開発する時にはセキュリティ上当然やろ
オンラインとか最近の開発ではありえない
297デフォルトの名無しさん (ワントンキン MM4b-Ct+I)
2021/04/19(月) 17:17:52.34ID:ssZtrIutM
今のVSって最新メジャーバージョンは完全に人柱向けだからなあ
アップデートをすぐに入れられないような環境だと詰む可能性があるからむしろリスクが大きい
最新版を追えない環境なら2017使ったほうがいいよ
298デフォルトの名無しさん (ラクッペペ MM8f-aCHF)
2021/04/19(月) 17:59:46.65ID:sAdoeVNCM
更新頻度はどちらも大して変わらん

https://docs.microsoft.com/ja-jp/visualstudio/releases/2019/release-notes#visual-studio-2019-version-169-releases

https://docs.microsoft.com/ja-jp/visualstudio/releasenotes/vs2017-relnotes#visual-studio-2017-version-159-releases
299デフォルトの名無しさん (テテンテンテン MM8f-Ct+I)
2021/04/19(月) 18:14:05.65ID:HuLqOw9zM
>>298
中身読めよ
2017の方は脆弱性修正と軽微なバグ修正しかやってない
300デフォルトの名無しさん (ワッチョイ d793-vsd6)
2021/04/20(火) 00:39:35.61ID:TLYpp//E0
docker「…」
301デフォルトの名無しさん (ワッチョイ b72d-GJAZ)
2021/04/20(火) 02:18:25.03ID:hE4KV5oa0
C#を勉強中です
Delegateの機能はわかったのですが、これはどのような状況で使うのか思いつきません
こう使うと便利だという例を教えてください
302デフォルトの名無しさん (ワッチョイ 97ad-CpDH)
2021/04/20(火) 02:19:59.60ID:X693LKGY0
それは繊細な問題ですね
303デフォルトの名無しさん (ワッチョイ 9fad-EDaw)
2021/04/20(火) 02:23:17.77ID:mCU9Z3ky0
delegateの機能が解説されていた箇所に書いてなかったの?書いてあったけどそれを理解できないってこと?
304デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/20(火) 02:33:44.44ID:KMnW7zDR0
>>301
そのわかったというDelegateの機能を説明してみてもらってもいい?
305デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/20(火) 02:54:23.22ID:C6K6mBrBa
>>301
真面目な話、無理に今理解しようとしなくていいと思うよ。
コード書き出ぜば自然に分かる。
後回しにして先に進んだ方が吉。
306デフォルトの名無しさん (ワッチョイ b72d-GJAZ)
2021/04/20(火) 03:07:10.55ID:hE4KV5oa0
>>303
機能の解説だけでどのようなときに使うかは書いてなかったです

Delegate型の説明と作り方の後に例としてConsole.WriteLineでHelloと表示するメソッドを
新たに作ったDelegate型のaという変数に突っ込んでa()を実行して
ほら表示できたでしょという感じだったのだけれど
だからどうしたとしか思わなかったです
307デフォルトの名無しさん (ワッチョイ b7b0-tdH6)
2021/04/20(火) 03:22:02.21ID:HBCxLvi90
自分も変数のシャドーイングとか何が便利なのかわからないです
脳みそのメモリ圧迫されるのでは
308デフォルトの名無しさん (ワッチョイ b7b0-tdH6)
2021/04/20(火) 03:27:57.34ID:HBCxLvi90
>>306
こういうメソッドの引数がデリゲートで、まさに便利な使い方だと思ってる
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1.removeall?view=net-5.0

間違ってたら訂正よろしくです
309デフォルトの名無しさん (ワッチョイ b72d-GJAZ)
2021/04/20(火) 03:33:39.19ID:hE4KV5oa0
>>308
これがdelegateだとしたら意識しないで使ってました
まさかこれが..
310デフォルトの名無しさん (ワッチョイ b768-tdH6)
2021/04/20(火) 04:41:05.35ID:IRlXB/YU0
デリゲートは自分で使うもんじゃないと思ってた。
Buttonをクリックしたら、このメソッド実行してねってのを、IDEが作ってくれる奴だから。

だから、「こんなときどうしよう」って悩んだときに、
そうだ!デレゲートってのがあるんだよ!っていう、よっぽどの場合に、入門書を読めば良いと思う。
初めてのC#みたいな本がお薦めなんだけどね。
311デフォルトの名無しさん (ワッチョイ ffda-wDCo)
2021/04/20(火) 05:04:14.96ID:mPkgRyxP0
>>306
試しにhello2 からhello100まで突っ込んでみよう
312デフォルトの名無しさん (エアペラ SDbb-vsd6)
2021/04/20(火) 08:17:28.06ID:UlsxkGg7D
デリゲート定期
313デフォルトの名無しさん (ラクッペペ MM8f-ZP9E)
2021/04/20(火) 08:29:39.05ID:2x6gxMkWM
デリケートに好きして
314デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/20(火) 09:39:52.16ID:KMnW7zDR0
>>306
わからなかったらまず最初にリファレンスを読むといい
Delegateとは何かどういう目的で使われるのか普通に書いてる
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/delegates/
315デフォルトの名無しさん (オッペケ Sr8b-HAyt)
2021/04/20(火) 09:49:15.79ID:UooL86SRr
まあこういうものが腹に落ちるようになるのが楽しいとこでもある
316デフォルトの名無しさん (ワッチョイ fff2-9WMT)
2021/04/20(火) 11:01:31.30ID:wGU9ai2r0
>>313
パジャマのままで
317デフォルトの名無しさん (ワッチョイ 972c-KAGY)
2021/04/20(火) 12:07:45.54ID:7xfghfsY0
例えば、Ruby では、Forwardable でインスタンス変数に委譲できる

自分で配列クラスから、Stack を作って、その内のpush, pop だけを使いたい場合、
もし配列を継承・is-a すると、余計なメソッドまで継承してしまうので、それらを使いたくない。
そういう場合に、委譲・has-a で、インスタンス変数に委譲して、使うメソッドも限定できる

Go, Elixir も継承がない、委譲だけ。
継承は大掛かり。
使わないメソッドを呼ばれてしまう可能性があるから

また、誰でも使うような、String クラスなどを継承して、メソッドを追加されるのも嫌。
そういう継承は想定外だから

素人は、よくそういう事をする。
継承用のクラスじゃないのに継承したりする

require 'forwardable'

class Stack
extend Forwardable

def initialize( ) @ary = [ ] end
def_delegators( :@ary, :push, :pop )
end

stack = Stack.new
stack.push 1
stack.push 2
stack.pop

p stack #=> #<Stack: @ary=[1]>
318デフォルトの名無しさん (ワッチョイ 972c-KAGY)
2021/04/20(火) 12:25:42.67ID:7xfghfsY0
>>307
shadowing とは、内外の変数は、別々の扱いで、
内側のスコープに入ると、内側が優先されて、
外側の同じ変数名が隠されること。
その際、外側の変数には影響を与えない。

Ruby では、外側のa は10で、内側のブロックスコープでは、
同名の変数aを使っても、外側の変数には影響を与えない。
ブロックスコープを抜けると、aは10のまま

a = 10
ary = [ 1, 2 ]

ary.each do |a|
puts "ブロック内: #{ a }"
end

p a

出力
ブロック内: 1
ブロック内: 2
10
319デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/20(火) 13:01:47.56ID:TyJgyLsfa
このスレはRubyの宝石箱や!まで読んだ。
320デフォルトの名無しさん (ワッチョイ ffda-wDCo)
2021/04/20(火) 20:38:25.40ID:mPkgRyxP0
火入れするかあんたのはスピネルや
と言うべきか
321デフォルトの名無しさん (ワッチョイ b7b0-tdH6)
2021/04/20(火) 21:04:57.15ID:HBCxLvi90
なにかのネタというかエンジニアジョークなのかな? わからないや

シャドーイングがどんな機能なのかは単純だからわかってるつもりだけど、一見同じ変数名を扱えることで何が嬉しいの?って話です
コード読んでて混乱しそうなので無い方が綺麗だと思うのだが、自分の脳みそが貧弱なだけかな?
322デフォルトの名無しさん (ワッチョイ bf68-Zgro)
2021/04/20(火) 21:05:35.48ID:3ANNQsEU0
c から来た人なんだけど、デリゲートって関数ポインターの認識
323デフォルトの名無しさん (ワッチョイ bf68-Zgro)
2021/04/20(火) 21:08:17.98ID:3ANNQsEU0
半角の++が書き込めない。なんだこれ。
324デフォルトの名無しさん (ワッチョイ ffda-wDCo)
2021/04/20(火) 21:28:46.29ID:mPkgRyxP0
>>322
それがリストになっているので
複数の呼び出しを一気に行える。
という感じ
325デフォルトの名無しさん (ワッチョイ bfda-bvUB)
2021/04/20(火) 22:48:16.53ID:wpz1WDBF0
メモリリークの温床だがな。。
326デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/20(火) 23:13:15.40ID:oW++joyya
>>321
嬉しいでしょ。
まあぶっちゃけフィールドをローカル変数で隠蔽することはあまりないと思うけどね。

>>322
Cより機械語レベルで考えた方が分かりやすいね。
要はcall命令のオペランドだよね
厳密にはthisポインタの情報を含むから違うんだろうけど概念的には
327デフォルトの名無しさん (ワッチョイ 9fe4-2EJ2)
2021/04/20(火) 23:17:25.34ID:+w5LC8La0
初歩的な質問ですいません
オブジェクト初期化子とコンストラクタは何が違うんでしょうか?
やってることは同じのように感じるのですが…
328デフォルトの名無しさん (ワッチョイ 375f-QJa2)
2021/04/21(水) 01:35:22.73ID:qZ+z+JK20
>>324
デリケートって追加や削除されるたびに全リストコピーしてるんだっけ?
ぶっちゃけ効率考えたらデリケートよりインターフェースをリストで持たせた方が効率はいいよね
329デフォルトの名無しさん (ワッチョイ ff63-7LQ7)
2021/04/21(水) 01:38:27.35ID:GnM/pYwY0
どいつもこいつもデリケートデリケートってよお!
330デフォルトの名無しさん (ワッチョイ 97b5-Ct9k)
2021/04/21(水) 02:00:12.49ID:9Dxtj7zY0
♪シーズソーデリケート(デリケート、デリケート)
331デフォルトの名無しさん (ワッチョイ b768-tdH6)
2021/04/21(水) 05:50:25.83ID:iaWKhvh90
>>327
初期化子は参照側が任意に行う。代入しか出来ない。
コンストラクタはオブジェクト側が初期化のルールを決めて、ロジックが書ける。
ってことじゃないのかな。
332デフォルトの名無しさん (ワッチョイ bf62-rOyz)
2021/04/21(水) 09:15:40.20ID:hAG7zCyL0
>>327
コンストラクタにはそのオブェクトを生成するために必要なものを渡してる
初期化子は特に生成には関係ないない項目にも初期値を設定してるイメージ
使う側はあまり気にしなくていいけど用意する側は意識しといた方がいいよ
333デフォルトの名無しさん (スッップ Sdbf-QJa2)
2021/04/21(水) 09:18:16.78ID:zaNQ2p2Bd
>>327
初期化子はフィールド単体に対しての初期化で、コンストラクタはクラス全体に対しての初期化って考えたらイメージしやすいかも
まあ、初期化子を指定しない場合でも、def aultで初期化されるんだけどね
334デフォルトの名無しさん (アウアウウー Sa1b-B9Cj)
2021/04/21(水) 11:04:40.00ID:9tzd621Ta
>>327
そもそも問題設定が間違っていると思うよ。
正しい問題設定は「オブジェクト初期化子って何?」

オブジェクト初期化子とは、コンストラクタ呼び出しと、複数の任意のプロパティーやフィールドへの
値の設定をインラインで書けるようにした糖衣構文。
335デフォルトの名無しさん (ワッチョイ d790-EWF6)
2021/04/21(水) 16:34:49.04ID:yCZSrEkI0
>>326
実を言うとnull safetyのせいで隠蔽したくなるんだな

もちろん、別の名前つければいいけど
336デフォルトの名無しさん (ワッチョイ d790-EWF6)
2021/04/21(水) 16:56:18.92ID:yCZSrEkI0
C#に限らずnull safetyの言語で、特にビューモデルのクラスでnullableなフィールドを宣言する機会が多いいんだが、
フィールドはメソッド内でnullチェックしても非nullableに昇格しない(kotlinでいうスマートキャストが効かない)
から、
if (field == null)
 throw new IllegalState
var field = field!; // わざわざnon nullableなローカル変数に代入で、ローカル変数に適当な名前が思い付かないのでフィールド名と同じ名前で隠蔽
337デフォルトの名無しさん (ワッチョイ d790-EWF6)
2021/04/21(水) 17:04:17.58ID:yCZSrEkI0
メソッド内で1,2回とか参照しないのであればわざわざnon nullableなローカル変数に代入しないが

特にkotlinとかスコープ演算子とかもあるがkotlinは「!!」と二重だからこれがいっぱい現れるとソースが見苦しい...
338デフォルトの名無しさん (ワッチョイ 1701-UBeK)
2021/04/21(水) 22:17:44.76ID:4gUtTQ4z0
>>333
違うだろ。C#ならフィールドとプロパティをきちんと区別しないといかん。
339デフォルトの名無しさん (ブーイモ MMcf-eihA)
2021/04/22(木) 08:19:06.23ID:b0xCXWo1M
x = a ?? b; ←null合体演算子

x.?method() ←これなんて言うんだっけ?
340デフォルトの名無しさん (ワッチョイ ff2c-xwMB)
2021/04/22(木) 08:59:45.35ID:bBpUq1Fa0
ピリオドとクエスチョンの位置逆だけどnull条件演算子
341デフォルトの名無しさん (ワッチョイ d76e-vWSz)
2021/04/22(木) 10:42:48.70ID:XvsGXOnj0
linuxとwindowsで動くguiソフト作りたいんですが、共通の開発環境と言語ってあるでしょうか?
openglを扱ってみたいのですが、c++とqtが多いんでしょうか?
c++を扱うと思うので、erectronやwxpythonなどは除外されるんでしょうかね。
342デフォルトの名無しさん (ラクッペペ MM8f-aCHF)
2021/04/22(木) 11:01:31.56ID:8IHXhPWQM
>>341
C++の話をするのに何故C#のスレに来たの?
343デフォルトの名無しさん (ワッチョイ bf62-rOyz)
2021/04/22(木) 11:15:40.26ID:wjS6T4Xy0
>>339
逆にnullだったらそのままにしたいってことが多いんだけどそういう演算子ないよね

int? x = null;
int? 2x = (x == null ) ? null : (2 * x);

みたいな
344デフォルトの名無しさん (ワッチョイ d76e-vWSz)
2021/04/22(木) 11:16:13.25ID:XvsGXOnj0
opengl関係無いアプリも作りたいので(´・ω・`)
c#は恐らくlinuxでは動かないものですよね
345デフォルトの名無しさん (ワッチョイ 9f01-7Des)
2021/04/22(木) 12:12:49.77ID:fYKo/KH70
>>343
nullだったらメソッドやプロパティにアクセスせずnullを返すのがnull条件演算子(?.)
そのint?のケースは単に`2 * x`でnullが返されるようになってる
346デフォルトの名無しさん (ブーイモ MMbb-Vz79)
2021/04/22(木) 12:36:03.10ID:TgsR4gUfM
>>344
人脈があれば出来るぞ
347デフォルトの名無しさん (アウアウウー Sa1b-u2/C)
2021/04/22(木) 13:12:31.50ID:V2Z7bz83a
>>344
Unityならwindowsでもlinuxでも動くはず
348デフォルトの名無しさん (ワッチョイ ff33-ubdj)
2021/04/22(木) 13:26:29.41ID:r34CJZmP0
.NET MAUIがそういうの目指してるんだろうけれど…
349デフォルトの名無しさん (ワッチョイ d76e-vWSz)
2021/04/22(木) 14:05:53.62ID:XvsGXOnj0
>>347
unityをguiアプリ開発に使いませんよね 普通
350デフォルトの名無しさん (ワッチョイ 375f-QJa2)
2021/04/22(木) 14:23:56.91ID:wSGfQWAL0
>>349
mono 使えばいいんじゃないの?
351デフォルトの名無しさん (ワッチョイ bf62-rOyz)
2021/04/22(木) 15:04:02.14ID:wjS6T4Xy0
>>345
条件演算子を使えないパターンの例をあげたつもりだったんだけどそういう動作すんのか
x.method()に対応するならmethod(x);にも対応してくれてもいいのにって思った
352デフォルトの名無しさん (ワッチョイ d76e-vWSz)
2021/04/22(木) 15:44:38.28ID:XvsGXOnj0
>>350
monoやxamarinはc#ですよね。
c#製アプリはlinuxで動かないと効かされていましたが。
あと、openglなので、c++ではないですか?
353デフォルトの名無しさん (ブーイモ MMbb-Vz79)
2021/04/22(木) 15:47:59.35ID:TgsR4gUfM
.net core も動くぞ
354デフォルトの名無しさん (ワッチョイ 778e-u7Bp)
2021/04/22(木) 17:02:51.26ID:RDEPc8rd0
釣りだろ
355デフォルトの名無しさん (ワッチョイ ff63-7LQ7)
2021/04/22(木) 20:02:51.51ID:YBnx4+wd0
なんでも釣りって言わないで
356デフォルトの名無しさん (ワッチョイ 574f-ubdj)
2021/04/22(木) 21:59:40.16ID:8RSzlZOe0
なんでguiにunity勧める奴いるのw
357デフォルトの名無しさん (ワッチョイ ffda-wDCo)
2021/04/22(木) 22:01:36.51ID:itFZ12540
何にでもRuby勧める奴もいるだろ
358デフォルトの名無しさん (テテンテンテン MM8f-wT4Z)
2021/04/22(木) 22:05:49.71ID:JJ/RFZ5mM
まあC#スレでC++連呼してるのは釣りか底抜けのバカのどちらかだからいずれにせよスルーが基本かと
359デフォルトの名無しさん (スププ Sd70-F6Jh)
2021/04/23(金) 21:53:03.64ID:e/IHU4YJd
c#でPCがアイドル状態か否か判定したくて
マウスの動きが一定時間なしで判定するのは出来たんだけど
マウスを動かさずブラウザで動画再生しているときにもアイドル状態ではない判定にしたいんだけど
どうすれば判定取れるでしょうか
360デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/23(金) 22:15:06.79ID:2LOGdF5/0
特定のキー押下でアイドル判定されない状態を追加して置いた方が今後楽じゃないかな?
361デフォルトの名無しさん (ワッチョイ 8e2c-MVqC)
2021/04/23(金) 22:40:41.15ID:vlx7cXWJ0
メディアプレイヤーの類で動画再生は構わないの?
ブラウザのバックグランドタブで再生中の場合は?

一応各プロセス各スレッドがSetExecutionStateした結果のステートはこんな感じで取れるらしい
https://stackoverflow.com/questions/10970625/how-windows-decides-to-show-the-screensave
362デフォルトの名無しさん (ワッチョイ 8e2c-MVqC)
2021/04/23(金) 22:41:57.81ID:vlx7cXWJ0
SetThreadExecutionStateだった
363デフォルトの名無しさん (ワッチョイ 1c79-BShP)
2021/04/23(金) 23:45:20.80ID:tWGuVFO60
その他の案
スクリーンセーバーのプロセスをトリガに利用にする
例えば「ブランク」のスクリーンセーバーが起動してたら、
「scrnsave.scr」がプロセス一覧から取得できる(はず)
つまり*.scrが動いてたら確実にアイドル状態と判断できる
この方法はスクリーンセーバーを無効にしてたら意味ないけど、それはレジストリから判断できるはず
問題はアイドル+スクリーンセーバーの起動時間まで待つ必要がある事
364デフォルトの名無しさん (ワッチョイ 7cda-otCu)
2021/04/24(土) 00:09:09.60ID:gwk+qBm00
つ WM _ enteridle
365デフォルトの名無しさん (ワッチョイ 0c01-UN6T)
2021/04/24(土) 00:13:28.13ID:RPGHdVOi0
タスクスケジューラでアイドル状態を条件にプログラムを起動できる
コードから直接利用する方法があるかどうかは知らない
366デフォルトの名無しさん (アウアウエー Sa6a-Nexr)
2021/04/24(土) 01:30:28.39ID:+FP4d2caa
>>359
率直に言って無理がある気が。

結局システムで正式に定義されたステートじゃないと
今たまたま何か方法を見つけ出してもいつまでそれが使えるか
わかんないよね。

スリープを抑止するプログラムが起動しているかどうかで
判定できないかとも思ったけど、ブラウザの動画再生は
たぶんスリープ抑止しないよね知らんけど
367デフォルトの名無しさん (スププ Sd70-F6Jh)
2021/04/24(土) 01:42:09.65ID:lUFfLIkMd
SetThreadExecutionStateを試してみます

>>360
同じような機能入れてたけど設定し忘れ&解除し忘れで意味なかったです
368デフォルトの名無しさん (ワッチョイ ca35-B45E)
2021/04/24(土) 11:26:55.87ID:gMqF1SGc0
GetLastInputInfo
369デフォルトの名無しさん (ワッチョイ 1c79-BShP)
2021/04/24(土) 13:52:13.80ID:gg+BSg3V0
>>361 でよさそう(未確認)
>>368 GetLastInputInfo は数ヶ月前10で試したけどうまくいかなかった
370デフォルトの名無しさん (ブーイモ MM5e-zC44)
2021/04/24(土) 14:17:41.68ID:zhh/+6W6M
.NETで文字列の見た目の幅を求めるライブラリってある?
等幅フォント前提で半角英数なら1文字分、全角漢字なら2文字分、、、といったように計算したい
371デフォルトの名無しさん (ワッチョイ a27c-ftt6)
2021/04/24(土) 14:21:02.35ID:n+JXhE4b0
https://dobon.net/vb/dotnet/graphics/measurestring.html
これじゃだめなの?
372デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/24(土) 14:34:56.09ID:CavyEmf6a
>>370
シフトJISでエンコードした時のバイト数を数えればいいと思うけど
今時そんなの何に使うの?
373デフォルトの名無しさん (ブーイモ MM5e-zC44)
2021/04/24(土) 15:01:36.07ID:zhh/+6W6M
>>371
ありがとう
でもできればプラットフォーム依存しないほうがいい

>>372
Markdownのテーブルをフォーマットしたり色々です
374デフォルトの名無しさん (ワッチョイ 66ad-JI0G)
2021/04/24(土) 15:03:28.91ID:6TA9BQj40
絵文字やサロゲートペアも考え出すとめちゃめちゃめんどくさいよね
375デフォルトの名無しさん (ワッチョイ f0ad-Wjwq)
2021/04/24(土) 15:27:27.20ID:h2P4AVL30
>>370
雑にやるなら、StringInfo.ParseCombiningCharacters2倍して、半角文字の文字数引いたら良いんじゃないの?
アクセント付き文字も半角文字に入れればそれなりに並ぶんでは?

タイ語とかアラビア語まで考える?
376デフォルトの名無しさん (ワッチョイ 0a42-On6t)
2021/04/24(土) 15:41:18.56ID:Of2cOFGz0
MeasureStringの数字を見ながら、頭がウニになったGDI+の思い出
勝手に文字の大きさ計算してくれるwpfの有り難さよ
377デフォルトの名無しさん (ワッチョイ 0c01-UN6T)
2021/04/24(土) 16:14:48.80ID:RPGHdVOi0
>>370
wcwidthとかeast asian widthで検索してみるといいと思う
https://www.nuget.org/packages/EastAsianWidthDotNet
378デフォルトの名無しさん (ブーイモ MM5e-zC44)
2021/04/24(土) 16:54:43.52ID:zhh/+6W6M
>>375
情報ども
とりあえず日本語対応できればいいかなと

>>377
あざす
これたぶん正解っぽいすね
379デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/24(土) 17:00:48.70ID:TFlZREhta
Markdownのテーブルっていうのが何かよく分からないけど、
細かいこと言えば等幅フォントであってもどの文字がどの幅で
描画されるかはフォントに依存するはずだと思うので、(一般的に半角の文字だと
されているものが半分の幅で描画される保証なんて実はないんじゃないか?)
グラフィック関係なら>>371みたいに実測するのが一番確実だよね
380デフォルトの名無しさん (ワッチョイ e27d-2xWT)
2021/04/24(土) 18:10:11.92ID:EfI17DN20
同じ文字で同じ等幅フォントで表示しても、アプリによって全角/半角相違することもあるよ
MS製品間でもVisualStudio/Officeで幅が一致しなくて以前困った記憶がある
381デフォルトの名無しさん (ワッチョイ 2a02-B0GO)
2021/04/24(土) 18:17:52.33ID:shUiIChg0
httpclientでpostした時にレスポンスヘッダーのlocationが取れないんだけど取る方法なかんかな
382デフォルトの名無しさん (ワッチョイ 8e2c-MVqC)
2021/04/24(土) 18:37:25.15ID:jBCuAF2S0
HttpClientをnewするときに渡すHttpClientHandler(.NET Core/5ならSocketsHttpHandler)の
AllowAutoRedirectをfalseにすればいけるような
383デフォルトの名無しさん (ワッチョイ 2a02-B0GO)
2021/04/25(日) 09:16:00.93ID:pCSAoCZZ0
>>382
できたわ
サンクス
384デフォルトの名無しさん (アークセー Sxd7-On6t)
2021/04/25(日) 15:07:37.80ID:hcyifmDsx
パネルに貼り付けているlabelの数を数えることってできませんか?

テキストファイルの1行目ならlabel1へ表示するってな感じにしたいのですが、
行数が少なければ↓でいいんですが、

label1.Text = File.ReadLines(FileName).Skip(0).Take(1).First();

数が多くなるとコードが長くなって修正等に時間がかかると思うんですよ。
そこでラベルの数が数えられるなら繰り返し文を使えばコードがスッキリするんじゃないかと思ったんです。
良い案のある方いらっしゃいましたらレスをお願いします。
385デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/25(日) 15:38:30.38ID:nePod60N0
>>384
controlsっているじゃん?
386デフォルトの名無しさん (ワッチョイ 3f2d-T6Cp)
2021/04/25(日) 15:45:05.88ID:jBx2XbWF0
>>384
var count = this.panel1.Controls.Cast<Control>().Count( x => x is Label );
387デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/25(日) 16:09:10.43ID:FaKFDW610
>>386
Controlにキャストする必要あるのか
つかOfTypeで良いんじゃねえのか

ちなみにControlsの列挙順って一定なのか?
388デフォルトの名無しさん (ワッチョイ 3f2d-T6Cp)
2021/04/25(日) 16:11:55.60ID:jBx2XbWF0
>>387
思わずCastで書いちゃったけど、OfTypeの方がいいね
389デフォルトの名無しさん (ワッチョイ 9b5f-On6t)
2021/04/25(日) 16:15:19.50ID:pX1h9NBm0
男だったらキャストして突っ張り続けろよ
390デフォルトの名無しさん (ワッチョイ 9378-On6t)
2021/04/25(日) 16:16:57.02ID:vWpG1hhV0
>>387
designerの登録順に依存するけどイジるたびに変更を確認するの馬鹿馬鹿しいから
自分はコントロール名やタブ順で並び替えてる
391デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/25(日) 17:17:41.16ID:FaKFDW610
>>390
(デザイナーでの)登録順ってのは「保障」されているのか?って話なんだが
ディクショナリとか一見登録順に見えても、それは条件が良いだけか実装依存な場合がほとんどだぞ

まあデザイナの定義もVSでいじるとどう変わるかわからんけどな
392デフォルトの名無しさん (ワッチョイ 3f2d-T6Cp)
2021/04/25(日) 17:43:19.45ID:jBx2XbWF0
>>391
自分で調べもせずに何でそんなに偉そうなんだw
Control.ControlCollectionはIListインターフェースを実装してるとDocsに書いてある
393デフォルトの名無しさん (ワントンキン MM42-XmRv)
2021/04/25(日) 17:57:58.07ID:NMiXqa1mM
>>388
いやCastの方がいいよ
失敗しない確信を持ってるんだから
394デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/25(日) 18:22:24.73ID:Jq50cbcAa
>>384
なんかやりたいことと質問の内容が噛み合ってないような気がw

n番目のLabelにn行目の内容を表示したいんだったら
欲しいのはLabesの数じゃなくてIEnumerable<Label>とかじゃないの?

っていうかそういう目的ならLabelじゃなくてListViewとか使った方がいいんじゃないの?w
395デフォルトの名無しさん (ワッチョイ 92da-eOAD)
2021/04/25(日) 18:45:17.32ID:6eSN7Ebq0
MVVMならもっと楽だったな
396デフォルトの名無しさん (アークセー Sxd7-On6t)
2021/04/25(日) 20:58:32.34ID:hcyifmDsx
皆様回答ありがとうございます。
Controlsプロパティに関しましては↓に
https://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
>PanelコントロールやGroupBoxコントロールなどを利用している場合には、フォームのControlsプロパティからすべてのコントロールにアクセスできるわけではない。

と書いていたのでスルーしていました。

>>394
まだ入門書を終わったばっかりでなにが正しいのかわかrない状態なので、変な感じなってるっぽいです。
ご指摘ありがとうございます。


とりあえずやりたいことはできたので、皆様本当にありがとうございました。
397デフォルトの名無しさん (ワッチョイ 0662-miHF)
2021/04/26(月) 12:04:27.44ID:aoKZLvu10
>>396
一応釘を刺しておくけど、コントロール名を変えるだけで動かなくなるような実装にならないよう気をつけてね
398デフォルトの名無しさん (ワッチョイ fb54-C+b/)
2021/04/26(月) 15:48:20.09ID:57LVbzrx0
>>397
横からすみません。
そういう事態を避けるにはどういう実装にすればいいでしょうか。
399デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/26(月) 17:00:40.17ID:fVZ2op5+0
Nameプロパティを見ない処理にすればよくね?
400デフォルトの名無しさん (ワッチョイ fb54-C+b/)
2021/04/26(月) 17:16:30.71ID:57LVbzrx0
>>399
現在、ToolStripのクリックされたボタンをNameで判別してます。
if(e.ClickedItem.Name == "") { }

この場合、Name以外のプロパティを使うようにするだけでいいでしょうか。
401デフォルトの名無しさん (スッップ Sd70-miHF)
2021/04/26(月) 17:43:14.20ID:1JVi9H1ud
>>400
Nameじゃなきゃいいわけじゃないよ
じゃあTextで″削除″だった時にって分岐をすると、後にダイアログを出すから″削除...″に修正しなきゃってなって動かなくなる
派生してカスタムコントロールを作るとかTagを利用するとかが一般的かな
402デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/26(月) 17:43:28.37ID:+MtLiehda
>>400
どのプロパティーを使おうが、そのコードを書いた時と違う値が設定されてしまったら
識別子として使えないのは同じじゃないの?w

素直に「クリックされたのは○○か?」を検査するコードを書けばいい。
if (e.ClickedItem == hogeButton) { ... }

そもそもボタン自身のイベントを使えば何がクリックされたか識別するコードを書く必要がない
403400 (ワッチョイ fb54-C+b/)
2021/04/26(月) 18:57:38.53ID:fsnGR4b00
ありがとうございます。

>>402
以前、その方式でやっていたのですが、理由あってToolStripと、そのコンテナになるFormを別にした結果、以下のコードになってしまいました。
結果、FormからMenuItemを直接参照出来なくなりました。
https://ideone.com/dlhYMG

対策的に、別途、MenuItemの一覧のenumと、クリックされたItemを伝播するイベントを作りました。
https://ideone.com/da5kPY

ただし、この場合はMenuItemを追加する時に、enumに要素を追加する必要がありますが、
enumは定数なので、アプリ使用中にItem追加した際、enumにそのボタンを登録出来ないのです。

それで結局Nameを参照するようになりました・・・
404デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/26(月) 19:20:00.87ID:+MtLiehda
>>403
メンバー(fileMenuItem)のアクセスレベルを非privateにして晒すのが嫌なら
素直にイベントを作っちゃうのがいいんじゃないの?

public class MyToolStrip : ToolStrip
{
  private ToolStripMenuItem fileMenuItem = new ToolStripMenuItem();

  public event EventHandler FileMenuItemClick
  {
    add
    {
      fileMenuItem.Click += value;
    }

    remove
    {
      fileMenuItem.Click -= value;
    }
  }
}
405デフォルトの名無しさん (ワッチョイ fb54-C+b/)
2021/04/26(月) 19:27:06.52ID:fsnGR4b00
>>404
それで行きます!ありがとうございます!
406デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/26(月) 19:35:35.06ID:/WVOYzSd0
動的にオブジェクト追加してるならそのオブジェクトの参照は持ってるはずだから
Nameプロパティとか見る必要ないはずだが
407デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/26(月) 19:50:40.13ID:fVZ2op5+0
言語の機能でインスタンスを特定しようとするのはギルティ
だいたい作っていくと痛い目にあう
408デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/26(月) 21:00:37.58ID:zRuX+7dna
>>405
本来はToolStrip自身じゃなくて、ToolStripやMenuStripを持った
Formを継承した方がいいような気もするけどね。
まあそれじゃ満たせない要件なのかもしれないけど。

でもToolStripやMenuStripってFormの継承と相性悪いんだよな確か。
修正されずに放置されてるバグがてんこ盛りだった気がする
409デフォルトの名無しさん (アークセー Sxd7-On6t)
2021/04/26(月) 22:26:58.02ID:VGqr4loSx
>>397-408
入門書がNameプロパティでの判別をしていたので、当たり前のようにやっていましたが、
あまりよくないやり方なんですね。
ありがとうございます。勉強になりました。
410デフォルトの名無しさん (ワッチョイ fb54-C+b/)
2021/04/26(月) 23:28:26.99ID:fsnGR4b00
>>409
よくないかどうかは状況次第だと思う。
自分や他人がコントロールのNameを変更した時に、判定する側もきちんと変更すれば問題ないはず。
そもそも変更しないなら問題になることもないし。
411デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/27(火) 00:39:04.06ID:H7ElJCU2a
>>410
「〇〇を変更した時には××も変更すべし」みたいな自明じゃないルールが存在すると、
そのルールをコードを保守する人が忘れているか知らない場合には
正常に動作しなくなるリスクが発生していることになる。

プログラミングの目的は要件を満たすことなので、他に手段がなければ
あえてそういうリスクのある方法を採用することはあってもいいけど、
今の話は明らかにそうじゃない
412デフォルトの名無しさん (ワッチョイ 9b5f-f+Su)
2021/04/27(火) 00:47:33.70ID:8Unh/3dq0
Windows,LInux,Macで動作するものを作る場合は.Net coreとmonoどっちがおすすめですか?
413デフォルトの名無しさん (ラクッペペ MM34-/WW/)
2021/04/27(火) 00:58:04.31ID:ezafVa/dM
今からなら.NET 5 (.NET Coreの後継)
今年中には更に後継の.NET 6が登場予定
.NET Coreは既に終了済、monoはモバイル向け(.NET 6に統合される予定)
414デフォルトの名無しさん (ワッチョイ d0f2-2tiM)
2021/04/27(火) 01:08:57.42ID:8OBs4sir0
なんか次々思い付いてはゴミのように捨てていくよな
415デフォルトの名無しさん (ワッチョイ 9b5f-f+Su)
2021/04/27(火) 01:13:33.58ID:8Unh/3dq0
そうなんですね
.NET 5調べてみます!
416デフォルトの名無しさん (ワッチョイ f82d-T6Cp)
2021/04/27(火) 01:19:08.19ID:DUr8YxD70
.NET Core 3.1の次バージョンを.NET 5とリネームしただけだから.NET Coreが終わったわけじゃない
417デフォルトの名無しさん (ワッチョイ 66ad-JI0G)
2021/04/27(火) 08:59:07.35ID:nkW/cvkg0
>>413
既に終了済み??
418デフォルトの名無しさん (ワッチョイ b701-J6CO)
2021/04/27(火) 09:09:39.16ID:+C/fTs2P0
インターフェースや抽象クラスのメリットとは?

つまりvirtualで処理をかかない純粋仮想関数を作る意味はあるのかということです。

そもそもvirtual指定するのであればデフォルト処理というものを書いておけば必要に応じてオーバーライドすればよいと思うのですが。
419デフォルトの名無しさん (ワッチョイ 1a63-3cD6)
2021/04/27(火) 09:56:11.35ID:zT7wmnFt0
>>418
>インターフェイス
多重継承

>抽象クラス
デフォルト処理が決まらないメソッドを継承先でオーバーライドで強要する
420デフォルトの名無しさん (ワッチョイ b701-J6CO)
2021/04/27(火) 10:13:30.82ID:+C/fTs2P0
>>419
ありがと、
めちゃわかりやすかった。
421デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/27(火) 13:59:45.19ID:MoRpu0yA0
ちゃんとifやcase文で書いた方が実は後で楽だけどね
使うかどうかはかっちょええかどうかである場合が多い
422デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/27(火) 14:31:58.08ID:H51IIUOO0
将来的にスパゲティ化することを防ぐために多少手間でもインタフェースや抽象クラスを使って制約を設けるもんじゃないの?
423デフォルトの名無しさん (ワントンキン MMb8-XmRv)
2021/04/27(火) 15:29:38.21ID:5DBHgWrVM
そういうのは大抵、いざ要件が増えたときには、今の引数だけでは〇〇の情報が足りないとか、拡張を想定していなかった部分を拡張しなければならなくなったとかで破綻するんだよ
要件にないなら後で実際に拡張が必要になってからリファクタリングした方がよい
424デフォルトの名無しさん (ワッチョイ bf87-dNqc)
2021/04/27(火) 16:06:23.66ID:NpDZDySr0
俺は>>422派だな。
要件が増えたときにパラメータが増えたとしても、ファクトリーに渡す拡張用の値増やすだけで元の処理に手を入れなくていいから
425デフォルトの名無しさん (ワッチョイ b701-J6CO)
2021/04/27(火) 17:44:39.71ID:+C/fTs2P0
もしかして抽象クラスとインターフェースって使う必要ない?
メリットはスパゲティコードにしない制約を追加するだけで有れば設計ミスの方じゃないか?
426デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/27(火) 17:54:44.27ID:MoRpu0yA0
>>425
まあでも知ってると他の誰かが使ったときに欠点がわかるよ
下地がそうやってできてるのにそれに逆らって作ってもしゃーないし
合わせるのは大事

ただメリットはよくわからん
List<object>やobject型の悪用とあんま変わらん気がする
落ちてもどこで落ちたかわからんのもいっしょ
427デフォルトの名無しさん (ブーイモ MM5e-ZDuA)
2021/04/27(火) 17:58:00.62ID:3vzUzKx8M
>>425
同時平行開発するときは有用だな
428デフォルトの名無しさん (ワッチョイ a27c-On6t)
2021/04/27(火) 18:04:24.32ID:pi+NfSuo0
interfaceはこのクラスにはこのメソッドがありますよと言う事を約束するだけで
実装が共通化しようもないようなものに使うものだし
(例としてforeachで回せるようにする為のIEnumerable)
抽象クラスは良くある例はFruitクラスの子クラスがAppleやら関連性のあるものに対して使うものだろうし
そもそも用途が違うような
429デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/27(火) 18:05:20.92ID:eLMexJPua
>>425
アーキテクチャ綺麗だとあんまし使わないね
依存関係グチャグチャのスパゲティになってるとインターフェースで切ってDIしないとキツイ
けどそれは最初から設計ミスなんだよ
430デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/27(火) 18:06:48.09ID:eLMexJPua
>>428
アルゴリズム書くときには便利かもね
431デフォルトの名無しさん (スッップ Sd70-I7vP)
2021/04/27(火) 18:14:04.55ID:RVxlIcyJd
クラスを他の人に使わせてまうとあとで変えれなくなってのっぴきならなくなることがあるからやがな。

interfaceにしておくことでサイズゼロにしておくことが出来る。
相手が不特定多数だと「変更したから変えてくれ」とはいえないわけですわ。
432デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/27(火) 18:16:27.98ID:H51IIUOO0
多態性を利用するために必須なんだから使わなきゃ不便じゃない?
純粋に楽になるついでに、構造に制約を設けて将来的に品質維持する保険にもなるっていう複数のメリットあるので、使わない理由が無いというか
一回つくって終わりの書き捨てならいらないけど

426の後半2行は意味がよくわからない
433デフォルトの名無しさん (ワッチョイ d863-x7P5)
2021/04/27(火) 18:32:34.55ID:/yDoZvzG0
下手の考え休むに似たりって本当だよな
434デフォルトの名無しさん (ワッチョイ b701-J6CO)
2021/04/27(火) 18:33:38.95ID:+C/fTs2P0
>>432
多様性を使う為に必須というのは初耳だった
別に普通のクラスでも継承してインスタンス化すれば多様性は使えると思ってたんだけど

同じ親クラスやvarの配列にしてfor回したり
そこでインターフェースや抽象クラスにしてしまうよりかは
少なくとも何も処理しないダミー関数でも書いて仮想メソッドで実装しておいた方が良いとおもてる
435デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/27(火) 18:35:08.09ID:MoRpu0yA0
>>431
いやいやinterfaceから触るでしょうよw
436デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/27(火) 18:37:58.55ID:MoRpu0yA0
ちゃんとcase文書いた方がいくつ分岐してるかわかっていいじゃん
これをメリットと思えないのってなんでなの?
ソース読むときいくつに処理が別れてるか知らずに済むことって皆無だと思うけど
437デフォルトの名無しさん (エアペラ SD03-eDU7)
2021/04/27(火) 18:48:41.39ID:K2ItIfw9D
今って多態性じゃなく多様性って言うのが主流なの?
438デフォルトの名無しさん (ワッチョイ c252-W/SR)
2021/04/27(火) 18:49:53.91ID:tjxIRyEc0
>>436
いくつに分岐しているかを気にしなくてすむのがinterfaceによる抽象化のメリットの1つだろうに
439デフォルトの名無しさん (ワッチョイ fc63-On6t)
2021/04/27(火) 18:51:27.27ID:LNs0Wm240
いいえ多態性です
440デフォルトの名無しさん (ワッチョイ 74e5-4uvq)
2021/04/27(火) 18:53:45.11ID:QWBqF+Zq0
>>431
interfaceって実装しなくてもいいの?
詐欺にならない?
441デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/27(火) 18:59:04.44ID:izPR1pTAa
OOPの歴史も30年以上あるのでさすがに本質的に不要なものが
淘汰されずに生き残っているってことはないよ。

インターフェイス不要論とか抽象クラス不要論とか
staticおじさん級に幼稚で非生産的な書生論w

もっとマシなことに時間使った方がいいよ
442デフォルトの名無しさん (ワッチョイ a27c-On6t)
2021/04/27(火) 19:07:16.33ID:pi+NfSuo0
>>440
実装しなくても良いのではなく、interfaceそのものには実装は書けない。必要なメソッドを定義するだけ
良くある例としてIDisposableがあるけど
using(var obj = new TestClass()) {
}
みたいな使い方したければ上記のTestClassにDispose()メソッドを用意してねって事で
class TestClass : IDisposable
{
public void Dispose() {何らかの終了処理}
}
みたいに実装を用意しないとそもそもエラーになる
443デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/27(火) 19:27:42.16ID:H51IIUOO0
>>434
普通の継承でも使えたね。すまん
具象クラス継承の適切なケースがわからんので考えなくなって、出来るって事も忘れてた
444デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/27(火) 19:49:20.62ID:MoRpu0yA0
>>441
ハイ、じゃあメリットは?
445デフォルトの名無しさん (ラクッペペ MM34-/WW/)
2021/04/27(火) 19:53:09.03ID:zk58yDApM
>>440
単一継承しか許されないクラスと違い多重継承が許されるインタフェースでは、実体を実装するとC++同様に基底メンバの衝突の問題が発生する
この問題を回避するために実装を派生先に委ねてしまうことにしてインタフェース内では実装は禁止されている
446デフォルトの名無しさん (ワッチョイ 56bd-n2H/)
2021/04/27(火) 20:06:45.34ID:3YkNPMA00
教えて下さい。VBから書き換えて勉強してます。
フォーム1と2があり、それぞれTextBoxが無数にあります。フォーム1→2まで入力をして最後入力した情報を保存したいのですが、どういった形式、方法で保存するのが望ましいですか?
VBは区切り文字を入れ、datファイル1つに2行で書き込んでます。再度呼び出す際にsplitでそれぞれのTextBoxに入れてます。
が、何かのタイミングでTextBoxが増減したとか面倒そうなんですが一般的にはどんな感じでしてるんですかね?
447デフォルトの名無しさん (ワッチョイ 7cda-ZDuA)
2021/04/27(火) 20:21:32.78ID:cvesXM3a0
辞書を作りたまえ

DDXって死語け?
448デフォルトの名無しさん (ワッチョイ 92da-eOAD)
2021/04/27(火) 21:09:28.77ID:3TA75SVH0
json
449デフォルトの名無しさん (ワッチョイ ae06-3cD6)
2021/04/27(火) 21:15:25.28ID:YZq/AI+30
自分で使ったことはないけどinterfaceはデフォルト実装持てるようになってなかったっけ?
450デフォルトの名無しさん (ワッチョイ 9ebd-1ACq)
2021/04/27(火) 21:17:18.55ID:AfIT+tVg0
>>449
なってるけどあんま使いたくないな
451デフォルトの名無しさん (ワッチョイ 66ad-KKaU)
2021/04/28(水) 01:26:19.18ID:C+xRRq0o0
まあどうしてもバイナリ互換性を崩したくない時に使うもんだよね
452デフォルトの名無しさん (ワッチョイ c0b5-8KU9)
2021/04/28(水) 02:42:21.15ID:2iApvDDg0
バイナリ互換性って何?
453デフォルトの名無しさん (ワッチョイ 66ad-KKaU)
2021/04/28(水) 03:00:12.55ID:C+xRRq0o0
あるdll(A)にインターフェイスが定義されており、別のdll(B)にその実装があった場合、Aを修正してもBに影響がなければバイナリ互換性があると言う。
たとえばAのインターフェイスに実装を持たないメンバーを追加するとBはコンパイルエラーになってしまうので互換性が崩れる。
Aにメンバーを足す際にデフォルトの実装を書いてあげれば、Bはコンパイルエラーにならない。

破壊的変更にならないようにフレームワークやライブラリを改修したいってのがインターフェイスのデフォルト実装の動機。
454デフォルトの名無しさん (ワッチョイ d863-x7P5)
2021/04/28(水) 03:09:37.20ID:QdyWhJOJ0
まあCOMみたいにナントカ2とかナントカ3とか増えるのもまたアレ感があるんで
455デフォルトの名無しさん (ワッチョイ 3702-6Fjd)
2021/04/28(水) 06:00:02.52ID:Nr1kHF1d0
"IsDisabled": false,
"Name": "Tap",
"Arguments": [
"Keys.O",
"112",
"12600",
"True"


これって、キーボードのOを112ms間押して、12600ms離すって意味だよね?
約24時間、キーボードのPを押す時間も離す時間もランダム(10~10000msの範囲で)にしたい場合どう入力したらいいの?
あと24時間以内にとある画像を認識した場合、認識したその都度W、S、A、Fを押すという時どう入力したらいいの?
456デフォルトの名無しさん (ワッチョイ d0f2-2tiM)
2021/04/28(水) 11:10:31.63ID:905Z8E/r0
それ何の言語なの?
457デフォルトの名無しさん (ワッチョイ 29ad-iXMK)
2021/04/28(水) 11:34:29.86ID:o3+T5GoG0
json
458デフォルトの名無しさん (ワッチョイ b701-J6CO)
2021/04/28(水) 12:01:20.73ID:k6d6iGQO0
アップキャストを行うと何が嬉しいのでしょう?
インスタンス化は普通
クラスA a = new クラスA();
なのに
クラスB b = new クラスA();
ってする意味です。入れれるのと使えるメソッドはイメージ通りですが、使うタイミングが不明です。
459デフォルトの名無しさん (ワッチョイ f82d-T6Cp)
2021/04/28(水) 12:12:07.08ID:CT/VgEdf0
>>458
親クラスがクラスBで、クラスBを継承したのがクラスAってことなんだろうけど、
クラスBを継承したクラスCを追加して時に、クラスAとクラスCを同じように扱いたい時に使う。
460デフォルトの名無しさん (ワッチョイ 5368-WHtW)
2021/04/28(水) 15:39:41.26ID:z2mXZLfz0
>>458
foreachでまとめて処理するのに使ったかな。
461デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/28(水) 16:32:07.21ID:snAX0stPa
>>458
あえて言えばサブクラスで隠蔽(new)を使ってるメソッドやプロパティがあると、
サブクラスのインスタンスをスーパークラスの変数に入れた場合に
動作が変わってくるんだけど、恐らくそういう目的でそれをやるケースは
ほとんどないんじゃないかな。

ほとんどの場合、それは積極的な意味を持たないと思う。
462デフォルトの名無しさん (ワッチョイ 0662-miHF)
2021/04/28(水) 16:58:01.56ID:MNdo4yxk0
>>458
List<Human> list;
に派生したクラスとかを入れたい時に使う
463デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/28(水) 17:52:40.77ID:snAX0stPa
>>462
大阪人「は」人間なので、そんなことは不要。

class Human { }
class Osakan : Human { }
....

var o = new Osakan();
var hs = new List<Human>();
hs.Add(o);
464デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/28(水) 17:59:49.82ID:1SQ+syPV0
アップキャストってそれ自体を目的にするものなのかな?
意識せずに使ってるだけで、見方を変えればアップキャストが目的とも言えるのかもだが
465デフォルトの名無しさん (ワッチョイ 0662-miHF)
2021/04/28(水) 19:54:14.62ID:MNdo4yxk0
>>463
それ暗黙的にアップキャストをしてるから不要ではないよね?
質問が、アップキャストの嬉しさについてだから例としては適切だと思うけど

アップキャストとしての嬉しさではなく、
クラスB b = new クラスA();という変数を作る意味があるのかって話なら、大抵は暗黙的なキャストてどうにかなるからやる意味はない
466デフォルトの名無しさん (ワッチョイ 7d2d-eUQK)
2021/04/28(水) 20:13:50.67ID:VZRYywec0
var s = new LinkedList<char>();
_ = Console.ReadLine().Select(x => s.AddLast(x));

これでsに標準入力が入る気がするのですが実際何も入りません
どうすればいいんでしょうか?
467デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/28(水) 20:44:33.40ID:snAX0stPa
ポカミスだと思うけど、Selectはシーケンスを返すだけだよね。
Selectが実行された時点ではstringの中のcharを列挙したりしない。
468デフォルトの名無しさん (ワッチョイ 7d2d-eUQK)
2021/04/28(水) 20:50:43.89ID:VZRYywec0
>>467
var s = new LinkedList<char>();
_ = Console.ReadLine().Select(x => s.AddLast(x)).Count();

こうですね...
遅延評価にハマりました
ありがとうございました
469デフォルトの名無しさん (ワッチョイ 7d2d-eUQK)
2021/04/28(水) 21:04:25.17ID:VZRYywec0
var s = new LinkedList<char>(Console.ReadLine());
というかこれで良かったみたい
470デフォルトの名無しさん (ワッチョイ f82d-T6Cp)
2021/04/28(水) 21:35:36.25ID:CT/VgEdf0
Select(x => s.AddLast(x))
はやっちゃ駄目だろう
471デフォルトの名無しさん (ワッチョイ 38e6-4uvq)
2021/04/28(水) 21:38:57.70ID:ohiKXwgS0
ToLinkedListを実装するのが絶対的正義
472デフォルトの名無しさん (ワッチョイ c0b5-8KU9)
2021/04/28(水) 21:54:47.35ID:2iApvDDg0
>>457
このスレってJSONを推してる人むっちゃ多いんだけど、CSVと比べて何がいいの?
CSVに出来なくてJSONに出来ることってあるの?
473デフォルトの名無しさん (ワントンキン MM3b-D+2G)
2021/04/28(水) 22:01:00.21ID:N4TU29msM
階層構造を持たせられる
項目の追加が楽
シリアライザが充実している
方言の多いCSVと違い、仕様が統一されている
474デフォルトの名無しさん (ラクッペペ MM34-x7P5)
2021/04/28(水) 22:13:27.34ID:RJLrCSIQM
CSVの方がよさそうならCSVって回答するけど
このスレくらいの質問者だと背景や用途を喋らないので最大公約数的回答になる
475デフォルトの名無しさん (ワッチョイ 9b5f-On6t)
2021/04/28(水) 22:18:25.06ID:SKK3EpB30
俺はjsonの方が好きだからjsonを使う
476デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/28(水) 22:33:03.67ID:roTNJzpQa
CSVとかトラブル製造機じゃん
477デフォルトの名無しさん (ワッチョイ c0b5-8KU9)
2021/04/28(水) 22:43:14.57ID:2iApvDDg0
>>473-476
ありがとうございます
なるほど、XMLでも階層構造は持たせられるけど仰々しいですよね
ああ、あれをシリアライザって呼ぶんですね
昔、一回JavaだかでJSON読んでみて満足した記憶があります
GW明けの使い捨てのスクリプトではJSONで書いて読んでみます
478デフォルトの名無しさん (ワッチョイ 87e3-On6t)
2021/04/29(木) 00:09:54.46ID:uAu0lWj/0
CSVは方言多すぎてそこらのパーサー使うの怖いわ
479デフォルトの名無しさん (テテンテンテン MM34-SWap)
2021/04/29(木) 04:38:08.16ID:mJShgxJuM
unityでc#ぼちぼち覚えてきたけどc#って何ができるんや
480デフォルトの名無しさん (スププ Sd94-WHtW)
2021/04/29(木) 05:53:27.68ID:Pwf8A7W+d
>>479
何でも出来るさ。ライブラリが揃えば。
481デフォルトの名無しさん (ワッチョイ 972c-uCoU)
2021/04/29(木) 05:59:02.89ID:RErNGDPY0
[ {"a" : "1"}, {"b" : "x"} ]

a列のみとか、b列のみしかないJSON が、CSV では、

a,b
1,
,x
482デフォルトの名無しさん (ブーイモ MM5e-i9BS)
2021/04/29(木) 09:03:47.11ID:lalb0v+EM
>>481
わからん
483デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 09:48:46.58ID:IBkpf/CX0
>>477
階層を持つのは後の欠点にもなるからね
結局はCSV形式で持ってた方がいずれ近いうちなるデータベース対応時に楽だよ
484デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/29(木) 09:55:18.98ID:gug0J2oaa
楽じゃない
485デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 10:10:10.40ID:IBkpf/CX0
>>484
なんでだよ
階層データじゃデータベース入んねぇだろ
486デフォルトの名無しさん (スププ Sd70-5v27)
2021/04/29(木) 10:27:55.67ID:EFYWvXghd
楽じゃないな。
きちんとした形してるなら階層持ってるデータのほうがマシ。
正規化するよね?常識的に考えて。
487デフォルトの名無しさん (ワッチョイ 6cac-Tv8Z)
2021/04/29(木) 10:28:53.11ID:qu9Hv39D0
jsonはそのままクラスに持たせられるから便利
あとパースできない読めないってことが少ない
xmlもcsvと比較するとjsonに近い

csvはそのまま行と列のデータだからDBにいれるだけなら悪くないしそれならサイズ的に軽い
改行ダブルクォーテーションとかあと上で言う方言とかあるから、なかなかトラブルを消しきれないこともある

Excelでもよみたいとか要件があるならcsvかな
488デフォルトの名無しさん (スププ Sd70-5v27)
2021/04/29(木) 10:37:53.58ID:EFYWvXghd
>>487
エクセルで読ませたら先頭のゼロ消すやつとか日付のフォーマット変えるやつとか、ハイフンがついた数字を日付にするやつが現れがちなのですごく嫌かな。
489デフォルトの名無しさん (ワッチョイ 9b02-wQF1)
2021/04/29(木) 10:49:23.57ID:PVZP3gNe0
目的の違うデータ形式を個々人で違う基準で評価してあーだこーだ言っても仕方ないのと違うか。

ただ。
json 形式の意味があるのか分からない深い階層を持つデータに対応するクラス作ってたときは本気でイヤになったけど。w
きちんと正規化して意味のない階層だとかを排除してくれるなら扱いやすい方式だとは思う。 < json
490デフォルトの名無しさん (ワッチョイ c04f-3cD6)
2021/04/29(木) 11:15:55.38ID:Ta5ufSky0
csvのrow/columnをjsonで表現できるが逆はできないからcsv⊂jsonだけど
大量のデータを扱うにはjsonは冗長だよな。
491デフォルトの名無しさん (ワッチョイ 92da-eOAD)
2021/04/29(木) 11:30:58.28ID:b5j8CNbM0
jsonで大量データだと、容量削減のために要素名を変数1文字とかやりだすしな
492デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/29(木) 11:40:51.69ID:gug0J2oaa
CSVよりJSON Linesですわな
493デフォルトの名無しさん (テテンテンテン MM34-D+2G)
2021/04/29(木) 12:43:50.51ID:Gvkp+FCpM
>>491
そんなことするくらいなら圧縮するわ
冗長だから圧縮した状態同士での比較ならCSVと変わらん
494デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 12:52:51.92ID:IBkpf/CX0
>>493
デカイ階層データで気になるのは処理速度だから圧縮されると余計時間かかる
495デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/29(木) 13:06:57.09ID:C0wDcO7Sa
シリアル化方法(CSVをシリアル化とは普通は呼ばない気がするけど便宜上)を選択する上での
評価基準としては、

(1) 可搬性
(2) 対応するデータ構造の自由度
(3) 変換速度
(4) バージョン耐性
(5) テキストとしての可読性(これが重要なケースはほとんどないと思うが...)

こんなとこかね。
CSVで評価できるのは(1)ぐらいなので積極的に使う理由はないね当たり前だけど
496デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/29(木) 13:39:52.49ID:gug0J2oaa
エクセルおじさん用のデータ交換フォーマットと割り切ったほうがいい
497デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 13:47:05.06ID:MqlSo6MR0
>>494
展開時間かかる代わりにアクセス時間が相当減るから、変わらんか早くなるよ。
498デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/29(木) 14:36:43.78ID:t8Qsv63f0
用途次第だけどjsonのままDBにつっこめばいいじゃん()
499デフォルトの名無しさん (テテンテンテン MM34-veNy)
2021/04/29(木) 14:44:24.17ID:hnM2dBp9M
>>497
そんなのCPUとI/O次第としか言えん
500デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 15:11:48.04ID:IBkpf/CX0
>>498
え?どうやって?
501デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 15:19:29.90ID:IBkpf/CX0
結局、データベースに入れる運命なのに今の時代に階層データにするやつなんか頭悪いんだよ
502デフォルトの名無しさん (ラクッペペ MM34-/WW/)
2021/04/29(木) 15:28:12.72ID:zh8QYWZnM
いまどきはどんなDBMSでもjson形式のデータインポートくらい出来るだろ
LINQでクエリ走らせるだけだろ
503デフォルトの名無しさん (ワッチョイ c04f-3cD6)
2021/04/29(木) 15:32:29.05ID:Ta5ufSky0
>>496
じゃあjsonはテキストエディタおじさん用か。
504デフォルトの名無しさん (スププ Sd70-5v27)
2021/04/29(木) 16:10:49.54ID:1OxYHKr7d
最近のRDBMSだとjson型とかあったりするからな。
>>499
ライトはともかくリードは2021年だと殆どの場合で早いぞ。
505デフォルトの名無しさん (テテンテンテン MM34-veNy)
2021/04/29(木) 16:16:56.06ID:4wXFV0waM
>>504
いや、リードが速きゃ圧縮してなくても速いわけだが…
506デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/29(木) 16:48:57.18ID:t8Qsv63f0
>>500
もう言われてたけどjson型サポートされてるRDBMSもある。触ったことないのでパフォーマンスは知らぬ
mysql,PostgreSQLはカラムの型としてサポート済で、oracleとsqlserverは文字列型で格納して制約や関数でjsonとして扱う感じなのかな?
PostgreSQLだとjsonのキーに対してもインデックス作れるんだね。便利そう
507デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 17:02:11.90ID:IBkpf/CX0
激レアケースを例にあげて自分の失策を正当化するのは良くないぞ
今の時代にデータベースに入れにくいデータ構造にしたのは明らかにバカ
それがわからないならお前らも結局時代に対応できないんじゃんwぷw
508デフォルトの名無しさん (ワッチョイ d863-x7P5)
2021/04/29(木) 18:39:45.09ID:Yt1JhF/90
1ビット脳の生活って楽しそうだよね
509デフォルトの名無しさん (ワッチョイ bf87-/Q2x)
2021/04/29(木) 18:44:26.59ID:pn1fVmji0
>>507
rdbに突っ込むの前提ならcsvでも正規化されたテーブルが対象なんだから入れやすさなんかだけでは語れない。csvのデータは概ね正規化されたデータの結合と見れるので。
正規化·データの関連性を考えればjson·xmlの方が有利まである。
結局用途次第だと思うよ
510デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 19:28:20.05ID:MqlSo6MR0
>>505
10MBのデータ読んでメモリに乗せるのと、100KBに収まったデータを展開してメモリに乗せるの、だいたい後者のほうが早いぞ。
511デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 19:30:06.10ID:IBkpf/CX0
>>509
は?じゃあjsonそのまま入れてみろよ
512デフォルトの名無しさん (アウアウエー Sa6a-hbXt)
2021/04/29(木) 19:32:01.32ID:gug0J2oaa
CSVはインポートで有利とか言ってる人が居るけど
ほとんどの場合インポート用CSVに整形する手間があるからトータルで損してるんだよね
513デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 19:36:37.76ID:IBkpf/CX0
>>509
そうやって実際にはできないことできるってなんで言っちゃうかな?
514デフォルトの名無しさん (ワッチョイ 737b-h9tu)
2021/04/29(木) 19:37:51.57ID:bhMl+eBD0
いつまでスレ違い無意味なマウント合戦続ける気?
515デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 19:45:35.14ID:MqlSo6MR0
>>511
MSSQLならJSONそのままインポートできるだろ。
https://docs.microsoft.com/ja-jp/sql/relational-databases/json/import-json-documents-into-sql-server?view=sql-server-ver15#parse-json-documents-into-rows-and-columns
516デフォルトの名無しさん (ワントンキン MMb8-D+2G)
2021/04/29(木) 19:47:56.90ID:h5Kbt4/jM
>>512
それはあるな
一応データエンジニア名乗ってて仕事でいろんなCSVをロードしてきたけど、貰ってきたCSVをそのまま取り込めるのは稀だわ
517デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/29(木) 19:48:06.90ID:4VO5KYJUa
交通整理マンが出てこない時は(以下略

>>510
どんな圧縮率w
518デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 19:49:52.48ID:IBkpf/CX0
>>515
そんな誰も使ってない上に階層構造のjsonに使えるかどうかもわからん上に
さらに絶対仕事で使えないもの持ってきて必死だなw
採用実績あるの?ソレw
519デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 19:50:03.03ID:MqlSo6MR0
>>517
カラム名が長いなって思うようなデータだと、それぐらいの圧縮率になるぞ。
おまえやってみても無いだろ。
520デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 19:50:38.18ID:MqlSo6MR0
>>518
2016以降できるし、普通に使う。
521デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 19:52:56.86ID:IBkpf/CX0
>>520
絶対嘘だろw
522デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/29(木) 19:53:21.85ID:4VO5KYJUa
>>512>>516
英語が世界共通語として機能しているのは
英語が優れた言語だからではない。

可搬性と技術としての優位性は完全に別問題。
523デフォルトの名無しさん (ワッチョイ bf87-/Q2x)
2021/04/29(木) 19:53:32.90ID:pn1fVmji0
まぁすれ違いなんで最後で
>>513
そのままなんか入れないよ。
csvも正規化されたテーブルに分解·展開して入れる
jsonも正規化されたテーブルに分解·展開して入れる
データ構造の形で関連性が分かるのでこの点ではjsonのほうが有利
これはわかるでしょ?
まぁxml·jsonは言われている通りにdbmsがサポートしている場合があるから、その場合はそのまま入れればいいけども
524デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 19:53:48.66ID:MqlSo6MR0
>>521
なんで嘘つかないとならんのだ。

知らなかった事は、勉強になった、で済ませた方がいいんじゃないか?
525デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 19:55:35.85ID:IBkpf/CX0
>>523
じゃあ、できないじゃん

>>524
やってないってさw
嘘つきくん
526デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 20:00:29.06ID:MqlSo6MR0
>>525
俺は、やってるよ。
jqで突っ込む事もあるけど。
jsonで持ってるとnullと空文字の区別がついたりそこそこ便利なんよ。
527デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 20:01:40.70ID:IBkpf/CX0
じゃあ、jsonぶん投げて入れてみろよ
どこのテーブルのどのフィールドにどうやって入るかもわからんけどw
階層になってるデータをなw

なんでできないこと言っちゃうかなw
528デフォルトの名無しさん (ワッチョイ bcb0-On6t)
2021/04/29(木) 20:05:16.52ID:t8Qsv63f0
時空が歪んで20年くらい前の環境からレスしてるんだろ
火曜日のインターフェース不要さんと同じ人っぽいし
529デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 20:05:41.39ID:MqlSo6MR0
>>527
対応を設定する方法はこれな。
https://docs.microsoft.com/ja-jp/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server?view=sql-server-ver15#option-2---openjson-output-with-an-explicit-structure
530デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 20:09:44.80ID:IBkpf/CX0
データベース使うとインターフェースも出番ないよね
そういうテーブルないし
531デフォルトの名無しさん (ワッチョイ d863-x7P5)
2021/04/29(木) 20:11:38.28ID:Yt1JhF/90
急加速してて笑
532デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 20:12:58.48ID:MqlSo6MR0
データとしての互換性は全く無いが、同様にinserted,updated,deleted列を持っているデータ、なんかはインターフェイス作っても良いんじゃないの?
533デフォルトの名無しさん (テテンテンテン MM34-veNy)
2021/04/29(木) 20:38:56.88ID:CPrTMOXFM
>>510
だいたいって言われてもねぇw
圧縮ソフトによるけど1/100に圧縮できるソフトだとそれなりにCPU負荷もかかるだろうしね
534デフォルトの名無しさん (ワッチョイ ce01-lEFC)
2021/04/29(木) 20:50:11.97ID:qknGBKNj0
また圧縮沼に😅
535デフォルトの名無しさん (テテンテンテン MM34-veNy)
2021/04/29(木) 20:51:47.22ID:nwdNubv1M
>>527
> どこのテーブルのどのフィールドにどうやって入るかもわからんけどw
> 階層になってるデータをなw
マジで知らないなら黙ってなよ…
1つのフィールドにjson形式でそのまま(内部的にはデシリアライズしてるだろうけど)入るんだよ
jsonをサポートしてるrdbmsはjsonの階層も含めて検索などができる
ただ、rdbmsによるだろうけど制約かけられないとかインデックス効かないとか色々制限あるので使い所はよく考えた方がいい
536デフォルトの名無しさん (ワッチョイ 8ea7-BCeV)
2021/04/29(木) 20:54:18.51ID:IBkpf/CX0
あっそう
537デフォルトの名無しさん (ワッチョイ 9b02-wQF1)
2021/04/29(木) 21:09:28.12ID:PVZP3gNe0
あっそう w
538デフォルトの名無しさん (ワッチョイ ef24-On6t)
2021/04/29(木) 21:10:59.33ID:JLw8VMIz0
流れあんま見てないけど何MBにもなるjson扱うって結構あり得る事なの?
539デフォルトの名無しさん (ワッチョイ f0ad-5v27)
2021/04/29(木) 21:22:08.52ID:MqlSo6MR0
>>538
あるよ。
ブラウザで3dモデル表示するときに使う形式にglTFってのあるんだけど、もろにデカいJSON。
540デフォルトの名無しさん (ワッチョイ 0e68-6Fjd)
2021/04/29(木) 23:20:12.08ID:QUExeogh0
プログラミングでファイル入出力を早くするにはやっぱり
良いGPUが必要なんでしょうか?
C#とGPUの関係を教えてください。
541デフォルトの名無しさん (ワッチョイ 0e68-6Fjd)
2021/04/29(木) 23:21:16.85ID:QUExeogh0
ちなみにGPUは欲しいですが3Dのゲームはしません(ゲーミングPCを購入予定ですが…)
プログラミングの良い環境を整えたいのでお勧めのがあれば教えてほしい
言語はもちろんC#です。
542デフォルトの名無しさん (テテンテンテン MM34-D+2G)
2021/04/29(木) 23:27:45.10ID:Gvkp+FCpM
そんなレベルならMac買っとくのが無難
なんでC#なのか知らないけどC#を選んだのもその調子じゃどうせまともな理由じゃないだろう
543デフォルトの名無しさん (ワッチョイ 9b5f-On6t)
2021/04/29(木) 23:30:51.76ID:PtPwSG5y0
ファイル入出力はGPU関係ない
ストレージに左右される
HDDよりもSSDの方が速い

何のプログラム作るか知らないけど
WinFormsでアプリを作るならGPUは関係ない
WPFで作るならアプリの描画にGPUが使われる
544デフォルトの名無しさん (アウアウウー Sa83-Im0W)
2021/04/29(木) 23:40:25.95ID:DcwAc3waa
GPGPUってなんか暗号通貨のマイニング以外で聞かなくなっちゃた印象があるけど
C#から簡単に使えるライブラリとかあったりするん?
545デフォルトの名無しさん (テテンテンテン MM34-veNy)
2021/04/29(木) 23:42:47.01ID:Eeg/SlYmM
>>538
あるだろうね
サーバーもクライアントもDB持ってるけどその間のやり取りはjsonでとか普通にあるから
ストレージとしての用途ならsqliteでもいいけど伝送手順として使われることも多いので
546デフォルトの名無しさん (ワッチョイ 0e68-6Fjd)
2021/04/29(木) 23:59:30.38ID:QUExeogh0
>>543
大学の課題でテキストを読み込んで文字列を探すプログラムを作ってます。
文字列を読み込むスピードをほぼ0秒にすると実行時間が短くてすむので
良いGPUはないかと思ってるんですがね。。。
547デフォルトの名無しさん (ワッチョイ 0e68-6Fjd)
2021/04/29(木) 23:59:59.65ID:QUExeogh0
ちな読み込むファイルの容量は100MB程度です。
548デフォルトの名無しさん (ワッチョイ 87b0-OedE)
2021/04/30(金) 00:14:03.55ID:ZjT67Y+80
折角回答してくれてる内容の1行目を声に出して10回読め
549デフォルトの名無しさん (ワッチョイ 075f-OedE)
2021/04/30(金) 00:15:07.47ID:wixFV2dt0
>>546
GPU関係ないって書いてあるじゃん
重要なのはストレージとCPU
速ければ早いほどいいというだけ
550デフォルトの名無しさん (ワッチョイ 6768-TNk6)
2021/04/30(金) 00:19:41.24ID:f4OC/lzG0
ありがとうございます。
どんな高性能なPCでも時間は0秒にはならないってことですね?
俄かに信じがたいですが、早くなる方法ないでしょうか。
551デフォルトの名無しさん (ワッチョイ 075f-OedE)
2021/04/30(金) 00:26:18.54ID:wixFV2dt0
ジューダス版のJohnny B Goodええで
552デフォルトの名無しさん (ワッチョイ 075f-OedE)
2021/04/30(金) 00:26:29.50ID:wixFV2dt0
ごめんw
553デフォルトの名無しさん (ワッチョイ 0702-7a8P)
2021/04/30(金) 00:28:43.93ID:IafryiiR0
信じられないなら信じられる別の場所で聞けばいいんじゃないの。
554デフォルトの名無しさん (ワッチョイ 87b0-OedE)
2021/04/30(金) 00:35:48.48ID:ZjT67Y+80
> どんな高性能なPCでも時間は0秒にはならないってことですね?
C#全く関係ないスレチ

あと元の質問自体が「サッカーで速く走るにはいいスパイクが必要なんでしょうか。シュートとスパイクの関係を教えてください」みたいな謎文脈なので、
こちらはそっちの脳内でどんな解釈されてるのか、まるで見当が付かない
555デフォルトの名無しさん (ワッチョイ df52-FRJu)
2021/04/30(金) 00:45:47.98ID:FVXE5M810
>>550
そういう根拠のない思い込みでこうなるはずなんて思考をしてたらプログラミングなんて理解できなくて詰むから、早いうちに矯正しろよ
まあ根っから性分だろうからもう手遅れだろうけど
556デフォルトの名無しさん (ワッチョイ df79-2I0v)
2021/04/30(金) 00:55:52.99ID:1FoMz0PJ0
今jsonの話で忙しいのに話の腰を折る荒らしにしか見えない
557デフォルトの名無しさん (ワッチョイ 7f63-3Eyb)
2021/04/30(金) 01:50:11.84ID:OqlMgVmX0
なんだそれジョークか?
558デフォルトの名無しさん (スププ Sdff-FvP6)
2021/04/30(金) 06:01:15.69ID:6G/EU7oZd
大学の課題でスペックの条件が必要なの?
無駄のないロジックを書くとか、そういうのが目標だったりしないのかな。
なんだったかな。C#だったらライブラリのメソッド一発で終わってしまう話だよ。
スペックが必要ならハードディスクじゃなくてSDとかの電子メモリにするだけ。
559デフォルトの名無しさん (テテンテンテン MM8f-m/Zw)
2021/04/30(金) 06:33:18.17ID:9CWg3MHlM
なんで相手するかなぁ…
560デフォルトの名無しさん (ワッチョイ e701-mFDB)
2021/04/30(金) 07:21:05.92ID:c/yKDnhO0
うっわ
ファイル名変更ってgit上で削除→追加になるのかよ
なんでこんな仕様なんだ面倒くさい
561デフォルトの名無しさん (エアペラ SDcb-R7/G)
2021/04/30(金) 08:20:45.76ID:/49R4AUmD
大学生が処理時間を0秒にできると考えてることが恐怖
562デフォルトの名無しさん (ワッチョイ dfad-XhmA)
2021/04/30(金) 08:31:59.95ID:hl1Q3MIe0
>>560
git mv
563デフォルトの名無しさん (ワッチョイ e701-mFDB)
2021/04/30(金) 08:49:07.02ID:c/yKDnhO0
すまんVisualStudioスレじゃなかったな
564デフォルトの名無しさん (テテンテンテン MM8f-m/Zw)
2021/04/30(金) 09:24:19.33ID:QS3EuJUrM
まあgitはC#プログラマーでも使ってる人多いし、意味不明な大学の課題よりマシ
565デフォルトの名無しさん (ワッチョイ 8733-jDx3)
2021/04/30(金) 12:19:19.36ID:2B0L3g8/0
c# でもファイル名変更はFile.Moveメソッドだし、考え方は同じだと思うがな。
566デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/04/30(金) 12:37:03.29ID:clFaH4DRM
>>561
中2ぐらいなら許される?
567デフォルトの名無しさん (ワッチョイ 0702-7a8P)
2021/04/30(金) 13:53:37.33ID:IafryiiR0
真面目な話、設問の但し書きの部分を真に受けただけなんでは、とか思うのだけど。
「ただしファイルI/O などの処理時間は無視できる物とする」とかの。

大学の課題に取り組むのに私物のゲーミングPC を用意するって時点で意味が不明だもの。
私物の環境で設問をクリアできてもそれを持ち込むことなんて出来ないだろうし。
どこかを取り違えてたんだろ。
568デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/04/30(金) 14:02:57.22ID:clFaH4DRM
並列処理においてボトルネックになりやすいのがI/O
そこを改善しようと試みるのは良い
ただしこの場合C#とは関係ない話なのでスレタイすら読めない脳足らずという事になる
569デフォルトの名無しさん (テテンテンテン MM8f-m/Zw)
2021/04/30(金) 15:01:33.00ID:Fe1MTD+iM
いつまでその話題やるの?
570デフォルトの名無しさん (ワッチョイ a72c-uN1F)
2021/04/30(金) 17:03:31.63ID:OOQWIiqB0
最近はサーバーで、データベースのCPU が不足する事も多い
571デフォルトの名無しさん (ワッチョイ 0743-eGTG)
2021/04/30(金) 21:55:35.01ID:HehJ8LLK0
C#とJAVAを併用してるけど、C#の解説者のほうが深く理解していて簡潔に解説してるね。
JAVAはコピペで説明していて、動かないことも多々ある。採用人口が多いのに不思議
androidの仕様変更が原因のときもあるけど、C#は洗練されて理解しやすい。
つまりC#を扱う人はレベルが高いと感じる
572デフォルトの名無しさん (ワッチョイ 2701-1Vh1)
2021/04/30(金) 22:21:45.51ID:kkXqBkDB0
Javaは裾野が広い分ゴミとの遭遇率も高いのかと
573デフォルトの名無しさん (ワッチョイ 2701-SFYt)
2021/04/30(金) 23:53:02.12ID:fJ1TA+qd0
/// 問題点 ///
処理をどのクラスに持たせるのかの指標がわかりません。。。
同時にクラスの分ける粒度感もわかりません。。。

/// 質問 ///
どのクラスにどの処理を持たせれば良いのでしょう?
そもそも何をクラスにしたらいいのでしょう?

/// 具体例 ///
前者でいえば例えばドキュメントクラスとプリンタークラスがあって印刷するメソッドはプリンターに持たせるのかドキュメントに持たせるのか決めきれないということです。
後者でいえば例えばキャラクタークラスがあってそのクラスはHPクラスやMPクラスを作りインスタンスを持つべきかそれともただ単に値型のフィールドとして持つのかどちらが良いのか判断しきれないです。
574デフォルトの名無しさん (ワッチョイ 8768-FvP6)
2021/05/01(土) 00:34:45.81ID:vLfObWug0
>>573
前者の例は現実と一緒じゃダメなん?
印刷の機能は書類じゃなくてプリンターの仕事。

後者はどうなんだろう。
自分なら、値型の方が代入比較が簡単で早そうだから、ギリギリまで何でも値型で。
でも、参照型の方がクラス継承とか参照渡しとか出来るから、その時の都合で使う。
機能と性能、仕様と規約、自分の主義で決めたらいいかと。
575デフォルトの名無しさん (ワッチョイ 7fa7-wijr)
2021/05/01(土) 00:35:58.96ID:u8jqB+2A0
>>573
お答えしましょう
どこに書いても動きます
好きなところでいいですよ
576デフォルトの名無しさん (ワッチョイ 87b0-OedE)
2021/05/01(土) 00:37:52.50ID:GAZiMPha0
C#関係ないやね
折角なので答えると正解はない問いだと思う。みんながベストを探してる
つくるソフトや環境で適切なモノを周りと相談して作り上げるしかない

とりあえずの指標という意味であればDDDについて調べると具体例の質問については答えが得られるかもしれない
特に後半はvalueObjectとEntityと言われるもの
ただしこれも小規模のソフトで取り入れても冗長になるだけという問題もある
577デフォルトの名無しさん (ワッチョイ df01-i6Oo)
2021/05/01(土) 00:45:41.04ID:ToMJKZXq0
>>573
1. どういう選択肢があるのかを把握できる力
2. それぞれの選択肢のメリットとデメリットを理解する力
3. 用途に対してより適切な選択肢はどれなのかを判断する力

あらゆる設計判断には上の3つの力が必要だが土台となるのは1と2の力
それらの力をつけるためには考えられる複数の選択肢をそれぞれ簡易実装してみて比較検討するのが一番
失敗を数多く繰り返すのが上達の近道

どのクラスにどの処理をもたせるのがいいのかは用途次第でケースバイケース
one size fits allな答えはないのでやる前からそれを求めていても進歩しない
578デフォルトの名無しさん (アウアウエー Sa9f-XmiE)
2021/05/01(土) 00:47:18.48ID:F0kMZy38a
どっちでもいいからまず作れ
なんかへんだなと思ったらリファクタ
579デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/01(土) 00:54:13.87ID:CrHqAudLa
>>573
そういうのはやる前からいろいろ考えるより
「失敗したらやり直せばいい」と考えてとにかくいろいろコードを
書いてみることが大事。

老人より子供の方がスマホなんかの操作を覚えるのが早いけど、
あれと同じだね。

アントニオ猪木のポエムのノリでw
580デフォルトの名無しさん (ワッチョイ 2701-SFYt)
2021/05/01(土) 01:21:16.01ID:5wEuRr/u0
574から579の方々
ありがとうございます。
とりあえずやってみるというアドバイスが多かったので実装から着手していきたいと思います。

この質問の背景としてはクラス図やUMLでの設計をしてC#コードに落とし込もうとしてクラス図がごちゃごちゃし出してコーディングまで行けなかったという経緯です。
(OOPの話でc#そのものの質問でなかったのは申し訳ない。とはいえc#初心者の人でオブジェクト指向が初めての人は少なくないはずなのでやはりこういう質問になりがちな気もする)

様々な意見感謝です☺
参考させて頂きます。
581デフォルトの名無しさん (ワッチョイ 6768-TNk6)
2021/05/01(土) 10:59:09.68ID:BCm84eaD0
この前質問したバカですが(一応国公立)
何故レースゲームは膨大な建物や道路データをリアルタイムに
読み込めているんでしょうか?どういう仕組みなんですか?
例えば1Gのテキストファイルを読み込もうとすると実験しましたが、10秒かかってしまいます。
テキストファイルではなく、グラフィックデータを瞬時に読み込めるのはなぜですか?
C#より速い言語なんでしょうか?
582デフォルトの名無しさん (ワッチョイ 7f7b-EJSk)
2021/05/01(土) 11:07:42.89ID:bkjJ/QRj0
>>581
streamとして必要な分だけ読み込む、圧縮したデータを読み込んで展開する、あらかじめパーツを指定しその配置だけ読み込むなどなど
最初以外C#は関係ないから該当する板でやってくれ
ゲ製作技術
https://mevius.5ch.net/gamedev/
583デフォルトの名無しさん (スププ Sdff-FvP6)
2021/05/01(土) 11:10:22.30ID:Bazlrq4sd
>>581
そのレースゲームがどんなんだか判らないけど、
ゲーム中じゃなくて起動するときに10Gでも100Gでも、
あらかじめ10分かけて読んでおけば良いんじゃないかな。
圧倒的に問題に対する条件が乏しくて、どう考えればいいのかこちらも判らないよ。
584デフォルトの名無しさん (ワッチョイ 6768-TNk6)
2021/05/01(土) 11:22:20.62ID:BCm84eaD0
>>583
市販のゲームは10分もかかりませんが、何故でしょうか?
585デフォルトの名無しさん (ワッチョイ 2701-1Vh1)
2021/05/01(土) 11:25:02.89ID:B2x+2kSO0
地図上の物体検索とかなら
numerical recipes の3rd edition に
説明があるからそれを読みたまえ。

なお日本語もC#版も無い
586デフォルトの名無しさん (ワッチョイ a724-OedE)
2021/05/01(土) 11:35:09.71ID:nO6fZcYL0
>>584
583は分かりやすく極端な例を出しただけで常識的に考えて10Gのデータ読み込みなんてしないっしょ
大体重めのゲームでも起動時やマップ入場時のロードは500MBくらいじゃね?
つまりそのレースマップ入場時にそこで必要なグラフィックデータを数十秒かけて読み込ませればいい
587デフォルトの名無しさん (ワッチョイ a724-OedE)
2021/05/01(土) 11:52:19.99ID:nO6fZcYL0
>>584
君のレス追ってみたけどゲームじゃなくて目的はテキストファイル?
ファイルI/Oにボトルネックがあると思ってるようだけど、テキストファイルだとしたらボトルネックはエンコードにあるんじゃない?
File.ReadAllTextは割とオーバーヘッド大きいから、.NetCore3以上でSpanを利用したエンコードを構築すればいくらか早くなるかもしれない
588デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/01(土) 12:02:16.59ID:79IzxePJa
>>581
自分もゲームまったく知らないので偉そうなことは言えないけど、
いきなりそんな高度な話より、例えば40年前のゲームのスーパーマリオは
たった30kBの中にどうやって32面分オーバーのマップデータを詰め込んだかを
考える方が有益だと思う。

要するに本質はI/Oじゃなくてデータをどうやって圧縮/展開するかじゃないの?
「リアルタイムで(ストレージやネットワークから)読み込み」なんかしてるはずがないと思うけど。
589デフォルトの名無しさん (ワッチョイ 7f63-3Eyb)
2021/05/01(土) 12:54:20.94ID:R4IHrQy80
馬鹿は的確な質問ができないってのを凄い的確に示してくれている
590デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/05/01(土) 12:58:57.73ID:GvoaCTGBM
ファミコンカセットはROMアドレス指定でCPUからダイレクトアクセス出来る
初期以外はアドレス足らないからマッパーで切り替えてる。物理で
591デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/05/01(土) 13:13:02.51ID:GvoaCTGBM
プレイステーションのすごいところは
ファミコンやPCエンジンと違って
ロード中にギャラガができる事
作りての工夫によってロード時間ゼロにすることが可能
ドラクエなんかはマップ切り替え直後はエンカウントしないよね
592デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/05/01(土) 13:34:26.28ID:GvoaCTGBM
サガフロの5連携が3連携で一休みしたりサガフロ2の連携が我々のレベルになると通常と変わらず目で追えたり
RAMが少ないと苦労が耐えないですね

えーっと500MBでしたっけ?ウフフ
593デフォルトの名無しさん (ワッチョイ 075f-Mxzp)
2021/05/01(土) 13:37:34.47ID:/yhKW3U+0
>>591
ファミコンはそもそもロード時間ないだろ
594デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/05/01(土) 13:39:40.13ID:GvoaCTGBM
>>593
円盤システムの話なので
595デフォルトの名無しさん (ワッチョイ 075f-Mxzp)
2021/05/01(土) 13:41:51.01ID:/yhKW3U+0
>>594
ファミコンやPCエンジンと違ってって自分で言っとるやん
596デフォルトの名無しさん (ラクッペペ MM8f-HlUj)
2021/05/01(土) 13:47:26.99ID:GvoaCTGBM

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

スレ違いでは??
597デフォルトの名無しさん (エアペラ SD9b-R7/G)
2021/05/01(土) 14:03:33.45ID:v2ArV8E8D
>>581
結婚式場を出たら、もう披露宴会場が準備されていました
これを披露宴会場の支度を瞬時に終えたと言うことだと思うか?
598デフォルトの名無しさん (アウアウウー Saab-TNk6)
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みたいなのは無いんですかね。

あったら困るんですかね?
601デフォルトの名無しさん (ワッチョイ bfda-jeEy)
2021/05/01(土) 16:28:44.50ID:LX/vNMTG0
うん、C#じゃなくてC言語がいいと思うよ。
頑張れ
602デフォルトの名無しさん (ワッチョイ 0702-7a8P)
2021/05/01(土) 16:29:01.53ID:5BASMYuN0
高度どころか怠慢な素人丸出しなんだが。

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

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

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

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

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

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

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

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

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

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

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

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

大事なことなので…
638デフォルトの名無しさん (ワッチョイ 2701-SFYt)
2021/05/02(日) 13:26:41.16ID:6VPLrRfP0
インターフェースって継承以外でインスタンス化してフィールドに持たせるように使う場合があるけど、それって違う場所に定義している関数を呼び出して使うような感じ?
いまいちインターフェースの使い方がわからぬ
639デフォルトの名無しさん (スッップ Sdff-EcTW)
2021/05/02(日) 13:41:54.97ID:Jc9e5ibud
「コントロールがきかない、再コンパイル依頼が効かない」第三者にバイナリのdllを公開してかつ、3年5年と更新しつづけていけばいやでもわかる。
640デフォルトの名無しさん (ワッチョイ 8733-jDx3)
2021/05/02(日) 13:48:58.41ID:JVX0w7410
オブジェクト指向の言語やってて、デザインパターンの勉強しない奴とか居るんだな。
641デフォルトの名無しさん (ブーイモ MMcf-XmiE)
2021/05/02(日) 13:51:59.04ID:gOHPQIPOM
それぐらいなら別にinterface要らんけどな
自社DLLの指し替えOKならメソッドの中身変えるのはできる
TypeScriptのinterfaceぐらいになったら便利だけどC#やJavaのinterfaceはそこまで重要じゃない
642デフォルトの名無しさん (ワッチョイ df01-i6Oo)
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クラスは変更する必要がない
単一責任の原則や依存性逆転の原則というオブジェクト指向設計の基本原則に従ってる
643デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/02(日) 14:53:27.70ID:vJ/g4PX7a
>>638
全然違うものを透過的に扱いたい場合ってあるでしょ?
例えばビデオゲームで入力デバイスとしてゲームコントローラーだけでなく、
キーボードやタッチパネルも使えるようにしたいとか。

とりあえずはInterfaceはそういう要求を満たすためのものだと
理解しておけばいいよ。それ「だけ」ではないけどね
644デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/02(日) 15:09:58.26ID:vJ/g4PX7a
汎用性を高めるためって考えた方が分かりやすいかもね。

昔テレビデオってあったけど、世の中にHDMIみたいなインターフェイスが存在せずに
ああいうモノリシック構造の機械しか存在しなかったらどんだけ不便か考えれば
インターフェイスの意味なんてイチコロだと思うけどな
645デフォルトの名無しさん (ブーイモ MMcf-XmiE)
2021/05/02(日) 16:17:56.85ID:jdfWZ4dSM
最近はそういうのは関数を渡すんでよくなってる
646デフォルトの名無しさん (スププ Sdff-BL7Q)
2021/05/02(日) 17:53:29.91ID:two2wwYId
関数を渡すとしても、引数なり戻り値なりの型を定義しないとならんしな。
実装を含まない定義を切り出しておかないと、容易に循環参照になってクリーンビルド出来なくなるぞ。
647デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/02(日) 18:03:29.16ID:sTlH4cY7a
>>645
デリゲートで済む用途に(無理に)インターフェイスを流用しなくて済むようになっただけ。
648デフォルトの名無しさん (ワッチョイ df61-Lr3t)
2021/05/02(日) 18:14:35.65ID:KSgMbN0G0
インターフェイスつかってるとVisualStudioで定義に飛んでもメソッドの実装見れないから腹立つんでやめてください。
649デフォルトの名無しさん (スププ Sdff-BL7Q)
2021/05/02(日) 18:16:04.86ID:two2wwYId
>>648
逆に、実装を見るなという意思表示では?
650デフォルトの名無しさん (ワッチョイ df61-Lr3t)
2021/05/02(日) 18:24:40.27ID:KSgMbN0G0
>>649
見られたくない恥ずかしい実装してるってことですねわかりました
651デフォルトの名無しさん (ブーイモ MMcf-XmiE)
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
まあそうだね
そしてデリケートで済まない用途なんてのは、ないんだなこれが
652デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/02(日) 18:48:49.12ID:sTlH4cY7a
OKでは

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

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

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

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

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

抽象的な話してると自分の頭じゃ理解しきれないな
こういう設計の場合こうすればよくね/こういう問題があるやんっていう具体例が欲しい
662デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
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)と遠回りになってもそう。
663デフォルトの名無しさん (ブーイモ MMcf-XmiE)
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
相変わらずなにが言いたいかわからん
664デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/03(月) 00:50:26.13ID:MrRb6D/k0
>>663
なんでわからんのかな。
665デフォルトの名無しさん (テテンテンテン MM8f-m/Zw)
2021/05/03(月) 01:00:53.01ID:ppBWlDH7M
>>663
できるできないの話ならアセンブラなら何でも実現できるよw

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

>>678
意味不明
681デフォルトの名無しさん (エアペラ SD9b-R7/G)
2021/05/03(月) 12:19:41.29ID:US3b2rihD
>>680
関数をオーバーライドするってことか?
682デフォルトの名無しさん (スププ Sdff-BL7Q)
2021/05/03(月) 12:43:57.15ID:KphYKkJEd
どう意味不明なのかマジでわからん。
OOを捨てて関数型推したいのはわかるけど。

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

IDbConnectionは不要で、クラスがだけあれば良いって話?
683デフォルトの名無しさん (ワッチョイ 2701-jDx3)
2021/05/03(月) 12:48:01.71ID:9l24SOSQ0
>>676
興味あるのですが、参考になるサイトとかありますか?
684デフォルトの名無しさん (テテンテンテン MM8f-m/Zw)
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というインターフェースを選択したが、だからといって、それがインターフェースの優位性を示すということにはならない
686デフォルトの名無しさん (スププ Sdff-BL7Q)
2021/05/03(月) 13:14:13.33ID:KphYKkJEd
>>685
アンフェアでもなんでもない。
IDbConnectionみたいな、何らかのデータベースへのコネクション、を表すものの代替も出来てないよね。
具象クラスでは事足りないし「データベースへ接続する関数を渡すイニシャライザ」からの返り値は同じように、汎用的なインターフェイスにキャストされてないといかん。
Goでもこれはsqlパッケージの中にインターフェイスが定義されてるよね。

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

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

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

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

確かにまぁ、開放したはずが開放できてなくて再起動するはめになったりしたし、わからんでもないけど、それこそIDisposableなんかでハンドリングした方が良いんじゃないかな。
695デフォルトの名無しさん (ワッチョイ bfde-wijr)
2021/05/03(月) 15:33:42.40ID:JDQ36HZh0
>>694
ぶっちゃけよんでるかどうかわからんのは退化だと思う
696デフォルトの名無しさん (ワッチョイ ff02-OuAg)
2021/05/03(月) 16:10:09.16ID:bSPfVkbS0
デリゲートvsインターフェースの戦いはつまるところ気軽に使いたい派vs丁寧に型付けしたい派の宗教戦争なのだろうな
JavaのFunctional Interface、TypeScriptのStructural Subtyping、オブジェクトリテラルがあれば両陣営とも納得すると思われる
697デフォルトの名無しさん (アウアウウー Saab-TNk6)
2021/05/03(月) 17:27:13.66ID:NFEIEsrVa
>>696
むしろこうだね、

適材適所派 vs. バカの一つ覚え
あるいは

常識派 vs. 俺だけがネットde真実に覚醒したんだ!!派
698デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/03(月) 18:11:29.08ID:MrRb6D/k0
単純に、7割位のケースで有効な方法が、銀の弾丸な気がする時期じゃない?

Interfaceなり、型クラスなり、トレイトなり、定義と実装を分離する方法は色々だけど、どの言語でも完全に無くなってない事はゆっくり考えたらわかると思うんだけど。
どっちも出来ればいいんよ。
関数型も良いけど、世の中の殆どは状態を持っているんだから、結局モナドなんかを持ち出すぐらいなら手続き型でデータドリブンぐらいでバランスが良いとか、Entityクラスを軸にするんだ、とか、色んな考え方もあるわけだし。
699デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 00:13:22.42ID:9VBk1Szv0
循環参照だけど、例えば、FileLoggerと、StreamWriterみたいなクラスがあるとして、両方別アセンブリになってて、
FileLoggerはStreamWriterを使ってログ出力する事もできる、とすんじゃん?
で、
ここまでは普通にビルドできる。

StreamWriterもログを出力することになって、FileLoggerを使うことにするとすんじゃん?
前回の結果からの増分コンパイルはできるけど、クリーンビルドは出来なくなるよね。

結局は、最低IWriterなりILoggerなりとして、どちらかを定義と実装に分けておいて、
具象クラスをコンストラクタなり、ラムダを渡す初期化関数なりで渡すしか無くなると思うんだが。

ベースクラスと派生クラスにしておいて、ジェネリクス使えばそれで良いのでインターフェイスは要らない、と言うのは一見それで良さそうに見えるけど、
今度はダイアモンド継承になるから、WriterでありLoggerであるものが作れない。

関数型と排他の存在ではないと思うよ。
嫌いなら、必要悪ぐらいに思っといたら?
700デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 00:35:29.27ID:M19mZJ1ZM
Action<string> logなりAction<string> writeLineなり必要な関数を引数で渡すだけ
FileLoggerをリビルドするのはFileLoggerを変えた時だけ
StreamWriterをリビルドするのはStreamWriterを変えた時だけ
どちらもコアライブラリであるActionにしか依存しないので常に単体でクリーンビルド可能
701デフォルトの名無しさん (ワッチョイ df01-i6Oo)
2021/05/04(火) 01:22:47.37ID:DanBAz9l0
>>699
受け渡しする関数のシグニチャ(=デリゲートの型)が
メソッド1つだけのインターフェースと同じ働きをするので
IWriterやILoggerがメソッドを1つしか持たないなら高階関数で処理したほうが適切な可能性もあるよ

map/filter/reduceのように毎回一つ一つの関数を渡すのが便利なものと
リポジトリのように事前に定義された一連の機能セットに互換の型を利用することで
クライアントコードは実装の詳細を気にせず使うほうが便利なものとそれぞれある

比較関数を毎回渡してソートする方式とIComparableを使ってソートする方式の違い
どういう種類の仕様変更に対してどこまで影響が波及するかを比較して考えるといいかも
702デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 07:53:17.60ID:9VBk1Szv0
>>700
Action<string>が、どう「ログ出力関数」になるわけ?
そんな漠然としたシグニチャになるわけ無いでしょ。
百歩譲ってAction<LogInfo>だろう。
ログレベルとか発生場所とか全部プリミティブで渡すの?ってのが、>>653だよ。そのログ出力内容が変わったらシグニチャ全部変えてくの?

>>701
うーん、まあ、それもまた然りかな。
一つしか持たないインターフェイスはたしかにそうかもしれん。
俺のイメージはLoggerもWriterも、状態を持たざるを得ないイメージだったので、IDisposableも一緒に持つイメージだった。
ログレベルとか、開いてるファイルと書き込み状態とか。マルチスレッドだとうまく排他しないとログが乱れるから。

IWriterもILoggerも、もう少しメソッドを持つイメージかな。
頑張ればLoggerは一つのメソッドでいけるかもしれないけど、LogLevelみたいなLogger側にEnumは持たせないといかんかも。
DIするなら、ILoggerの方が楽だと思う。
703デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 08:02:02.52ID:9VBk1Szv0
なんか「こうすると後始末が楽」ってのと、「これてもできる」ってのは違うと思うんだが。
Action<string>とかAction<int,string,string>みたいなものでログ出力関数をロガーとして関数に突っ込むのは「これでもできる」側としか思えんのだ。

それでホントに改修も含めた総工数が下がるとも思えないし、
確かに今風だけどメリットはすごく薄いし、
合理的かと言われたら俺は違うって言いそう。
704デフォルトの名無しさん (スププ Sdff-BL7Q)
2021/05/04(火) 08:21:09.46ID:YPdSU1M4d
意味不明と言い続けてたのも、
全く解決になってない方法をゴリ押しすんのも、
もしかして、OOP・Interfaceが不要と思ってるんではなくて、OOP・Interfaceの考え方とか活用法を理解できてない?
>>666
本当にこれなのかな。
705デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 09:40:15.42ID:/WM42vypM
>>702
stringでもLogInfoでもなんでも好きにしなよ
お前ずっと反論がズレまくってんだよなぁ
ただの例示のコードスニペットの重箱の隅をつついて本質に触れないのは、ワザと話をそらそうとしてんのかな?
業務で書いてるコードじゃねえんだから、細かいとこは省略してエッセンスだけ書くに決まってんだろ

>>703
これでもできるじゃなく、そのほうが楽でわかりやすい、な
DIなどでおなじみの大量生産される型定義、プライベート変数定義、コンストラクタ定義が消えてスッキリ
コードの可読性を著しく下げる予測困難なコード≒隠蔽されたコード、長いスコープ変数(メンバ変数)などが消えてスッキリ
前にも書いたが、テストしやすくてスッキリ

>>704
いや真面目に、俺が意味不明ってつけたレスは、本当に意味不明だよ
頼むから、わかる日本語で書いてくれ
ちなみに俺も昔は、OOP信者でもちろんインターフェースも大好きだった
デザインパターンを1つ学んでは、一喜一憂してたのもいい思い出だ
ま、知識をアップデートしようってことだな
706デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 10:04:47.13ID:9VBk1Szv0
>>705
あのさあ。ホントにズレまくってるのそっちなのよ。
逸らそうとしてるんじゃなくて、業務で使うようなコードで、イニシャライザに任意の関数を渡すスタイル「のみ」でうまく行ったパターンは無いし、どのみちその関数のシグニチャは定義することになるんよ。

Kestrelでセルフホストする時に、どちらの方法も使うことになるけど、インターフェイスを受ける、具象クラスを返すラムダで初期化したりするよね。
GenericHostBuilderExtensions.ConfigureWebHostDefaults(IHostBuilder, Action<IWebHostBuilder>
とかもそうじゃない?

スッキリはしないよ。はっきり言って。

知識はアップデートしてるつもりだが、だからこそ、高階関数で万事解決だとは思ってない。

なんでも高階関数でやればスッキリする、依存を減らそう、呼んでほしいロジックは渡せば良いんだ、って発想は一時期かぶれたけど、
結局、相互に依存してるのと変わらんことに気づいた。
別にそれ自体がテスタブルでもなんでもない。
結果的にテスタブルになっただけであって、同じように気をつけてInterface使えばどちらもテスタブルになる。
707デフォルトの名無しさん (ワッチョイ 7f63-3Eyb)
2021/05/04(火) 10:37:19.27ID:x7uRD8HC0
まだ集団ウンチしてるのだ…
708デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 10:37:49.24ID:/WM42vypM
>>706
既存のフレームワークはまだ追いついてないんだよ
中心的なフレームワークをOOPでインターフェースも使う前提で作っちゃったんだからある程度”使わざるを得ない”のは仕方がない
あとはそこから如何にして脱却していくかだな

依存を排除しようとしてるのに、相互に依存してるんならOOP、関数以前に設計が下手な可能性が高いな

テスタビリティは明らかに関数のほうが上
おぞましいモックオブジェクトの大群に襲われなくて済む
関数ならモックオブジェクトはただのラムダに置き換えられる
テストコードは短く、シンプルに、理解しやすくなり、テストのための黒魔術(モックフレームワーク)への依存関係を完全に断ち切れる
これがいかに素晴らしいことか、業務で真面目にテストを書いたことがあるなら、わかるはずだ
もしわからないなら、本気でテスト書いたことがない”ニワカ”でしょ
709デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 10:52:23.31ID:9VBk1Szv0
>>708
追いついてないわけではなくて、現実見てるんじゃん。

結局、相手方にラムダなり関数なりの自分の一部分を「呼ばせる」仕組みになるのであれば、それは結局は依存してるのと同義だと思うぞ、俺は。見た目上依存が排除できてるようには見えるけど。

モックオブジェクトの作り方が悪いのでは?
結局、短くて大量のラムダに襲われるだけだし。
モックフレームワークとか開発の規模感にあってなかっただけではなかろうか。

別に俺は、完全にラムダを渡すスタイルが悪いと言ってるんじゃないんよ。
インターフェイスは必要な部分では必ず必要って言ってるだけであって。

インターフェイスと拡張メソッドでめちゃくちゃ効率的にできる事もあるし、抽象的に扱う必要があるものはある。
IDbConnectionをどういう関数にするかまだ答え貰ってないけど、どうするつもり?

宗教戦争じみてきたけど、絶対にインターフェイスは要らないって言いたいだけ?
710デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 10:56:22.23ID:/WM42vypM
実を言うとね
関数には様々な利点があるわけだけど、それらの利点がもし全くなかったとしても
この”テストコードの生産性の向上”だけが理由でも、俺は関数に取り組むべきだと考えてる
レガシーコードとはテストのないコードのことだ、とは有名なフレーズだが、心から同意する
テストコード生産性の低いOOPは、レガシーコード予備軍と言ってもいい
モックフレームワークは本当に君たちの良き友人だろうか?
よく考えてみてほしい
711デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 11:18:30.42ID:9VBk1Szv0
そもそも論だが、モックフレームワーク自体がまず必須ではない。
インターフェイスを満たしていればそれで良い。
依存性の注入をしはじめるとそりゃモックは作る必要があるかもしれないが、フレームワークを使う必要は無い。
そもそもそれは関数やラムダを渡す方法でも同じ。もちろん関数やラムダのテストはするよね。それが、結局依存してるって言ってるの。注入してるからあたり前よね。

なんか嫌な記憶があるんだろうけど、インターフェイスという概念が完全に使い物にならなかったら、世間はそう変わっていってる。でも、どの言語にもあるよね。型クラスだったり、少しずつ実現方法が変わることはあっても。
自分の使い方が悪いのを、ものが悪いと言うのはよろしくないぞ。
712デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 11:19:32.83ID:/WM42vypM
>>709
短くて大量のモックラムダの定義は常にテストと共にあり、全てが目に見えて、嘘も隠し事もなく、理解容易だ

モックオブジェクトの大群は全てが隠蔽されており、その実体はお世辞にも理解しやすいとは言えない黒魔術で構成されている
モックオブジェクトを扱う人間はモックオブジェクト独特の世界観を深く理解し、信仰しなければならない

僕らはただ楽に単純明快なテストを書きたいだけなのに…
713デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 11:23:09.70ID:9VBk1Szv0
>>712
自分で作れば、モックオブジェクトも別に隠蔽されてないし、理解しづらくも無いんだが。
必要十分なものを作れば良いと思うよ。

なんかフレームワークに振り回された思い出があるの?
それは俺にもあるからわからんでもない。
714デフォルトの名無しさん (ワッチョイ a7e3-OedE)
2021/05/04(火) 11:27:48.16ID:XePiVdwm0
これ回線2つ使った自演芸やんけ
せめて文体変えようよ・・・
715デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 11:28:41.29ID:/WM42vypM
>>711
何故モックフレームワークのような出来損ないが、世の人々にありがたがられているか理解してる?
モックフレームワークを使わなければいいと、言うだけなら簡単だよ
でもねその代償に今度は、大量のモッククラスを書かなければならなくなるんだ
世の人々はそんな大量のモッククラスを書くのは嫌だ、ということでモックフレームワークを作ったんだ
苦肉の策だったんだろうけど、世の人々は薄々疑問を感じながらも自分を納得させてモックフレームワークを受け入れた
大量のクラスを書くよりは、たぶんマシだから

さてなんでこうなってしまったか、根本原因はもうわかるね?
依存性分離のためにインターフェースを採用しちゃったからだよ
インターフェースに実装を与えるのは、関数と比べるとものすごい労力かかるんだね
716デフォルトの名無しさん (ワッチョイ 0778-OedE)
2021/05/04(火) 11:29:07.24ID:F3N+oY4e0
ID:9VBk1Szv0
ID:/WM42vypM
いい加減議論スレへ行け

ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
http://2chb.net/r/tech/1469538912/
717デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 11:30:27.06ID:9VBk1Szv0
>>714
違うぞ。

>>715
やり方が悪い。そして関数のシグニチャはインターフェイスそのもの。

>>716
すまん、そんなスレあったのな。
ありがとう。
まあ水掛け論だろうし、もうやめとくわ。
718デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 11:34:02.42ID:/WM42vypM
>>713
僕らはテストを書きたいんだ
大量のモッククラスを書きたいわけでもない
モックフレームワークを自作したいわけでもない
モックフレームワークを利用して疲弊したいわけでもない
僕らはただたんにテストを書きたいんだ
719デフォルトの名無しさん (ワッチョイ bfde-wijr)
2021/05/04(火) 11:42:00.80ID:5c9CWd/c0
ま、インターフェースなんかいらんな
データベースが当たり前になってきた頃からインターフェースを積極的に使うやつは確実に減ってきた
だってこれやっぱテーブルにしにくいじゃん
いやね
差分だけ本当にまとまってるならそういう手もありなんだけど
実際は虫食い状態の共通部と固有部分を分けるのって現実的じゃないと思うんだよね
720デフォルトの名無しさん (ワッチョイ 8763-OedE)
2021/05/04(火) 12:03:51.01ID:UFmf8yJF0
属性のメリットが全然わからなくてとまどってる
obsoleteなど例外を除いて、summaryなどと違って参照時に開発者側へメッセージを呼び出すわけじゃないんだな
obsoleteのような開発時のエラーメッセージの表示を条件分岐したかったけど見当たらないし、obsolete自体が継承できないときた
メソッドの代わりとして使うしかないのか?
721デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 12:09:41.03ID:9VBk1Szv0
>>720
組み込み属性以外だと、リフレクションでメソッドなりクラスなりを探すときに、特定のAttributeがついてるものを対象にしたり、呼び出し元に特定のAttributeがついてるかをコールスタックから探したりするためのものでは?
あとはAttributeUsageAttributeで制限かけたりかなぁ。
722デフォルトの名無しさん (テテンテンテン MM8f-GPK9)
2021/05/04(火) 12:36:44.27ID:rb0F5K+LM
属性は、
EntityFrameworkとかASPNETとか属性利用ありきのライブラリを使ったり自作したりしない限り
特にメリットなんてないという理解でいいと思う

逆に言えばそういうライブラリを使うときに初めて意味を持つんで
ひとまず書き方使い方だけ頭の片隅にいれておけば十分
723デフォルトの名無しさん (ワッチョイ 8763-OedE)
2021/05/04(火) 13:01:40.29ID:UFmf8yJF0
>>721
ども
求めてる機能は作れそうにないや
724デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 13:41:23.71ID:p57xGa3RM
>>720
属性はメタプログラミングで利用するもの
C#ではダイナミックに型情報にアクセスすることできるが、属性はその型情報に”お好みのラベル”を付与するための機構だ
ただラベルを貼り付けるだけではなんの意味もない
ラベルを解釈して振る舞いを変えるクライアントプログラムを作ることで、初めて属性に意味が生じる

同じ事をあちこちでやってるけど、クラスや関数など従来の言語基盤ではモジュール化しにくいもの
いわゆるアスペクトというものをモジュール化するための道具として使われることが多い
またIDEを初めとする周辺ツールなどからも参照できるためツールの拡張などに使われることも多い

はっきり言って泥臭い、洗練された機構ではないのでメンテナンスは大変だが、ただの利用者の立場では便利なものだ

python、TypeScriptなどでは属性より柔軟性は低いものの十分な効果が得られ、より理解、実装が容易なデコレータというアイデアが導入された(ちなみにこれは関数を受け取り関数を返す関数だ)
C#にもデコレータがあれば良いのだが……まだまだ遅れてるね
725デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 13:55:11.06ID:9VBk1Szv0
デコレータと属性は目的も実態も全く違うものだろ。
726デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:02:18.42ID:p57xGa3RM
同じものってどこかに書いたっけ?

属性とはこういうものだ
他の言語では(アスペクトの実装手段として)より洗練されたデコレータというものがあっていいなあ
という文脈だが?
727デフォルトの名無しさん (ワントンキン MMbf-tZna)
2021/05/04(火) 14:05:17.38ID:geYLSs/TM
で、デコレータでどうやって開発時にObsoleteのようにメッセージを出すんだ?
Pythonみたいなデコレータじゃ実行時にしか出せないだろ
728デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:07:36.50ID:p57xGa3RM
俺がいつデコレータで開発時メッセージを出す話をしたのかな?
729デフォルトの名無しさん (ワントンキン MMbf-tZna)
2021/05/04(火) 14:08:07.94ID:EiXw2d7yM
お前がじゃなく、質問者がそう言っている
730デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:11:39.63ID:p57xGa3RM
質問者は”属性の有用性が理解できない”と聞いてきてる
Obsoleteはその例でしかない

であるので属性の一般的な説明と用途を説明し
その後に参考としてデコレータを紹介した
731デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:17:24.30ID:p57xGa3RM
質問自体が”開発時メッセージを表示させたい、コントロールしたいがどうすればいいか”だったら、デコレータの話はなかっただろう
732デフォルトの名無しさん (ミカカウィ FFcb-tZna)
2021/05/04(火) 14:17:31.82ID:An0jw/zOF
いや質問者はObsoleteのようなことがやりたくて属性を調べたけど結局何ができる機能なのかよく分からなかったと言ってるだろ
この文脈で>>724のように書かれたらデコレータでならやりたいことができると質問者が誤解してもおかしくない
不適切というか意地悪な回答だと思うぞ
733デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:19:16.62ID:p57xGa3RM
お前が俺を攻撃したいのはわかったが、もう少し冷静に考えてから攻撃したらどうだ?
毎回、返り討ちにされてはつまらないだろう?
734デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:19:35.90ID:9VBk1Szv0
属性とデコレータは似てるようで全然違うので、同列に扱うのがよくわからん。
TSのreflect-metadataなんかでもわかるように、あれはデコレータで属性を与えるようなものなのよ。
逆にJavaのように属性でデコレータを与えるようなものももちろんある。
javax.decoratorとかな。

属性は属性でデコレータとは本質的に無関係で同列で引き合いに出すものではない。

その言い方してると、Serializableの説明がしにくくなる。
735デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:20:23.79ID:9VBk1Szv0
>>733
攻撃したいんじゃなくて、間違ってる。
頭でっかちでしかない。
736デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:30:08.24ID:p57xGa3RM
>>734
2回目だが同じとは誰も言ってないぞ
(アスペクト指向という)目的を達する手段が複数あり、片方がより洗練されていると言ったんだ
なぜこれで”属性とデコレータが同じものだ”になるのか理解し難い
737デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:35:07.15ID:9VBk1Szv0
>>736
誰もアスペクト指向の話は求めてないし、アスペクト指向にも使えるのは事実だが、アスペクト指向のためだけのものではない。
属性は属性。

Webフレームワークのパンドラとかロガーみたいな、特定のアスペクト指向に使う用途しか知らないならそう言いなよ。
738デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:40:27.36ID:9VBk1Szv0
データバリデーションのIndexやRequired、シリアライズのJsonPropertyとかColumnなんかは、別にアスペクト指向として割り込むためのものでも集約するためのものでもない。
XamarinのAndroidのActivityなんかはビルド時にXML産むために定義したり。
739デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 14:41:32.01ID:p57xGa3RM
>>737
はぁ…何度目だ?

質問者は明にアスペクト指向の話を求めているわけではないが、属性の有用性についてコメントを求めている

で、あるならば属性の利用形態として大きなウェイトを占めるアスペクト指向について、言及しないわけにはいかない

属性は単なるラベルであり、クライアントによって様々な利用形態が考えられることは、俺が先に説明した通り
740デフォルトの名無しさん (ワントンキン MMbf-tZna)
2021/05/04(火) 14:44:33.97ID:NgJtJBuAM
そうか?
C#で属性使ってアスペクト指向ってあまり一般的じゃないだろ
ヘルスバーグがAOP嫌いなのも有名な話だ
741デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:46:49.09ID:9VBk1Szv0
>>739
属性の有用性はそれ以前の問題。
アスペクト指向に属性は実際問題必須ではない。
インターフェイスは要るがなw

単なるラベルであり様々な利用形態が、ってのは、わかってる相手に説明する方法であって、全く知らない人間に対しては何の説明でもない。せめてググるためのワードを出せよ。
742デフォルトの名無しさん (ワッチョイ df7c-KKDS)
2021/05/04(火) 14:50:23.97ID:wdzHnAM+0
初心者にまったく役に立たない話はここでしなきゃいいのでは?
743デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 14:52:35.33ID:9VBk1Szv0
別にね、アスペクト指向はルールベースでも良いのよ。
Rubyなんかだと命名でフックしたりするようにね。
744デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 15:04:03.10ID:p57xGa3RM
>>741
属性はAOPに必須ではないが、ないと非常に大雑把な実装になり、挙動のコントロールが難しくなるため、実用上はほぼ必須だよ
太平洋横断に船は必須ではない、と言うようなものだ、最後の旅にならないといいね

いやいや、何もわかってない人にこそ、属性とはただのラベルでしかない、と説明したほうがいい
ただのラベルということを理解してないと、元の質問者のように属性には開発者メッセージを出力したり、色んなことができる、なにか不思議な力がある魔法の道具なのかな、と誤って認識してしまうんだ
1. 属性には本当にラベル以上の意味は何もないし、何もしない
2. 何かするのは、そのラベルを見て処理をするクライアントプログラム
3. 何をするかは、そのクライアントプログラム次第で全く異なる
これが属性の基本の基本な
このシンプルな3つの事実を教えないで、有耶無耶にはぐらかすと、初心者が属性を理解できなくなってしまう
745デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 15:07:33.04ID:p57xGa3RM
ほぼ必須といったのは誤解を生むかもしれないな
デコレータのようなより洗練された機構が無く、AOPをメタプログラミングで実装する以外の選択肢に乏しい言語にとっては、ほぼ必須と訂正しておこう
746デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 15:16:46.55ID:9VBk1Szv0
だから、そんな話はしてないの。AOPとか。
デコレータの話が蛇足な上、その根拠のAOPの話が蛇足だったのよ。

属性はただのラベルではない。
誰かが読み取るためのラベル。
それはシリアライザだったり、コンパイラだったり、Webサーバのランタイムだったり様々だけど。
だから、Obsoleteなんかが意味を成すんであって。

現実的にC#の属性はAOPのためのものではない以上、蛇足そのものでしょ。
だから頭でっかちだと言ってるんだよ。

「ただのラベル」こそ「うやむやにはぐらかしてる」でしょ。
747デフォルトの名無しさん (ワッチョイ 0778-OedE)
2021/05/04(火) 15:18:25.60ID:F3N+oY4e0
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
http://2chb.net/r/tech/1469538912/
748デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 15:18:59.72ID:9VBk1Szv0
じゃああっちで。
749デフォルトの名無しさん (ワッチョイ 7fa7-wijr)
2021/05/04(火) 15:42:18.40ID:vNyUKbw80
デコーダ太郎は責任とってクビ吊れ
750デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 15:43:52.50ID:/UxZFiSCM
>>746
>属性はただのラベルではない。
>誰かが読み取るためのラベル。
それをただのラベルっていうんだよ
読み取る側がそのラベルを見て何らかの作用を起こすまではなにもしない
まさにただのラベルだな
751デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 15:54:23.06ID:9VBk1Szv0
>>750
しつこいわ。
752デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 16:04:50.31ID:/UxZFiSCM
>>751
ええと
ブーメランってご存知?
753デフォルトの名無しさん (ワッチョイ e7ad-BL7Q)
2021/05/04(火) 16:08:55.98ID:9VBk1Szv0
お前の理想以外聞き入れないなら、ブーメランでもなんでもないわ。
754デフォルトの名無しさん (ブーイモ MMcf-QYFT)
2021/05/04(火) 16:10:37.11ID:B/7UzgrKM
というブーメランなのでした
ちゃんちゃん
755デフォルトの名無しさん (ワッチョイ df01-i6Oo)
2021/05/04(火) 17:28:51.83ID:DanBAz9l0
>>723
ビルド時にカスタムのエラーや警告を出したいなら
Code Analyzer使って属性をチェックすればいい
756デフォルトの名無しさん (オッペケ Sr5b-sT2V)
2021/05/05(水) 09:44:41.21ID:0AxeylkVr
昨日は頭のおかしい人が大活躍してたみたいだな
策っとNGしときましょう
757デフォルトの名無しさん (ワッチョイ eaba-dxvU)
2021/05/07(金) 00:21:29.88ID:Oi9dh/iA0
WebClient使ってWebサイトのhtmlを文字列として取得したいんですが、
読み込みに数十秒かかるような重いページだと、途中でエラーします。
そんなページでもエラー無く読み取る方法有りますか?
758デフォルトの名無しさん (ワッチョイ 2ae6-YEtS)
2021/05/07(金) 00:26:59.06ID:xGNvq5Jp0
Irvine
759デフォルトの名無しさん (ワッチョイ eaba-dxvU)
2021/05/07(金) 00:34:48.56ID:Oi9dh/iA0
>>758
それはC#から呼び出して使えますか?
760デフォルトの名無しさん (ワッチョイ da2d-gUNg)
2021/05/07(金) 00:39:08.58ID:rhVsIWeg0
>>757
HttpClientクラス使った方が良いと思うけど
WebClientクラスの場合は、GetWebRequest()をオーバライドして
WebRequest.TimeoutプロパティとHttpWebRequest.ReadWriteTimeoutプロパティを設定
761デフォルトの名無しさん (ワッチョイ eaba-dxvU)
2021/05/07(金) 00:43:50.02ID:Oi9dh/iA0
>>760
ありがとうございます。
>GetWebRequest()をオーバライド
は既に試したんですが、相変わらずエラーで中断します。
>HttpClientクラス使った方が良いと思うけど
それは何故でしょうか?
762デフォルトの名無しさん (ワッチョイ bef2-M6Ch)
2021/05/07(金) 02:50:42.19ID:sg0+DWIO0
どんなエラーが出るのよ
763デフォルトの名無しさん (ワッチョイ 7f54-Ulvp)
2021/05/07(金) 03:48:20.57ID:bebMDo2e0
DLしたいサイトのURL教えてもらっただけでだいぶはかどるよね。
764デフォルトの名無しさん (ワッチョイ 6a79-EEf/)
2021/05/07(金) 04:25:10.15ID:Bc+rT72I0
中華から攻撃受けてるときの重いふたばとか
765デフォルトの名無しさん (ワッチョイ 9f5f-DjaX)
2021/05/07(金) 04:39:35.33ID:FF3+CPRk0
デフォルトだとタイムアウトが足りてないだけなんじゃないの?
766デフォルトの名無しさん (ワッチョイ 6a01-wt3T)
2021/05/07(金) 05:39:50.22ID:LQe9nctZ0
> 途中でエラーします。
エラーしますとか変な日本語使う奴の相手はしない
767デフォルトの名無しさん (ワッチョイ 33ad-K+t/)
2021/05/07(金) 08:08:05.60ID:n4YBHC+Y0
エラーいたします。
768デフォルトの名無しさん (ワッチョイ cf33-erDI)
2021/05/07(金) 08:28:13.14ID:96M3luB+0
エラーがございます
769デフォルトの名無しさん (ワッチョイ d35f-O1HG)
2021/05/07(金) 08:44:51.51ID:1BryI6MR0
エラーなさる
770デフォルトの名無しさん (ワッチョイ 73b5-fceI)
2021/05/07(金) 11:18:16.60ID:4XrAAqdx0
エラーになられます
771デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/07(金) 11:23:53.77ID:ckc6TxMx0
エラー仕る
772デフォルトの名無しさん (ブーイモ MM97-tepi)
2021/05/07(金) 12:35:02.79ID:iq1HEmUXM
エラー参上
773デフォルトの名無しさん (ワッチョイ fb24-jjtP)
2021/05/07(金) 12:37:58.01ID:RB8Fe90n0
>>764
ふたばってもう誰も見てないだろうけどどんな理由で攻撃してくるの?
774デフォルトの名無しさん (ワッチョイ 73b5-fceI)
2021/05/07(金) 15:59:09.92ID:4XrAAqdx0
尖閣諸島を渡せ
775デフォルトの名無しさん (ワッチョイ d35f-t4JP)
2021/05/07(金) 18:28:13.92ID:1BryI6MR0
エラー渡し
776デフォルトの名無しさん (ワッチョイ 7eda-9tq9)
2021/05/07(金) 21:30:40.73ID:S8eSOzgY0
エラー呼吸
777デフォルトの名無しさん (ワッチョイ 33ad-KFDE)
2021/05/07(金) 21:31:58.32ID:Bgw7HCHL0
さくらタンのエラー画像キボンヌ
778デフォルトの名無しさん (ワッチョイ 73b5-fceI)
2021/05/08(土) 00:36:51.80ID:onVLUDOF0
(*´Д`)ハァハァ
779デフォルトの名無しさん (アウアウエー Sae2-8hOh)
2021/05/08(土) 11:24:07.14ID:Yiqu4oaaa
くだらん
780デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/08(土) 12:22:03.93ID:oZ/joMMLd
#region って使わない方が良いのですか?
プライベートメソッドがたくさんあるとき隠すのは駄目ですか?
781デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 12:29:25.27ID:Hz73TWc7M
好きにしたらいいよ
長いコードをリージョンで隠すより
短く書いたほうがいいと思うがね
782デフォルトの名無しさん (ワッチョイ f3de-wGCM)
2021/05/08(土) 13:33:49.15ID:IqHZyMf20
ウザい
使うメソッドの周辺に置いておいてよ
publicとかprivateでリージョン切るやついるけどセンスの欠片もないな
783デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 13:41:33.11ID:75Tkj6otd
積極的に使いたいとは思わないな>#region
784デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/08(土) 14:09:56.67ID:CLNCGw4K0
レガシーコード解読してるときに、コメントがてら一先ずregion使った
785デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 14:14:41.59ID:75Tkj6otd
#region使わんといけないほどになったらクラス分けてほしいな
実際にはなかなかそういう自由はないかもしれないけど
786デフォルトの名無しさん (ワッチョイ f3de-wGCM)
2021/05/08(土) 14:16:26.79ID:HwrhuFxX0
分ける方向がクソなときにウザい
1つのpublicにいくつかのprivateがくっついてるのに
publicやprivateでリージョン切るなや下手クソ
787デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/08(土) 14:18:11.82ID:ub5A9aINa
>>780
身もふたもないけど使い方次第だね。

#regionディレクティブはコードを分類するのとあまり見る必要がないコードを隠すのに
使えるけど、後者の使い方はあまり必要がない

自分はデカいクラスでMSのドキュメントみたいにメンバーを種類ごとに分類するのに使ったり、
ある程度以上の規模のFormで例えばメニューのイベントハンドラを分類するのに使ってる
788デフォルトの名無しさん (ワッチョイ 6642-jjtP)
2021/05/08(土) 14:21:20.00ID:nusrVvaZ0
拡張のcodemaidで適当に分けてもらう
789デフォルトの名無しさん (ワッチョイ bb4f-DjaX)
2021/05/08(土) 14:21:52.55ID:L+qXSIbq0
private隠す#regionは使うけどな。どのへんがダメ?
790デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 14:25:10.15ID:43bBwuymM
隠したくなるということは、隠さないと鬱陶しいぐらい長いコード、ということだから、そのあたりだろうね
791デフォルトの名無しさん (ファミワイ FF97-6gku)
2021/05/08(土) 14:28:22.99ID:/jodR7lWF
呼び出し階層を無視して十把一絡げに「private」だけで括ろうとするのはどうかなとは思う
792デフォルトの名無しさん (ワッチョイ bb4f-DjaX)
2021/05/08(土) 14:34:26.57ID:L+qXSIbq0
コードスメル的な意味かな?具体的に何が悪いのかよくわからんけど。
793デフォルトの名無しさん (ワッチョイ a6da-XZlr)
2021/05/08(土) 14:34:33.08ID:pDWBcfg30
/// <summary>
/// ・・・
/// </summary>
private int mHoge;

/// <summary>
/// ・・・
/// </summary>
public int Hoge { get => 0 == this.mHoge ? 1 : this.mHoge; }

で、それぞれに同じコメント書くのが非常にだるい。
なにかうまい方法ないですか?
794デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 14:44:03.29ID:75Tkj6otd
>>793
コレどう?

<inheritdoc> - C# プログラミング ガイド | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/xmldoc/inheritdoc
795デフォルトの名無しさん (ワッチョイ a6da-XZlr)
2021/05/08(土) 14:50:55.43ID:pDWBcfg30
>>794
ぉぉ、コメントも継承できるんですね。
ありがとうございます、やってみます。
796デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/08(土) 15:26:30.05ID:X8Zwq8nja
>>789
privateの意味を誤解してる気が

privateの意味はそのコードを利用する側の人は見る必要がないって意味だよね?
ソースコードを見てる人はその時点で「利用する側」か?
普通は違うよね?書く側の人に対して隠す意味は普通はない。

もちろん「まず見る必要がないから畳んでおきたい」需要が絶対にないとまでは言い切れんとは思うけど。
797デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/08(土) 15:28:42.58ID:X8Zwq8nja
ちなみに、VSのエディタにはメソッドのシグネチャ以外の部分を畳む機能もあるけど俺はあれは嫌い。
ただの食わず嫌いかもしれないが
798デフォルトの名無しさん (ワッチョイ bb4f-DjaX)
2021/05/08(土) 15:42:24.39ID:L+qXSIbq0
>>797
あー、それそれ。併用してCのヘッダみたいにして見てる。
ヘッダ代わりに毎回インターフェースを定義するのも面倒だしね。
799デフォルトの名無しさん (ブーイモ MM97-G81e)
2021/05/08(土) 16:10:59.65ID:0QGgEZ+BM
長大なメソッドの中身をregion使って折りたたんだら短く見えるからいいよね
800デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/08(土) 16:27:25.48ID:CLNCGw4K0
コンストラクタとかで引数チェックする場合ってDebug.Asset使う?  ifと組み合わせて例外投げる?
801デフォルトの名無しさん (ワッチョイ 3ebb-krZt)
2021/05/08(土) 17:12:49.71ID:6pb9v2QO0
macOSに新しい.NET Core SDK/ .Net 5 SDKを入れ続けていると、何バージョン分もディレクトリが掘られて増えていきます
公式では、いらないものを単純にディレクトリごと削除して良いようなことが指示されていますが、これらのディレクトリのパスをdotnetコマンドに知らせている設定部分はどこにあるのですか?
802デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/08(土) 17:41:35.40ID:oZ/joMMLd
ありがとうございますm(_ _)m
#region は気を付けます
803デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 18:05:57.33ID:jYvDj1vcd
>>800
コンストラクタで例外投げたくないな
引数はフィールドにセットするだけでそれ以外は基本しない
検証するなら別のメソッドにするかコンストラクタ隠蔽して検証しつつインスタンス返すstaticなメソッド作る
804デフォルトの名無しさん (ラクッペペ MMe6-kG12)
2021/05/08(土) 18:15:04.80ID:+DU/XhxNM
20年前に見たような話で頭がくらくらする
805デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 18:24:03.67ID:jYvDj1vcd
まあまあ
806デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 19:33:57.25ID:6+YQB65FM
>>800
普通にifで調べて、普通に例外を投げてくれ
引数がおかしいならArgumentExceptionとか適当なのあるでしょ
引数が増えるとifを書くのがしんどくなるかもしれないが、そのときは関数化しよう

そもそもDebug.Assertは滅多に使わないものと考えていい
デバッグビルドとリリースビルドで挙動が違うというのは、それだけで本番でしか発生しないバグを生みかねないものなので、可能な限り避けるべきだ

コンストラクタで例外を投げたくないとか言ってる人は、気にしなくていい
昔はそういう流派もあったんだな、とでも考えてくれ
807デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/08(土) 19:50:29.55ID:opSybYm9r
.net frameworkのコンストラクタでもそうやってた
今のは知らん
808デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/08(土) 19:57:02.17ID:opSybYm9r
コンストラクタで例外投げろ
それ以外はゆるさない

XXX.Create("test");の戻り値nullチェックみたいのはバグの温床だから許さん
809デフォルトの名無しさん (ワッチョイ 73e3-jjtP)
2021/05/08(土) 20:01:04.70ID:Yl7KxUAk0
UnhandledExceptionの処理やるだろうしコンストラクタで例外投げてもいいと思うけどね
810デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 20:22:02.19ID:jYvDj1vcd
最近はそうなのか
自分も認識改めるわ
811デフォルトの名無しさん (ワッチョイ bb01-IK/p)
2021/05/08(土) 20:24:43.64ID:LkrBFLk10
9.0のrecordってデータベースとのやり取りに使うシンプルなクラスには積極的に使っていったほうがええんかね?
812デフォルトの名無しさん (ワッチョイ cb68-dxvU)
2021/05/08(土) 20:46:20.44ID:v+2mVqTb0
単純計算の時間って完全に比例するんですか?
繰り返し処理で
10万回 2桁同士の掛け算を行う。
12万回 2桁同士の掛け算を行う。

これって後者のほうが平均とると必ず時間がかかるんですか?
813デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/08(土) 20:51:21.18ID:CLNCGw4K0
コンストラクタで例外投げるかどうかは宗教論争感あると思うので棚上げにしてます。質問が悪かったです
自分が聞きたいことはDebugあるいはTraceのAssertメソッドの使い所でした

>>806
使い所ないんですかね
どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
.Net1.1やその前からあるみたいなので、テストフレームワークが流通してないころに使われてた過去の遺産なのかな
814デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/08(土) 22:58:15.52ID:W+LjP6QJ0
>>812
汎用PCの場合
速度なんか測ったって
その場合はそうだったんだろとしか言いようがない
裏でウィルスバスターや
セキュリティソフトや
会社の監視ソフト
WindowsUpdateなど
色んな複合要素がありすぎてみんな速度なんか測るのやめちまったよ
815デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 23:37:30.49ID:6+YQB65FM
>>813
検証処理が非常に高価な場合はDebug.Assertを使う理由にならんこともないが、そんなことは滅多にないよ
ほとんどの場合、検証は安価であり本番で検証をスルーしてしまうリスクとは比べるまでもない
C言語のようにほんの些細なオーバーヘッドすら嫌うような言語とは考え方が違う
816デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/08(土) 23:47:06.02ID:+76Iryda0
そもそもアサーションをいつの段階で期待してんだ
まさか実運用環境をデバッグビルドで走らせるのか

コンストラクタでの例外は、やるなっていう言語が存在するのは確かだが、宗教以前に言語の問題
C#では別に問題なかったはず
817デフォルトの名無しさん (ワッチョイ da2d-gUNg)
2021/05/08(土) 23:50:56.30ID:ef0LnTY20
Debug.Assert()はバグってる原因を探る時に、想定通りの値になっているかを確認する時に使うな
確認が終わったらソースから消すけど、万が一消し忘れても影響無いし
Trace.Assert()は使ったことない
818デフォルトの名無しさん (ワッチョイ dabd-6gku)
2021/05/09(日) 00:29:36.29ID:qLvHom4Y0
803だけど昔「コンストラクタで例外投げたりアカンぞ」みたいなことを本で読んだ記憶があったんだがいま読み返したら完全に自分の記憶違いだった 申し訳ない
819デフォルトの名無しさん (ワッチョイ b7e4-vR7S)
2021/05/09(日) 00:51:47.19ID:RBUe6vIe0
職場でExcelVBAとACCESSをある程度動かせるようになったので、ステップアップしてC#を勉強してみたい。
勉強用のサイトやオススメの本などあったら、教えて頂けませんか?
820デフォルトの名無しさん (ワッチョイ cb68-dxvU)
2021/05/09(日) 01:01:53.07ID:6r3obgDk0
2D格闘ゲームって3Dのapiがなくても作成可能ですか?
何か昔っぽいゲームを作りたくなってワクワクしてます。
環境はvisualstudioです。
821デフォルトの名無しさん (ワッチョイ 9f02-dxvU)
2021/05/09(日) 02:07:45.79ID:xtmxe3CZ0
誰か助けて。WebView2を使ったプログラムなんだけど
以前動くやつを作ったプロジェクトを今日久しぶりに触ったら
「System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'」
と出てまったく動かなくなってしまってた… 一行も弄ってないのに
本当に何にも触ってないんだけど一体何が悪いのか。
822デフォルトの名無しさん (ワッチョイ 6a79-EEf/)
2021/05/09(日) 02:15:39.31ID:KIYocDNB0
>>820
速度イラネってなら別だが、2Dでも細かい事やろうとするとC#の手に余る
せめて描画エンジンはC/C++で書いた方がいい
823821 (ワッチョイ 9f02-dxvU)
2021/05/09(日) 02:55:26.73ID:xtmxe3CZ0
原因が分かった。プロジェクトのディレクトリを移動すると動かなくなるみたい。
でも何故なの?どこを修正したら良くなるか誰かおしえて!
824デフォルトの名無しさん (ワッチョイ 7f54-WEa1)
2021/05/09(日) 03:56:24.54ID:SmU3pbXq0
>>823
WebView2ランタイムが見つからないんだとエスパーすると、
ソース内でWebView2ランタイムの場所指定してるとこ要チェック。
825デフォルトの名無しさん (スププ Sd8a-hETr)
2021/05/09(日) 08:16:13.97ID:Bo6dSg5rd
>>819
c#でググるとすぐ出てくる入門サイト。
何故かというと、今後も何か調べるときにすぐ出てくるサイトだから。
826デフォルトの名無しさん (アウアウクー MM73-+y/8)
2021/05/09(日) 09:32:19.94ID:5OOG3JrHM
>>819
ネットで漁る
独習C#
実戦で役立つ C#プログラミングのイディオム/定石&パターン
827デフォルトの名無しさん (ワッチョイ 0b93-/hng)
2021/05/09(日) 09:44:58.83ID:ip1MRNKD0
例外投げちゃいかんのはデストラクタでは
828デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/09(日) 12:02:06.30ID:A+xFAhosa
いやコンストラクタで例外投げるな、投げたい時にはファクトリーメソッドを使え、
という議論は確かに見たことある。

自分はコンストラクタで例外投げたいと思ったことがないので興味が持てず
詳細はよく覚えてないけど、それなりに説得力はあったような気がしたけどな
829デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/09(日) 12:22:22.59ID:SuJMzV5Hr
自分の知らんところでコンストラクタ使われたら例外拾えないとかそんな腐った理由だろう

何があってもインスタンスが帰って来る状態が欲しいんだろうがその後処理を誤ると簡単に詰む
そんな甘いことを言ってるとバグ作るだけ
830デフォルトの名無しさん (ワッチョイ 6ae4-vR7S)
2021/05/09(日) 12:33:09.11ID:uZxXAkBZ0
>>825-826
アドバイスありがとう!
831デフォルトの名無しさん (ワッチョイ 2a63-jjtP)
2021/05/09(日) 12:44:50.59ID:2oHJe1AX0
コンストラクタで例外投げるとオブジェクトが中途半端に作成されたものがゴミとして残るからだよ
832デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/09(日) 13:18:38.53ID:6ong4OY90
・コンストラクタで例外おきるとデストラクタが呼ばれない説
 ⇒確認できた
・デストラクタが呼ばれないのでGCされずにメモリリークが起きる説
 ⇒確認できず。list.add(new Hoge())を1000回で、Hogeコンストラクタ内で例外起こすかどうかで確認。
  例外起こさなければ使用メモリ増えるけど、例外ありの方は増えない。やり方が悪い?

メモリリーク云々はC++とかの話が元みたいで、それも例外投げるなではなく投げる場合は適切に参照を削除してから投げろみたいな話だったと思うのだが、
c#の方は問題ないのか?
標準ライブラリにもコンストラクタで例外返すやつあるのでそれの実装が見たい
833デフォルトの名無しさん (ササクッテロロ Sp33-+yJN)
2021/05/09(日) 13:21:46.98ID:hhBpMcqQp
残って気持ち悪いとしたらDispose持ちのネイティブリソースだろうけど
そのへんクリーン書こうとしたらファクトリメソッドでもやること変わらんでしょ
834デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/09(日) 13:23:44.08ID:rwsrdF7nd
古いガイドラインだけど
>✔ 必要な場合は、インスタンス コンストラクターから例外をスローします。
だからダメってことはないんだよね

コンストラクターのデザイン - Framework Design Guidelines | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/constructor
835デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/09(日) 13:33:06.24ID:6ong4OY90
ちょっと大きめのメモリ割り当てたら1回の例外発生時にGC呼び出されてるのも確認できた
836デフォルトの名無しさん (ワッチョイ 6a01-wt3T)
2021/05/09(日) 13:38:09.58ID:WHUEfE6G0
>>813
> どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
ざっくりその認識で正しいよ
内部的にはあり得ない状態ならAssert投げる
デバッグ終えたら削除とかアホのやること
注意すべきなのはassertの条件の所に副作用を含む式を書いちゃいけないことぐらい
837デフォルトの名無しさん (ワッチョイ aa7c-ibqQ)
2021/05/09(日) 13:42:03.78ID:yIvZIEF/0
そもそもなんでもかんでもエラー処理を例外任せにするのが間違ってるような
838デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 13:46:49.04ID:rAnETUQPM
C#ではコンストラクタで例外が出るとファイナライザが呼ばれないことから
コンストラクタでは例外を出すべきでないとする派閥が昔は存在した

しかしこれが問題になるのはコンストラクタでアンマネージドリソースを確保してDisposeで解放するパターンを採用したクラスだけだ
ネイティブライブラリをPInvokeで呼び出すような低レベルの仕事では気を付ける必要があるが
そうでなければ気にしなくてよい

またそのようなアンマネージドリソースを扱う場合でもC#ではSafeHandleを実装して使うことになっている
SafeHandleを使う側はリークをことさら恐れる必要はない
コンストラクタで例外を投げてもよろしい
839デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 13:48:56.57ID:aeEkFGhTM
>>833
例外投げるなら、その前に既にnewしたものを全部綺麗にDisposeしなきゃいけないわけだけど
そこまで考慮して正しく実装されたコンストラクタなんてドカタのコードで見たことないな
自分でthrowしなくても呼び出し先から例外が飛んでくるケースもあるから、本来は常に考慮が必要
あくまで可能性の問題としてだけど、コンストラクタで例外を投げるとDispose漏れが起こりやすいのは事実だと思うよ
漏れを完全に防げなくても、GC任せで問題にならない程度に頻度を抑えることはできる
840デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/09(日) 13:53:06.35ID:V90kiCWja
>>836-837
ちょっと何いってるのかわからないw

>>838
なるほどね。
コンストラクタで例外投げてもほとんどの場合
問題がないことはよくわかったけど、
それでも個人的にはやっぱり避けるかな。

コンストラクタで例外が飛んでくることを想定してないプログラマが多い気がするから。
あえて違和感を感じさせるためにファクトリーにすると思う。
まあ屁のツッパリ程度の効果しかない気もするが。
841デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 13:53:17.09ID:rAnETUQPM
>>836
プログラマが内部的にありえないと考えている状態が実際に発生するかしないかはプログラマにはわからない
それがバグというものの性質だ
バグはプログラマの意識の外からやってくる
プログラマが間違えるからバグが発生する

なので絶対に起こらないから本番では外しちゃえなどと安易に考えずに
俺の考えではまあまず起こらないと思うけどもし起こったらやばいから念の為に残しておこうと考えたほうがよい
842デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 13:56:13.68ID:aeEkFGhTM
>>838
.NET 5以降ではCERが廃止されたからSafeHandleは意味ないよ
843デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 14:05:22.60ID:aeEkFGhTM
ちなみに.NET Framework(非Core系)でもCriticalFinalizerObjectに意味があるのは複数のAppDomainを使ったアプリケーションの場合だけだよ
あまり理解されてないけど、99.9%の人には無関係な極めてニッチな機能
844デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/09(日) 14:06:37.90ID:KNQAmpF60
また空中戦やってるな
設計はどうなってるのか?もこだわらず
どう処理したいかばっかり
客がエラー扱いにしたいって言ったら
テメーの例外のこだわりなんかゴミ箱だ
逆もまた然り
845デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 14:12:54.16ID:aeEkFGhTM
いや客ってのがユーザーのことなら例外処理なんて客と無関係な純粋に技術的な問題でしょw
多重下請けならその限りではないかもしれんが
846デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 14:27:16.94ID:rAnETUQPM
>>842
SafeHandleはCERのためのものではなく
アンマネージドリソースハンドルのラッパーを提供するための共通基盤でありCER対応はその部分でしかない
SafeHandleは依然として有用だよ

初心者は参考にするといい
https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/implementing-dispose
847デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 14:30:18.11ID:rAnETUQPM
もちろんオレオレハンドルラッパーをDIYしたいならそれを止める権利は俺にはない
しかし趣味ならともかく仕事ではDIYを避けたほうがいいだろうねとアドバイスだけはさせてもらおう
848デフォルトの名無しさん (ワッチョイ 9f02-dxvU)
2021/05/09(日) 15:15:59.96ID:xtmxe3CZ0
>>824
ありがとうチェックしてみるよ
849デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/09(日) 15:17:59.75ID:E0SRP95CM
>>846
それは眉唾だな
docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle?view=net-5.0
例えばこのサンプル、SafeHandle派生クラスを実装した上で更にそれを適切に解放するために普通にDisposeパターンを実装してる。
これが典型的な正しいSafeHandleの使い方だ。
CERが無いなら手間とミスしうるポイントが余計に増えるだけにしか俺には思えないね。
850デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:32:32.00ID:SuJMzV5Hr
newしたものが綺麗にdisposeされないって馬鹿のコードだろ

そもそもが引数チェックではじいてからnewするだろ馬鹿じゃないかと
851デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:40:33.58ID:SuJMzV5Hr
.netの内部でもこんな感じで普通にコンストラクタで例外投げてる
これ以外でどうやって通知すんだよ
馬鹿者が

if (path == null)
throw new ArgumentNullException("path", Environment.GetResourceString("ArgumentNull_Path"));
if (path.Length == 0)
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
852デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/09(日) 15:45:00.43ID:E0SRP95CM
>>851
ArgumentExceptionは開発時のバグであり、ソースの修正が必要だ
そのまま実行を継続すべきものではないから、リソースの開放漏れ云々は全く関係ない
853デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:49:17.16ID:SuJMzV5Hr
コンストラクタで例外は投げても良い

でもおかしなことをする奴がいるからコンストラクタでは例外投げるなは暴論
854デフォルトの名無しさん (アウアウエー Sae2-D3Lk)
2021/05/09(日) 15:51:19.62ID:FUAnWwVaa
>>849
プラットフォーム呼び出し時の参照カウントなどはどうする?
855デフォルトの名無しさん (ワッチョイ ea61-LExt)
2021/05/09(日) 22:04:27.52ID:pySvIkdW0
例外はcatchして握りつぶすのが吉
856デフォルトの名無しさん (ワッチョイ a6da-XZlr)
2021/05/09(日) 23:19:09.95ID:CIQV7Tg10
async voidも多用すべし
857デフォルトの名無しさん (スップ Sd2a-5xeF)
2021/05/10(月) 07:43:24.96ID:v9qGjilad
クラスとかメソッドとか分けるときの命名が大変で時間が掛かるお…
適当にそれっぽい英単語繋げてるけど、メソッド名が50文字以上になることがよくあるお…
ForとかByとかFromとかも使うとより長くなるんだお…
どうしたらいいんだお?
858デフォルトの名無しさん (ワッチョイ 3ebb-EEf/)
2021/05/10(月) 08:00:47.54ID:XZUy8xNJ0
>>857
俺は命名には
https://codic.jp/engine
使ってる

文字数減らすためじゃなくて、英語力不足を補うためだけどw
50文字超えることはあんまりないかなぁ。
859デフォルトの名無しさん (ブーイモ MMd6-tepi)
2021/05/10(月) 08:05:31.40ID:AtOV5vKAM
>>857
https://www.japan9.com/cgi/rand_num.cgi
860デフォルトの名無しさん (スップ Sd2a-5xeF)
2021/05/10(月) 08:26:26.05ID:v9qGjilad
>>800
自分は投げますね
MSが作ったデフォのクラスにも投げてるやつあったと思うのでそれを言い訳にしてます
861デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/10(月) 08:28:55.47ID:EOKyCo1ad
>>858
>>859
ありがトンブレロ!
862デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 08:51:24.61ID:y0jj8Ah00
引数エラー一個一個出してくわけには行かない場合例外だと処理しにくいな
863デフォルトの名無しさん (スププ Sd8a-hETr)
2021/05/10(月) 09:51:39.48ID:6ezg7cUTd
コメント打つ代わりにフルスペルで命名するっていう手もあるよね。
そうすれば入力する手間は変わらない。
でも英語が見慣れてなくて辛い。
864デフォルトの名無しさん (ブーイモ MMd6-tepi)
2021/05/10(月) 09:56:18.04ID:AtOV5vKAM
C#は日本語ok
865デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/10(月) 12:05:19.67ID:OSpjgtmc0
命名に悩んで手が止まるのアホらしいので、一旦日本語で命名して後で英語に変えてる
866デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/10(月) 12:08:15.82ID:EOKyCo1ad
下手に英語やローマ字使うより日本のプロパティ名を使った方が分かり易いこともありますな
敢えて外人だけに意味を理解しにくくさせたいときなんかにも使えそうですな
867デフォルトの名無しさん (ワッチョイ 3ebb-EEf/)
2021/05/10(月) 12:21:43.63ID:XZUy8xNJ0
>>866
どんな場面を想定しているのか、すげぇ気になる
868デフォルトの名無しさん (ワッチョイ 6642-jjtP)
2021/05/10(月) 12:34:14.65ID:3Mkz5DyC0
enumの要素が日本語だとコメント要らずではある
本体がアルファベットならインテリセンスも問題ない
869デフォルトの名無しさん (ワッチョイ fbad-t4JP)
2021/05/10(月) 12:37:31.60ID:85dwBuQM0
国民健康保険保険者番号、という単語を変数名にするときは、だいぶ議論した上で、
kokuho_hnoになったな。
national_health_insurance_insurer_numberはとても反発が大きかった。
870デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 12:56:28.88ID:2MQuNC0ra
英語力がボトルネックになってるケースはむしろ少ない気がするね。
命名下手な人は日本語でも意味不明な名前付けそうな気がする
というより、だいたい命名以前の問題で既に失敗してるんだよね

普通のプログラマはそれが何をするメソッドなのか、「何者」なのかを
明確にしてからメソッドを書き始める。

命名で止まっちゃう人はそこがいい加減なんだよね。抽象化が出来てない。
871デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 13:00:52.85ID:y0jj8Ah00
enumって継承できない?
872デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/10(月) 15:31:20.10ID:lCZGOQhNF
>>841
良い心掛けをお持ちですね
大事になすってください
873デフォルトの名無しさん (ワッチョイ 9f25-Fod4)
2021/05/10(月) 15:37:52.56ID:DLVUJfkF0
>>869
プロジェクト全体で使えるならnhi_insurer_numberみたいな略語ならありだと思うけどね
874デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 15:58:21.88ID:l/O9+A2Na
グロサリーは作った方がいいけどNHIで辞書に載ってるから(普通何だこれと思ったらググるよね?)
それはNhiIDでいいでしょ
875デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/10(月) 16:21:26.47ID:lCZGOQhNF
>>869
>>873

876デフォルトの名無しさん (ワッチョイ fbad-t4JP)
2021/05/10(月) 17:51:27.04ID:85dwBuQM0
俺も別に良いと思ったんだけど、とにかく反発がやばかった。
HNI_Insurer_No推しだった。
俺的には番号とついてるものにIDはまずい気がする。
877デフォルトの名無しさん (ワッチョイ 2a01-Yqly)
2021/05/10(月) 17:56:24.33ID:giJ6lOgz0
kokuho_hnoだと保険者番号と被保険者番号の区別がつけにくいので
nhi_insurer_numberとnhi_numberくらいがいい気がする
kokuho_insurer_numberでも別にいいかな
878デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/10(月) 18:24:14.99ID:id38dQYPr
変数名は単体で使ってるのか?
それともPersonクラスなどののメンバーなのかによって扱いが違う
879デフォルトの名無しさん (スププ Sd8a-t4JP)
2021/05/10(月) 18:31:34.09ID:Jv8jAyYxd
>>877
被保険者番号はhhnoという悲しいスタイルに。。
880デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 18:37:55.44ID:l/O9+A2Na
>>876
識別のために割り当てる符号は数字だろうがギリシャ文字だろうがID(identifier)でしょうw
ただ、保険者(業者)と被保険者を区別する必要があることに気づかなかった
この場合NhiIDはまずいね

まあスレ違い甚だしいな
881デフォルトの名無しさん (ワッチョイ 2a01-Yqly)
2021/05/10(月) 18:42:01.34ID:giJ6lOgz0
hhnoかぁ

nhiもそうだけどhhnoやhnoみたいな普段の会話で使わない略語よりも
kokuho_hokensha_noとkokuho_hihokensha_noみたいに
普段の会話で使う日本語読みに寄せたほうが何かと良さそうだね
882デフォルトの名無しさん (ワッチョイ aa7c-ibqQ)
2021/05/10(月) 18:42:58.08ID:zy2rFAto0
番号なのにnoとか付けないってセンスなくね?
883デフォルトの名無しさん (JP 0H0a-aC2w)
2021/05/10(月) 18:46:43.73ID:T4WFU4KFH
被保険者番号みたいなのは
コーディング規約をいじる裁量があれば日本語変数名が最強なんだよなあ
入力はちょっと大変だけど、視認性最強でドキュメントコメント不要になるし
英字表記に悩んだり表記ゆれに煩わされることもない、変な英略語覚えるのに頭使わなくて済む
884デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/10(月) 18:46:58.67ID:id38dQYPr
みんな業務はjavaの人なんだなと
885デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 21:46:48.97ID:y0jj8Ah00
基底クラスでenumのステータス持ってて
継承してそのステータスの種類が増えるとき
enumが継承できないとステータスの種類が増やせなくない?
886デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/10(月) 21:56:52.64ID:/NuMOBBIM
>>885
enumは決まった値しか取り得ない型
継承して取りうる値が増えたら、それは基底クラスにおける「決まった値のみを取る」という規約を破ってしまうことになる
規約を破らずに値を追加するには、継承せず普通にenumに追加しなければならない
887デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 22:00:17.01ID:y0jj8Ah00
>>886
したらステータス値はどうやって持つべきだと思ってる?
ここでenumが使えないと言うなら一体どこで使えと言うの?

まあ、const intで頑張ってるけど
888デフォルトの名無しさん (ワッチョイ 9f5f-DjaX)
2021/05/10(月) 22:38:40.75ID:8qfIqwaR0
>>871
出来ぬ、出来ぬのだ
俺も出来たら便利だよなーと思ったけどダメだった
889デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 00:18:16.99ID:lKBWqYLpa
率直に言ってenumを継承するって発想自体が理解不能w

>>885
enum Eを継承してFを作れるとして、Eの型のプロパティHogeを持つクラスAを継承してBを作っても、
Hogeの型をFに変えることはできないよね?

スーパークラスでステート値を増やすって発想に無理がある気がする
890デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 00:47:29.66ID:aDB05LmB0
>>889
継承してステータスの取りうる状態が増えるときはどーするの?
ステータスはenum使えってみんなが言うから使ったらこのザマだよ
所詮、プログラムなんか組んだことないアホの戯言だった
継承して増える可能性のある値はenumなんか使っちゃ駄目だってことだね
俺は一生使わないと思う
891デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 01:06:35.85ID:lKBWqYLpa
>>890
まずそういうケースがあんまりありそうもない気がするけどあるとして、

(1) ベースクラスを書く段階でサブクラスでありうる拡張を織り込んで予約しておく

(2) それが無理なら
enum BorderStyle {None, Single, Double, ExtendedStyle };

みたいにしておいて、BorderStyle == BorderStyle.ExtendedStyle
の時には別のプロパティでスタイルが決まるようにする
892デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/11(火) 01:27:29.73ID:qWgZ839v0
> Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
> Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.")

上の書き方の場合、文字列部分を定数で宣言できたってメリットあったと思うんだけど、$使う文字列挿入だとできないよね
使い分ければ良いだけだと思うんだけど、他に冴えたやり方あったりする?
893デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 01:28:06.43ID:aDB05LmB0
class作ってメンバでconst intにしようと思ったら
採番が面倒だから結局intになったわ
と思ったらそれもログ出力が面倒で
結局、状態クラス作ったわ
894デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/11(火) 01:31:27.37ID:m6WVK0Xg0
enumは基本的に定数をならべただけだから不変のものにしか使っちゃだめ

ステータスを表すクラス作れよ
895デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:06:49.74ID:aDB05LmB0
>>894
不変よ
少なくともプログラムが実行されてからは
だって状態を表してるんだから
変更が必要になるのは継承で分岐するソースコードの修正作業時だけ

こういう形でenumが使えないなら
今後継承を行う可能性が少しでもあるならそのクラスではenumは一切使えないということ
実際使わないほうがいいと思う

赤青ランプを継承して
赤青黃ランプを作ったときに
状態赤青がenumで作られてたらゴミ箱にブチ込むしか道はない
896デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 02:09:51.01ID:lKBWqYLpa
挿入文字列はコンパイル時に解析される(実行時に解析されるわけじゃない)と思うので(知らんけど)
stringの変数に挿入文字列自体を入れるとかできないと思うけど、そもそも何でそんなことがしたいの?

多言語化のために文字列リソースにしておきたいという動機なら理解できるけど
変数に入れたい動機が思いつかない
897デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:10:54.04ID:aDB05LmB0
>>896
ログ出力したいんじゃん?
898デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 02:12:53.21ID:1Lpm83JY0
>>895
enumの定義をclassの外に出して独立させれば
899デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:13:54.09ID:aDB05LmB0
>>898
何の解決にもなんなくね?
900デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:16:57.22ID:aDB05LmB0
>>898
赤青黄と赤青緑に継承で分岐したとき
どんなenum定義するって言ってる?
901デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 02:38:14.36ID:1Lpm83JY0
>>900
派生元も派生先も関係なく1つのenumで定義すればって意味で書いた
使う時はプロパティやメソッドでそのクラスで利用可能な値かをチェック
902デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 02:41:03.08ID:lKBWqYLpa
だからそもそも根本的に考え方がおかしいと思うよw
集合論的に考えてみて

例えば、

自然数⊂整数

ってことは明らかに「整数 is 自然数」ではないでしょ。
自然数を継承して整数を作る、とう発想がそもそもおかしい。
903デフォルトの名無しさん (ワッチョイ 8a52-KFFl)
2021/05/11(火) 03:32:52.71ID:/5H26xT50
>>895
赤青ランプを継承して赤青黄ランプを作るってのがそもそも筋が悪いだろう
N色ランプを作って赤青でも虹色でも好きに作ればいい
904デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 07:38:19.05ID:aDB05LmB0
は?設計書にそう書いてあって
矛盾なく動くのに何がおかしいんだよ
頭いかれてんのか
いいからこの場合どういうenumになるのかさっさと書けよクズ
905デフォルトの名無しさん (ササクッテロラ Sp33-Fod4)
2021/05/11(火) 08:46:28.86ID:8Zm8z2p2p
普通そう言う場合enum使わんしょ
継承後色がどうなるか確定的じゃないし
stateを普通にintで管理して、それにRGB入りの配列で色を割り当てたら?
906デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 08:55:42.36ID:aDB05LmB0
>>905
それだとプログラムの拡張の際に取りうる値が増える(実行時ではない。ソース修正時)可能性がある項目は全部enum使えないじゃん

まあ、実際使えないけど
907デフォルトの名無しさん (アウアウカー Sa7b-KFFl)
2021/05/11(火) 09:52:12.74ID:FCSidwoba
>>904
実装上の都合で赤青ランプに後付けで黄色を取り付けたのだから、色を表す定数として赤青のenumとは別に黄色の定数を定義することになるのは自然だろう。
それをあたかも三色同格のランプだと見せかけてるんだから、定数についても見かけ上同列に扱うためのenumを新たに定義しなければならないのは仕方ない。設計がいびつなのだから、内部処理的にもいびつになる。
908デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 10:10:24.00ID:aDB05LmB0
>>907
何言ってるかわかってる?
基底に20個ぐらいステータスあってさらに増え続けてるとき
継承した分だけenumに同じステータスを追加しまくれっていってんだよ
継承10も20もやったら大変だぞ
もう実際はハードごと20種類以上追加しないといけなくてやってられないから
俺はenumはゴミと切り捨てたけどね
909デフォルトの名無しさん (ブーイモ MM97-rYak)
2021/05/11(火) 10:33:16.06ID:aLadY06bM
>>908
だから追加できたところでそのステータスを何に使うんだよ
増やしたところで基底型では扱えない未知の値なんだから継承の意味がないだろ
910デフォルトの名無しさん (ワッチョイ 73b5-fceI)
2021/05/11(火) 10:45:31.24ID:fJhAJw720
♪燃~~えろよ燃えろ~~よ~~
911デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 11:02:46.92ID:aDB05LmB0
>>909
は?
お前、状態遷移組んだこと無さそうだからいいやw
912デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 11:03:10.18ID:8BKOP9bia
>>908
まだ言っとるんだねw
だから根本的に考え方が間違ってるんだってw

特化/汎化って言い方をすると思うけど、継承っていうのは
汎用的なものを特定用途に「特化」するものなんだってw

だから>>902に書いた通り汎用性が小さい自然数を継承して整数にする、って考えは根本的におかしいし、
汎用性が小さい2ステートを継承して3ステートの物にするというのも間違ってる

考え方が逆だ。
多ステートの特殊形が3ステートで、3ステートの特殊形が赤青黄でしょ。
赤青のロジックの一部を赤青黄で使いまわしたいなら継承以外の方法で考えましょう。

例えば、RGB.RをRB.Rに変換する変換関数は書けるんだから、
Color ToColor(RGB rgb){ ... }
というメソッドは、中で
Color ToColor{RB rb){ ...}
と使いまわすことはできる
913デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 11:06:54.31ID:aDB05LmB0
>>912
赤青黄はあくまで例であって実際にはハードの差分管理してんだよ
だから全部定義し直したらものすごい量になっちゃうの
914デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 11:11:17.08ID:aDB05LmB0
はっきり言うけど
べき論は結構だけど
enum型がこの仕様のままなら
なんにも使えない
もしくは使わないほうがいいと思う俺は
915デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 11:14:26.45ID:aDB05LmB0
じゃあ、いっそenumって定義をやめよう
state型が必要です

これでおk?

おそらくこれができたら
enumなんか誰も使わない
それだけの話
916デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/11(火) 11:14:32.61ID:FWZS8iTBF
>enumはゴミ

知ってた
917デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/11(火) 11:18:15.50ID:m6WVK0Xg0
>>895
不変っていうのは、実行時に変わらないって意味じゃないぞ
修正/機能追加でも変わらないってことだ
結論としては自分で書いてる通り
>今後継承を行う可能性が少しでもあるならそのクラスではenumは一切使えない
だよ。Enum継承したいってことはつまり変更したいってことだから

Color.RedやColor.BlueはEnumじゃないだろ
まあSystem.Drawing.Colorは構造体で継承できなかった気がするけど
そんな感じで作っとけ
918デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 12:02:27.73ID:N41oKzlma
>>915
話が通じない人だなw
問題はenumにあるんじゃない。
>>902にはどこにもenumなんか出てきてないでしょw

汎化するのに継承を使うのがおかしい。
継承は特化するのに使うんだってw
919デフォルトの名無しさん (ワッチョイ a662-W8a5)
2021/05/11(火) 12:55:03.04ID:9XfnnIxq0
どれの話をしてるのかわからんけど困ったことない

Enumでやる
virtual List<enum> Lamps => 赤、青を返す
override List<enum> Lamps => base.Lampsと黄を返す

Flagでやる
virtual Color Lamp => Color.赤 | Color.青
override Color Lamp => base.Lamp | Color.黄

Flag側で継承
[flag]
enum Color{
赤=1,
青=2,
黄=4,
Hoge=赤 | 青,
Hoge2=Hoge | 黄
}
920デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 13:34:53.46ID:aDB05LmB0
>>917
そんなの未来永劫保証できないじゃん
enum作った人本当にバカなんだね
使えないもん作ってろよって感じ
921デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 13:38:39.20ID:aDB05LmB0
>>919
基底に黒とグレーを追加
922デフォルトの名無しさん (ワッチョイ a662-W8a5)
2021/05/11(火) 14:03:01.12ID:9XfnnIxq0
>>921
別に俺が作ってる訳じゃないからそんなこと言われても知らんがな
enumでやりたくないならそれでいいと思うし好きにやりなよ
923デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 14:27:53.86ID:7X7kMfyca
>>919
enumの利点はコンパイル時に名前の集合を型として定義できる、
名前の集合が確定していて、だからインテリセンスが使えたり
集合に含まれないはずの名前が使われている間違いをコンパイル時に検出できることなので
それは代用にならんでしょ。

質問している人の問題はたぶん継承に固執してること。

部分集合を再利用して上位集合を定義したいって問題意識は分からんでもないけど、
emumなんてただの名前の集合なんだからそういう場合はコピペ継承するのが多分正解。
924デフォルトの名無しさん (エアペラ SDd7-/hng)
2021/05/11(火) 14:31:08.99ID:pmLjbtQdD
適材適所
925デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/11(火) 14:40:19.26ID:/TD/rkCHM
C#や諸々の言語はそもそも、継承の仕様が出来損ないなんだよね
Java 16みたいにSealed Classを定義できるなら、まだしもねぇ

どんなクラスでも継承できます、なんて言われてもね
全てのサブクラスの面倒を見るなんて、事実上不可能だろ

だからサブクラスを限定する仕組みが必要なのだが…
C#はまだまだ、遅れてるね
926デフォルトの名無しさん (ワッチョイ a662-W8a5)
2021/05/11(火) 14:45:04.15ID:9XfnnIxq0
>>923
ああ、そういう事ね
Nullとか空とかのEnumを用意しとくべきかみたいな話と似てるな
927デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 15:00:11.95ID:1Lpm83JY0
>>925
Javaのことは知らんけど
C#のsealed classでは駄目なの
928デフォルトの名無しさん (ワッチョイ a662-W8a5)
2021/05/11(火) 15:07:01.36ID:9XfnnIxq0
自分ならカスタム属性と拡張メソッド作って、集合.Hoge.Colors()で一覧を取れるようにするかな
まあケースバイケース

enum 集合{
[AddColor(Color.赤, Color.青)]
Hoge,
[InheriteColor(集合.Hoge)]
[AddColor(Color.黄)]
Hoge2
}
929デフォルトの名無しさん (ワッチョイ be2c-5KFm)
2021/05/11(火) 15:14:49.86ID:Fjpe2RX80
>>927
そっちじゃなくて継承できる型を限定する機能だね
ShapeインターフェイスをRectangleクラスとCircleクラスのみ実装可能にする
他の奴がTriangleクラスを作ってShapeを実装するのは認めない
930デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 15:43:37.19ID:1Lpm83JY0
>>929
なるほどC#に限定する機能はないね
コンストラクタのアクセス権をinternalにしてアセンブリを分ければ実用上はそんなに困らなそうだけど
931デフォルトの名無しさん (ワッチョイ 2a01-Yqly)
2021/05/11(火) 16:04:08.87ID:gVDvfxdk0
>>919
>override List<enum> Lamps => base.Lampsと黄を返す

これはEnumでやってるんじゃなくListでやってるだけのような・・
取りうる状態の範囲をEnumで表現してないしコンパイル時のチェックも無理だよね

>override Color Lamp => base.Lamp | Color.黄

こっちも型としてはColorになるので既存のColor定義が赤と青だけなら
全く別のEnumを新しく定義することか、既存の定義自体を変更して黄を足すかになるので
既存のコードを維持したまま新しいコードを追加することはできないよね?

Enumを使うべきユースケースじゃないからできなくて当たり前なんだけどさ
932デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/11(火) 16:18:03.82ID:qWgZ839v0
>>896
文字列の雛形をDBに持たせて、パラメータ部分を置換して出力するみたいなことやってたのよ
『置換して出力』部分を$使う挿入文字列で置き換えられたらいいなって夢想した

pythonの似たような機能でキーワード引数による指定が出来るから、似たようなこと出来ないかなって
> print('{first} and {second}'.format(first=a, second=b))

string.format使えばいいだけなんだけどね
933デフォルトの名無しさん (テテンテンテン MMe6-I8iA)
2021/05/11(火) 20:06:26.01ID:7D4cBYXWM
>>932のやりたいことが挿入文字列を共通化したいってことならおとなしくメソッド化して
string ToHelloText(string name, DateTime date) => $"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.";

Console.WriteLine(ToHelloText(name, date));
みたいな使い方するほうがいいんじゃ
934デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/12(水) 09:24:40.12ID:HCx7UYF5F
プラごみを減らすためにレジ袋有料化するって話と似てるな
そもそもピントがずれてるし前提も可笑しい
935デフォルトの名無しさん (ワッチョイ be2c-5KFm)
2021/05/12(水) 14:46:53.00ID:kcMRoKH40
リソースで他言語対応すると考えると欲しい気持ちは分かる
"Hello, I'm {givenName} {surname}."
"こんにちは、私は {surname}{givenName} です。"
みたいに書きたい
936デフォルトの名無しさん (ブーイモ MM97-tepi)
2021/05/12(水) 14:52:52.50ID:KOpdkLhcM
All your base are belong to us
937デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/12(水) 18:25:12.05ID:l5b/FJ1ur
evalをやりたいと言うことだな

テスト不可になるからいらんけど
938デフォルトの名無しさん (ワッチョイ 9f5f-Y/5H)
2021/05/12(水) 22:11:27.01ID:rLfxFtSp0
c#ってvisual studioインストールしたときに入ってるコンパイラじゃなくて
.Net 5に移行するのが良いでしょうか?
Microsoftも.Net 5移行を推進していきますかね?
939デフォルトの名無しさん (ラクッペペ MMe6-jV+5)
2021/05/12(水) 22:18:36.03ID:ApiPrDZMM
同じもの
940デフォルトの名無しさん (ワッチョイ 9f5f-Y/5H)
2021/05/12(水) 23:16:35.91ID:rLfxFtSp0
そうだったんですね!
941デフォルトの名無しさん (ワッチョイ 0bda-jV+5)
2021/05/13(木) 01:52:12.91ID:Q5JRmth30
コンパイラは同じ
実行環境やフレームワークは違う
942デフォルトの名無しさん (アウアウクー MM23-Wdz7)
2021/05/14(金) 12:23:19.63ID:4kCY9pobM
まさかC#でメンバ変数名のprefixにアンダーバー付けてないやつおる?
https://anond.hatelabo.jp/20210513215649
943デフォルトの名無しさん (ワッチョイ d1e3-Adon)
2021/05/14(金) 12:27:21.06ID:hPLmdAiv0
なんで今更感が半端ない
アンダースコアつけて怒られた記憶あるわ
944デフォルトの名無しさん (ブーイモ MM5b-M3SR)
2021/05/14(金) 12:32:54.76ID:o+OksdyUM
アンスコあかんの?
945デフォルトの名無しさん (アウアウクー MM23-Wdz7)
2021/05/14(金) 12:45:33.90ID:4kCY9pobM
今まで記載がずっとなくて、同じMicrosoftの子会社が出してるStylecopっていうコード解析ツールの言ってることなら正しいだろうって風潮だったんだけど逆転敗訴した感じ
946デフォルトの名無しさん (ワッチョイ 1fb0-sort)
2021/05/14(金) 12:49:56.23ID:idb/Si4k0
前までただのキャメルだったよな? 何かしっくりこないなあと思いつつあわせてたのに
というか>>942はちゃんとprivateのメンバ変数って書いてくれ
947デフォルトの名無しさん (ワッチョイ ab2c-mHP1)
2021/05/14(金) 12:59:44.72ID:ty8DhYlQ0
俺は今まで通り m_ + PascalCase でいく
948デフォルトの名無しさん (エアペラ SD73-f+4d)
2021/05/14(金) 13:15:24.24ID:fGdsMbaSD
キャメルケースの事をキャメルって略すのはどうも抵抗がある
949デフォルトの名無しさん (ワッチョイ aba7-4lYq)
2021/05/14(金) 13:52:15.03ID:xt/CNvYd0
スコープで付けると便利だけどね

gグローバルgUnko
mメンバmUnko
in引数入力inUnko
out引数出力outUnko
valローカルvalUnko
950デフォルトの名無しさん (アウアウウー Sa1d-JrGs)
2021/05/14(金) 14:00:51.83ID:E7dr4uiDa
>>942
さすがにアホなガイドラインでほとんど同意は得られない気がする。
バッキングフィールド限定なら少なくとも俺は賛成するけど。

まあ、普通のフィルドもバッキングフィールドも出番減ってるから
どうでもいいと言えばどうでもいいかも
951デフォルトの名無しさん (ワッチョイ 5342-Adon)
2021/05/14(金) 14:04:32.36ID:vWTxavwv0
アンダースコアはライブラリと被った記憶
C言語時代だが
952デフォルトの名無しさん (ワッチョイ aba7-4lYq)
2021/05/14(金) 14:10:10.14ID:xt/CNvYd0
ぶっちゃけ客先のカスタマイズできない環境で文字ちっちゃくて見にくいときあるからイラネ
953デフォルトの名無しさん (アウアウウー Sa1d-JrGs)
2021/05/14(金) 14:16:07.40ID:E7dr4uiDa
しかし、_でプリフィクスしとくとインテリセンスでフィールドが一覧できて便利だよ、
ってコメントは泣けてくるねw

普通逆じゃないかw
インテリセンスの候補に登場して欲しくない奴を_でプリフィクスするのが普通のセンスだと思うけど。
954デフォルトの名無しさん (ワッチョイ 1fb0-sort)
2021/05/14(金) 14:36:58.65ID:idb/Si4k0
>>953
そのコメントどこに書いてある?


ところで別の話なんだけど、
とあるデータの集計や加工をメソッドチェーンで書きたい考えと、その集計や加工をデータとは別のクラスかつステートレスで書きたい考えって両立できるのかな?
拡張メソッド使うくらい?
955デフォルトの名無しさん (ワッチョイ ff01-vB/y)
2021/05/14(金) 16:32:10.35ID:0kdm8qdh0
>>954
コンテナ(データ).加工(…).集計(…)

インスタンスメソッドは暗黙的にthisを使ってるのでステートレスじゃないってことなら拡張メソッドも同じじゃない?
956デフォルトの名無しさん (ワッチョイ cb68-gSvD)
2021/05/14(金) 19:49:54.05ID:xeRYEvYS0
オセロのプログラム作っています。
オセロが盤面にの上にくると影を描きたいのですが
これはフォームアプリでできますか?
957デフォルトの名無しさん (ワッチョイ f1da-Wdz7)
2021/05/14(金) 20:01:11.64ID:7GBYwo1U0
>>946
publicなメンバ変数って一般的か?
958デフォルトの名無しさん (ブーイモ MMe1-6eZC)
2021/05/14(金) 20:03:38.54ID:7vyBBBSUM
>>956
半透明の影を書き込んだ画像と影なしの画像の2種類を用意しといて切り替えたらいい
それ以上を求めるならFormsなんか捨ててちゃんとゲーム作りとしてUnityとかに再入門した方がいいよ
959デフォルトの名無しさん (スププ Sdd7-Ratl)
2021/05/14(金) 20:38:27.45ID:8fzMB91td
>>956
あくまでもWinFormでやるならGDI+っていう機能を調べて、
円をキャンバスに描けばオセロ程度のアプリケーションを作るのは楽かもね。
そりゃあ本気でゲーム作るならUnityだろうけど、
オセロの内容にこだわるなら、コンソールで十分なんだけど。
960デフォルトの名無しさん (ワッチョイ 03da-as9D)
2021/05/14(金) 20:41:16.98ID:95pD/4XI0
WPFならDropShadowEffectで一発
961デフォルトの名無しさん (ワッチョイ 3bad-z8Fo)
2021/05/14(金) 21:13:06.87ID:VM2FDDZI0
>>946
いや、そもそもそんなコーディングガイドラインは存在しなかった。各ツールやライブラリごとに好き勝手やってる
あと、privateだけじゃなくてinternalもな
962デフォルトの名無しさん (アウアウウー Sa1d-JrGs)
2021/05/14(金) 21:29:52.56ID:d3AihMu6a
>>956
「オセロが盤面にの上にくる」っていうのがどういう状況かよく分からんのだけど、
プレーヤーが置いた位置まで石が移動するアニメーション的な演出をしたいってこと?
963デフォルトの名無しさん (オッペケ Sr6f-Adon)
2021/05/14(金) 21:45:19.42ID:Hk5V+gvwr
m_とかアンダースコアつけるとかは原始人に見えてしまう
964デフォルトの名無しさん (アウアウウー Sa1d-JrGs)
2021/05/14(金) 21:49:55.96ID:d3AihMu6a
フィールドにmつけるのは割とそんな悪い習慣じゃないと思うけどアンダースコアは要らんね
mFooでいい。m_Fooにする意味が分からん
965デフォルトの名無しさん (オッペケ Sr6f-Adon)
2021/05/14(金) 21:50:54.76ID:Hk5V+gvwr
そっちの方が原始人度が高いとおもうがw
966デフォルトの名無しさん (オッペケ Sr6f-Adon)
2021/05/14(金) 21:51:52.40ID:Hk5V+gvwr
フィールドにメンバーのmをつけるのもどうなのかとw
967デフォルトの名無しさん (ワッチョイ eb0c-0qpL)
2021/05/14(金) 21:54:28.98ID:2Onmey4o0
プロジェクトで統一されてりゃなんでもええよ
センスだのなんだのは個人の信仰でしかあらへんのじゃ
968デフォルトの名無しさん (ブーイモ MM5b-1bOW)
2021/05/14(金) 21:56:28.53ID:et+gRElJM
一般的な流儀はキャメルmFooかスネークm_fooのどちらか
969デフォルトの名無しさん (ワッチョイ d978-sort)
2021/05/14(金) 22:00:45.23ID:krSfg/SG0
てめぇの流儀を勝手に一般化するな
970デフォルトの名無しさん (アウアウウー Sa1d-JrGs)
2021/05/14(金) 22:05:44.68ID:d3AihMu6a
>>968
キャメルとスネークの差異は単語の区切り方にあると思うけど、フィールド(メンバー)にmつけるのは
ハンガリアンだと思うので本来はちょっと別物だよね。

>>967
確かに人間には適応能力があるので基本的にはその通りだけど、
それでも優劣の差がないというのも欺瞞だとは思う
あるとしてもどうでもいい程度の差だろ?はいその通りですw
971デフォルトの名無しさん (オッペケ Sr6f-Adon)
2021/05/14(金) 22:20:25.04ID:Hk5V+gvwr
>>957
Xamlで
972デフォルトの名無しさん (ワッチョイ 1301-tI/9)
2021/05/14(金) 23:16:17.86ID:ijV+D4Iw0
>>969
そういうゴタクはキャメルとスネークより一般的な流儀出してから言いなよ
973デフォルトの名無しさん (テテンテンテン MM17-Wcp/)
2021/05/15(土) 10:06:46.25ID:DyddzWuxM
>>954>>953が書いてるコメントって
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions
のヒントのことか・・・・・公式ドキュメントでお墨付きつけてるのはちょっと酷いような

VS2019標準のLintでアンダースコア始まり変数名って許容されてたっけ?
最近VSCodeでしか書いてないから分からん
974デフォルトの名無しさん (ワッチョイ aba7-4lYq)
2021/05/15(土) 10:11:49.42ID:I4FgZZwl0
作ってるやつがゴミカスなんだな
昔のインド人は頭が良かったということで
975デフォルトの名無しさん (ワッチョイ 1fb0-sort)
2021/05/15(土) 13:01:38.70ID:K7/xaqOQ0
複数ルール混在するのが一番面倒なので、mでもm_でも_でもいいから統一してくれればいいかなあ
そんで_に統一しませんかって事か
976デフォルトの名無しさん (アウアウエー Sa93-PbQN)
2021/05/15(土) 13:35:41.44ID:u3bkv4kna
クラス内で揃ってればどうでもいい
977デフォルトの名無しさん (エアペラ SD5b-f+4d)
2021/05/15(土) 13:39:10.32ID:X2M8i/YMD
>>976
これ
978デフォルトの名無しさん (ラクッペペ MM17-JFKK)
2021/05/15(土) 13:45:45.41ID:Q8PHpDoBM
すまん
979デフォルトの名無しさん (ワッチョイ 6d87-9scZ)
2021/05/15(土) 16:04:03.86ID:k7UiOGH90
ほんまそれなんやが
アホな中華は1クラス1万ステップとか作ってくるからめちゃくちゃになるんや
980デフォルトの名無しさん (ワッチョイ 3fac-v+G2)
2021/05/15(土) 16:17:10.56ID:/1WA0n4U0
パフォーマンスどうなんそれ
981デフォルトの名無しさん (ワッチョイ 895f-/DSF)
2021/05/15(土) 18:21:31.59ID:aVMlO2Jw0
c#のprivateメンバー変数にアンダースコア付けろだと…
これが今後のルールになるのかな?
982デフォルトの名無しさん (オッペケ Sr99-Adon)
2021/05/15(土) 19:22:05.87ID:En4kpP4hr
ゴミみたいなルールで泣けてくる
983デフォルトの名無しさん (ワッチョイ aba7-4lYq)
2021/05/15(土) 19:28:07.03ID:I4FgZZwl0
ゴミカスが普段組んでもいないのにいいと思って考えちゃったクソルール
984デフォルトの名無しさん (オッペケ Sr99-Adon)
2021/05/15(土) 19:53:08.40ID:En4kpP4hr
これはひどい…

https://www.sejuku.net/blog/102559
985デフォルトの名無しさん (ワッチョイ f1da-Wdz7)
2021/05/15(土) 20:00:50.49ID:x5z5lzlG0
一般的にって根拠を示しにくいけど、Microsoft公認のコーディングルールって言うとStylecopが示しているキャメルケースしかありえないんだよな
mHogeやm_Hogeは論外で今回の更新によって_Hogeが台頭したけど
986デフォルトの名無しさん (ワッチョイ 7363-sort)
2021/05/15(土) 20:14:20.26ID:tihXB0Cj0
hogの意味を辞書で引く
987デフォルトの名無しさん (テテンテンテン MM17-6eZC)
2021/05/15(土) 21:11:59.64ID:EZTpChRKM
>>985
_Hogeじゃなくて_hogeな
MS自身が書くコードでは昔から一般的に使われてるルールなんで、そんなに驚くほどのことでもない
意識高いとこだとわりと採用されてるよ
988デフォルトの名無しさん (ワッチョイ 6dda-gSvD)
2021/05/15(土) 21:55:57.08ID:P/ScDIg90
いま入門書で勉強中の初心者です
コードは基本的に上から下に処理されていくと理解しているのですが
本に出てくるサンプルコードは呼び出す側のあとに呼び出される側のコードが書かれていることが多くてしっくりきません
何か理由があるのでしょうか?
989デフォルトの名無しさん (ワッチョイ 9fda-3Xtj)
2021/05/15(土) 21:57:54.60ID:Cs9vHg9X0
ないよ
990デフォルトの名無しさん (ワッチョイ 03da-as9D)
2021/05/15(土) 22:00:38.14ID:18pqJB1E0
そんなん言うたら、呼び出すメソッドが別ファイルの別クラスにあるのはいいんか?っちゅう話だよな。
991デフォルトの名無しさん (ワッチョイ 3bad-z8Fo)
2021/05/15(土) 22:03:52.54ID:t/RrGLho0
>>987
さすがにs_を標準にしちゃうのはかなり疑問だけどね
992デフォルトの名無しさん (ワッチョイ ff01-vB/y)
2021/05/15(土) 22:23:45.04ID:kOi9a7N70
>>988
多くの場合「全体 -> 部分」の順で理解したほうが
「部分 -> 全体」の順で理解するよりも圧倒的に脳にやさしいので
コードの構造もそれに合わせることで読みやすくしてる
993デフォルトの名無しさん (アウアウエー Sa93-PbQN)
2021/05/15(土) 22:39:14.46ID:Tm9lZ4XLa
>>988
呼び出し元を上から下に進んで
呼び出し先に亜空間ワープして
呼び出し先を上から下に進んで
呼び出し先が終わったらまた亜空間ワープで呼び出し元に戻って
呼び出し元をまた上から下に進む
994デフォルトの名無しさん (ワッチョイ 7363-sort)
2021/05/15(土) 23:03:58.43ID:tihXB0Cj0
関数など邪道
995デフォルトの名無しさん (ワッチョイ 9fda-3Xtj)
2021/05/15(土) 23:08:38.70ID:Cs9vHg9X0
全てasyncとlinqで実装
996デフォルトの名無しさん (ワッチョイ f1da-Wdz7)
2021/05/16(日) 01:12:40.73ID:cPyU4P820
>>988
昔のC言語は呼び出す前に関数宣言しておくか関数を定義しないとエラーだったから考え方は正しいよ
単にプログラム言語としての利便性が上がっただけ
997デフォルトの名無しさん (アウアウウー Sa1d-gSvD)
2021/05/16(日) 02:38:29.44ID:sFLeX0L5a
前方参照が不可でプロトタイプ宣言が必要だったのは単に当時の技術的な制約に過ぎず
本質的な物じゃないと思うよw

メソッドのソースコード上の位置(どのファイルの何行目にあるか?)は
「技術的には」何の意味も持たない、と言うのが正しい。

一か所からしか呼ばれないメソッドがあるとき、呼ばれる側のメソッドを呼ぶ側より上の行に
書きたがる人がいるし気持ちは分からんでもないけど、そんなのあくまで好みの問題。どーでもいいよそんなの、が正解。
998デフォルトの名無しさん (ワッチョイ 8925-fy9k)
2021/05/16(日) 05:34:08.17ID:fcFZ09AZ0
最近の言語だとどこでも関数宣言できるし、かと言って関数内だと一番下で宣言した関数を上で使えるって訳でもない場合もあるからね
トップレベルの処理は言語仕様によって分けられていることを理解するのは最初は結構大変なもんだ
999デフォルトの名無しさん (ワッチョイ 1301-tI/9)
2021/05/16(日) 09:15:56.70ID:RjyUN9Py0
>>988
呼び出される側のあとに呼び出す側のコードが書かれていても
> コードは基本的に上から下に処理されていくと理解しているのですが
ならしっくり来なくね?
Pythonみたいに動的に関数定義したいということかな?
1000デフォルトの名無しさん (ワッチョイ 1301-tI/9)
2021/05/16(日) 09:16:15.77ID:RjyUN9Py0
>>996
それ逆やぞ
10011001
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 20時間 17分 52秒
10021002
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

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



lud20250326131623ca
このスレへの固定リンク: http://5chb.net/r/tech/1616471904/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「ふらっと C#,C♯,C#(初心者用) Part150 YouTube動画>1本 ->画像>1枚 」を見た人も見ています:
ふらっと C#,C♯,C#(初心者用) Part152
ふらっと C#,C♯,C#(初心者用) Part160
ふらっと C#,C♯,C#(初心者用) Part139
ふらっと C#,C♯,C#(初心者用) Part134
ふらっと C#,C♯,C#(初心者用) Part154
ふらっと C#,C♯,C#(初心者用) Part155
ふらっと C#,C♯,C#(初心者用) Part159
ふらっと C#,C♯,C#(初心者用) Part147
ふらっと C#,C♯,C#(初心者用) Part148
ふらっと C#,C♯,C#(初心者用) Part121
ふらっと C#,C♯,C#(初心者用) Part149
ふらっと C#,C♯,C#(初心者用) Part119
ふらっと C#,C♯,C#(初心者用) Part151
ふらっと C#,C♯,C#(初心者用) Part148
ふらっと C#,C♯,C#(初心者用) Part143
ふらっと C#,C♯,C#(初心者用) Part129
ふらっと C#,C♯,C#(初心者用) Part132
ふらっと C#,C♯,C#(初心者用) Part133
ふらっと C#,C♯,C#(初心者用) Part141
ふらっと C#,C♯,C#(初心者用) Part138
ふらっと C#,C♯,C#(初心者用) Part128 [無断転載禁止]
ふらっとC#,C♯,C#(初心者用) Part92
ふらっとC#,C♯,C#(初心者用) Part88
ふらっと Q#,Q♯,Q#(初心者用) Part 1
何か楽しい教本・曲集ないの?(初心者用)
ブラックなベンチャーについて語るスレ(初心者用)
C#でゲームを開発したいんだけど、、、(初心者)
■第二回ParaFla!初心者教室 ■
詰めチェス部(初心者歓迎)
くだすれFORTRAN(超初心者用)その7
(初心者向け)ニー速の楽しみ方
女(初心者)だけど、耳コピします
街コン行く人集まれ(初心者向け)Part5
【PSO2】初心者を追い出せ!初心者潰し4つの秘技
キックボクサーのスレ(初心者&中級者歓迎)
【将棋】藤井聡太七段初監修!初心者向けSwitch用「棋士・藤井聡太の将棋トレーニング」発売決定
お前らって何年も描いてるやつと数ヵ月の初心者比べて絵の才能ないとか言って恥ずかしくないの?
くだすれAjax(超初心者用)
くだすれFORTRAN(超初心者用)その6
線形代数(初心者レベルから中級まで)
くだすれDelphi(超初心者用)その16
超初心者女装っ子いらっしゃい(大阪)
ヘッドバンキング初心者なのですが玄人の方いらっしゃいましたらちょっとアドバイスいただけないでしょうか
初心者にありがちなこと
FF11初心者にありがちなこと
初心者のころ勘違いしていたこと
テニヌ初心者にありがちなこと
自炊初心者になって気付くこと
キャンプ初心者にありがちなこと
TOEIC初心者にありがちなこと
MoE初心者がやっておくべきこと day3
ポケモン初心者が考えそうなこと
TOEIC初心者が知っておくべきこと
初心者のころ勘違いしていたこと  ★2
競馬初心者の皆藤愛子をオレたちの立場に置き換えると
キャンプ初心者にありがちなこと Part.3
初心者卒業したての戦闘機ファンにありがちなこと
【芸人】天津・向が解説 アニメ初心者が知っておきたい人気女性声優6人  花澤香菜、内田真礼、三森すずこ、早見沙織… #はと [muffin★]
C#初心者に教えてくれ~~
0からの、超初心者C#相談室
プログラミング初心者はC#から学ぼう
ガチのプログラミング初心者なんだがいきなりC#ってヤバいのか?
初心者
初心者
22:11:58 up 66 days, 23:10, 1 user, load average: 8.13, 9.52, 9.35

in 0.20705795288086 sec @0.20705795288086@0b7 on 062311