ふらっと C#,C♯,C#(初心者用) Part134
レス数が1000を超えています。これ以上書き込みはできません。
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
0007デフォルトの名無しさん
垢版 |
2017/11/29(水) 12:58:28.27ID:VYTpT9vM
>>5
0008デフォルトの名無しさん
垢版 |
2017/11/29(水) 13:06:25.32ID:VdtxEj+u
SQL鯖へのConnectionもUsingの中に入れちゃっていいのかな?

昔は最初にConnection開いて、ずっと開きっぱなしの中で処理して、最後にCloseすることが多かったけど
不安定な接続(スリープで回線断)やミラーリングサーバーを考慮すると、いちいちOpen/Closeしたほうがいい。

だけど、usingの中に入れることで、いちいちDisposeされたら
接続キャッシュが機能せずに体感速度が落ちる、って風になる?
0010デフォルトの名無しさん
垢版 |
2017/11/29(水) 13:46:22.65ID:VYTpT9vM
>>8
SQL鯖でusing多用はいかん
try/finally使ってopen/closeしとけ
速度はopenしっぱなしとほぼ変わらん
0012デフォルトの名無しさん
垢版 |
2017/11/29(水) 14:00:58.53ID:VYTpT9vM
>>11
キミ以外なら
0015デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:37:12.11ID:VYTpT9vM
>>13
disposeしてないよ

何言ってんの?
0016デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:59:59.48ID:TUoM6+wa
>>15
やってることが、using使ったdisposeと等価なんだけど。

usingはtry/finalyの糖衣構文
(sql鯖のコネクションについては)closeとdisposeは等価

何か違いがあんの?
0017デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:18:48.57ID:VdtxEj+u
var SqlConn = new System.Data.SqlClient.SqlConnection(xxxx);

という感じの宣言は try/finaly の外でやっておいて
open/close は try/finaly の中でやる

って意味で書いたと思ってたけど、そうだよね?
0018デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:32:53.30ID:VYTpT9vM
>>16
msdnのSqlConnectionメソッドの
closeとdisposeの説明をちゃんと嫁
0020デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:42:07.66ID:VYTpT9vM
>>19
おじさん?
アフォな専門学校の生徒かと思ったわw

放置プレイしま〜す
0021デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:58:19.20ID:oopkzTyn
SqlConnectionメソッドってのはちょっと分からなかったけど
SqlConnection.Closeにはこう書かれてるな
> SqlConnection は、適用範囲外では閉じられません。
> そのため、Close または Dispose を呼び出して、明示的に接続を閉じる必要があります。
> Close と Dispose は、機能的に同じです。

DisposeはComponent.Disposeに飛ばされたから
そもそもSqlConnection.Disposeのページが存在しない
0022デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:08:15.43ID:TUoM6+wa
>>18
msdnに機能的に等価って書いてあるんだけど、なに読めば良いの?

>>17
try/finalyの外で宣言した変数を使い回すってこと?

usingを抜けなければ、disposeは走らないから、一度開いた同一の接続を使い回すのであればusingの中で、接続(open)を複数回するのであれば、個別の変数を切り直した方が良いと思うよ?
前提が違ってたらごめんね。
0023デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:14:21.18ID:rMr3voC1
アプリは生きててDBだけリセットかけたらもう一回接続しないと駄目?
なんかアクセス毎に開いて閉じて入れておかないと面倒な感じじゃね?
0025デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:58:34.09ID:Ypog5BGe
iPhoneのキーボードのこれhttps://i.imgur.com/PStMLdz.jpgはプログラム書くときのダブルクォーテーションとは違うんだな。ideoneでなぜかエラーが出たので気づいた。
https://i.imgur.com/wyCNyNM.jpgこれだと使える。

英字キーボードのやつ “””””””””””
ABCのほう """""""""""
0030デフォルトの名無しさん
垢版 |
2017/11/29(水) 18:28:48.92ID:Ypog5BGe
ideoneでちょっとした動作を試したりするときだけだな
0031デフォルトの名無しさん
垢版 |
2017/11/29(水) 19:16:09.42ID:Xxg0LpBt
明日屁湧いてるなw
0032デフォルトの名無しさん
垢版 |
2017/11/29(水) 20:50:56.63ID:MDGjrLn/
C#ってmalloc・calloc・realloc的なかんすえはありますか?
全部自動?
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買えばリファクタリングも楽々
0136デフォルトの名無しさん
垢版 |
2017/12/01(金) 21:14:22.99ID:IpWMomyL
outって使った記憶無いなぁってプログラム書いてたらTryParseで普通に使ってた
0138デフォルトの名無しさん
垢版 |
2017/12/02(土) 02:52:21.48ID:GXJK2Or3
Parallelで走らせてる処理を一時停止させる方法ない?
0140デフォルトの名無しさん
垢版 |
2017/12/02(土) 09:04:32.19ID:VVl/8CKy
private class Pixel
{
public byte R { get; }
public byte G { get; }
public byte B { get; }
public int Index { get; }

public Pixel(IList<byte> data, int index)
{
B = data[0];
G = data[1];
R = data[2];
Index = index;
}
}

private static (int x1, int x2, int y1, int y2) Solve(BitmapSource source)
{
var width = source.PixelWidth;
var height = source.PixelHeight;
var stride = width * source.Format.BitsPerPixel / 8;
var data = new byte[stride * height];

source.CopyPixels(data, stride, 0);

var pixels = data.Buffer(source.Format.BitsPerPixel / 8).Select((x, i) => new Pixel(x, i));

あるところのコピペですが、最後の行の data.Bufferで 「'byte[]' に 'Buffer' の定義が含まれておらず、型 'byte[]' の最初の引数を受け付ける拡張メソッド 'Buffer' が見つかりませんでした。」
となります。 Byte型にBufferメソッドはないのですが、なぜこのような記述になっているのでしょうか?
0143デフォルトの名無しさん
垢版 |
2017/12/02(土) 09:20:05.04ID:y4HB0lRC
>>140
多分元々はBufferメソッドは拡張メソッドとして定義されてたものだと思う。配列型のメンバに無くてもあとから追加したように見せるやつ。
0145デフォルトの名無しさん
垢版 |
2017/12/02(土) 11:40:59.81ID:VVl/8CKy
みなさんどうもありがとうございます。

>>141
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
なので問題はないと思います。

>>142
古い.NET Frameworkしろってことですよね?
やってみたんたんですけど、Byte型に Bufferメソッドはなかったです。

>>143
自作した拡張メソッドなら他人にはわからないですね。
やってることはBitmapImageからピクセルデータの配列を取得してるので
べつのものに置き換えて済みそうな気がするんですが・・・
>>144
知らないのでググってみました。色々できそうなので調べてみます。
0147デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:36:47.13ID:d+Ubtrjs
C#のint配列はArrayの派生クラスですか?
0149デフォルトの名無しさん
垢版 |
2017/12/02(土) 15:33:22.07ID:suCQ4i95
>>147
形式的にそう見えるようになっているけど、実際には通常のクラスの継承とは異なってるよ
配列は配列型という特別な種類の型であって、クラスや構造体とはまた異なるものだ
0150デフォルトの名無しさん
垢版 |
2017/12/04(月) 23:04:09.19ID:vR5lLnEi
AngleSharpの使い方について教えてください!

<div class="aaa" hoge="javascript:changeBackgroundColor(this);"> 
<span id="idxxx" class="laste_span">取得したい箇所</span> 
</div> 

このようなelementがあったとして、 

// 指定したサイトのHTMLをストリームで取得する 
var doc = default(IHtmlDocument); 
using (var client = new HttpClient()) 
using (var stream = await client.GetStreamAsync(new Uri(urlstring))) { 
  // AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる 
  var parser = new HtmlParser(); 
  doc = await parser.ParseAsync(stream); 
}

ここからdocに対してどのようにすれば取得したい箇所が得られるのでしょうか?
0151デフォルトの名無しさん
垢版 |
2017/12/04(月) 23:14:30.56ID:LqjCBPi+
...
}

var elm=doc.QuerySelector(“div.aaa span#idxxx”);
var text=elm.TextContent.Trim(); //文字列を取得
0153デフォルトの名無しさん
垢版 |
2017/12/05(火) 00:13:40.14ID:bv7GN3wK
id よりも先祖の階層は、指定する必要がない

最も子孫の、id 以降を指定するだけでよい
0155デフォルトの名無しさん
垢版 |
2017/12/05(火) 05:15:33.65ID:cXtd7Bhl
あるtextBox1と表示内容が同じtextBox2を作りたいのですが
textBox1.Text="hoge";
textBox2.Text="hoge";
と記述するのではなくて
visualstudioのデザイナーでコピーするだけでtextBox2を簡単に作れる様な方法はないでしょうか?
0157デフォルトの名無しさん
垢版 |
2017/12/05(火) 07:59:45.98ID:IsGNrsv0
連動させたいってこと?
0158デフォルトの名無しさん
垢版 |
2017/12/05(火) 08:01:01.32ID:cXtd7Bhl
すいません、Textの内容hogeは計算結果をstringに変換したもので毎回違うので
単にコピーしただけでは出来なくて困っています
0159デフォルトの名無しさん
垢版 |
2017/12/05(火) 08:02:23.95ID:cXtd7Bhl
はい、連動させたいということです
データバインドというので出来るのかなと思ったのですが難しくてよくわかりませんでした…
0160デフォルトの名無しさん
垢版 |
2017/12/05(火) 08:05:41.37ID:cXtd7Bhl
複数のタブで色々な計算をしていて、その結果を見やすい様にひとつのタブにまとめて表示させたい
という感じです
0161デフォルトの名無しさん
垢版 |
2017/12/05(火) 08:09:42.45ID:IsGNrsv0
コンテクストクラスを作ってタブ開いたときにそのコンテクストオブジェクトの内容を表示させる
0164デフォルトの名無しさん
垢版 |
2017/12/05(火) 09:35:53.48ID:5W3/kp5y
うむ。
textBox1.Text=res1;
textBox2.Text=res1;

textBox1.Text=res2;
textBox2.Text=res2;

こんな感じで毎回両方に代入すればいい。
0166デフォルトの名無しさん
垢版 |
2017/12/05(火) 12:23:48.53ID:Z3/XP0Jc
changed使えば
0167デフォルトの名無しさん
垢版 |
2017/12/05(火) 13:39:29.23ID:92ldxPu3
>>155
文字通りに解釈すると表示が同期するコントロールを継承・またはユーザーコントロールとして新しく作るってなるけど
>>164とどっちが楽とか考えてみたらいいよ
0168デフォルトの名無しさん
垢版 |
2017/12/05(火) 13:44:53.19ID:yVpW5F/D
EF初心者なんですがPKが有るDBでsaveChangesしようとするとPKが重複してるというエラー出ます。解決策を教えてください。
0170デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:14:21.88ID:BG6o1pBu
増減する情報(例えば、車種、色、ナンバー等)を管理するのに適したものは何ですか?

自作クラスを作って
  List<myClass> myList;
  myList.Add(new myClass());
myList.Remove(〜);
とするのと、
DataTableで、車種、色、ナンバーを Columnsとし、
Row の Add と Remove するのと、

実行速度とかの面で、どちらがよいでしょうか。
0171デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:27:09.86ID:K4lUm6I7
>>170
Listに1票
0172デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:28:03.32ID:AWED9izS
ListのAddはO(1)、RemoveはO(n)
DictionaryのAddはO(1)、RemoveはほぼO(1)
なのでキーがユニークになるならDictionaryを使えばOK

あとDataTableは余程のことが無い限り使っちゃダメ
0174デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:39:45.00ID:BG6o1pBu
DataTable はダメなんですか?

別件ですが、日時を有する情報で、ある特定の期間の直近のデータを特定したい場合があり、
Selectを使いたいのでDataTableを使った経験があるのですが、よくなかったですか?
0176デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:43:51.03ID:xkHn8EO8
DataTableは土方臭いから、やり方に拘るタイプの人は嫌ってることが多い
DataTable自体は、パフォーマンスに優れ、クソ安定した優秀な技術
愛用してるプログラマがクソなだけ
0177デフォルトの名無しさん
垢版 |
2017/12/05(火) 18:47:31.87ID:Yyswv8hy
DataTable よりも List を使うと 10 倍早くなる

DataTable 8.32, 8.12, 8.12 sec
list 0.88, 0.83, 0.83 sec
とう具合に、DataTable よりも list のほうが 10 倍早くなっています。
0179デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:04:36.42ID:rIDRW6+f
>>178
質問者が実行速度にこだわっているのならどうでもよくはない
そんな話するのならこの質問がどうでもいいってなる
0180デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:13:14.27ID:BG6o1pBu
皆さん、ありがとうございます。
速度も速いしクソにはなりたくないので、今回の案件ではlistを使う方向で進めることにします。

先ほど書いたとおり、以前DateTime型の絞込みでSelectが便利だと思いDataTableを使ったことがあります。
この場合も、listで、自力でソードや比較を実装した方が良かったのでしょうか?

まぁ速度の兼ね合いかとは思うのですが、皆様ならどうしますか。
0181デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:15:08.60ID:0r8GtYYi
8秒と0.8秒だったら大騒ぎだが80msと8msの差だったら無視できるという意味では
どういうものをどのくらい扱うかで違うから本人がテストしなきゃ仕方ないね
0182デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:17:31.03ID:k+S65OIc
DataTableはオワコン
Microsoftも切捨てようとしたがクレーマーの圧力に負けてしぶしぶサポートすることになった
0183デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:19:50.77ID:rIDRW6+f
>>180
まず用途が管理なのに保存しないとか意味不明なんだけど
データその都度読み込んで捨てるのなら作りやすい方で作って
速度アップ見込めそうなら形式を変えるだけ
0185デフォルトの名無しさん
垢版 |
2017/12/05(火) 19:47:42.46ID:C7A8AnoX
RemoveするならGetHashCodeとEqualsをちゃんと実装してHashSetにぶち込んだ方が良くない…?
0186デフォルトの名無しさん
垢版 |
2017/12/05(火) 20:12:24.58ID:ParyWK8l
リストに重複データが存在するかもしれないしHashsetにしていいかは不明だな
設計書とか作って主キーやユニークキーにあたるデータを明示的にしてんならそれでいいけど大抵はIEqualityComparer指定する方が使い勝手がよさそう
0187デフォルトの名無しさん
垢版 |
2017/12/05(火) 20:22:49.22ID:PhhOBNeX
>>180
先ずは作り易い方で作れ
速度面の改善をするのは、一通り完成してからでいい

ボトルネックは大抵、標準ライブラリからどのクラスを採用するかなんてレベルには無いから気にすんな
0188デフォルトの名無しさん
垢版 |
2017/12/05(火) 20:48:47.73ID:XeWx8Qol
>>169
分からないなら答えなくてもいいよ
0189デフォルトの名無しさん
垢版 |
2017/12/05(火) 21:03:05.57ID:BG6o1pBu
皆さん、レスありがとうございます。

色々と馴染みのないキーワードが出てきたので少しずつ調べて行きたいと思います。
0190デフォルトの名無しさん
垢版 |
2017/12/05(火) 21:42:08.05ID:IsGNrsv0
Googleのトップがプログラミング
0191デフォルトの名無しさん
垢版 |
2017/12/06(水) 08:39:00.97ID:Y6zaPgMb
>>182
クレーマー言うな。
EFが普及してないんだから仕方ない。

msはDataTableよりvb6に引導を渡してくれ。
0192デフォルトの名無しさん
垢版 |
2017/12/06(水) 15:27:39.07ID:nfsVfh5P
Webフォームを作っています。
サーバ上の特定のフォルダに、とあるファイルが不定期に生成されます。
それを監視してWebフォームに表示したいのですが、FileSystemWatherのようなコントロールはないでしょうか?

ない場合、Timerで回すしかない考え付かないのですが、通常Webフォームで1秒間隔程度なら許容されるインターバルでしょうか?
0193デフォルトの名無しさん
垢版 |
2017/12/06(水) 15:39:57.42ID:A61Dczsv
>>192
無いと言うか、あったところでその状況をサーバに取りに行かないとどうにもならん。

ユースケースによるかと。
コネクション数を気にしないなら、ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶのが一番機敏に動くと思う。
一秒間隔でリクエストはちょっと多いんじゃないかな。生成されてない画面を10人が10分開いたままにしたら、それだけで6000行もログが埋まってしまう気がする。
0194デフォルトの名無しさん
垢版 |
2017/12/06(水) 15:53:34.43ID:sywZU+Dz
>>192
問題ないけど不定期ならプッシュ通知の実装もありますよ
0195デフォルトの名無しさん
垢版 |
2017/12/06(水) 15:55:24.63ID:nfsVfh5P
>>193
言葉足らずですみません。

IISが動いているサーバにデータのファイルが不定期に生成されます。
それをWeb画面で様子をみたいという要望です。
動いてる様子が分かればいいのですが、ファイルがまとまって生成される事があるため、
ある程度短いインターバルにしたいとは思ってたのですが。

ローカルアプリも考えたのですが、その場合、複数のPCがサーバのファイルを覗きに行く事になるので、それはそれで嫌かなと思いまして。

> ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶ
もう少し教えてもらえないでしょうか。
APIって具体的に何で作ったどんな形式のものですか?
調べるヒントをください。


>>194
同じくもう少しヒントを!どんな感じの実装ですか?
0196デフォルトの名無しさん
垢版 |
2017/12/06(水) 16:07:24.35ID:sywZU+Dz
>>195
ごめん、Webプッシュと言うらしいけど未だ使ったことは無いんだ
グーグル先生に聞いてください
0198デフォルトの名無しさん
垢版 |
2017/12/06(水) 17:50:23.31ID:3KlZJVUn
C#を採用したTizen4.0っていうOSのスマホが発展途上国でバカ売れらしい
0200デフォルトの名無しさん
垢版 |
2017/12/06(水) 18:21:23.18ID:nv7gWMkp
この人と同一人物じゃないかと疑ってしまう

703 名前:デフォルトの名無しさん (ワッチョイ 02c2-8CrJ)[sage] 投稿日:2017/11/21(火) 21:20:36.17 ID:8K/pnPq30 [1/2]
最近のオシロスコープはWebサーバー機能を持っていて、Webブラウザでアクセスすると
計測画面を表示させることができますが、C#で同じような機能を簡単に実装することはできるでしょうか?
リモートデスクトップではなく、WinFormsのアプリ画面だけをネット越しに共有する感じです。
0206デフォルトの名無しさん
垢版 |
2017/12/06(水) 20:24:33.34ID:WLCLi8WA
通知が取得できるようになるまで長いことセッション張りっぱなしにするだけだぞ
悪手もクソも普通に使われてる手法
0210デフォルトの名無しさん
垢版 |
2017/12/06(水) 21:59:20.59ID:W/tg1Ic8
>>208
それが何か?
普通のHTTPリクエスト処理だって、リクエストを受け付けてからレスポンスを返すまで、
君の言葉で言えばクライアントを管理してるだろ
そのレスポンスを返すまでの時間が長いだけだよ
0215デフォルトの名無しさん
垢版 |
2017/12/06(水) 22:31:12.35ID:9Cl2Q0EY
そもそもサーバーのファイル一覧を表示するWebアプリなんか自分で作らなくても出来合いのOSSが腐るほどあるだろ
自分で作るより遥かに品質もいいよ
0218デフォルトの名無しさん
垢版 |
2017/12/06(水) 22:36:33.33ID:W/tg1Ic8
>>214
キャパシティ的な話をするなら、そもそもサーバーのディレクトリを各クライアントがネットワークドライブにマウントしても全く問題もないだろうな
用途的に、問題になるほどにクライアントの数が多いとは思えん
0219213
垢版 |
2017/12/06(水) 22:36:35.54ID:H2dXQlT6
って違うw釣られて間違えたw
クライアント側の話だよ
0220デフォルトの名無しさん
垢版 |
2017/12/06(水) 22:41:18.34ID:9Cl2Q0EY
>>219
ロングポーリングなら関係ないぞ
結局はサーバー側でのファイル生成イベントの発生頻度次第
0222デフォルトの名無しさん
垢版 |
2017/12/06(水) 23:56:51.95ID:5T1FsMv1
サーバー側はFileSystemWatcher(だったっけ?)でフォルダ監視してなんかあったらテキストファイルでもDBでも適当な保管場所に情報を保存するサービスと
その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?

自分ならそうするわ
ボリューム的に半日仕事で終わるし
0223デフォルトの名無しさん
垢版 |
2017/12/07(木) 01:41:57.78ID:h6BVmLyc
1秒じゃなくて4秒にしよう
0224デフォルトの名無しさん
垢版 |
2017/12/07(木) 07:03:53.69ID:e1xCIudC
他のアプリにキーボードのコマンドを送りたいのですが、どの様な方法があるでしょうか?
sendinputなど調べてみたのですが例が少なく今一理解出来ませんでした
0225デフォルトの名無しさん
垢版 |
2017/12/07(木) 07:58:46.72ID:h6BVmLyc
プロセス間通信
0226デフォルトの名無しさん
垢版 |
2017/12/07(木) 08:07:25.81ID:QlnDuWpW
>>222
> その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?
だからそれやるとクライアントが多い時にサーバーがパンクするからSignalRとかでサーバーから通知するって話
まあサーバーから通知って言うけど仕組み的にはイベント発生までレスポンスを返さないって言うだけのことなんだけどな
0228デフォルトの名無しさん
垢版 |
2017/12/07(木) 08:27:43.21ID:teoFHcQT
>>224
SendKeysで
sendinputは他のプロセスには送れない
0229デフォルトの名無しさん
垢版 |
2017/12/07(木) 08:50:35.95ID:afn7IHoQ
.netの場合クラスないでFontオブジェクトを生成した場合にはクラスを解放した場合は
Fontオブジェクトは解放されるの? Disposeすべきかどうかはどうやって調べたら
いいのだ?
0230デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:06:11.39ID:lA04OzcH
>>226
しないっつうのw どういう理解してる?
なんのためにわざわざ別にサービス作って保存してんだ

これでパンクするならごく普通のWebサービスも作れんわ
0231デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:31:29.62ID:vYoZ1cCC
>>229
パフォーマンスを要求するなら適切なタイミングで解放すべき。
どうでもいいならガーベッジコレクタに任せる
0232デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:32:55.56ID:vYoZ1cCC
質問の答えになってなかった
0233デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:43:44.03ID:teoFHcQT
>>229
IDisposable実装してないクラスは放置で良いと思ってる。
0234デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:56:49.03ID:ODzGS5Kr
FontをDisposeするコードは見たことも発想も無かったな
newで作ったら全部Disposeする発想なのか
0235デフォルトの名無しさん
垢版 |
2017/12/07(木) 10:58:19.97ID:vYoZ1cCC
Font, Pen, Brushはサイズ重いしな
0236デフォルトの名無しさん
垢版 |
2017/12/07(木) 11:44:12.26ID:Rln0TdUu
>>234
Fontはコントロールを自作する場合は(ほとんどの場合手抜きで)コントロールと同じ寿命に
することもあるけど、usingで対処できる場合が大半でしょ
0237デフォルトの名無しさん
垢版 |
2017/12/07(木) 12:54:28.08ID:QlnDuWpW
>>230
見たときに最新情報になってりゃいいんじゃなくて、イベントが発生したらあまり遅れずにクライアント側の画面を更新するんだぞ?
なぜSignalRとかの話になってるのか理解してないだろ
0238デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:02:41.60ID:lA04OzcH
>>237
そもそもWeb画面で見たいっつう要望じゃん
つうか100台同時アクセスして毎秒更新してもカスみたいな負荷だわこんなもん
一体どんな骨董品で動かす想定してんだよ
0239デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:07:11.00ID:lA04OzcH
そうでなくてもSignalRなんているかよ
サービスでtcpポートlistenしてイベント発生する都度情報を垂れ流す古き良きソケット間通信で十分だろw
0240デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:09:35.59ID:teoFHcQT
日本語で
0241デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:22:15.77ID:2pT1zkKO
>>239
ブ ブラウザ画面の話してるから要するにWebSocketってこと?
0242デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:29:39.70ID:lA04OzcH
>>241
いや
デスクトップアプリにするんでもソケット間通信でいいよねっつう話
0243デフォルトの名無しさん
垢版 |
2017/12/07(木) 13:51:52.29ID:+NxgTnqm
Webアプリで素のソケット通信って何なのさ?
0244デフォルトの名無しさん
垢版 |
2017/12/07(木) 14:33:53.52ID:LGA5S92E
質問者置いてけぼりでワロタ
いつの間にかサーバ側を何とかする話になってる
0245デフォルトの名無しさん
垢版 |
2017/12/07(木) 14:40:55.27ID:+NxgTnqm
皆さん、単純なものを複雑に実装するスキルをお持ちのようでw
0246デフォルトの名無しさん
垢版 |
2017/12/07(木) 15:33:24.53ID:BPsvGxGu
C#でデーモン作って状況をDBに保管して、webシステムは普通にDBからページ作れば良いんじゃね?
セッション全てがフォルダアクセスに行くと面倒だからそれだけ避ければいい
0247デフォルトの名無しさん
垢版 |
2017/12/07(木) 16:02:17.31ID:cbI0OqL3
知らないのならば
0248デフォルトの名無しさん
垢版 |
2017/12/07(木) 16:10:15.58ID:CONsZMOl
>>195
見たい時にボタンクリックして最新情報を取得すればいいやん。
常時モニターする必要性は無いだろ?
0249デフォルトの名無しさん
垢版 |
2017/12/07(木) 16:16:30.86ID:3BaUjcas
本当に初歩的なことで無知で予め謝るね、ごめんなさい。

var revokedPasswords = [
];

function getAuthenticationHash (password) {
var hasher = new jsSHA("SHA-256", "TEXT");
hasher.update("vira " + password.trim().toLowerCase() + " mate");
return hasher.getHash("HEX");
};

function isValidPassword (password) {
if (revokedPasswords.indexOf(hash) >= 0)
return false;

var hash = getAuthenticationHash(password);
if (validPasswords.indexOf(hash) >= 0)
return true;

return false;
};

context.getAuthenticationHash = getAuthenticationHash;
context.isValidPassword = isValidPassword;

というのがあって、これはパスワードを”SHA-256”ってやつで変換しろってことであってるのかな?
0250デフォルトの名無しさん
垢版 |
2017/12/07(木) 16:19:30.73ID:bi5OWsBC
>>249
ここはc#スレです
0251デフォルトの名無しさん
垢版 |
2017/12/07(木) 17:32:36.95ID:2pT1zkKO
>>249
はいそうです。
0252デフォルトの名無しさん
垢版 |
2017/12/07(木) 18:14:35.54ID:+Wu2cJH/
>>227>>228
ありがとうございます

最終的にバックグラウンドでキー入力を他アプリに送りたいのですが
どういった方法があるでしょうか?
0254デフォルトの名無しさん
垢版 |
2017/12/07(木) 19:35:39.52ID:qnTgxbKH
>>252
バックグランドってタスクトレイ常駐アプリにしたいって事?
NotifyIcon使えば出来るけど。
バックグランドがWindowsサービスって意味なら無理かな。

.NETのSendKeysは、半角カナや&は化ける。
WSHのSendKeysを使えば化けないかも。
0256デフォルトの名無しさん
垢版 |
2017/12/07(木) 20:48:22.81ID:p8nuhjj6
>>238が言ってるのは、クライアントがサーバーに対してXHRでも使って1秒ごとにポーリングすればいいということだと思うぞ
リクエストのたびにサーバー側でも毎回ファイルシステム舐めてファイル一覧作ってたら遅いだろうけど、
サーバー側ではFileSystemWatcherなり定期的なポーリングなりで非同期でファイル一覧のキャッシュを更新していけば、
クライアントが頻繁にリクエストしてきてもまず問題にはならない
0257デフォルトの名無しさん
垢版 |
2017/12/07(木) 20:50:09.09ID:lA04OzcH
>>256
普通誰が読んでもそういう理解になるよね
0258デフォルトの名無しさん
垢版 |
2017/12/07(木) 20:54:28.15ID:h6BVmLyc
>>255はWebに疎すぎる
0259デフォルトの名無しさん
垢版 |
2017/12/07(木) 21:06:57.10ID:p8nuhjj6
(A)サーバー内でのファイルシステムに対するポーリング と、(B)クライアントによるサーバーへのポーリング がごっちゃになってるのがこの話の混乱の原因
そこを非同期で分離するのはまず常識的な大前提であって、
ABそれぞれをどう最適化するかはそれほど重要ではない
とりあえず実装が手っ取り早いのはABとも定期的に更新することだし、
効率と即時性を追求するならAはFileSystemWatcherでBはロングポーリングorWebSocketだろうね
0261デフォルトの名無しさん
垢版 |
2017/12/07(木) 21:12:08.87ID:qnTgxbKH
質問主はWebアプリに拘ってるわけじゃないけど
沢山のクライアントPCからWebサーバのフォルダを共有したくないからWebアプリが良いかな程度に思ってるだけだろ。
Webサーバ上に監視サービス作るのならWebアプリに拘る必要は無いし。
0262デフォルトの名無しさん
垢版 |
2017/12/07(木) 21:19:32.52ID:lA04OzcH
>>260
>>193がバカだからね
仕方ないね

ファイルが生成されるまでタイムアウトしないAPIとか、1秒間隔のリクエストが多いとか、6000行のログとか
何もかも全てが意味不明だからね
どうしようもないね
0263デフォルトの名無しさん
垢版 |
2017/12/07(木) 21:21:02.83ID:p8nuhjj6
>>260
>>193と矛盾することは何も言ってないつもりだけどな
>>193>>259でいうBの部分の実装例を挙げてるだけであって、Aの部分については何も言及してないぞ
0265デフォルトの名無しさん
垢版 |
2017/12/07(木) 21:29:45.67ID:EeTBbz6o
じゃあ会社でLINQを薦めようとしたら、その前にまずユニットテストを覚えさせなければと愕然とした話でいいのか
0269デフォルトの名無しさん
垢版 |
2017/12/08(金) 02:03:25.04ID:cDyzbPRT
>>268
何やってるのかよー分からん記事だねw

イベントでリークが発生しうるのは相談室の方の97に書いてあるケースだけだと思う
それは違うって言ってる人もいるけど、たぶん何か勘違いしてるだけだと思うね
0270デフォルトの名無しさん
垢版 |
2017/12/08(金) 02:05:20.09ID:dE4K6487
{"status":"go","solution":{"Res":"0SpQ"},"endTime":1512663686}
っていうJSONデータがあって、その中のResの値をとりたいんですけど、


var seri = new DataContractJsonSerializer(typeof(recapres));
byte[] bytes = Encoding.UTF8.GetBytes(a);
var ms = new MemoryStream(bytes);
recapres info = (recapres)seri.ReadObject(ms);

ここまでは調べて書けたんですけど、
この先のResの値をとるコードの書き方がわかりません。
どのように記述すればいいのでしょうか?

solutionの部分は、
[DataMember]
public List<SOL> solution { get; set; }
としてしてます。
0272デフォルトの名無しさん
垢版 |
2017/12/08(金) 07:58:19.65ID:ahDNvKU9
>>269
サボってはいけないのはイベント発行側のライフサイクルが長いとき

サボっていいのは発行側と購読側のライフサイクルがほぼ同じとき

という理解でOK?
0273デフォルトの名無しさん
垢版 |
2017/12/08(金) 08:11:45.30ID:PpC6VnTr
>>268
このリンク先の人はイベントとGCを正しく理解してない
この人、他の記事もバカっぽいのばっかりだから初心者はこんなの見ちゃだめ

>>272
間違ってはいないけど、補足するなら
発行側より購読側のライフサイクルが長いときもサボっていい
参照の向きは必ず発行側→購読側なので、イベントハンドラの登録そのものは発行側の寿命には影響しない
フォームとボタンのように、たいていは購読側も発行側への参照を握り続けているので、結果的に寿命は一致するケースが多いんだけどね
0274デフォルトの名無しさん
垢版 |
2017/12/08(金) 08:41:02.41ID:LOVuAI3k
>>273
SIerの中の人のブログだね
c#でメモリリークって「推して知るべし」
0276デフォルトの名無しさん
垢版 |
2017/12/08(金) 09:32:30.34ID:eUH+zyLO
イベントとかUIしか使わんしUIはデザイナーが勝手にコーディングするからイベントなんて使わんな
0278デフォルトの名無しさん
垢版 |
2017/12/08(金) 11:10:02.45ID:cJ57jE1N
+=を一切使わずに作るのか
コマンドバインディングを駆使する感じ?
それは確かに凄いな
0279デフォルトの名無しさん
垢版 |
2017/12/08(金) 11:28:41.60ID:7LHrgDvL
>>275
ロングポーリングの実装について勉強しといで
単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない
0280デフォルトの名無しさん
垢版 |
2017/12/08(金) 11:44:45.00ID:oxsZSnq/
>>279
うん、実装次第だよね。
無期限か、プロキシに切られる寸前にするか、10分にするか、どうでも。
無期限はCouchDBのchange監視なんかは、ほっといたら無期限になるんじゃなかったっけ?
ログが大きくなったり他のを埋めるほどのリクエストは問題だと思うけど。特にイントラでの運用だと。
事例調べてきたらいいのになぁ
0281デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:25:41.51ID:IbEiOVbO
>>278
0282デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:27:34.90ID:IbEiOVbO
イベント使う機会ある?
0283デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:44:05.29ID:M8mJAXMK
>>282
無い人はそれでいいよ
自分には〜いらないとか〜必要ないとかそういうこと言いあうスレじゃないんで
0284デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:53:05.93ID:eUH+zyLO
>>283
単純に興味がある
みんななにに使ってるだろう。
そもそも要らないとは一言も
0286デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:58:10.32ID:eUH+zyLO
>>285
うん。UIしか俺も使わん。
それ以外にある?
UIのはデザイナが勝手にコーディングするからイベントに触れることがない。
0287デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:58:14.04ID:PXTxgSdc
>>279
> 単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない
そんなことを思ってるのは君だけ
マジでちょっと勉強してきた方がいいぞ
今だと単なるアホにしか見えてないし
0288デフォルトの名無しさん
垢版 |
2017/12/08(金) 13:04:34.05ID:LezyuZlt
>>286
通信アプリとかデータが来たらオレオレイベント発生させる。
0290デフォルトの名無しさん
垢版 |
2017/12/08(金) 13:19:11.96ID:zPIj5vhG
ID変わってるかもですが、>>192です。

反応できてないですが、皆さんの議論は参考にさせて頂いています。

SignalRですか?少し調べてみたのですが、目的に合致しているかもしれません。
ですが、後だしなのですが、今回対象になっているサーバがframework 3.5で、
現在運用されているwebアプリはVS2008で開発されています。
ここに追加する形で考えているため、SignalRは使えません。

(別の場所に同じようなサーバがあり、こちらは去年立ち上げたばかりで、水平展開することになり、かつ、私が担当する事になったら是非ともSignalRなりを勉強したいと思っています。)


そこで、やはりTimerを使う事になるかなと思っているのですが、気になる点があるので教えていただければありがたいです。

ログが大きくなるとあるのですが、意識してなくてもログが記録されているものなのですか?
そのログはどこで確認でき、ログを残さなくすることはできないのでしょうか?
0291デフォルトの名無しさん
垢版 |
2017/12/08(金) 13:23:25.17ID:LezyuZlt
>>290
IISのログの事だろうけど気にしなくても良いでしょ。
0292デフォルトの名無しさん
垢版 |
2017/12/08(金) 13:28:18.22ID:Xls5mA2Y
プロパティー変化時の〜Changedイベントは普通に多用するでしょう。

非同期処理完了をイベントで通知するのは非同期メソッドが出来たので
流行らなくなったね。
0293デフォルトの名無しさん
垢版 |
2017/12/08(金) 14:02:11.06ID:PpIHj1rp
最近はイベントも種類が増えたね
・x:Bindによるイベントバインディング
・EventAggregatorって言う集約イベント
・Rxや、その派生のReactiveProperty

従来型はあまり使わなくなったね。
0294デフォルトの名無しさん
垢版 |
2017/12/08(金) 14:10:42.44ID:M8mJAXMK
>>286
最初の質問は「イベント使う機会ある?」だったけど、相手によってどんどん変えるの?
動的にコントロール追加する時とかデザイナでできない
イベントが多重発生する状況のときは処理中に止めて終わったらイベントを再開する
他にもあるだろうけど自分が遭遇する機会無いのならそれでいいじゃん
>>290
質問続けるのならどこまでサーバー側をいじれるかも書いてほしい
一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
クライアント側がそれを取りに行くだけの処理の時だから
0295デフォルトの名無しさん
垢版 |
2017/12/08(金) 14:16:37.32ID:yJmj+jOP
PerformanceCounterって、
OS起動直後からしばらく立たないと使えないとかの制限あるんですかね?
0296デフォルトの名無しさん
垢版 |
2017/12/08(金) 14:45:49.73ID:IbEiOVbO
>>294
なんも変わってなくね
最初から「UIしか使わんやろ」オンリーですが?
0297デフォルトの名無しさん
垢版 |
2017/12/08(金) 14:52:00.48ID:IbEiOVbO
>自分が遭遇する機会無いのならそれでいいじゃん
なにをそんなにイカってるのか分からんわ。
「イベントってUIしか使わなくなくね?イベントの使い道他になにがあるの?」
単純な疑問に突然キレられても困惑よ。
0298デフォルトの名無しさん
垢版 |
2017/12/08(金) 15:19:35.30ID:FTlzMntS
ここのスレの住人は「C#の〜要らなくね?」って意見に過敏だからなwwwww C#信者だから当たり前かなw
要らないとは言ってなくてもそう解釈されるんじゃよw
0299デフォルトの名無しさん
垢版 |
2017/12/08(金) 15:22:00.68ID:XHPT3EtZ
あのさぁ、c#の#って要らなくねえ?
って言ってみる。
0300デフォルトの名無しさん
垢版 |
2017/12/08(金) 15:37:29.35ID:NIv2jCgd
要りますよ、おじいちゃん。
0301デフォルトの名無しさん
垢版 |
2017/12/08(金) 15:43:54.34ID:XHPT3EtZ
#を取ったら、オブジェクト指向もジェネリックスもラムダ式も例外もイベントも無くなって平和になるべ?
0302デフォルトの名無しさん
垢版 |
2017/12/08(金) 16:08:01.83ID:zPIj5vhG
>>294
失礼しました。
サーバは、frameworkのインストールとか、既存の動いているソフトをいじるとかはできないですが、
新たなソフト(Webでもローカルexeでも)を動かしたり、フォルダやファイルの操作は自由にできます。

>一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
>クライアント側がそれを取りに行くだけの処理の時だから

自分に理解できない事は脳内でスルーしてしまっているかも。
これは別途、更新したファイルのリストを作っておくとかって事でしょうか?
確かに作成されたファイルを、各リクエスト(=開いてるブラウザ、ですよね?)毎のTimerイベントで行うのは非効率ですね。
私のレベルでは、サーバでローカルアプリを動かして、何らかのファイルなりDBに出力するくらいしか思いつきません。
Webアプリ内で、同等の事とかできればいいんでしょうけど。
0303デフォルトの名無しさん
垢版 |
2017/12/08(金) 18:12:13.39ID:oxsZSnq/
>>290
記録されてる。IISの設定次第。
残さないってのは、邪魔なログがある以上に困るのでやめて。
>>291
IISのログだけど、障害調査する側に回ったら、気にしてほしいと願うようになると思う。
0304デフォルトの名無しさん
垢版 |
2017/12/08(金) 18:55:14.76ID:Hk+pFmDF
C#だけの話では無いのですが、インスタンス作られたら自分の仕事するだけでフィールドもパブリックメソッドも無いクラスって、OOP的にはアンチパターンでしょうか
0305デフォルトの名無しさん
垢版 |
2017/12/08(金) 19:03:17.13ID:cJ57jE1N
>>304
パターンというのはみんなが繰り返しやるからパターンと呼ばれる

だれもそんな設計しないと思うので
何かのアンチではあってもアンチパターンではないと思う
0306デフォルトの名無しさん
垢版 |
2017/12/08(金) 19:11:34.28ID:PpC6VnTr
>>304
フィールドを使いたいなら分からないでもないが、フィールドも使わないんだったら単なる静的メソッドでいいだろ
あえて変なスタイルを採用する積極的理由がない
0308デフォルトの名無しさん
垢版 |
2017/12/08(金) 21:13:55.11ID:l65xZylR
>>307
コンストラクタだけで完結させるのはやはりアンチパターンですよね

データベース相手で、パブリックメソッドが一つしかないクラスを作った時に、コンストラクタで全部やっちゃえば良いねと作っちゃったんですけど、こんなことしてるクラス見たこと無いので不安に思い
0309デフォルトの名無しさん
垢版 |
2017/12/08(金) 21:46:31.29ID:T5yPQbL2
コンストラクタ内で全部やっちゃうのは、
コンストラクタの責務を超えてる気がするなー
0310デフォルトの名無しさん
垢版 |
2017/12/08(金) 21:48:13.33ID:T5yPQbL2
数年後とかに(または自分以外の人間が)、コードを改修するハメになった時に
うっかりその派生クラスとか作ると、ヘンな副作用を起こしそうなので
ちゃんとメソッドに分割した方がお行儀が良い、と思う
0311デフォルトの名無しさん
垢版 |
2017/12/08(金) 22:06:43.30ID:nAKkewiT
>>304
既に指摘されてる通り、アンチどうこう以前に普通は無意味だからやらないけど、
staticクラスは多態できない(インターフェイスも実装できないし継承関係も作れない)ので、
多態を実現するために例え状態(フィールドやプロパティ)を持たなくてもインスタンスを
作ることは理屈上はありえると思う。

私しゃーやったことありませんが
0312デフォルトの名無しさん
垢版 |
2017/12/08(金) 22:39:43.44ID:zVfb1lJX
>>304
staticメソッドじゃダメなの?
0313デフォルトの名無しさん
垢版 |
2017/12/08(金) 22:48:26.92ID:8QW3tG+Y
>>305
ところで設計じゃないよ
コーディングプランだからw
0315デフォルトの名無しさん
垢版 |
2017/12/09(土) 18:25:35.22ID:yz0yK5Nn
C++でゲーム作っていた者ですが
今後はC#で作っていこうと勉強しています

C++あがりのプログラマがC#で間違い易い、
ありがちなミスを教えてください。
0317デフォルトの名無しさん
垢版 |
2017/12/09(土) 18:51:16.17ID:DLrsngiD
C++とかいう高度な言語使えないから分からんにゃーい
0320デフォルトの名無しさん
垢版 |
2017/12/09(土) 19:22:18.63ID:fpEjaZID
>>315
C++プログラマがC#でよくやる間違い
・クラス名の頭にCを付ける
・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
・using 名前空間; を恐れる
・int を System.Int32 と書きたがる
・ループ大好き
・new を嫌う
・やたらとenumを多用する
・エラーを戻り値で返す
0321デフォルトの名無しさん
垢版 |
2017/12/09(土) 19:26:45.34ID:fpEjaZID
あと、
・やたらとでかいクラスを作る
も追加で
C++はクラス定義が面倒なので心理的に大きなクラスを作る癖がつきがち
0322デフォルトの名無しさん
垢版 |
2017/12/09(土) 19:39:14.82ID:Avl0kHLY
C#はRADありきで細かい部分はちょくちょくリファレンスを読んで確認するしかない
0325デフォルトの名無しさん
垢版 |
2017/12/09(土) 19:55:26.03ID:fpEjaZID
>>323
C++で多態を使うなら便利なRAIIを捨てなくてはならない(スマポを使うこともできるが、普通は可能なら避けたいと考える)
多態を使う心理的ハードルが高くなるわけだ
0327デフォルトの名無しさん
垢版 |
2017/12/09(土) 20:44:23.80ID:LewaYlvd
地雷原のC++を歩けるなら舗装道路のC#なんか楽勝だろと思うけど、
落とし穴があるとしたらこういう驕りかもしれんね。

C#出た頃C#によく分からん難癖付けてたのはJavaな人で、C++erはむしろ
好意的な評価の人が多かったような気がするから考えすぎかもしれんけど
0330デフォルトの名無しさん
垢版 |
2017/12/09(土) 21:16:00.04ID:DLrsngiD
ゲーム開発かよ
0331デフォルトの名無しさん
垢版 |
2017/12/09(土) 21:31:07.48ID:kSf52iSg
動画でも音声でもリアルタイム処理が必要な場合は1秒でも止まると困るね。
0333デフォルトの名無しさん
垢版 |
2017/12/09(土) 21:41:11.39ID:LewaYlvd
大昔のPC-98じゃあるまいしそんな止まらないからw
何でGCの話になるといつもこうなのw
何十年前の話をしてるんだよw
0336デフォルトの名無しさん
垢版 |
2017/12/09(土) 21:56:19.74ID:DLrsngiD
>>335
分からないから詳しく
0338デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:03:05.57ID:DLrsngiD
>>337
そういうことか
0339デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:06:49.31ID:LNYXpqZE
んー、それでもC++の人が多用するって理由とそれがC#じゃ間違いって理由がよくわからん。
0340デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:09:24.80ID:DLrsngiD
>>339
C++使いは多態を使いたがらないから、多態使わないならenumをなんの懸念もなく使えるから使いまくるってことかな?
0341デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:12:55.12ID:CMBXHaeA
この流れは質問に対して必要なのか?
後今更だが
>>320
>・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
これは非推奨だがビルドが通るので間違いとは言えない
0343デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:15:27.00ID:DLrsngiD
>>341
エラーじゃないならいいってことならそれ以外のやつも当てはまるだろ?
なぜそれだけピックアップしたんだ?
0345デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:20:10.10ID:DLrsngiD
>>342
クラスの中にインナーenum(?)を定義したら、そのクラス継承してもそのenumが未定義になるってことかな?
0346デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:28:13.72ID:Er9Ndq7R
最近enumが〜って言う初心者が一人紛れ込んだだけだから
相手にしなくていいよ
0347デフォルトの名無しさん
垢版 |
2017/12/10(日) 00:39:39.78ID:okOunyow
言語そのものの事ではないのだけど。

Windows10 の PC に入れっぱなしにしてた VS Community 2015 で C# で Webアプリ(MVC)の新規プロジェクトを作成して、
それをそのままビルド→実行するとブラウザが起動して(これは当たり前)、
サーバーエラーとなって「指定された引数は、有効な値の範囲内にありません。」て表示する&
ダイアログで「Mirosoft.VsHub.Server.HttpHost64.exeは動作を停止しました」って出ます。
HttpHost64.exeの方は連続して出てて、 KB3090034 を当てたら最初の1回だけになりました。

原因が分からないので同じような症状を経験、解決した人か心当たりのある方がいたら対処法を教えて欲しいです。
0350デフォルトの名無しさん
垢版 |
2017/12/10(日) 10:51:21.68ID:cFJQGF3i
処理結果表すのに文字列やint使いたくないからenum使っているけど、他に良い方法あるかな?
0351デフォルトの名無しさん
垢版 |
2017/12/10(日) 10:56:20.84ID:OKZOYtiA
>>350
設計の筋が悪いんだと思うよ
たとえばデータ取得処理が返すべきは成功コードorエラーコードではなく
取得したデータそのものであり、失敗したら例外を投げる
0354デフォルトの名無しさん
垢版 |
2017/12/10(日) 11:22:56.63ID:zEFqnqTD
質問があいまいな上に答えてもらった相手を例の子呼ばわりって何がしたいんだろう
文字列とint対応させて作りたいのならenum使うの自然だし変えようとしたらその設計変えるしかないわ
0358デフォルトの名無しさん
垢版 |
2017/12/10(日) 11:25:55.23ID:1RSLLPBx
例外を使えないならOOPやめたほうがいい
というかプログラマやめたら?
同僚からしたらすげえ邪魔なんだけど
0361デフォルトの名無しさん
垢版 |
2017/12/10(日) 11:32:45.27ID:K5F4H8OZ
例外も内部にステータス持つなら同じことだから、要はenumのかわりにクラスを使えということなんだろう。
必ずしもそれが筋が良いとは思わんけどな。
0362デフォルトの名無しさん
垢版 |
2017/12/10(日) 11:36:28.15ID:zEFqnqTD
>>360
例外使えないとか使わない前提じゃないけどもう日本語通じないか
ファイルダイアログも使ったことないんだろうね
0365デフォルトの名無しさん
垢版 |
2017/12/10(日) 11:55:32.54ID:7Si01GpM
enumで戻り値を返した先にはswitch〜case文の羅列が待っている
それは、オブジェクト指向として美しくない
とか言って見る
0367デフォルトの名無しさん
垢版 |
2017/12/10(日) 12:16:06.09ID:fCk6aJzv
メソッドの結果が何種類かある
どの結果なら何をするかはメソッド自体は知らない
なのでenumを返してクライアントに判断してもらう
って理由でenumならなんの問題もない
enum switch地獄に陥るのはクライアントの実装の問題なので解消できる問題だな

イベントでもいいけどイベントは管理しにくいからできれば避けたい
0368347
垢版 |
2017/12/10(日) 12:24:22.81ID:okOunyow
>>348
ありがとうございます。
HttpHost64.exe のエラーダイアログは出ないんですが、「指定された引数は、有効な値の範囲内にありません。」は同じでした。
本当になんなんだろう。。
0370デフォルトの名無しさん
垢版 |
2017/12/10(日) 12:42:01.80ID:hfoTCgp6
なんでEnumダメなん?.NET標準ライブラリでもよく使われてるやん
0372デフォルトの名無しさん
垢版 |
2017/12/10(日) 13:02:49.80ID:Lqf3YhZb
>>365
その主張一時期流行ったけど、今になって冷静に考えると
かなり羹に懲りて膾吹いてる感がある
0373デフォルトの名無しさん
垢版 |
2017/12/10(日) 13:08:33.64ID:1RSLLPBx
ケースバイケース
microsoftが使ってれば万能というわけでもないし使ってなければダメというわけでも無い
0378デフォルトの名無しさん
垢版 |
2017/12/10(日) 14:11:52.06ID:1RSLLPBx
>>377
例えばこういう感じ

void ExternalCode(MyEnum e) {
int x = 0;
if (e == MyEnum.A) x = 1;
if (e == MyEnum.B) x = 2;
Console.WriteLine(x) }



static class MyEnumEx {
public static int GetX(this MyEnum e) {
if (e == MyEnum.A) return 1;
if (e == MyEnum.B) return 2;
return 0; } }

void ExternalCode(MyEnum e) {
Console.WriteLine(e.GetX()); }



class MyEnumBase {
public virtual int GetX() { return 0; } }
class MyEnumA : MyEnumBase {
public override int GetX() { return 1; } }
class MyEnumB : MyEnumBase {
public override int GetX() { return 2; } }

void ExternalCode(MyEnumBase e) {
Console.WriteLine(e.GetX()); }
0379デフォルトの名無しさん
垢版 |
2017/12/10(日) 14:20:47.04ID:K5F4H8OZ
ありがとう。
言いたいことはわかったけど、それって整理されたの?という疑問は残る。

この例だとenumで分岐されるのがint xという単一の値を決定する処理だけだけど、
ExternalCode() には class MyEnumEx を用意して、MyEnumを使う別の処理には
また別のclassを用意して、ってなるわけだよね。
0380デフォルトの名無しさん
垢版 |
2017/12/10(日) 14:23:46.87ID:KNXh5gp+
君のenumの使い方がそもそもおかしいだけで、普通はオプション的なものに使うからそうはならないだろう
0381デフォルトの名無しさん
垢版 |
2017/12/10(日) 14:44:45.17ID:1RSLLPBx
>>379
ならないわけだよ

MyEnumに関する責務が分散していることが問題だから整理して凝集させるわけだ
それなのに責務をまた複数のクラスに分散させてちゃ意味が無いだろう

別の場所でyを取得する処理が書かれてるなら
class MyEnumBase {
public virtual int GetX() { return 0; }
public virtual int GetY() { ... }
}
というように拡張していけばいい
0382デフォルトの名無しさん
垢版 |
2017/12/10(日) 14:50:12.52ID:o/NiMYKz
>>375
サブステートを定義するとかしかやりようがないような気がするけど...
enum 使わなきゃ綺麗に書けるの?
0384デフォルトの名無しさん
垢版 |
2017/12/10(日) 16:01:41.00ID:K5F4H8OZ
>>381
そこ集めちゃうの?という印象。
たとえば enum System.IO.FileMode のようなものを class で置き換えるとした場合、せっかく
抽象化したのに操作対象毎に異なる実装をそこに全部書くことを想定しているんだろうか。
0385デフォルトの名無しさん
垢版 |
2017/12/10(日) 16:32:25.95ID:1RSLLPBx
>>384
操作対象はインターフェースで分離する
FileModeはFileModeに関連する責務だけを担当する
操作対象に関する責務はFileModeには無い
0386デフォルトの名無しさん
垢版 |
2017/12/10(日) 16:41:37.05ID:1RSLLPBx
むろん全てのenumをオブジェクトにすべきと言ってるわけではない
ビジネスレイヤではオブジェクトにしたほうが良い場面が圧倒的に多いが
単なるフラグセットとみなしたほうが有利な場面もそりゃあるだろう
0387デフォルトの名無しさん
垢版 |
2017/12/10(日) 16:56:48.76ID:K5F4H8OZ
>操作対象に関する責務はFileModeには無い

だからね、例えばローカルファイルとネットワークドライブ上のファイルとで同じFileModeに対する
操作手順が異なるとした場合、それをどこに実装するかって話。
1つの class Enum に実装するのは論外として、インターフェースと実装クラスに分離するなら>>379の通り。
あるいはFileクラスに掛かる実装は class Enum 側に持たないというならenumのままでもいいじゃん、となる。

>>386
結局そうだよね。圧倒的かどうかは知らんけどw
0388デフォルトの名無しさん
垢版 |
2017/12/10(日) 16:57:04.47ID:AsjcCxkl
xがなにで1と2でどう違うのか分からんが
まずxをクラス(か構造体)にするべきだと思うんだが
0391デフォルトの名無しさん
垢版 |
2017/12/10(日) 17:14:47.78ID:IOEOCVr0
例外も列挙体もLINQもインタフェースもイラネってかwwwwww
0393デフォルトの名無しさん
垢版 |
2017/12/10(日) 17:55:36.64ID:CnpEkAKU
昔流行ったswitchを無くせって話は、元々はJavaみたいな関数ポインタもデリゲートも使えない言語で
ジャンプテーブルをどうやって実現するかって話(要するにいかに効率化するかって目線の話)
だったと思うんだけど、それが途中からこじつけか何か知らんけどOOP敵に美しいとか正しいって
話にすり替わった印象しかないね。

そりゃ多態使ってswitch無くした方が美しく可読的に書ける場合もあるけど、
そうじゃない場合の方が圧倒的に多い。

要するに上にも書いたけど、羹に懲りて膾を吹く類の話だよね。
今でもこういうこと言ってる人の話は真に受けちゃダメだと思う
0394デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:11:31.06ID:u72ghqtY
enumをクラス化でシンプルにできるのはシングルのenumで状態が決まる場合
複合的な状態を持ってるとまあ理解に苦しむコードになるよ
ifとswitchのほうが読みやすく理解しやすいならそっちを使えばいい
0396デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:15:53.82ID:40kmfkZ7
しょーもな
首吊って死ねば?
0397デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:30:36.92ID:1RSLLPBx
>>393
オブジェクト指向をやるならカプセル化や単一責務は基本中の基本
enum switchはそれを全部ぶち壊しにする
だからやめとけって世界中で言われてんだよ
0400デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:45:22.58ID:1RSLLPBx
まあ初心者スレだしOOPわからんってのも仕方がないか…
何年後かには理解できてると思う
0401デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:47:16.85ID:u72ghqtY
>>378
このコートの最初が悪くてあとが良いとは限らないと思うが

これ100個あったとして
どこぞの言語みたいに一クラス一ファイル縛りがあったら100個ファイルが必要

それに見通しが非常に悪い
switchも見通しが悪いけど100個のクラスの100メソッドを検索で渡るよりまし
0403デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:52:06.23ID:40kmfkZ7
>>402
0405デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:55:12.88ID:1RSLLPBx
>>401
すまんがまず100このenum値って時点で設計ミスだと思うぞ
普通の業務ロジックでそんな区分分けみたことないわ

大量のenumといったらせいぜいリソースIDのラベル化とか?
そんなんまでクラス化はしないよ
なんでもクラス化するわけじゃないってなんどもレスしてるよね?

まあ仮に区分が膨大な場合でもそれがビジネス上の振る舞いを持つならクラスにしたほうがいいぞ
クラスにしたら見通し悪いっていうけど
そりゃビジネスそのものが見通し悪いんだから仕方がないか
クラスっていう保護がなければもっと悲惨なことになる
0406347
垢版 |
2017/12/10(日) 18:55:31.09ID:okOunyow
>>383
誘導ありがとうございます。
0407デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:57:52.94ID:u72ghqtY
もともと責務と言いながら
状態を伝えるだけのenumをクラスに拡張しちゃって責務の内容を広げっちゃって
保守性を落としてるんだからまだまだだね
0408デフォルトの名無しさん
垢版 |
2017/12/10(日) 18:59:10.78ID:u72ghqtY
>>405
1つ目と3つ目を比べると1つ目のほうがすぐれたコードだと思う

理解しやすい

それ以上優れてる理由はない
0409デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:02:50.61ID:1RSLLPBx
enumが100個あってシステムのあっちこっちに分岐があります
仕様が変わりました値Aの仕様が変わりました

enumの場合:
システムをenumのAで検索
あっちこっちでヒットしたコードを慎重に整合性を確認しながら修正
もしかしたら見逃しがあるかもしれないと不安を抱えながら作業
Aを修正してるのに周りの他の値の場合の処理が凄まじいノイズになってめまいがする
コードが他の責務に埋め込まれてるのでテストは容易ではない

クラスの場合:
派生クラスAが定義されてるファイルを開く
1つのファイルに集中できるので楽々修正
Aに関する処理は全部このファイルにあるので見逃しも無い
他の値の処理が周りに無いのでクリアな視界で作業可能
クラスになってるのでテストは超簡単
0410デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:07:08.35ID:1RSLLPBx
enum値が削除されたら?
新しいenum値が追加されたら?
クラス化されてないと超しんどいぞ
システムにばら撒かれたenum100個なんて管理しきれないよ
OOPの言語と開発環境ならクラス100個は楽勝で管理できるけどな
0412デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:09:21.56ID:HHgBYreh
enumなんて存在すら忘れてた
もうクセでデータ保持するクラス作っちゃってたわ
やっぱ固定値の列挙はenumの方がええんやろか
0413デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:10:43.29ID:1RSLLPBx
>>411
それでいいよ
ビジネスが入り組んできたらクラスにリファクタリングすればいい
俺は最初からクラスにしてるけどね
0415デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:16:05.80ID:KNXh5gp+
enumをクラスにするという考えがあることが根本的な設計のセンスの無さを感じる
0416デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:18:31.13ID:u72ghqtY
そのenumを置き換えたクラスを使う場所が100個あって後段でそれぞれ違う処理(メソッド)が必要なら
100個のクラス*100のメソッド=10000必要になる
本当に管理しきれるのかな

記号は記号でしかないと思う
0417デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:23:13.06ID:1RSLLPBx
君たちはさC#を使ってるけどOOPはできてないんじゃないかな?
たぶん昔ながらの手続き型のパラダイムから進歩してない
フィールドやプロパティは丸出しで
データベースの物理構造を色濃く反映したDTOを
ネストしまくり分岐しまくりのやけに長いトランザクションスクリプトで処理する
そんなコードばかり書いてるんだろ?
0418デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:27:02.30ID:1RSLLPBx
>>416
仕切れるよ
疎結合高業務で責務がしっかり分けられてるからね
というかそれで管理できなかったらクラスという枠組みを失い無秩序状態になった同じ数(経験上もっと多くなるが)の処理なんて余計に管理できないだろ
0419デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:28:10.84ID:RKQe6ZfS
>>417
キミ自身、キミの言う「昔ながらの手続き型のパラダイム」でキミの考える最強の「OOP」をしとるんやで
もう少し脳を鍛えようか?ね?
0420デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:28:59.49ID:0VP/mrFZ
滅茶苦茶レベルの低いところで仕事してるんだろうなあってのは伝わってくる
0422デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:32:15.18ID:1RSLLPBx
>>421
疎結合だよ
クラスにすればenumを使う側はenumの振る舞いの実装を知らなくていい
クラスにすればある値と他の値の処理が同じスコープで干渉しなくて済む

こんな基本もわかってないんだよなぁ
ま、初心者スレってことか
0423デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:36:46.16ID:O8bRFaEo

   ̄ヽ、   _ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     `'ー '´
      ○
       O
          ,.- ‐── ‐- 、
            ,r'´            `ヽ   
           ,イ              jト、   
        /:.:!       j     i.::::゙,  
          i:.:.:|    _,,    ,、--、  !:;;;;|  
         |;;;;j ,r''"二ヽ   r'⌒ヽ  !;;;!   
       ,ヘ;;i! ,,_r ・,ン.:!  {〈・_,>、,, jヘi!   
       〈 j>j、   "´, イ   `ヽ  ,':::〉!  
        `ゝ.`,     ノ、__,入   j::rソ  
           `゙i   / ,r===ュ, `,  '.:〔_  
             }!  ! i.:::::::::::.:! ;!  .!::::j::`` ー----─r- 、
           , イ.:ト、   ゙===='′ ,イ!:::::!::.:.:.:.       ゙,  `ヽ
       _ノ /j.:::!:トヽ、 ´ ̄` ,ノ´ ,リ::::.:!:::.:..      i.    \  
     ,.r'´  /.::!:::::::| `ヽ`"""´ /ノ.:.:.:.:.::!:.:.         |     !
   /      .:|.:.:.:::ト、 リ   /     !:.         !     |
  /       l  , へ\!  /'7ヽ    |:        j       |
. /           l/^ヾ:::ト、!  j! l  〉、   |        | .      |
/       i       .::| i|  j! | /  `ー'′       ! j!      !
0425デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:40:38.39ID:0VP/mrFZ
enumの使い所を間違えるようなレベルの人間でないと共感は得られないと思う
0427デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:46:34.91ID:YjUTAOlB
ステータス(状態)をクラスにしちゃうと色々と説明が必要になっちゃうけどな
もっと素直に設計できねぇの?
お前らの剣は無駄な動きが多過ぎる
0431片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/12/10(日) 19:52:02.61ID:M7uFif4k
例外は制御がぶっ飛ぶやつ。
エラーは、正常に処理ができなかったという意味。
0433デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:58:57.63ID:in4pjWGE
>>428
ここで言っている例外はtry-catchでcatchで受けられる処理(Application Exceptionの類)の話
そのエラーの意味が何に対するエラーなのかわからないので違いは説明できない
0434デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:59:05.93ID:0VP/mrFZ
enumだらけの.net frameworkを、enumじゃなくてクラスにしろよなんて思いながら使ってないだろうよ
0435デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:01:31.79ID:1RSLLPBx
>>434
ベーシックライブラリと業務システムのドメインロジックを同じ感覚で書くプログラマは居ないよ
0436デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:04:07.99ID:0VP/mrFZ
>>435
だから普通は使い所をわかってるから、こんなこと何の議論も起こらないよねって話じゃん
0439デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:17:38.09ID:in4pjWGE
このスレ来ている時点でみんな初心者。スレタイに「初心者用」ってちゃんと書いてあるから
0440デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:41:13.41ID:o/NiMYKz
初心者ならいいんだけど、初心者を卒業したと勘違いしてる ID:1RSLLPBx が痛々しいだけ
0443デフォルトの名無しさん
垢版 |
2017/12/10(日) 21:46:32.27ID:Uujd9YQH
計算量の観点で比較すると
switchはコンパイラが2分探索にしてくれる場合がある O(log2(N))
クラス化はインスタンス生成された時点で仮想関数テーブルが紐付く O(1)+ディスパッチのコスト
で合ってる?
0445デフォルトの名無しさん
垢版 |
2017/12/10(日) 22:12:18.04ID:Uujd9YQH
>>444
C#はジャンプテーブルも使うみたいですね
この比較はあんま意味ない気がしてきたので閉めます
0447デフォルトの名無しさん
垢版 |
2017/12/10(日) 22:37:53.36ID:8I95hEEE
仮想メソッド呼び出しはJITがインラインキャッシュで展開するからコストはほぼゼロのはず
0449447
垢版 |
2017/12/10(日) 22:39:14.02ID:8I95hEEE
補足
展開っていってもインライン展開するわけじゃないよ
静的なメソッド呼び出しに置き換えるということ
0453デフォルトの名無しさん
垢版 |
2017/12/10(日) 23:47:37.64ID:u72ghqtY
shapeクラスをベースに持つrectangleとcircleクラスの挙動をswitchで制御してるならOOPに反すると思うけど
確固たる概念も実体もないものをわざわざクラスにしてまでenumを消す理由はない

普通のマジックナンバー代わりの記号がenum
オブジェクト間でクラスがメッセージをenumで渡すだけ
上手に使えばいいだけ
0456デフォルトの名無しさん
垢版 |
2017/12/11(月) 00:13:22.40ID:duNhD2vY
実体の無い物をクラスにしたらドキュメント書けよと
それだけだけどな
書かないでやってる奴はギルティ
0457デフォルトの名無しさん
垢版 |
2017/12/11(月) 00:24:03.35ID:ZlOMrHZS
メッセージがただの記号だったのにクラスになるとオブジェクトの生成や
必要に応じてライフタイム管理が必要になる

しかも作ったオブジェクトに処理を移譲したり他のオブジェクトを渡したりして新たなオブジェクトと結合が密になる恐れがある
そこまでしないなら記号の受け渡しで済んだものがクラスの管理が増えるだけでメリットは薄い
0460デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:32:07.64ID:Pz9H8j59
> オブジェクトの生成
状態変わらないのだからpublicなstaticメンバで持てばよい

> ライフタイム管理
そんなに気になるのならstructにすればよい

> 処理を委譲したり(最後まで)
全く意味不明
0461デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:37:46.08ID:PAoZtWNN
一晩経っても負け惜しみ言ってるやつ居てわろた
せめて反論したらどうなの?

>>457
メッセージを列挙値で済ませようとする発想がまずチープだがまあいい
RegexOptionsみたいな場合もあるからな
問題はドメインオブジェクトを列挙値で表現してしまうケースな
昨日から議論してんのはメッセージの話じゃないんだよそもそも
君はまだそこを理解してない
0462デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:40:03.91ID:Pz9H8j59
どうしてもenumにこだわりたいのなら
Attribute付加
拡張メソッド作る
こんな手段はある
0463デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:44:48.49ID:PAoZtWNN
他のオブジェクトとの関連云々ってさ
べつに列挙値からオブジェクトにしたから急に関連が出てきたものじゃないんだよね
ドメインの性質としてもともと本質的に関連があるものなんだよそれは
それがオブジェクトにしたことによって可視化されただけ
列挙値のままだと関連があるのにそれがハッキリと見えず暗黙の結合状態になってるだけ
それはまさに最悪の状態だよ
0464デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:50:22.92ID:DFoAuevB
設計書の構造に箱ができないものをクラスにするのはセンスが悪いな
こんなゴミクラスたくさん作っちゃってクラス図でどうやって説明するの?
0465デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:56:14.04ID:DFoAuevB
汎用ライブラリにでもぶち込むならともかく
こんな枝葉までクラスにされるとソースの粒度に統一感がでない
ステータスなんかクラスにすんなよ
ドキュメント書くのが面倒くせえだろ
それはイコール他人に説明する手間が増えてることだと気づけよ
どーせドキュメント書かないんだろお前馬鹿だから
0466デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:36:16.99ID:SJ7HWrxD
他人に説明するためのドキュメントは確かに書かないな
ソース見たほうが早いし間違いがない

ソースコードが設計書である

俺が馬鹿かどうかに関係なく、
アジャイルやGOAでやるとどこでもそうでしょ
0468デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:41:22.91ID:ibPW1Iwl
ちょっと昔な感じだな
今は当たり前にドキュメントを書いてる時代だと思うけど
0470デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:48:35.34ID:kESkT9Ub
おはようございます。(改行大杉で怒られたので行間を詰めています。

現在押し付けられて困っていることがありご教示いただければと思っております。
環境:フレームワーク4.71 + MVCフレームワーク5OS:Win2012

現在上記環境で動いているシステムがあり、
いくつかのリクエスト文字列と画像ファイル1つをマルチパートで受け取るシステムがあります。

今回、アンドロイド側のJAVAアプリからデータをマルチパートでPOSTしてくる予定だったのですが
時間不足で実装できないと言われ、データを以下のように送ると言ってきています。
(AndroidといえどJavaと同様なのでマルチパートのOutputStreamを作成して送ってくるだけだと思うのですが…。)
1.ファイルをバイト配列に変換
2.そのバイト配列をBase64エンコード
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
上記の仕様だそうです。
そこで上記の逆手順を…と思い
考えれる範囲で
1.リクエスト文字列をUTF-8バイト配列に変換
2.そのバイト配列をChar[]に変換
3.Char[]をFromBase64CharArrayでバイト配列に変換
とやってみたのですが
System.FormatException: 入力は有効な Base-64 文字列ではありません。
上記例外が当然のように発生します。
単純にアンドロイド側からBase64で送ってもらえればそのままデコードできるのですが
それも突っぱねられて困っています。
そもそもこの逆変換が技術的に不可能なようであれば相手側に強く言うこともできるのですが
その根拠が示せず言い出せません。
1.そもそも可能なのか?
2.手順的にはどのようにするのがよいのか
ヒントだけでも構いませんのでご教示いただければと思っております。
以上です。
0472デフォルトの名無しさん
垢版 |
2017/12/11(月) 10:11:54.42ID:kESkT9Ub
>>471
ありがとうございます。

あぁ、なるほど!
該当ファイルをBase64文字列にして
その差を比較してみて両者が合うように変換していってみる
ということですね。
ちょっとコツコツやってみることにしてみます。
0474デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:02:38.34ID:0NyrcvQf
switchを無くせって話、WPFとかのMVVMにちょっと似てるね

どっちの場合も原理主義者が主張するような美しい理念がワークするのは、
ある一定の条件というか閾値を超える事例だけであって、それ以外の場合は
かえって可読性とか保守性とかが低下すると思うんだけど、原理主義者がそういう現実を
無視して何にでも適用可能な万能の方法みたいにごり押ししてる感がある
0476デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:12:00.53ID:LDcEcB6H
もういい加減組めちまってる奴は
次の課題を自分で探さないといけない

プログラムスキルは組めるようになったら
そこでMaxなんだよ
さっさと次の課題を探さないから
どーでもいいことが意味ありそうに思えてくる
0477デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:58:53.47ID:WHbaikY8
>>378みたいなケースでswitchをなくせ
って言うのはそりゃそうだなって思うけど
そもそも>>378の最初の方の組み方がおかしいだけでenumの問題じゃない
それを>>378の例だけでswitchをなくせと言うならまだしもenumなくせとか言い出すから頓珍漢なことになってるだけ
0478デフォルトの名無しさん
垢版 |
2017/12/11(月) 13:49:25.47ID:jxfuchh+
>>743
レスありがとうございます。
相手が手順的にBASE64のバイト配列をUTF8文字列にして送ってくるようだったのでその手順が必要なのかな…と思いまして。
そもそも何故バイト配列からBASE64の文字列にダイレクトにしなかったのかと…。おもいつつです。
0479デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:28:30.74ID:MTsA4uB/
>>470
元の仕様
1.ファイルをバイト配列に変換
バイト配列ができる
2.そのバイト配列をBase64エンコード
ファイルをBase64エンコードした文字列ができる(仕様上UTF-8でもシフトJISでも同じ)
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
これが何の変換かわからない(2.の理由により必要がない)

まず元の仕様を勘違いしていないか?
その上で逆手順のテストコードバグっているから不必要にややこしくなってる
0480デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:39:40.21ID:FZFaQSBJ
ファイルをバイト配列に格納→をBase64に変換

Base64をバイト配列に変換→バイト配列をファイルとして保存
0481デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:45:33.14ID:MTsA4uB/
>>470
あとBASE64の文字列の長さは4の倍数でConvert.FromBase64CharArrayにそれ以外の長さのChar[]を指定するとエラーになる
不足分を自分で埋める('='で埋める)必要があればそれもやらないと
0482デフォルトの名無しさん
垢版 |
2017/12/11(月) 16:00:32.40ID:JAdbtKtz
多分UTF-8のBOMの有無でずれているんだろうな
手順がいくら増えようが不可逆になることはない
0485デフォルトの名無しさん
垢版 |
2017/12/11(月) 19:55:13.88ID:WHbaikY8
>>483
お前が誰か知らんけど

>>376
> ダメとは言わないがコード整理するとenumが自然と消える

とか言ってたアホがいるって話
0490デフォルトの名無しさん
垢版 |
2017/12/11(月) 22:59:42.23ID:SJ7HWrxD
goto文をなくせの頃から何にも変わってないな

gotoをなくせ
enumをなくせ
switchをなくせ
シングルトンをなくせ
ヘルパークラスをなくせ

一応どれも正しい
間違ってはいない

でもこういうルールは別に守らなくてもいい
どうでもいいルールなんだよ

DRY原則とかOpen/Close原則とかの設計原則の方がより重要あってね
0491デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:06:06.50ID:+NqpgsqU
どっちでもどうでもいいよ
どうせ動くんだし
テストをしっかりすればいいだけ
0492デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:22:47.89ID:Mf9o9uwW
gotoとenumの間にはかなり差がある気がする
前方へgotoは絶対悪だから使用厳禁
ドメインのenumと同じかw
もうちょっと緩いと思うが
switchはパターンマッチとして使うのは推奨なご時勢だけどC#のswitch構文は力不足だね
0494493
垢版 |
2017/12/11(月) 23:40:04.94ID:izyLx6FJ
書いてから気付いたが前方参照の意味での前方か
失礼
0495デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:43:50.74ID:wiZ77PPl
>>490
ルールと呼ぼうが原則と呼ぼうが本質は何も変わらんよ
要するにバカの暴走を制限する為の足枷でしかないw
0496デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:54:41.55ID:SJ7HWrxD
>>495
〇〇をなくせというルールが馬鹿にたいする足枷でしかないのは全くその通り
だから俺みたいな賢人にはどうでもいい

逆に馬鹿に設計原則は理解出来ないだろう
SOLID原則が理解出来るならそいつは馬鹿ではない
0497デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:01:45.14ID:98iDbaWn
>>496
表面的な理解で原理主義に陥いってしまう奴は沢山いるし
本質的にそいつはバカなんだと思うよw
それは理解してないのだと言われればそれまでだがw
0500デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:26:32.44ID:98iDbaWn
抽象的な話になると必ずこういうレスがつくなw
これもバカの典型w
0503デフォルトの名無しさん
垢版 |
2017/12/12(火) 01:33:06.37ID:lIsHmOMn
初心者用スレで難しい話すんなよ
俺みたいな趣味グラマーが楽しめないだろ
0510デフォルトの名無しさん
垢版 |
2017/12/12(火) 21:31:34.33ID:CwRQgOlO
tensorflow+keras+c#で
エロ画像を自動分類するソフトを
作って欲しいと頼まれたんだけど
c#から出来そうですか?

参考になるサイトないですか?
0513デフォルトの名無しさん
垢版 |
2017/12/12(火) 21:57:23.48ID:CwRQgOlO
>>512
日経ソフトウェアの記事で
桜、ヒマワリ、バラの判別をやってる
プログラムがあるんで
これをエロ画像に置き換えて
c#からできればいいかなぁ?と
0515デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:03:38.97ID:NQyVP+w1
>>513
内容次第だと思うが何をどう分類したいのか?がはっきりしないと
分類できない


ひまわり
バラ
の様に特徴が特定しやすい分類なのか?
0516デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:06:27.53ID:yoDcG/vu
>>513
アルゴリズムを作るところからやってみて話はそれから
とりあえずC#にそんなライブラリは無いので他のスレへどうぞ
0523デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:16:50.37ID:+ghxhmVd
プログラム上で可能なのはせいぜい、
顔の輪郭に対する「目の位置」の違いで、大人か子供かを判別するとか
(二次絵では顔に対して大人は目を上寄りに、子供は目を下寄りに描かれるケースが多い)
そんなもんだろう

んで、どっちにせよ言語仕様の話でなく
画像解析という専門分野行きの話になるのでスレチ
0524デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:17:02.32ID:CwRQgOlO
大丈夫だ
ディープインパクトならやってくれる
巨乳にニットセーターってもう人妻だろ
って結論ぐらい出せるだろ
0525デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:18:12.64ID:NQyVP+w1
>>523
ディープラーニングはそういうのじゃない分類ができる

でも人間でも一枚絵を見て判断できないのはほぼ無理
0527デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:22:07.89ID:ZGog+EYK
webでそういう判定してくれるサービスありそうだけどね

そういや俺もwebとかネットワーク関係まったく触ったことないんだけど、
C#でもVBでもいいけどそっち系のチュートリアルってどこかにある?

洋書は知らんけど本はほとんどないよね
0528デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:23:51.41ID:/hFzA9NO
試しに学習させてみればいいやんけ
これはNTR、これは人妻、これはレ●プ、(以下略)
こんなデータを大量に与える
そして最後にテスト画像を見せて当てられるかどうか
0529デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:24:07.38ID:+ghxhmVd
Webサービスを展開する話なら、言語がどうこうっつーより
サーバOSとか機器環境とかの話になっちゃうからなあ
0531デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:40:24.36ID:NQyVP+w1
ディープラーニング、機械学習の本は最近ぼこぼこ出てるよ
内容は似たり寄ったり
地元の図書館にも充実とまではいかないけど今年だけで3冊ぐらい入った

雑誌もディープラーニング特集すると部数が伸びるらしいのでよく特集される
0532デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:57:04.37ID:wz4D/2fS
いい加減クラウドじゃ稼げないからディープラーニングに換えただけだろう
出版しても売れなきゃ返本の山だしな
0534デフォルトの名無しさん
垢版 |
2017/12/12(火) 23:36:49.62ID:mXOR9ERV
今更すぎるだろ
エンタープライズでも驚異的な勢いで伸びてて、あと5年もしたらオンプレサーバーなんかほぼ消滅するレベルだぞ
0535デフォルトの名無しさん
垢版 |
2017/12/12(火) 23:42:13.92ID:enzDDAPg
何を指標にガチってるのか分からんが
AWSだけで100億ドル超を売り上げるくらいには使われてるだろ
0536デフォルトの名無しさん
垢版 |
2017/12/12(火) 23:52:57.04ID:qioa7JjJ
まあ、企業向けのサーバーなんしょ?
閉じたネットワークの業務アプリばっかで今までもあんまり関わり無かったからなぁ
0537デフォルトの名無しさん
垢版 |
2017/12/13(水) 00:03:21.24ID:prgZVef7
>>536
イントラのクラウド移行も凄まじい勢いで進んでるぞ。
AWS上にプライベートクラウドを設定してVPNで接続するだけ。
慣れてりゃ一日ポチポチしたら出来上がり
0538デフォルトの名無しさん
垢版 |
2017/12/13(水) 00:14:37.13ID:7y6FaNAn
SIのインフラ屋でコード書けない奴はガチでやばいよ
従来のインフラ構築運用なんかクラウドじゃ全く商売にならん
インフラはもはや、アプリエンジニアや社内SEが片手間にポチポチやるもの
0541デフォルトの名無しさん
垢版 |
2017/12/13(水) 02:36:04.24ID:celmGK9q
すぐに底辺の職業プログラマが談話始めやがる
0542デフォルトの名無しさん
垢版 |
2017/12/13(水) 03:35:29.20ID:Aa4rKi8+
馬鹿の相手する馬鹿とどっこいどっこいだわ
両方殺すにはどうしたらいいか質問していい?
0545デフォルトの名無しさん
垢版 |
2017/12/13(水) 09:49:18.40ID:5hkNOkMK
勉強のために作ったアプリの単体テスト始めたけどテストコードすら書けない
やっぱコピペばっかで作れただけで何も身に付いてないんだなぁ
データベースから取ってきた値の比較とかどうやるんだよ…
0546デフォルトの名無しさん
垢版 |
2017/12/13(水) 09:57:31.43ID:WF2IXduz
>>545
データベース読むとこのテストはモック使うんだよ。
0547デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:03:04.23ID:5hkNOkMK
>>546
モックってダミーみたいなやつのこと?
せっかく教えてもらったのに何が便利になるのか全然イメージ出来ない…
0548デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:05:50.55ID:7X3tjs6V
>>547
用語教えてもらっただけだからわからなくても仕方がない
勉強するのなら自分で使うようなツール作れ。簡単なやつでいいぞ
少しずつ機能増やしていくようにしたらスキルが上がっていく
0549デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:11:11.76ID:WF2IXduz
>>547
グーグル先生にMoqを教えて貰え
0550デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:14:58.04ID:1Q6K9tEb
Aの値を求める

AとBが等しいか
1等しくないなら
Aの値を変更して初めに戻る
2等しくなくて3回Aの値を変えている
失敗で終了
3等しい
正常に終了


というプログラムを作りたいのですが
どう条件分岐や反復を使用していいかわかりません
Aの値の変更は他アプリへの入力で、Aの値を求めるというのは他アプリの状態です
アドバイスお願い致します
0552デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:24:58.47ID:7X3tjs6V
>>550
C#以前の質問だと思うしいろいろあるんだけど
int count=3;
while (count>0)
{
[Aの値をGet]
if (B==A) break; //正常に終了
count--;
}
if (count>0) {[正常に終了}]
if (count==0) {[3回とも失敗]}
0553デフォルトの名無しさん
垢版 |
2017/12/13(水) 10:29:29.60ID:1Q6K9tEb
>>552
ありがとうございます!
これでいきます!
0554デフォルトの名無しさん
垢版 |
2017/12/13(水) 12:09:08.61ID:zXzMZXIu
いやいや人の回答にケツつけるのもあれだけど、普通にforループ使った方が分かりやすいよw
だって要するに3回までリトライするってだけの話でしょw

const int rertryCount = 3;
A a;
for (int i = 0; i < retryCount; i++)
  if((a = GetA()) == B) return true; //成功
return false; //失敗
0555デフォルトの名無しさん
垢版 |
2017/12/13(水) 12:11:06.80ID:zXzMZXIu
const int rertryCount = 3;
これはちょとミスリーディングか。
こだわるなら

const int maxRetryCount = 3;
こっちの方がいいね
0556デフォルトの名無しさん
垢版 |
2017/12/13(水) 12:16:44.81ID:ubNNZos/
文末の無駄煽りwイラネ
0557デフォルトの名無しさん
垢版 |
2017/12/13(水) 12:21:20.67ID:WF2IXduz
宿題への解答はスルーで
0560デフォルトの名無しさん
垢版 |
2017/12/13(水) 18:22:17.80ID:celmGK9q
getA()=Bじゃダメな理由は?
0562デフォルトの名無しさん
垢版 |
2017/12/13(水) 18:24:34.34ID:celmGK9q
>>561
何言ってるか分からん
ただの質問
ここ質問スレだろ?
0564デフォルトの名無しさん
垢版 |
2017/12/13(水) 18:31:40.81ID:celmGK9q
>>563
じゃあどこですんの?
言語に関係無いプログラマの談話は要らんが
0565デフォルトの名無しさん
垢版 |
2017/12/13(水) 18:51:30.28ID:Aix7CEXX
>>545
簡単にユニットテストできるようにSOLIDなコードを書かないとダメ
ただ漠然とユニットテストやればきっとうまくいくんや〜などと考えてるようなら先はないぞ
0566デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:17:20.81ID:48dLEnlz
VBですみません。下記のようなコードで印刷ジョブの数を取得すると
OSの印刷ジョブ一覧ウィンドウで見える数と違うのですが
なぜ違ってしまうのでしょうか?

'プリントサーバの情報取得
Dim prtSv As New LocalPrintServer()

'印刷キュー取得
Dim que As PrintQueue = prtSv.DefaultPrintQueue

msgbox que.NumberOfJobs
0569デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:28:38.16ID:celmGK9q
>>566
OSのジョブ一覧は変更の反映が遅いから
ジョブ一覧の画面でF5押しまくれ
0570デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:29:21.02ID:48dLEnlz
>>567
環境はWin7です。プリンタを一時停止にしてジョブを40個くらいためていくと
que.NumberOfJobsは35が返ってきたりします。
時間が経つと40が返ってきたりします。
時間差があるのでしょうか?印刷が成功したか知りたいのですが
そのジョブが見つからないのです。
0573デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:36:20.02ID:celmGK9q
>>572
読んでないからよくわからんけど反映が遅れるのはジョブ一覧の画面上の話で実際の内部のジョブ一覧はリアルタイムで変更されてるぞ
多分のおまえのやりたいことはできる
0574デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:40:02.91ID:celmGK9q
>>570で言えば35の方が正しいってことな多分
知らんけど試してくれ
0575デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:46:53.57ID:48dLEnlz
>>573
自分も認識としてはそうなんですが何故か想定と違う値が返ってきてしまい・・・
ちなみに.NETの問題かとも思いましたがAPIのEnumJobs()でも同じ値が返ってきました。
JOB一覧でF5を押しまくって40なのを確認してque.NumberOfJobsを取得しても
35なんですよね。で数分待つと40が返ってきたり。
直前にque.Refresh()はしています。
0576デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:56:07.48ID:celmGK9q
>>575
マジか、すまんな
0578デフォルトの名無しさん
垢版 |
2017/12/13(水) 20:00:10.64ID:celmGK9q
質問ですがWPFでCommandからModelにアクセスするにはどうすればいいですか?
例えばボタンをクリックしたらModelのBuyNumプロパティをインクリメントしてそれをViewのLabelに反映させたりしたいときなどです。
0580デフォルトの名無しさん
垢版 |
2017/12/13(水) 20:55:52.96ID:6RipZ3Bg
>>578
VMにコマンドがあるんだったらVMのフィールドにModel持ってるはずだろ?
何の問題もなくアクセスできるはずだが一体何が分からないのか
0581デフォルトの名無しさん
垢版 |
2017/12/13(水) 21:45:44.50ID:pl2NU6fI
>>578
command生成時にVMのメソッドかVMのインスタンスをcommandに渡す

つかICommandなんて使わずにコードビハインドのコールバックからVMのメソッド呼び出す方が分かりやすいよ
0582デフォルトの名無しさん
垢版 |
2017/12/13(水) 21:56:15.26ID:i7QaIdVf
>>578
よくあるパターンだと、DIコンテナってのを使ったりします。モデルのインスタンスを管理するプログラムが有って
VMが起動されたときにModelのインスタンスをVMに渡すことが出来ます
Prism.Unityとか、MEFとかAutoFacなんてのがありますので興味があれば調べてくださいね
0583デフォルトの名無しさん
垢版 |
2017/12/13(水) 22:32:23.84ID:D2CxP1eV
コマンドバインディングとデータバインディングを一緒くたにするのは混乱の元
つかWPFスレの次スレ建ってないんだな
0586デフォルトの名無しさん
垢版 |
2017/12/13(水) 23:23:03.58ID:vLvUNPwO
EF Coreを使ってます
UpdateでWhereを指定するにはどうしたらいいでしょうか?
現在は以下のようになってます

ctx.Students.Update(student);
ctx.SaveChanges();

もしくは、行ロックのやり方を教えてください
レコードを更新する際に特定の条件下なら1度だけ更新をしたいです
0587デフォルトの名無しさん
垢版 |
2017/12/13(水) 23:31:04.98ID:celmGK9q
>>583
もう廃れてるからね
知らんけど
0589デフォルトの名無しさん
垢版 |
2017/12/13(水) 23:39:24.47ID:uYugybSh
>>550
こういったのプログラミングするときちゃんと書かれてる通りに作れって思う
仕様書の書き方がクソで勝手に直したくなるのは分かるけど

enum Hoge{最初から,失敗終了,成功終了}
private Hoge Func(A a,B b,Int changeCount){
bool 等しい a==b;
if(!等しい&&changeCount!=3)return Hoge.最初から;
else if(!等しい&&changeCount==3)return Hoge.失敗終了;
else if(等しい)return Hoge.成功終了;

throw new Exception("仕様書に書いてないけど?");
}
0592デフォルトの名無しさん
垢版 |
2017/12/14(木) 06:07:27.62ID:tSpFRQdC
>>590
連結は出来ませんよね?定義には含まれてないので。
具体的にどのようなコードになりますか??
0595デフォルトの名無しさん
垢版 |
2017/12/14(木) 08:28:56.13ID:VVrew0Yx
>>594
そういう仕事に遭遇しない
でもそんなレアだといざデスマになったときに追加人員が補充できないから人数が少ないってヤバそう
0596デフォルトの名無しさん
垢版 |
2017/12/14(木) 08:51:15.38ID:kupDQT+K
アジュールってクラウド鯖環境なだけだが
0599デフォルトの名無しさん
垢版 |
2017/12/14(木) 09:33:48.37ID:6p67cfA3
アジュールAWSとVPSの違いは?
0604デフォルトの名無しさん
垢版 |
2017/12/14(木) 11:00:13.42ID:VYyAdkca
>>600
全部でも良いけど
そのメソッド内でキャッチして例外に対応できる場合のみ
0605デフォルトの名無しさん
垢版 |
2017/12/14(木) 12:14:15.12ID:E4k7gbUw
どこに書いてもいいけど
} catch (Exception) { }
とかやんなよハゲ、それじゃどこで例外が発生したかわからんだろが、どうやってデバックすんだ
と怒鳴られたんだろう
事なかれ主義で育てられた子が面倒を起こすパターン
事なかれ例外と名付けよう
0606デフォルトの名無しさん
垢版 |
2017/12/14(木) 12:19:44.66ID:yn4+AjAE
>>605
だって、このメソッドで落ちると困るじゃん例外とも言う
0607デフォルトの名無しさん
垢版 |
2017/12/14(木) 12:33:59.88ID:PpIxqW4X
>>605
vsなら見れるだろ
知らんけど
0609デフォルトの名無しさん
垢版 |
2017/12/14(木) 13:34:33.61ID:6p67cfA3
>>608
語るなら理由も書いてくれ
0612デフォルトの名無しさん
垢版 |
2017/12/14(木) 14:13:12.44ID:yn4+AjAE
>>610
一律で書かないと言うのは集中キャッチハンドラーがあるからでしょ
0614デフォルトの名無しさん
垢版 |
2017/12/14(木) 15:39:34.55ID:yn4+AjAE
>>613
自分で書いてない所にあるんだよ。
0617デフォルトの名無しさん
垢版 |
2017/12/14(木) 18:09:08.31ID:oUWqnTgP
IO系とかエラーが発生する可能性のある一帯だけ囲んで、こんなとこじゃエラー出ないよね?
ってとこは囲わないかな
万一そういう所でエラー発生したら、そのエラー箇所を特定しやすいように
売り物のソフトだと、好ましくないやり方かもしんないけどな
0618デフォルトの名無しさん
垢版 |
2017/12/14(木) 20:49:00.77ID:COokNIga
復旧可能かつ復旧を試みる事が要件で明示されてればそこでキャッチする
それ以外は基本的に全てキャッチしてはならない
グローバル例外ハンドラに任せてログ出力やユーザー通知を行う
0621デフォルトの名無しさん
垢版 |
2017/12/14(木) 22:01:50.75ID:NV/46Hd7
>>620
自分で書いてミスるのを防ぐため
0622デフォルトの名無しさん
垢版 |
2017/12/14(木) 22:42:27.89ID:83z5th3I
なんで?
Finallyあると開放されないん?
0625デフォルトの名無しさん
垢版 |
2017/12/15(金) 02:32:16.25ID:6xqAElZe
1234.5678 => 1,234.5678
1234.56 => 1,234.56
123.456 => 123.456

というように、
数値を3桁区切り+小数点を含める(0埋めしない)文字列を出力するにはどうしたら良いでしょうか?
0627デフォルトの名無しさん
垢版 |
2017/12/15(金) 02:45:25.60ID:6xqAElZe
>>626
C#ってわざわざ面倒臭いことしないといけないんですね・・・
0628デフォルトの名無しさん
垢版 |
2017/12/15(金) 02:53:08.52ID:OGT2pKSi
>>627
他の言語でできることならフォーマット用意してあるかもしれないから調べたら?
そこまで見ていないから
0631デフォルトの名無しさん
垢版 |
2017/12/15(金) 09:05:36.73ID:BaW7Km5G
Console.WriteLine("{0:#,0} ", 数値);

こんだけな
0632デフォルトの名無しさん
垢版 |
2017/12/15(金) 09:14:42.49ID:BaW7Km5G
それかコレな

Console.WriteLine("{0:N}", 数値);
0633デフォルトの名無しさん
垢版 |
2017/12/15(金) 12:48:50.32ID:6xqAElZe
>>630-632
頭悪いレスは必要ないです
質問をよく読んでから答えてください
0634デフォルトの名無しさん
垢版 |
2017/12/15(金) 13:08:51.68ID:BaW7Km5G
ググる知能もない低脳に説教されちゃったよ..(^^;
0636デフォルトの名無しさん
垢版 |
2017/12/15(金) 16:15:56.95ID:M7F98+kf
VB.netのクラスの中身の大半をC#に移動したいんだが、Partialしたらいいだろか?
0638デフォルトの名無しさん
垢版 |
2017/12/15(金) 16:42:28.20ID:M7F98+kf
Formは無理じゃない。 コードは変換できるのを見たことがある。なのでコード部とか
ライブラリクラスをC#にしようと思う。
0640デフォルトの名無しさん
垢版 |
2017/12/15(金) 17:28:02.50ID:M7F98+kf
>>639
ありがとう。やってみてまた報告するよ。
0641デフォルトの名無しさん
垢版 |
2017/12/15(金) 17:51:54.84ID:m9RnQpi/
プロジェクト分ければVBとC#共存できるんだから
循環参照が必要じゃないなら無理に変換することもないんじゃないかと
0643デフォルトの名無しさん
垢版 |
2017/12/15(金) 18:43:49.15ID:M7F98+kf
心が綺麗だとコードも綺麗。
0645デフォルトの名無しさん
垢版 |
2017/12/15(金) 20:59:15.61ID:6xqAElZe
>>634
>>635
せめてテストくらいしてからレスしてくださいね^^;
C#erレベル低すぎ
0647デフォルトの名無しさん
垢版 |
2017/12/15(金) 21:29:12.26ID:GAdh6qIc
>>645
はいキチガイ
0651デフォルトの名無しさん
垢版 |
2017/12/16(土) 08:46:52.59ID:2xEHZCIG
vb formからc# formへctl-aで全選択してコピペできるよ。
ちゃんと言語の変換をしてくれる。
0652デフォルトの名無しさん
垢版 |
2017/12/16(土) 09:10:07.48ID:HogLmiIR
デザインは変換できる?
0654デフォルトの名無しさん
垢版 |
2017/12/16(土) 10:37:27.38ID:HogLmiIR
クラスAでクラスBをインスタンス化する
クラスCでクラスBのメソッドを実行する。
クラスAでクラスBをインスタンス化する。クラスCでクラスBのメソッドを実行する。
クラスAのインスタンス名は未定の時に、clsCからB.bm()を呼び出す方法?
こういう時にどうすればいい? なんかスマートにできる方法はない?

public class clsA
{
public clsB B = new clsB;
public clsC C = new clsC(B);
}

public class clsB
{
public void bm()
{
}
}

public class clsC
{
clsB B;
private clsC(clsB bb)
{
B = bb;
}
private void doc()
{
B.bm();
}
} 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0656デフォルトの名無しさん
垢版 |
2017/12/16(土) 10:54:04.95ID:VgVQwchc
>>654
それでできてるだろ。何が分からないのか全く伝わらない。
あと、そのレベルならAだのBだのと話を一般化しないでズバリ何がしたいのかを書いたほうが適切な回答が得られる可能性が高いと思う。
0658デフォルトの名無しさん
垢版 |
2017/12/16(土) 11:55:33.53ID:8tD9WB4W
関数をreturn する直前で実行したい処理があるのですが、
try catch finallyを使うとできますが、finally
だけ使いたいのですが、そう言うのは無いですか?
0664デフォルトの名無しさん
垢版 |
2017/12/16(土) 12:51:36.41ID:8tD9WB4W
>>663
ああ、出来るじゃない!
今日は気分がいい。さんきゅ
0665デフォルトの名無しさん
垢版 |
2017/12/16(土) 16:35:16.86ID:gJhjPx+L
C#初心者の頃(いまもかわらんけど)、一番悩んだのは
インターフェースが分からない。
何がわからないかというと、インタフェースって、自分で一から定義するような
ことが書かれていたが、既存のプログラムで使用しているインタフェースって
何かやってる。
何か定義しないと何もやらないはずなのに・・・・・めちゃ気持ち悪いしわからない。

システムで処理を記述したものも、インターフェースとそのまま呼んでいるから、
わけわからなくてさ〜。
なんだ、処理が記述されているものがあるのねと、理解するのにひと月かかったアホ出した。

まあ今も変わらんんけど。
0666デフォルトの名無しさん
垢版 |
2017/12/16(土) 16:39:09.26ID:ghluEyaB
設計書も書かないくせに
インターフェース定義するやつがこれまたわからん
馬鹿だろお前
って素で聞いてしまった
0669デフォルトの名無しさん
垢版 |
2017/12/16(土) 16:53:14.91ID:DOHaPC3l
backgroundWorkerにおいて、ある関数を実行していて
その関数内である条件になった時にbackgroundWorkerを停止したいのですが
何か簡単な方法はないでしょうか?
backgroundWorkerで無限ループで関数を実行していて、関数の中の関数でエラーが発生した時にbackgroundWorkerを緊急停止する様に
プログラムが組みたいのです。
0673デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:05:51.65ID:DOHaPC3l
backgroundWorker内でAという関数を無限ループ実行していて
Aの中ではB、Cという関数が続けて実行されていて
Bである条件(エラー)になった時、ここで全ての動きを停止したいです。
現在はエラーが発生してそのままBと処理が続いていって死にはしませんが意図しない動きをしている感じです

戻り値と条件分岐で場合分けしていけばいいのかなとも思いましたが関数が大量にあり複雑で何か簡単な手段はないものかとお聞きしてみました
0675デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:13:01.57ID:DOHaPC3l
>>674
キャンセルボタンは一応ついていまして
Aの実行後にボタンが押されていればCancelAsync()を使っています
AやBの関数中でもCancelAsync()と書いて一発で止められればいいのに…という感じです
0676デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:14:42.73ID:na0PR4/Y
>>673
通常のスレッドで実行するにしても考え方おかしいと思う
下流で発生したエラーを捕捉できない設計になっています、って言っているのと同じ
C#の問題じゃないんじゃないかな
0677デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:19:57.99ID:DOHaPC3l
>>676
そんな気もします…
0681デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:50:37.53ID:oGvDk6LW
>>675
まず「止める」って発想がおかしい。
各メソッドが「止まる」ように設計しなきゃ。

各メソッドの引数に処理がキャンセルされたかどうかを返すFunc<bool>を追加して
void A(Func<bool> canceled) {...}

呼び出すときに
A(() => backgroundWorker1.CancellationPending);

とかすればいいんじゃないか
0682デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:52:34.38ID:qA7A9B95
>>673
Bでエラーが発生したら例外投げて、backgroundWorker.DoWork内のループでその例外を補足してe.Cancel=trueにするようにすれば。
0683デフォルトの名無しさん
垢版 |
2017/12/16(土) 17:58:55.94ID:qA7A9B95
>>678
ごめん。
>>679は全くの間違い。ぼけてた。

ただ、今回はワーカーメソッドの中から中断したいって話なので、外から強引に中断する話とは違う。
0684デフォルトの名無しさん
垢版 |
2017/12/16(土) 18:12:53.74ID:DOHaPC3l
>>681
() =>この書き方がよくわからないので
とりあえず今のメソッドを全てvoidからboolに変え、エラー時にfalseを返して
if(メソッド==true)の時だけその後の処理を実行する様にしてみます

>>682
例外を投げるっていう方法がわかりません…調べてみます

みなさん色々ありがとうございました
0693デフォルトの名無しさん
垢版 |
2017/12/17(日) 01:36:39.71ID:hpnS8mLh
Chartを2個置いているのですが、このフォームを最大化した際にこの比率のままChartをフォームに合わせてリサイズするにはどのように設定すればいいのでしょうか?
Anchorを上下左右全てオンにした場合、自動的にリサイズした際に右側のChartが隠れてしまいます
https://i.imgur.com/53dfVWo.jpg
0696デフォルトの名無しさん
垢版 |
2017/12/17(日) 01:50:14.52ID:CSXOgBDh
でもanchorでは多分できないということもなんとなくわかる
比率を自分で計算して位置サイズ合わせするしかないんじゃないかと
0699デフォルトの名無しさん
垢版 |
2017/12/17(日) 12:05:55.48ID:4m+VWQn4
>>665
あえて書くけど
個人で小規模なアプリの場合はインターフェースなんて不要

商用大規模アプリでも使ってないところが多いくらいw
0705デフォルトの名無しさん
垢版 |
2017/12/17(日) 14:27:27.54ID:sFu7AEYs
>>699
大規模とかそういう問題じゃない
あえて100Vコンセントにする仕様がないとインターフェースは役に立たない

USBちんぽんを採用する理由がプロジェクトにないと意味がない
0707デフォルトの名無しさん
垢版 |
2017/12/17(日) 15:33:24.95ID:sFu7AEYs
>>706
君が普段やってることじゃんw
USBちんぽんの使用の押し付け
やられて嫌ならやめるべきだねw
0709デフォルトの名無しさん
垢版 |
2017/12/17(日) 21:06:17.16ID:8SWMSnGu
static な関数を複数のスレッドから利用するのは危険ですか?
具体的に言うと、データベースを読み書きするような処理です。
注意事項など教えて下さい。
0711デフォルトの名無しさん
垢版 |
2017/12/17(日) 22:21:15.29ID:qS3H4jkn
>>710
何もしてません。と言うかトランザクションってよく分かっていません。
どうすべきでしょうか?
0713デフォルトの名無しさん
垢版 |
2017/12/17(日) 22:25:31.50ID:ZCl426tV
なんがどうなれば危険なのかしらんが、そんなものはその関数の実装によるわ
0716デフォルトの名無しさん
垢版 |
2017/12/18(月) 09:47:39.52ID:BBY2VQE+
排他制御なんて自分でやらなくてもDB側で勝手にやってくれるんじゃないのか?
0717デフォルトの名無しさん
垢版 |
2017/12/18(月) 09:50:45.06ID:/wskk4Cx
public static double keisuu(string mojiretu)
{
switch (mojiretu)
{
case "aaa": return 1.2; break;
case "bbb": return 1.6; break;
default: return 0; break;
}
}

全てのbreakのとこで到達できないコードが検出されました
と出るのですが何がいけないのでしょうか
0719デフォルトの名無しさん
垢版 |
2017/12/18(月) 09:58:58.14ID:/wskk4Cx
ありがとうございます!
0720デフォルトの名無しさん
垢版 |
2017/12/18(月) 10:05:08.96ID:/wskk4Cx
break消してもフォールスル―とかにはなりませんよね?
0722デフォルトの名無しさん
垢版 |
2017/12/18(月) 11:01:50.77ID:/wskk4Cx
ありがとうございます!
0725デフォルトの名無しさん
垢版 |
2017/12/18(月) 21:09:49.51ID:ce0jsCws
>>709
状態を持っていない関数なら安全
フツーのstatic関数はこれなハズ
immutableな状態を持つ関数も安全
mutableな状態を持つ関数ならそれを作った人を処刑すべきw
0726デフォルトの名無しさん
垢版 |
2017/12/18(月) 21:33:23.50ID:6wmobrlb
それは甘い

例えばConsole.Writeは当然状態と持たないが、
何か適当な文字列(πでも聖書でも何でもいい)を少しずつ標準出力に
書き出すメソッドを2つのスレッドで実行したらどうなる
0729デフォルトの名無しさん
垢版 |
2017/12/18(月) 21:54:40.33ID:aYaUR9Gg
コンボボックスで中身を設定するときコードを書いてロード時に呼び出す方法以外に、visualstadioでコードを書かずに中身を設定するような機能はないのでしょうか?
そういうコントロールなどないでしょうか?
0734デフォルトの名無しさん
垢版 |
2017/12/18(月) 22:53:45.36ID:kRxIzXOP
https://ideone.com/eFQ05c
上のようなjson形式があった場合にTestのcount,pageは問題なくデシリアライズできるのですがPersonのname,ageは下のように書いてみてもまったくできません
var Test = JsonConvert.DeserializeObject<Test>(Json);
foreach (var r in Test.status)
{
Console.WriteLine(r.name);
}
Json.netを使っているのですがどのようにしたらいいでしょうか?
0736デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:28:28.84ID:pniu1iMQ
>>734
ワシの環境だとこれで成功したんだがどこがやりたいことと違うんやろう
https://ideone.com/4MqfUE
0737デフォルトの名無しさん
垢版 |
2017/12/19(火) 00:49:42.79ID:aZpIRKJe
>>735
その2 JsonConverterを使ってデシリアライズの10行目p.nameでnameが見えずエラーになります…

>>736
デバックを行うと
foreach (var r in Test.status
{
Console.WriteLine(r.name);
}
のrの部分がnullになり結果が何も表示されません
cvrl + spaceでr.name自体は出るのですが…
0741デフォルトの名無しさん
垢版 |
2017/12/19(火) 08:27:59.60ID:JkA1xsmg
非同期な複数のスレッドから、staticクラスの中のstreamwriterでcsvにログを書いてます
タイミングにより、ファイル競合?ロック?するようで、一つのスレッドからしかログが出力されません
ロック解除を待機するみたいなことはどうやるのでしょうか?
0742デフォルトの名無しさん
垢版 |
2017/12/19(火) 08:36:09.07ID:ChgNtW7Q
>>741
俺、そういうログ一生懸命作ろうとしたらスレッド毎にログ出してよって言われたよ
結局待ちが発生すると
ログの発生タイミングっていうか順序が全くの嘘っぱちになっちゃうじゃん
そんなゴミいらねーって言われたぜ
上司がいるならちょっと仕様確認オススメ
0743デフォルトの名無しさん
垢版 |
2017/12/19(火) 08:44:00.33ID:LhTNVyY+
Queue使えばよくね
ログ出力メソッドはエンキューするだけ
ログ出力はワーカスレッドでのんびりやればいい
0747デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:25:11.81ID:OVvTmQOX
BlockingCollectionだな
ちなみにコンストラクタに基になるコレクション渡さなかったら既定でConcurrentQueueが使われる
0749デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:32:13.69ID:NMj9FFtI
やってみた感じぶっちゃけ難しい
片方のスレッドが超忙しいとき待ちが発生すると他のスレッドが全く動かなくなっちゃう
0750デフォルトの名無しさん
垢版 |
2017/12/19(火) 11:33:40.95ID:Ck77l9Yv
もう書いてる人がいるけど、前後関係が重要なら文字通りバッファーを設けるだけだよね
ライブラリのQueueは使いづらいからたぶん自作することになるけど、そんな難しくない
0752デフォルトの名無しさん
垢版 |
2017/12/19(火) 12:08:45.23ID:K2Dj0raT
C#特有というわけでは無いですが、例えば抽象クラス「費用」を作った後、費用合計を求めたい場合、費用の各サブクラスから値を取得し合算するのと「費用合計」クラスを作って、そこだけに問い合わせるの、どちらが良い作りでしょうか
0754741
垢版 |
2017/12/19(火) 12:37:26.95ID:JkA1xsmg
順序は気にしません
2つのスレッドそれぞれから1回/秒ずつ出力されるだけです
0756デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:22:15.69ID:Ck77l9Yv
>>752
何を聞きたいのかよく分からないw
たぶん俺だけじゃないと思う

とりあえず「費用合計」クラスは普通に考えればない

合計を求める費用を集約しているオブジェクトがあるなら、そのオブジェクトに
合計させる(LINQのSum使ってもいいし自分でメソッドかプロパティを書いてもいい)のが普通

そんなものなくても配列にでもぶち込んでLINQ使うだけじゃないの?
0757デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:32:35.77ID:f0pyN6AV
いやなかなかいい質問だと思うよ
初心者でそこに気付けるのはいい視点だと思う
素質がある

中級者でもそこに全然思いが至らない人がいて困る
素質のない人だ


Sumを呼ぶとその時点で計算が行われるのことが困る場合がある
10個スレッドがあってそれぞれでSUM呼ばれて値が一致しないとか
そのつどDB読んじゃって負荷がかかりすぎるとか
0758デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:44:56.70ID:/RoT047O
>>752
費用クラスが合って費目毎にインスタンスを作るとか
費用合計クラスとか
何かを大きく勘違いしている
0759デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:45:53.04ID:/RoT047O
才能なし最下位確定じゃ
0762デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:55:25.58ID:/RoT047O
ウンコ確定
0765デフォルトの名無しさん
垢版 |
2017/12/19(火) 15:02:05.90ID:/RoT047O
それケツだ
0766デフォルトの名無しさん
垢版 |
2017/12/19(火) 15:58:21.40ID:f0lLnGqp
ASP.NET MVCのControllerの処理で、そこだけでちょちょっと利用する
関数などが沢山増えて来てコードが数千行になって来たのだが、
そう言う関数はどこに置けばいいの?
MVPクラスの人の回答をお願いします。
0768デフォルトの名無しさん
垢版 |
2017/12/19(火) 16:37:05.61ID:EJrHySC4
partialとかブッコイて一般兵気取りかよw
見習いもいいとこだぜ。入隊前じゃねぇの?
0770デフォルトの名無しさん
垢版 |
2017/12/19(火) 16:53:03.26ID:8WX8gLVn
Controllerに何でも詰め込むからだろ
Modelにやらせればええのだ
0773デフォルトの名無しさん
垢版 |
2017/12/19(火) 17:52:51.22ID:VU3/qJii
昔は相談室とこのスレにあの人が住んでたんだけどね
今もいるんだろうか?
0775デフォルトの名無しさん
垢版 |
2017/12/19(火) 18:40:59.36ID:J+VWEpvK
「決まった答えはない」とか言うの決まった答えしかできない奴よくいるよねw
0777デフォルトの名無しさん
垢版 |
2017/12/19(火) 21:56:50.83ID:cjNZWQaj
費用合計クラスの者ですが、以下のようなクラス設計をしました(実装は一応英語です)
public abstract class 費用
{
public abstract int 金額();
}

public class 支払家賃 : 費用
{
public override int 金額()
{
return 100;
}
}

class 水道光熱費 : 費用
{
public override int 金額()
{
return 200;
}
}

費目が増えても多態で対応できるのでオブジェクト指向しているなと思ったのですが
費用合計を出すのに都度インスタンスを作るのがなんだか野暮ったく
一般的なやり方をしているのか気になり投稿しました
このような書き方は、何か問題があるでしょうか?
0779752
垢版 |
2017/12/19(火) 22:02:23.97ID:cjNZWQaj
ちなみに、費用クラスで各費目を管理し
費用合計や各費目の値を返すメソッドを作ろうと思ったのですが
抽象クラスに「費目」という名前を使ってしまったので
テンパっています

OOは命名が難しいなと
0780デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:05:19.18ID:N/VqY3nf
ありがちな形にこだわるタイプか
継承しなきゃならないほど金額()が込みいっているのかは置いておいて「動けばいいんだよ」
0781デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:06:13.10ID:MJol/7NU
全体見てないからなんとも言えんけど
その粒度でクラス作るとクラス図ってどうなるの?
2000項目あったら2000クラス作るの?
って心配になった

あとは動けばいいよ
0782デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:12:15.71ID:7vxZYYFe
>>779
だから悪いけど結局何が聞きたいのか伝わってないと思うよw

public static class 費用
{
  public const int 支払家賃 = 100;
  public const int 水道光熱費 = 200;
  public const int 総費用 = 支払家賃 + 水道光熱費 ;
}

なんかこれで問題ないようにも聞こえるけどこれじゃダメなの?
0787デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:20:34.71ID:XIiNWcV9
>>786
ここまで酷いのは見たことがない
誰かが適切なアドバイスをしたとしてもキミは斜め45度下へぶっとぶだろう
上ではなく下だwww
0790デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:29:22.36ID:f0lLnGqp
MVPクラスの人は居ますか?
0796デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:41:32.93ID:ySpyuYdG
>>795
おやおや・・・
とても都合の良い解釈ですね^^
右も左も分からない初心者に「センス無し、問題外」なんて冷たい言葉をかけるのはやめましょうね・・・
0797デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:50:03.39ID:z/JS3u8x
まあ、自分が駆け出しの頃に上司にそう言われたことの腹いせにここで鬱憤晴らしてるんだろうなぁ....
0798デフォルトの名無しさん
垢版 |
2017/12/19(火) 23:01:26.33ID:MJol/7NU
別にどう組んでも動くし
正解はないのかもな

ただ、この言語で表現できる中規模のまとまりをそんなプロパティレベルのもんに使われると粒度の把握がし難いなと

結局設計の良し悪しなんてソイツの気分だからね
0799デフォルトの名無しさん
垢版 |
2017/12/19(火) 23:48:04.54ID:QDUgEa5j
例が例だから粒度的におかしいけどこんなこともできますよ的な…
Addで費用つっこんで使える
Removeとか全部略

public class 費用リスト
{
long sum = 0;
public long 合計 => sum;
List<費用> list = new List<費用>();
public ReadOnlyCollection<費用> 品目 { get;}

public 費用リスト()
{
品目 = new ReadOnlyCollection<費用>(list);
}

public void Add(費用 hiyo)
{
if (hiyo == null) { return; }
sum += hiyo.金額;
list.Add(hiyo);
}
}
0801デフォルトの名無しさん
垢版 |
2017/12/20(水) 05:02:03.39ID:/+M3aR4Y
>>777
例として固定値を返していると仮定
金額が費用の状態によって複雑になるなら有な考え方だと思う
0802デフォルトの名無しさん
垢版 |
2017/12/20(水) 05:27:10.69ID:uEdWuAdp
ねーな
業務上3000とか4000とか値扱ってる奴のが多いだろ
こういう組み方見るだけでうげっとする
じゃあ、構造を把握するためにクラス図でも見てみよーかって
資料開いた瞬間閉じるわ
0803デフォルトの名無しさん
垢版 |
2017/12/20(水) 06:24:16.03ID:w7lpXa1y
プログラムセンスのあるヤツなら最初からやらない間違いで
残念ながら矯正不能なんだわ
0804752
垢版 |
2017/12/20(水) 07:08:03.81ID:FojWkfgf
費目が8個なのでサブクラスに各費目クラスを作ったのですが。。。

サブクラスは何個くらいが適当なのでしょうか
10個超えるとアウトでしょうか
0805752
垢版 |
2017/12/20(水) 07:15:48.78ID:FojWkfgf
ちなみに費目をクラスで分けた理由は、費目ごとにちょっと込み入った算出処理をするので、それぞれを閉じ込めておきたいと思いました

でも、費用が最小の粒度の方が一般的な雰囲気ですね

急遽プログラムをやれと言われた人間なのでセンスとか言われると厳しいです
0806デフォルトの名無しさん
垢版 |
2017/12/20(水) 07:35:47.88ID:+xQghQuB
>>805
ならサブクラスでいいよ
ここの連中は単純な家計簿みたいなツールを前提に話してる
そうじゃなく対象が複雑なら話は変わる
0807デフォルトの名無しさん
垢版 |
2017/12/20(水) 07:42:10.14ID:uEdWuAdp
>>806
変わるかなぁ?
日○とか三○でもそんなの見たことないよ
ちなみにそこだと項目数が10万とか超えちゃってるかんね
それ全部クラス作ったらw
0808752
垢版 |
2017/12/20(水) 07:53:51.41ID:JgbCLwPB
>>806
クラス分けしても悪くはないですか
ありがとうございます

ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い

プログラムは難しいとしみじみ思いました
0810デフォルトの名無しさん
垢版 |
2017/12/20(水) 08:14:04.00ID:XFxcCwxD
業務アプリの設計なんかDFD描いてトランザクションスクリプトでいいよ
開発者全員が相当慣れてない限り、まともなオブジェクト指向でスケールさせるのは現実的に無理
0812デフォルトの名無しさん
垢版 |
2017/12/20(水) 08:20:29.69ID:dzFn8RAE
>>808
> ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い
個々の費目で合計なんて求めようがないと思うが...
合計の算出は費目を束ねるクラスでやるべき話じゃね?
0814デフォルトの名無しさん
垢版 |
2017/12/20(水) 08:44:12.56ID:uEdWuAdp
>>811
余裕っしょ
設定数100個の部品が100個あっただけでもう一万よ
でかい機械で部品数たった100個とかありえないから10万は確実に超える
もっとあるだろうなぁ
0815デフォルトの名無しさん
垢版 |
2017/12/20(水) 08:44:55.30ID:apLR0/3w
>>805
にわかプログラマーならオブジェクト指向に拘るより
もっと単純な仕組みでやったほうが良いね
目的がオブジェクト指向になって簡単なものを複雑にしてる気がする
0816デフォルトの名無しさん
垢版 |
2017/12/20(水) 09:24:55.44ID:CxRyWMoc
急遽プログラムやれと言われてこれだけオブジェクト指向理解したならすごいな
0817デフォルトの名無しさん
垢版 |
2017/12/20(水) 09:30:51.88ID:apLR0/3w
費目毎のクラス分けは目眩がするけど
0819デフォルトの名無しさん
垢版 |
2017/12/20(水) 09:33:53.14ID:gjQwmCKz
>>808
非常にセンスが良い
自信持って良い
注意点はおかしな現場(こっちの方が多数派だったりするがw)へ行った時に絶望しないことかな
0820デフォルトの名無しさん
垢版 |
2017/12/20(水) 10:12:49.94ID:IdA1DVd/
授業でC言語ちょっとやっただけでオブジェクト思考はちっとも理解してないから>>777がそんなに悪いのかわからない
費用ってクラスを使って家賃、光熱費のインスタンスを作るようにしたらいいのか?
0821デフォルトの名無しさん
垢版 |
2017/12/20(水) 10:28:45.17ID:GdnGy9ZB
>>799
sum += hiyo.金額;
エラー CS0019 演算子 '+=' を 'long' と 'メソッド グループ' 型のオペランドに適用することはできません
と出るのですが、正解を教えて下さい。
0822デフォルトの名無しさん
垢版 |
2017/12/20(水) 10:30:50.20ID:irahYJNV
元の奴が金額がメソッドになってるけど
それはプロパティになってる

というか金額をメソッドにしちゃだめ
元のコードがダメ
0827デフォルトの名無しさん
垢版 |
2017/12/20(水) 10:50:33.77ID:irahYJNV
プロパティが自分で書けないならここからコード書いてても無駄だよ

早く勉強しろよ
0829デフォルトの名無しさん
垢版 |
2017/12/20(水) 11:01:57.32ID:GdnGy9ZB
>>828
ありがとうございました。
0830デフォルトの名無しさん
垢版 |
2017/12/20(水) 11:04:38.98ID:irahYJNV
煽りでも何でもなく
プロパティが自分で書けないならここからコード書いてても無駄だよ
0833デフォルトの名無しさん
垢版 |
2017/12/20(水) 11:44:22.53ID:EHvPlft0
まあ普通に考えればメソッドなら金額計算みたいに動詞的にしろよとは思うな
日本語メンバ名だと曖昧だけど
0836デフォルトの名無しさん
垢版 |
2017/12/20(水) 11:55:45.07ID:yB/d6H1Y
>>834
同意する
0838デフォルトの名無しさん
垢版 |
2017/12/20(水) 12:04:02.26ID:Cxfy3ZNg
>>752の人はたぶんネタなんだろうね。
結局何が聞きたいのか明確にしろって言っても答えないし
ネタのつもりなら何が面白いのかさっぱり分からんが

こんな曖昧な質問に曖昧なまま答える奴も頭どうかしてると思うけど
0840752
垢版 |
2017/12/20(水) 12:15:20.79ID:qNzSCdz1
>>838
費用のようなものを費目単位でクラス化したのですが、一般的にはどうなのでしょうかと質問したつもりですが、意図が伝わらなかったみたいですみません

結論としては、費用をクラスとし、費目メソッドを数分作る方が一般的なのかなという結論に辿り着きました

色々と参考になりました
0841752
垢版 |
2017/12/20(水) 12:20:38.93ID:qNzSCdz1
>>838
モデリングの対象次第で答えが変わるもの、答えようが無いということなのでしょうね

最近やっと覚えた抽象クラスを使いたかっただけかもと言われたらそうかも知れません

反省しています
0842752
垢版 |
2017/12/20(水) 12:41:55.46ID:qNzSCdz1
最後にすみません。ある条件で作業時間×レートが費用になるので、費用クラスと作業時間クラスを費用算出メソッドを持つインターフェースで継承させようと思うのですが、インターフェース名が「費用算出」はセンスが無いでしょうか?

インターフェースを使えばコードが仕様を語ってくれるのではと期待しているのですが基本情報資格も持っていない自分にはこれで良いのか解らず

実務経験豊富な諸兄にお尋ねしたい次第です
0843デフォルトの名無しさん
垢版 |
2017/12/20(水) 12:45:22.87ID:yB/d6H1Y
レートクラスは無いのん?
0844デフォルトの名無しさん
垢版 |
2017/12/20(水) 12:49:20.00ID:dzFn8RAE
>>814
お前は費目の意味わかってないだろ...
部品一個一個に異なる費目がつくんじゃねーぞ w
クラスとインスタンスの違いも理解してないと見た
0846デフォルトの名無しさん
垢版 |
2017/12/20(水) 12:53:14.86ID:dzFn8RAE
>>842
俺は算出って用語をあまり見ないから少し違和感あるけどまあそれで違和感ないならいいんじゃね
0848デフォルトの名無しさん
垢版 |
2017/12/20(水) 13:51:39.57ID:bqoc1RuE
やっぱり設計のときにクラス図書かせるべきだな
あまりにも小さい項目いちいちクラスで構えるつもりならそれも全部
クラス図として書いてもらおう
0849デフォルトの名無しさん
垢版 |
2017/12/20(水) 17:45:30.12ID:dzFn8RAE
>>847
だから費目が10万とかはあり得んだろって話
うちの会社はそこそこの規模で結構色々手掛けてるけどそれでも経理関係の費目コードは50ぐらいしかない
当然大分類、中分類、小分類と階層化されてるからそれに合わせて継承させればいい
まあうちの会社の情シスはそこまでやってなくて費目コードを見て分岐してそうだけど w
0850デフォルトの名無しさん
垢版 |
2017/12/20(水) 17:53:32.28ID:kZMVhJ0h
>>849
じゃそれでもいいけど
それだけで50個クラスできるんでしょ?
クラス図どうなるの?クラス50個作るん?
って言いたいわけよ

結局設計ってさ
わかりやすいか
わかりにくいか
だけなんだよね

上下のわからんクラスって粒度を
そんなちっぽけなもんに使うと
全体が見えなくなっちゃうんだよ

費目は少なくてってそれお前の環境がそうってだけの偶然でしょ?
この方針はオススメできないね俺は

まあ、どう組んでも動けばよいのであくまでオススメの域
0851デフォルトの名無しさん
垢版 |
2017/12/20(水) 17:57:31.91ID:0mbmAU0+
50個のクラスができるものをクラス使わずにごちゃ混ぜにしたら余計にわけわからんだろ
こういう話題で数が増えたらどうするの?って反論するやつが必ず現れるけどそれ墓穴掘ってるだけだぞ
0852752
垢版 |
2017/12/20(水) 18:12:27.89ID:PXZlLTCM
>>843
レートクラスは必要かも知れないですね
まだまだ考慮不足でした
0853デフォルトの名無しさん
垢版 |
2017/12/20(水) 18:25:24.19ID:AIjICjtT
データが構造を持ってしまうと、別の使い方をする時に手間が増えるだけなんだよ
データはデータでクラスにする必要なんかまったく無い
0854デフォルトの名無しさん
垢版 |
2017/12/20(水) 18:31:13.93ID:dzFn8RAE
>>850
> クラス図どうなるの?クラス50個作るん?
必要なら作るだけだろ

> 上下のわからんクラスって粒度を
> そんなちっぽけなもんに使うと
> 全体が見えなくなっちゃうんだよ
それお前さんの管理能力の問題...

> 費目は少なくてってそれお前の環境がそうってだけの偶然でしょ?
世の中の会計ソフトとか見てみな
もしくは自分の会社の経理担当者に聞けばわかると思うよ

> この方針はオススメできないね俺は
別にお前もそうしろなんて言ってないから勝手にやってなよ
0862デフォルトの名無しさん
垢版 |
2017/12/20(水) 20:00:24.04ID:1pJRigF6
全体を把握しないと作業に取り掛かれないなら
既にクラス設計として破綻してるとしか
0863デフォルトの名無しさん
垢版 |
2017/12/20(水) 20:45:21.17ID:QInM5P3Y
結局要件があいまいだから何とも言えんけど普通に考えれば費目ごとに派生するのはないね。

せっかくC#にはデリゲートがあるんだから、費目で違う処理はコンストラクタで
デリゲート食わせて対応できるし、その上でプロトタイプパターン適用した方が分かりやすいと思うよ。

もちろん費目ごとの固有の処理が費目固有のプロパティに依存するような場合は
継承を使うしかないけどね
0864デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:00:51.80ID:D80mgGFK
費目はクラスじゃなくてデータにするべきものでは在るが、初心者が「そう言われたから」って理由でやるより
何故そうなのかを理解してやるのは悪いことじゃない
自分で考える人を挫くスタイルはあまり感心しないな
0865デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:05:35.30ID:n3mgdNKt
種類によって振る舞いが違うって要件なのにデータで扱うとか呆れるわ
どんだけswitchする気だよ
0866デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:15:55.31ID:dxH3+214
> 自分で考える人を挫くスタイルはあまり感心しないな
マウントしたいだけやろ
今回は質問者の方がレベル高いからアホみたいなことになってるけど w
0868デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:22:03.45ID:n3mgdNKt
>>867
全く別のものを混同して同じデータ構造でごちゃ混ぜに扱おうとしてるのがデータフロー派だぞ
俺や質問者は異なる物は異なるクラスにしろっていうオブジェクト指向派な
むしろ真逆だわ
0869デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:33:44.71ID:6oreCn9e
>>868
何でこんなくだらないものいちいちクラスにするんだ
クラス図書かないからこんな蜘蛛の巣みたいなクラス図作って平気な面してんだろお前
0870デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:35:40.32ID:R/x04Nlq
>>868
混ぜて使いたいからクラスにするんだと思ってたんだが違うのか?
全く別物として区別して扱うんなら行全体を1クラスにして複数のフィールドで持つのと大差ないと思うけど?
0871デフォルトの名無しさん
垢版 |
2017/12/20(水) 21:49:04.68ID:ie4nb91k
費用と言っても材料費、人件費、、減価償却費、貸倒引当金など性格や扱いの異なるものを同じ基底から派生させるのはどだい無理がある
集計したいだけなら金額を取得するインターフェイスを実装する方が賢い
0872デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:10:01.13ID:n3mgdNKt
>>869
アホほど条件分岐書いて平気な顔してるやつに言われたくない
きみさクラス図どころかオブジェクト指向すらしたことないだろ?

>>870
同じ規約で異なるものを集めるのと
異なるものをただひとつのものとするのと
全く違うことだ
混ぜるという言葉の使い方を見極めろ
0873デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:10:03.47ID:WriG98aZ
List〈string[]〉の型をstring[]の特定の列をキーにしてソートしたいんですけど
List.Sort(x => x[1]);
のような書き方はできないのでしょうか?
List〈class〉を用意するしかないのでしょうか?多分Listの中の配列にもLINQ使えそうなんですが・・・

テストで試しに動かしたいだけなのにわざわざclassを書くのが大変なので・・・
0875デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:26:57.08ID:6oreCn9e
>>872
でもさ
クラス図書いたら君のはこんなくだらない処理でクラスが50個も並んでるんだぜ
どの辺がいいプログラムなの?
他のも合わせれば5-600は行くんじゃない?
正しいクラス図なんて一度も書いたことないっしょ?
おそらく資料見てもこのクラスは記述があるけどこのクラスは記述がないなぁ
ってもんを平気で作っちゃうでしょ?
0876デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:31:22.52ID:n3mgdNKt
>>875
そのドメインがそういうものなら何百クラスだろうがクラスで書くのが正しい
それがそのドメインでは最も簡潔で正しい姿なんだよ

そこを曲げてデータ区分や条件分岐で雑なコードを書いたら
クラス数は増えないかもしれないがコードの複雑度が爆発的に高まるだけ

なぜなら数百クラスが個々に持つべき振る舞いが同じクラスに区別なく同居してしまうんだぜ?
ろくなことにならないよ
0877デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:32:30.67ID:WriG98aZ
>>874
OrderByも試したんですがこのラムダ式だと意図した動作にならないです
とりあえずList〈class〉で素直に書いてみますが、ラムダ式のキーに配列やListのインデックス指定して使うのは無理なんでしょうか?
0878デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:33:13.38ID:GdnGy9ZB
>>873
>型をstring[]の特定の列をキーにしてソートしたいん
ってどういう事ですか?
型をソートするの意味が分かりません。
初心者なので詳しく教えて下さい。
0880デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:36:47.64ID:6oreCn9e
>>876
そもそも設計書で四角で囲って強調すべき単位なの?費目って
オブジェクト指向も自分解釈でおおよそ一般人がオブジェクトなんてしない単位でオブジェクトを作ってるよね?
0881デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:40:38.82ID:D80mgGFK
>>876
結局DBに入れて永続化しなくちゃいかんわけで、その用途考えると数百のクラスとかありえんのさ
EFで扱える範囲で物を考えたほうが良いよ
0882デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:42:06.35ID:WriG98aZ
>>878
ちょっと説明不足してたので補足

List〈string[]〉

{"1", "aa", "1個目"},
{"2", "bbb", "2個目"},
{"3", "abc", "3個目"},
{"4", "dddd", "4個目"}

の形があった場合、string[1]のところを基準にソートさせたいってことですね

public class test

public string id{get; set;}
public string text{get; set;}
public string discription{get; set;}

みたいな形式だった場合
list.OrderBy(x => x.text);
と同じ動作にしたいということです
0883デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:54:00.94ID:QInM5P3Y
>>882
そこが分からない人はいないと思うよw
逆に何が難しいの

list.OrderBy(x => Integer.Parse(x[0]));

とか、

list.Sort((x, y) => Integer.Parse(x[0]) - IntegerParse(y[0]));

ではダメなんですか?
0885デフォルトの名無しさん
垢版 |
2017/12/20(水) 22:59:37.49ID:WriG98aZ
>>883
classでも試してだめでした
それで動かなかったので質問したのですが、classもソートされなかったのでデータ側の問題かもです
さっきのダミーデータでちゃんと挙動するか試します
0886デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:03:12.47ID:n3mgdNKt
>>880
質問者のドメインでは書くべきものだよ
振る舞いが異なる別のものだからね
それが数百種類でそれぞれ異なるような複雑なドメインなら書くんだよ
無理やり1つのレコードに押し付けちゃダメ
逆にドメインそのものがシンプルで1つのクラスで表現すべきならそうする

きみのおかしな点は質問者のドメインを無視してきみの頭の中にあるシンプルなドメインを前提に話を進めようとするところだな
独りよがりってこと

>>881
実装はどうとでもなる
RDBにこだわる必要もない
0887デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:06:38.88ID:QInM5P3Y
>>885
classってのが何のことかよくわからないけど、OrderByの方使ってる?

LINQのメソッドはコレクションをのものを並び替えるのではなくて
並び替えた列挙オブジェクトを返すんだけど、そこを誤解してるなんてオチではなくて?
0889デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:21:21.55ID:lugKio2h
書き方がわかりませんということだから並び替え方法とは違うように読めたけどな
list = list.OrderBy(x => x[1]).ToList();
もしくは
list.Sort((x, y) => x[1].CompareTo(y[1]));
とかだろ
OrderByはシーケンスが返ってくるからListにしたい場合はToListが要る
Sortは直接並び替えてるので前の状態も欲しい場合は事前にコピーしておくかな
0890デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:23:23.48ID:WriG98aZ
>>888
ありがとうございます
var a = 〜
って感じで受け取っててVSで中身無いけどどうなってるの??
IOrderedEnumerabel〈〜〉型ってなんだ?ってなってましたけどforeachに直接入れないとダメなんですね
使い方間違えてました

>>887
これでした、すいません
0891デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:26:14.46ID:WriG98aZ
>>889
あぁToList()を忘れてました
あやふやな記憶で使っててToList()使うって教わったのにすっかり忘れてました
型の返り方の説明見て、正しい扱い方覚えないといけないですねすいません
ICollectionみたいなやつとか、抽象化されてるからToListでListに明示的に変換しないとあかんやつでした
0894デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:35:13.47ID:WriG98aZ
>>892
試しにデータ群扱う時にclass宣言したり、大量のデータを型分けするのがめんどいからこういう扱い方できると楽ってだけですね
この使い方ならcsv形式にsplitでListぶち込むだけでやれるので宣言項目少なくてテストするなら楽ってだけです
DBから持って来るときは文字列型じゃなければToStringかけたりとかありそうですが
最近はEF使ってるので楽ですけどね
0896デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:44:31.66ID:Xe3ly/H6
>>894
Visual Studioならjsonからクラスを自動生成できるからクラスの方が扱いやすいけどね。stringとHashtableまみれのコードとか絶対メンテできない…
0897デフォルトの名無しさん
垢版 |
2017/12/20(水) 23:49:35.45ID:WriG98aZ
>>896
こんな機能あるんですね!
interfaceのメソッド自動実装ぐらいしか知らなかったのでこういうの積極的に使いたいです
0898デフォルトの名無しさん
垢版 |
2017/12/21(木) 00:47:58.94ID:HdSqx1Ax
http://yossk.hatenablog.com/entry/2015/02/23/070546

ここの「4-3散在する情報」のサンプルコード
川俣晶の本からのコピーなんだけど

Runメソッド内で値設定したあと
CalcDistメソッド先頭で値をリセットしてるから
常に計算結果0になるように見えるんだけど
なんか俺読み間違えてる?
0901デフォルトの名無しさん
垢版 |
2017/12/21(木) 05:44:12.11ID:/dR3YALD
>>900
人件費と光熱費が異なる振る舞いをするなら別のクラスにするのが正しい
センスの問題じゃない常識の問題
0903デフォルトの名無しさん
垢版 |
2017/12/21(木) 06:50:24.48ID:/eYbpg/S
オブジェクト指向は物事を複雑にするためにあるモノじゃ無いぞ。
オブジェクト指向を目的にしてどうするwww
0905デフォルトの名無しさん
垢版 |
2017/12/21(木) 06:56:56.39ID:/eYbpg/S
どの世界でも原理主義者は物事を複雑にするw
0907デフォルトの名無しさん
垢版 |
2017/12/21(木) 07:00:31.05ID:gZ1XcqWP
クラス図書かないやつは客観的に自分の設計を見ることができない
だからこんなプロパティ単位のものクラスにして
クラス図を蜘蛛の巣にしちゃっても
それを汚いと反省する機会がない

ただし、どう組んでも動くのであくまで俺の持論
0908752
垢版 |
2017/12/21(木) 07:13:38.51ID:RBSPw/d+
費用クラスの者ですが、色々なアドバイスありがとうございます
参考になります

>>902
どう組んでも動くの精神で、前任のパートさんが凄いの組んでくれたので、オブジェクト指向を意識し始めました

クラスどころかイベントリスナーのメソッドというのでしょうか?
そこから共通関数すらなく処理されているので、なんとかしたかったのです

ドメイン層とアプリ層とインフラ層が渾然一体となっていると、どう手を付けて良いのやら
0909デフォルトの名無しさん
垢版 |
2017/12/21(木) 07:25:44.67ID:Mqu0aN7Q
必要最低限だけ修正しろ
コードのきれいさは主観
他人のコードはすべて糞コード
0910デフォルトの名無しさん
垢版 |
2017/12/21(木) 07:27:47.47ID:gZ1XcqWP
>>908
お前のはプロパティ単位もクラスになってるからさらにカオスだな
初見で見た人間がそのたくさんあるクラスの依存関係がわかるといいな
0911デフォルトの名無しさん
垢版 |
2017/12/21(木) 07:42:54.80ID:iiESRPBo
と、プロパティ単位とか意味不明のことをつぶやいており当局は措置入院の必要性があると判断している模様です
0913デフォルトの名無しさん
垢版 |
2017/12/21(木) 08:08:25.86ID:gZ1XcqWP
残念なのはおそらくこいつはコードレビューとかしたことないね
クラス図と基本設計書との不一致とか設計書のレビューもやったことない
このレベルでクラス図なんて書いたらごちゃごちゃしてなんだかわからないだろ

見難いよって誰からも指摘されたことないから当然伸びない
修正が聞かないまま今に至る
0916デフォルトの名無しさん
垢版 |
2017/12/21(木) 08:37:19.47ID:VQD1Tiju
>>908
え〜、今更オブジェクト指向なの?
c#はマルチパラダイム言語なのに
0917デフォルトの名無しさん
垢版 |
2017/12/21(木) 08:40:09.55ID:VQD1Tiju
>>915
ちゃんとした質問ならまともな答えが帰って来る。
トンデモ質問はスルーされるかネタにされて遊ばれるw
0919デフォルトの名無しさん
垢版 |
2017/12/21(木) 09:04:04.27ID:VQD1Tiju
>>912
素人だろうね。
ギョーミーなアプリ開発の経験者に費目毎のクラス化なんて発想はない。
社内のパソコンマニアに白羽の矢が立っただけ。
0922デフォルトの名無しさん
垢版 |
2017/12/21(木) 10:33:22.61ID:VQD1Tiju
>>920
大学出てりゃプログラミング初体験なんてことは無いだろうな。
プログラミング教育義務化なのでプログラミング初体験者ゼロの世の中になるw
0924デフォルトの名無しさん
垢版 |
2017/12/21(木) 12:03:45.23ID:Q/EvmKMe
>>908
昨日も書いた((>>863)けど、費目ごとに派生クラス作れ、なんて話は真に受けない方がいいと思うよw
処理の委譲はデリゲートでもできる。
0925デフォルトの名無しさん
垢版 |
2017/12/21(木) 12:50:57.69ID:iiESRPBo
>>918
自称上級者なんだろ
今度はデリゲートとか言い出しちゃってるし
自分の知ってる単語ならべてるって感じ w
0926752
垢版 |
2017/12/21(木) 12:55:56.30ID:Bs03k3IZ
>>923
急遽と言っても半年以上OJTの形で作っているので、変数、関数、クラスが何なのか程度は理解しています

で、費用と費目は抽象クラスを使うのに絶好の課題ではと初めて使ってみて、世間様ではどう思われるか聞いてみたら、そんな関係には使わないと指摘された次第です
0927752
垢版 |
2017/12/21(木) 13:00:11.33ID:Bs03k3IZ
ズブの素人でも手続き型プログラムを一ヶ月で作れるようになったのは、visual studioの支援とC#の解りやすさのおかげだと感謝してます

ゆえに急遽突っ込まれたのかも知りませんが
0928デフォルトの名無しさん
垢版 |
2017/12/21(木) 13:29:10.16ID:WNlCIVzg
>>926
結局ね、データってのはDBに保存したり手で入力したりするものなので
データごとにクラスが変わったりすると破綻するんですよ
クラス分けは集計には便利かもしれんが、全ての工程でどうなるか考えて設計しないとね
0929デフォルトの名無しさん
垢版 |
2017/12/21(木) 13:38:55.98ID:xinkvf3y
>>927
ズブの素人が1ヶ月でc#をそれなりにマスターするなんて凄いわ。
オレは無理だ (ーー;)
0930752
垢版 |
2017/12/21(木) 17:30:18.01ID:68OBjHX8
>>929
最初の二ヶ月は前任の人が引き継ぎ兼トレーニングしてくれたのでブートは早かったと思います
そこから半年でやっと継承を触ったので、成長曲線はそこまで急では無いかと

比較が解らないですが仮に成長が早いとするとC#が非常に取っ付きやすかったのが大きいと思います

基本情報試験のアルゴリズムとかさっぱり解らないので、プログラム能力は経験相応に低いと思います
0931752
垢版 |
2017/12/21(木) 17:42:42.42ID:68OBjHX8
>>913
PM交え前任者とコードレビューをしましたが、三項演算子とLINQは見難いと指摘されました

手続き型より宣言型のが良いとネットで見たのですが

逆に前任者が書いた4重ネストのfor文にifelseが連ねてあるコードはいくら頭をひねっても理解できず
数字の動きはステップ実行で見れるのですが、だから何って感じになります
ゆえに知識を整理したくなり初めて抽象クラスを意識した次第です
0933752
垢版 |
2017/12/21(木) 17:56:25.54ID:68OBjHX8
>>907
素朴な疑問ですがプロパティが大量に並ぶのとクラスが大量に並ぶのはどちらが好まれるのでしょうか

個人的には、クラス内にプロパティがギッシリという光景も凄いなと思うのですが

私の知らないテクニックで隠蔽できるのかも知れないので解りませんが

なおデリケートはイベントリスナとして使われてる程度の理解しかなく使いどころがピンと来ていません
精進します
0939デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:04:17.37ID:Q/EvmKMe
>>933
何べんも言うけどさ、結局要件の詳細が分からないとどういう実装方法が
ベストかなんて何とも言えんよ

妄想込みの印象論としては費目ごとに派生クラス作るなんて筋悪に感じるなとは言えるけど
0943デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:37:28.56ID:iwfbZ4kw
ちょっとだけ見たけどやはり初心者ですねとまだ短いにも関わらず読みづらいコードになりそうですねということかな
一行が長いところは絶対ダメとはいわないけど大体クソコード
0944デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:41:21.29ID:Ate4yeHH
>>933
もう手続き型の組み方で良いんじゃないの?
オブジェクト指向はプログラムを分かりやすく保守しやすくするために出来たもの。
変なオブジェクト指向に拘って物事を複雑にするのは本末転倒。
0945デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:46:25.90ID:iwfbZ4kw
意味なく一行が長いのを見るとどんなエディタで書いてるんだろうかと思う
あとは一行でつなぎまくってるのを見るとデバッグがめんどくさいだろうなと思う
0947デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:52:03.68ID:iwfbZ4kw
もう見るつもりはないから忘れたけど後ろの方にあったメソッドは内容をもっと見直したらいいと思う
けど初心者はこんなもんだろ
0949デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:57:53.60ID:iwfbZ4kw
>>946
メソッドの結果を受ける段で概念的にわかりやすい名前で一度受けたほうがいいと思う
何々Textとか何々uriとか

あとは個人的な感想として成功じゃなくて失敗をbool値で受ければいいんではないか
bool 失敗=false

catchで失敗=true

>>948
まあこんなところで聞くやつが悪い
0951デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:10:11.41ID:YYEMhcfN
>>950
俺はトレードオフがオススメ

ちょっとした修正でクラス図まで書き直す必要ありますはお客に印象悪い
どういう設計してんの?って聞かれる
0953デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:16:53.37ID:HqNyhY75
>>951
コードが変わるならドキュメントも同期させるって当たり前のことだよ
ちょっとした修正だからドキュメントは変えなくていいって、それは本来ドキュメントに書かれてなければならない事が書いてないだけ
手続き型の設計ではそういう手抜きがよくあるけどね
0955デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:21:08.11ID:YYEMhcfN
>>953
じゃあそうやって客に言えば?
俺とお前の資料を比べたときに
同じ修正量でもお前はセコセコ動いてなんだか余裕が無さそうに見えるから
0956デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:21:36.24ID:wimnqGen
他人に誉めてもらわないと張り合いが出ないのはわかるが
ここは初心者しかいないんだからレビューがまともに帰ってくるわけがない
0958デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:32:06.58ID:HqNyhY75
>>955
余裕がなさそうに見えるからwww
わらっちゃった
余裕を演出するためにやるべきことをやらずに自分を追い込んで最後には余裕なくすんだろうなキミは
0959デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:33:40.96ID:YYEMhcfN
>>958
実際お前のやり方だと
ほんのちょっとの変更でもう
クラス図から手を入れなきゃじゃん
これって変更に弱いってことじゃないの?
0960デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:41:22.00ID:YYEMhcfN
>>958
それでいいんだよ
コードの綺麗さは人間の主観だろ

だったら自分のコードじゃなくて人間を見なければ成長はしないよ
0961デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:46:30.90ID:HqNyhY75
>>959
手間がかかるから変更に弱いという考え方しかないのか?
ショートコーディングが至高ならC#じゃなくてスクリプト言語やった方がいいぞ

コード修正におけるOOPのメリットはタイプ量や作業量の少なさじゃ断じてない
わかりやすく整理されたコードをわかりやすさを維持したまま変更できることがメリットな

そりゃこだわらなきゃ手短に修正することは簡単だよ
例えばちょっとしたフラグ変数やif文を追加すればクラス構成を変えずに素早く修正して目の前の問題を解決することはできる
ローカルな修正だからドキュメントの修正も軽微で済むかもしれん
でもそれを積み重ねていくと気が付いた時にはもう手に負えなくなってしまうんだよ
0962デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:51:53.83ID:HqNyhY75
>>960
コードの綺麗さは計量可能
常識的なことだぜ

人間を見なければ成長しない(キリッ)なんて意識高いっぽいけど意味不明な戯言を言う前に
まずは君の仕事を人並みにこなせるように基本的なことを勉強しなよ
0963デフォルトの名無しさん
垢版 |
2017/12/21(木) 20:52:40.67ID:Mqu0aN7Q
そんなことはない
オブジェクト指向はケースによって処理ががらっと変わるような場合の対処は得意だが
細部が細かいルールでちょこちょこ変わるようなのは大の苦手だ
おとなしくIF文使ったほうがいいケースはたくさんある、というかそっちが普通

あとフラグ変数まみれになるのはたぶんOOP以前に構造化プログラムができてない
0966デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:00:51.75ID:Ate4yeHH
>>962
計量可能なのはコードの複雑さだろ。
将来的にはディープラーニングでカラオケマシン並みの採点ができるかもだが。
0968デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:06:20.65ID:HqNyhY75
>>963
細部の修正はOOPの場合、メソッド内とかクラス内で完結するから、非常にやりやすい
苦手どころかむしろ得意な分野

手続き型だと逆に、同じ処理があちこちに分散する傾向があるから、些細な修正が思ったよりも広範囲で大規模な修正になることが少なくないね

つうかまるでOOPではif文を全く使わないように聞こえるのが気になったな
クラス内では普通に使うぞ
0972デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:22:17.04ID:HqNyhY75
>>971
クラスをぶっ壊すほどの変更ならなおさらだよ

今あるモデルが根本的におかしいという現状把握
新しいモデルへ推移するための道筋

オブジェクト指向ならこれがはっきり見える

クラスがなかったらモデルもないのだから現状が正しいのかそうじゃないかの判断すらおぼつかない
新しいモデルもないからどうやって変更すればいいのかもぼんやりとしか見えない
現在地点も目標地点もよく認識できないんじゃこわくて動けんよ
0975デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:34:32.41ID:YYEMhcfN
>>972
だってお前1メンバ変数1クラスの勢いでクラス作るじゃん
人件費なんてクラスにしねーだろ
こんなことしてっからちょっと変更があったらもうクラス図書き直しじゃん
設計が悪いよ
0976デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:43:02.15ID:giWx2kxQ
>>933
> 素朴な疑問ですがプロパティが大量に並ぶのとクラスが大量に並ぶのはどちらが好まれるのでしょうか
そもそもプロパティとクラスって全然違うものだからどっちがいいとかはない
クラスとインスタンスの違いがわかってない奴の戯れ言だからそう言うのは無視でいいよ

> なおデリケートはイベントリスナとして使われてる程度の理解しかなく使いどころがピンと来ていません
デリケートは一部の処理を動的に変えたりしたい時や外部から必要な処理を与えたい時に使うものだから必要になるまで覚える必要はない
>>863とかは自称上級者のうぬぼれテクなので真似しなくていい

> 精進します
今のままでいいから頑張ってね
0978デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:52:35.91ID:Q/EvmKMe
>>976
いろいろ語るに落ちてるね。
こういう人ってARGBの組み合わせの数だけクラス作るのかなw

処理もデータと同じで変数に代入して柔軟に交換可能であるなんて
発想はCの時代からあるし、高度なテクニックでも何でもないけど、
この程度のことを理解してないから「自称上級者のうぬぼれテク」に見えちゃうんだろうね
0979デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:56:22.73ID:HqNyhY75
>>975
そりゃするよ
1変数のクラスは超重要なものだ
オブジェクト指向では絶対に欠かせないツール

1つの文字列変数を持った注文番号クラス
1つの数値変数を持った金額クラス
1つの日付変更を持った出荷予定日クラス

などなど

僕たちがプログラムで扱うものはただの文字列や数値や日付じゃあないんだ
そこをしっかりと認識してほしいね
0982デフォルトの名無しさん
垢版 |
2017/12/21(木) 22:01:31.28ID:Mqu0aN7Q
この上っ面だけのの現実とリンクしてない理解
主張をいうだけで論拠もへったくれもない態度

雑談スレで暴れてたやつか
0984デフォルトの名無しさん
垢版 |
2017/12/21(木) 23:30:24.92ID:oDUVChgl
大学入試程度の数学をよく理解できない人がいるのと同じように
オブジェクト指向を理解できない人ってどうしてもいるわけで
それはしかたがないことなのかもしれないね
0985デフォルトの名無しさん
垢版 |
2017/12/21(木) 23:38:52.52ID:HqNyhY75
>>982
現実から目をそらさず複雑性に立ち向かうためにOOPを使う
現実とリンクしてないなのはプリミティブタイプを使う人たちだな
0987デフォルトの名無しさん
垢版 |
2017/12/22(金) 00:24:55.67ID:sp7ymsVp
>>978
> こういう人ってARGBの組み合わせの数だけクラス作るのかなw
意味わからん

> この程度のことを理解してないから「自称上級者のうぬぼれテク」に見えちゃうんだろうね
いや、必要もないのにドヤッてるから自称上級者とかバカにされてるだけ w
0988デフォルトの名無しさん
垢版 |
2017/12/22(金) 00:30:23.73ID:SpQ4O+yi
>>987
1を聞いて10を知る人間もいれば、0にしかならない君みたいな人もいるわけで。
君はデータと処理はまったく別物だと思い込んでるから「意味わからん」わけ
0990デフォルトの名無しさん
垢版 |
2017/12/22(金) 00:46:44.98ID:mdOvvC+t
何で争ってるのかもわからないし
間に読み飛ばされた人がいたらかわいそうだな
0991デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:07:14.36ID:sp7ymsVp
質問者は理解してるっぽいから大丈夫でしょ
一部の自称上級者様が頓珍漢なネタでドヤッてるだけ w
0992デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:29:42.45ID:agnD/jLF
>>979
馬鹿みたい
構造も変わってないのに
クラス図を変更しなきゃいけない
お前の組み方は無駄に変更に弱えーんだよ
ただ、それだけじゃん
0993デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:33:36.39ID:agnD/jLF
なんかメリットあるのかよと
単にプログラム記述上のお前の勝手な都合だけだろw
0994デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:35:03.42ID:YbdIgSB6
classを使うメリットって入出力を共通化する為って意識が強かったんだけど違うのかしら・・・
整理してないところで追加項目を一つ増やしたら他の関係ない場所にも追加項目を処理する機構を作らないといけなくなるみたいな
0995デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:38:59.75ID:YbdIgSB6
>>994
入力は追加するけど出力や処理はそのままでも動きますよって変更に対して修正しないと動かなくなるようなのを防ぐ意味合いで考えてた
追加した入力に対してはメソッド新しく作ったりして対応や既存のところに付け足すとか色々やり方はあるだろうけど
0996デフォルトの名無しさん
垢版 |
2017/12/22(金) 01:52:53.80ID:SpQ4O+yi
何度も言うけど、要件の詳細が明らかになってないから断定はできないが、
普通費目って聞いたら費目ごとに異なる処理(具体的な価格を計算するメソッド?)
はせいぜい1つ程度だろうと想像する。

たった一つのメソッドの動作を上書きするために派生させるなんて愚の骨頂。
アホかと。ありえない。
そんなのOOPでも多態でも何でもないよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 23日 5時間 0分 1秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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