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

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

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

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/04/10(土) 23:55:58.75ID:GWhpBmtX0
え。
>if ((x & i << 1) == 0)
>if (bit & (1<<i))
2021/04/11(日) 00:13:20.51ID:Zc34G5gB0
あ、やっと気づきました
bit操作理解せずに、コピペで済ませてた弊害が出ました

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

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

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

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

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

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

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

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

そんなに簡単な話なら誰も論文なんて読まないよ〜 :-p
2021/04/13(火) 21:22:13.67ID:51HoYqEa0
ドキュメント代わりにしてるから入れる
///<summry>
の形式のやつ

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

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

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

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

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

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

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

こんな糞コード見たことないけどな。
2021/04/16(金) 21:41:25.62ID:UPAcC/fc0
デーモンコアと
マイナスドライバーを設定
try{
while(米が勝つまで回す){
@測る
Aマイナスドライバーを動かす
}
}
finally
{
Bデーモンコアを離す
Cif(青い光りが見えた){
Dみんなを退避
E逃げる
F救急車を呼ぶ
G遺書を書く
}
}

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

>>224
なんかサンプルないですかね?
2021/04/16(金) 21:53:27.03ID:XmBIRBCo0
溜めておいた例外を最後にAggregateExceptionのInnnerExceptionsにセットして投げれば
2021/04/16(金) 21:54:23.20ID:UPAcC/fc0
>>227
なんかそういう処理の書き方の流れが知りたい感じです
2021/04/16(金) 22:18:19.07ID:57BTnFcs0
年内に死にそう
2021/04/16(金) 22:48:51.32ID:yteCGRud0
NlogつかってファイルかDBに残すのが現実的じゃね?
https://nlog-project.org/
こんなやつ
2021/04/17(土) 00:39:50.34ID:v4ZcCEOKa
>>223
失敗してても処理が継続される時点でそれを例外を呼ぶべきか、そもそも疑問に感じるね。
2021/04/17(土) 01:02:22.39ID:v4ZcCEOKa
class DaemonSequenceException:Exception
{
  public Exception FooResult { get; set; }
  public Exception BarResult { get; set; }
....
}
とかみたいに他の部分の成否と無関係に実行できる各部分に名前をつけて、
その部分の例外をプロパティーで持つとかするのかね知らんけど
2021/04/17(土) 10:56:45.87ID:F6GtSG/H0
DirectoryInfo.GetDirectories は例外を送出するけど処理は継続する
2021/04/17(土) 20:32:02.82ID:mfYtpggw0
まあ、結論としては
c#的にはこういう複数の処理が失敗するまたは終了処理も失敗するケースは言語的には完全に想定外ってことですかね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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