X



ふらっと C#,C♯,C#(初心者用) Part134
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/11/28(火) 21:30:48.55ID:7U+HR4FY
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0034デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:01:58.77ID:MDGjrLn/
>>33
バッファの確保できるんだ
ありがとう
0036デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:41:03.14ID:GyXUhAN/
ただいま勉強中なのですが、↓のようなコードの設計、ネーミングその他は適切でしょうか?
身近に現役プログラマーの方がいないためいろいろと聞けないのが現状です。
なんでも指摘してくださると助かります。

public static class DirectoryUtils{
public static string ErrorMessage { get; private set; } = null;
public static bool DeleteFiles(string directoryPath) {
if (!Directory.Exists(directoryPath)){
ErrorMessage = "ディレクトリが存在しません";
return false;
}
try {
foreach (var file in Directory.GetFiles(directoryPath)){
File.Delete(file);
}
}catch (Exception exc){
ErrorMessage = exc.Message;
return false;
}
return true;
}
}
使う側
var success = DirectoryUtils.DeleteFiles(directoryPath);
if (!success){
MessageBox.Show(DirectoryUtils.ErrorMessage);
return;
}

//総変換数を求める
var totalNumber = GetNumberOfTotalConverting()
//Converting,Conversion,All,Total,Number,Count等々、悩んでいます
0037デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:57:07.61ID:4/Kw2onf
自分だったら
public class DeleteFilesResult
{
public string ErrorMessage { get; set; }
public bool Success { get; set; }
}
みたいなクラス作ってそれを結果として返すかな
0038デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:59:38.11ID:bodUKsOx
マジでぇ??
0040デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:10:55.88ID:KZMpS2G2
successならsucceededとかじゃないの
もしくは構造体なりで
if (result == RESULT.OK)
とか
0041デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:14:46.71ID:fgyKG67K
さっそくでたな

try catchはDeleteFilesメソッドの中じゃなくて
外で使うべき
0042デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:31:52.96ID:NSRWkE4O
>>36
静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
エラー情報は普通に例外を投げようよ。

単に失敗成功が分かってエラーメッセージが取得できればよいだけなら、
エラーメッセージはoutな引数で戻せばいい

あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
失敗しても継続する方が自然なような気もするけど...

DeleteFilesより明示的にDeleteAllFiilesの方がいいんじゃないか?
GetNumberOfTotalConvertingは長すぎ
それを含むクラスに適切な名前がついてればそんな冗長な名前にする必要ないでしょ
0044デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:33:52.93ID:fgyKG67K
DeleteFiles内部でtry catch受けていいのは
そのファイルをスキップして残りを消す場合など
0046デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:38:45.34ID:fgyKG67K
例外が飛んでそれをもとに制御が変わるなら
適切なtry catchの場所を考えるべき
0047デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:42:39.35ID:NSRWkE4O
あと、例外についてはとにかく何でもキャッチしたがる人と、
それに対するアンチテーゼで「例外は絶対キャッチするな」と主張する人がいるけど、
どっちも何か盛大に勘違いしてる極論だから眉唾で聞いた方がいいと思う
0048デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:45:33.13ID:fgyKG67K
そうだね

例外利用するならFile.Deleteのページを見て
どんな例外をスローするか調べたほうがいい

権限無くて削除できないとかあるから
0050デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:54:19.77ID:+8Yov6n2
頻繁な例外を想定するならロギングで出力した方がいいよ
エラーを毎回表示なんて非現実的だし無視してOK連打したら意味ないでしょ
それよりタイムスタンプつけてテキストファイルに保存した方が後から照会できる

問い合わせの多くは、何もしてないのに突然おかしくなった、というやつばかり
そういう時はログフォルダをzipで圧縮して添付してもらおうというわけ
0053デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:02:52.52ID:JGmUTbhc
>>36
同じく静的メンバにエラー状態持たせるのは論外だけど
どうしてもやりたいなら成功時にそれをクリアしないとダメ

bool返すよりoptionalみたいなのを返すのがモダン
0054デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:03:14.96ID:fgyKG67K
そのフォルダが相手のミスでリードオンリーにされた場合は例外情報が全部死ぬけどな
0055デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:12:59.73ID:GyXUhAN/
>>36です
こんなにレスがつくとは思いませんでした。みなさんありがとうございます。
@結果を格納するクラスを作成し、それを返し、参照する
Aエラー文字列を返す
B例外を投げるかoutな引数で戻す
どれもそういった発想が無かったので勉強になります。
ちなみにoutを使う場合はtupleを使って2つ返すのもありですか?

>静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
こういう風に指摘されるともっともっと勉強しようと励みになります。ありがとうございます。

>あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
>失敗しても継続する方が自然なような気もするけど...
たしかに処理の中断をするまでもないですね

例外処理についてはメソッドを呼ぶたびにtry catchを書くのが冗長という理由だけで中にいれてました。
制御が変わるかなど考慮すべきでした

optionalや>もしくは構造体なりでif (result == RESULT.OK) 
などまだまだ理解できない部分が多いので調べてきます
0057デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:30:30.87ID:GyXUhAN/
>>47 >>48
例外が起きた際、個々の例外によって制御を変える場合は個別に書いて、
MessageやStackTraceをロギングして終了するだけの場合はExceptionですべて捕捉する感じですか?
当初はIOException,UnauthorizedAccessExceptionなど書いていたのですが、
結局Messageしか使っていなかったので全ての例外を捕捉するようにしていました。
0058デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:36:03.91ID:pRhcAUD9
Directory.GetFilesはファイルを全部探してから配列でそれを返すので色々と無駄
列挙するだけならDirectory.EnumerateFiles
0060デフォルトの名無しさん
垢版 |
2017/11/30(木) 00:47:19.32ID:HGFQxRVI
教えてもらったことにお礼を言うのはいいとして変える必要があったのだろうか
0061デフォルトの名無しさん
垢版 |
2017/11/30(木) 00:53:26.33ID:3e4JD2ht
>>55
Tupleでいいけどちゃんと名前付けてね
もしvs使ってるならコード分析かけてみれば?
静的メンバーの公開とかは警告で教えてくれたはず
0062デフォルトの名無しさん
垢版 |
2017/11/30(木) 02:34:13.97ID:XJSgowiz
>>57
基本的に例外を避けたい理由がなければ例外を使えば良い

ロギングしてアプリを終了するならExceptionでcatch
復帰可能のは個別に対処(ディレクトリが見つからない場合は再入力を求めるなど)
0065デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:22:06.99ID:y7Hhz8p2
トプル
0066デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:40:45.12ID:BGl9IyNc
bool ok,int unkor,int unkog,int unkob

var unkc = GetUnkoColor();
if(unkc.ok){
成功
}else{
失敗
}

みたいな?
0068デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:47:18.95ID:saSKapUF
また、Exceptionが不遇な扱いを受けている
哀れすぎて何も言えねえ
0069デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:48:16.44ID:BGl9IyNc
また、大して考えず産廃を作った予感
言語開発者暇なのか?
Getしようとしたけど要素がないときもあるじゃん
全部例外で飛ばされるとかマジやめて
0070デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:59:17.09ID:saSKapUF
釈尊はnullは「無」であると説かれた
ナムー
0071デフォルトの名無しさん
垢版 |
2017/11/30(木) 11:21:23.77ID:ptf/uzH7
例外が邪魔とかoutイラナイわめいてるのは大抵Dictonaryでしょ
連想配列は銀の弾丸ではない、期待しすぎ
0075デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:25:17.12ID:EK0LYHwo
今はout引数で変数宣言できるようになったからかなりスマートになった
むしろタプルの必要性が疑問なくらい
TryGetXならnull問題もないし
0076デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:26:38.17ID:rx1MFcR/
何が返されるか分かりにくいじゃん
タプルで返して分割代入すればいい
0078デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:34:03.03ID:rx1MFcR/
そもそもタプルいらん
0080デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:51:45.93ID:Puu3loId
outでもクラスでも構造体でもタプルでも好きなもの使えばいいよ
>>78
いらんというお前のレスがいらん
チラシに書いとけ
0084デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:04:29.34ID:rx1MFcR/
>>79
.NETライブラリでも使われてないしな
0085デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:15:30.72ID:RhI3AKYT
outって呼び出す時に一々変数を定義しなきゃいけないのが面倒
Tupleは戻り値が分かりづらいって欠点がある
どちらも一長一短だから好きな方を使えばいい

.NETライブラリが使ってないから使わないって思考停止すぎんだろ
0086デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:19:26.22ID:rx1MFcR/
公認じゃない感あるし.NETの関数とマッチしないからな
0090デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:26:30.06ID:rx1MFcR/
そうそう、クラスでやれってことな。
0092デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:39:45.69ID:rx1MFcR/
>>88>>91は連動してて同じになっとるわ。
0093デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:42:28.63ID:OCgtcJe/
c#が気に入らなきゃMatzみたいにオレオレ言語作れよ
0094デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:01:20.98ID:2bRo+qFI
時間帯によってgpuの色味をコントロールするソフトを作りたいです
具体的にはf.luxみたいなソフトを作りたいのですが、かんたんですか?C#でいいんです?
f.luxはガンマ?が高目に設定されるようで、余計眩しく感じたりします
0095デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:06:23.80ID:rx1MFcR/
Windows10のナイトモードでいいよ。
0096デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:08:43.36ID:2bRo+qFI
時間帯によって徐々に変わるようにしたいのですが
0098デフォルトの名無しさん
垢版 |
2017/11/30(木) 18:39:49.21ID:yjKo9V4L
>>94
たまに似たような人がいるけど仕様段階で先が見えないくらいならあきらめた方がいい
このスレは設計のアドバイスをする役割ではないから
0100デフォルトの名無しさん
垢版 |
2017/11/30(木) 19:06:36.32ID:YyeHHjlB
画面関係ってOSのAPIレベルで標準化されてるのかな。
Win10だとそれっぽい機能がついてるから存在するのかもしれんが、それ以前のOSには存在しない気が

そもそも、昔よくあったOOPの責務の仕分け問題じゃないけど、画面の調整機能って
本来はモニター側が担当すべき機能でPC側でやるのはいかにも筋悪だよねw
0102デフォルトの名無しさん
垢版 |
2017/11/30(木) 19:09:36.21ID:Wh6PhrD2
スキルの無いやつほど難しい事をやりたがる法則
0104デフォルトの名無しさん
垢版 |
2017/11/30(木) 20:49:28.87ID:yjKo9V4L
>>100
アドベガンマが昔からあるのでアプリケーションで変えることはできる
スレ違いだし興味も無いのでこれ以上調べる気にもならない
>>103
やりたい人はやればいい
要件整理からはじめてガチ初心者にずっと教えるのが覚悟できれば
0105デフォルトの名無しさん
垢版 |
2017/11/30(木) 21:15:26.66ID:ZsTPl3HQ
>>85
c#7の新機能に出力変数宣言(out-var)がある。
これはこれで変数宣言を見落としそうだけど。
0108デフォルトの名無しさん
垢版 |
2017/11/30(木) 22:57:13.50ID:lpDomEoB
クッサ
0109デフォルトの名無しさん
垢版 |
2017/11/30(木) 23:04:10.82ID:dLltLXuH
値渡しと参照渡しの違いって、エクセルの貼り付けの「値のみ貼り付け」と「すべて貼り付け」みたいなもんですか?
0111デフォルトの名無しさん
垢版 |
2017/11/30(木) 23:45:15.41ID:dLltLXuH
>>110
なるほど。そこまで外れてなかったようで安心しました。
0112デフォルトの名無しさん
垢版 |
2017/11/30(木) 23:46:11.61ID:YyeHHjlB
>>109
変数:割り当てられたメモリー上の特定のアドレス範囲
値:変数の中身(変数に割り当てられたメモリーの範囲のバイト列)
参照:変数に割り当てられたメモリーの範囲の開始アドレス

まあ、値がwebページのコンテンツなら参照はそのURIみたいなもの
0113デフォルトの名無しさん
垢版 |
2017/12/01(金) 00:04:00.62ID:euIX7D1U
>>112
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
0114デフォルトの名無しさん
垢版 |
2017/12/01(金) 00:20:18.07ID:g1uYteJH
>>113
何も難しくないよw

2chで言えば参照渡しは人(メソッド)に対してレスのアンカーを示すだけで
中身は教えない。

値渡しはレスの内容のコピペ

参照渡し:
>>113

値渡し:
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
0115デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:09:10.01ID:0aG9Yubt
C#の次期バージョンではin参照渡しとかreadonly ref structとか参照渡し周りが超絶複雑になるよ
0116デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:15:31.37ID:WDfZGQOx
.NETライブラリがそれらを採用しないなら使わん
0117デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:53:17.68ID:prkNCuF1
>>116
ライブラリってのが何を指してるのかしらんが、CLRはパフォーマンス向上のために採用するだろ
0118デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:54:03.08ID:2xCFHlEB
なんの思想もなくただ思い付いた機能追加してんな
次世代の課題はどう考えてもコードの自動生成だからな
もうc#にそれを受け切るキャパはないと結論出してくだらん機能追加してんのかな?

この設計を実現するためのこの機能ってのがないよな
0120デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:17:38.98ID:iOkVpy7f
>>119
ごもっともだがmsの言語拡張にいったい何パーセントのc#プログラマーがついて行けてるんだろ?
0121デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:18:45.36ID:WDfZGQOx
無駄にごちゃごちゃするだけ
要らんやろ
0122デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:34:20.88ID:THofu70g
>>120
基盤のためだから、馬鹿な一般プログラマーはついていけなくていい
パフォーマンス向上だ間接的な利益を受けるから
0123デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:37:55.11ID:tm4OIa2O
値型参照関連の新機能はパフォーマンス向上のために追加されるから
使わん奴は一生使わんだろうな
0124デフォルトの名無しさん
垢版 |
2017/12/01(金) 11:15:01.09ID:iOkVpy7f
>>122
>>102の法則が発動され中途半端な馬鹿がグダグダで複雑怪奇な(当然バグだらけ)の
コードを量産するから困るのです。
0125デフォルトの名無しさん
垢版 |
2017/12/01(金) 11:19:59.25ID:KuFa7ekd
馬鹿と一緒に仕事しなければOK
馬鹿に仕事を発注しなければOK
そうもいかないって?馬鹿は大変だなw
0126デフォルトの名無しさん
垢版 |
2017/12/01(金) 11:25:04.63ID:iOkVpy7f
受託開発なんて馬鹿の巣窟だわ
0127デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:24:05.27ID:Y1F3euov
MicrosoftがVBを切り捨てたようにC#も底辺から切り捨てられていく
底辺プログラマの未来は暗い
0128デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:25:29.05ID:RDzVJ16W
C#は他の言語で便利な機能があれば取り入れようとしてる時期
rubyみたいに何でも取り入れてごちゃごちゃにならなければいいけど

本当の意味で新しい機能はしばらく追加されないだろう
0130デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:33:48.54ID:TMbg8N17
>>129
全部入れてるわけじゃない
思想的にあってるものだけ入れてる

似たような感じだったjavaとも進化の仕方から違いが見て取れるはず
C#の下位がjavaと思ってたけど今は結構違いがある
0131デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:42:25.56ID:WDfZGQOx
プログラマとして大事なのはコミュ力だから
0132デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:52:31.16ID:Y1F3euov
技術力があれば不要なコミュニケーションを大幅ぬ削減できるという事実から目をそらさないで
0133デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:53:48.42ID:iOkVpy7f
それはない
0134デフォルトの名無しさん
垢版 |
2017/12/01(金) 13:05:58.75ID:OnhdkLQO
そりゃC#にはVisualStudioとRoslynという超強力な助っ人がいるからね
さらにReSharper買えばリファクタリングも楽々
■ このスレッドは過去ログ倉庫に格納されています

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