X



ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワキゲー MMff-S7v4)
垢版 |
2017/06/09(金) 18:36:01.72ID:lNiKtgPwM

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

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

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

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

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
---
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ 7d8e-NVn+)
垢版 |
2017/06/09(金) 18:49:58.07ID:raePFHAA0
質問しようとしたらちょうど新スレのようで、>>1さんお疲れさまです。
そしてもしスレ違いならすみません。

それなりにプログラミングの経験はあると思うのですが積極的に GUI のアプリケーションを作成したことがなかったため、Visual C# を学ぼうと考えました。
選択理由は C# はそれなりに把握して他の言語と比較しても好みだったためと、Qt などよりも使い勝手がよさそうに見えたためです。

ところが実際にはじめてみると細かい機能がよく分からず、MSDN のドキュメントは体系立てて学習するには少し使いにくすぎ、
書籍なども「C# そのものの内容についてがメインで求めている内容はおまけ程度」というものがほとんどで、取っかかりを得られずに困っています。

もし定番の学習法や便利な書籍・サイトなどがありましたらご教示願えませんでしょうか?
あるいは皆さんがどんな風に学ばれたのかなど参考までに教えていただければ……。

またひとつ確認なのですが、普通のメモ帳より高性能なテキストエディタを作成したいとするのならばコンポーネントを自作しなければいけないという認識であっているでしょうか?
MSDN の関連項目を見てもいまいち理解できないのですが、もしかしてこれはかなり難度高めでしょうか?

無知で申し訳ありませんがよろしくお願いします。
0003デフォルトの名無しさん (ワッチョイ 0b61-yTT2)
垢版 |
2017/06/09(金) 19:00:13.53ID:RD1lQy150
>>1
立て乙
>>2
内容は古いけどまとまっているところ
http://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
https://dobon.net/vb/dotnet/
というか困ったらその内容でググれ
>テキストエディタを作成したいとするのならばコンポーネントを自作しなければいけない
何をしたいかわからないから答えようがないが、とりあえずRichTextBoxで作っていけば?
0004デフォルトの名無しさん (ワッチョイ 7d8e-NVn+)
垢版 |
2017/06/09(金) 19:24:13.24ID:raePFHAA0
>>3
ありがとうございます。
後者は恥ずかしながらVB.netについてのページと思いこんで飛ばしていました……。

テキストエディタについては、リッチテキストは未確認ですが、
標準のものは字間・行間の調整など、メモ帳にはないけど普通のテキストエディタならあるような設定が無理そうでしたので。
0007デフォルトの名無しさん (アウアウイー Saf1-7Kim)
垢版 |
2017/06/09(金) 20:27:45.19ID:Y6dY8bQba
>>2
一応突っ込んでおくけど、エディタ作りたいって初心者にありがちだけど、
エディタって初心者が想像するほど簡単じゃないからやめといた方がいいと思うよ

少なくとも外観のシンプルさに騙されて実装の大変さが想像つかないレベルのうちは
絶対に挫折するw
0008デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/09(金) 20:33:06.88ID:jPp38qoUa
テキストコントロール自体を改良するか自分でいちから作り上げるか
どっちにしても初心者には鬼門過ぎる

似たような問題で
電卓作ってcalcと同じ動作で作れる奴
なんか新卒でいても1人だな
0009デフォルトの名無しさん (ワッチョイ db93-C3i6)
垢版 |
2017/06/09(金) 20:38:33.22ID:/H0LPwnR0
>>6
実はもう買ってるんだけど、自分で理解出来てるのか、出来てないのか分からなくて困ってる‥
こういう微妙な立ち位置なんだよね
まあ理解できてると思うけど
他の言語は分かるけど
0013デフォルトの名無しさん (JP 0H91-Fz1p)
垢版 |
2017/06/09(金) 21:52:17.12ID:Mc8AIFQyH
あまり理想を追求せずにメモ帳程度のとりあえず動きますレベルの作るんだったら、
入門用に手頃な題材だと思うけどな
ただ、textboxの動作のカスタマイズとか考え出したら、途端にノウハウが必要に
なってくるし、さらに多くを求めると、自分でコントロール自作したほうがいいじゃ
ないかって話になってくる
0014デフォルトの名無しさん (ワッチョイ 7d8e-NVn+)
垢版 |
2017/06/09(金) 22:05:28.35ID:raePFHAA0
>>6
田舎だと現物がなくて地味に大変なんですよね……
電子版のサンプルがあればまだいいんですが、どうにもいまひとつなものが多くて

>>7
ありがとうございます
実装など考えて「これは何から何まで初心者向きじゃないのでは?」と思ったので質問させていただきましたが、やはりみたいですね
ひとまずのところは素直に諦めておきます
作りたかったのはアウトラインプロセッサなので尚更困難そうですし……

>>10
感謝です
上述の通りひとまずは諦めますが、扱えるようになった日のためにメモさせていただきました
0015デフォルトの名無しさん (ワッチョイ 0de3-K3wN)
垢版 |
2017/06/09(金) 22:50:12.15ID:3riuGxqe0
>>7
だよな、VB.NETで文字色と背景色が変えられる印刷プレビュー付きのメモ帳を
作ってみたけど結構大変だったわ。変な挙動が出ないようにきれいに仕上げるのが大変大変
将来的には秀丸並なエディタを考えていたが諦めた。バージョンアップもしてないし

>>8
それも大変だわな。作ってみようと思ってるんだけど全然やってないわ

>>13
そうそう、TextBoxの扱い大変だったわ。Win32APIのサイト読みまくった覚えがある
タブ幅を変えられるようにするにはWin32APIでいじらないとダメなんだよな
せめてタブ幅を変えられるようにしたいと思い勉強してやり方分かったのに結局やってないわ…

夏休みにでも挑戦してみるかな
0018デフォルトの名無しさん (ワッチョイ 156e-puft)
垢版 |
2017/06/09(金) 23:18:42.25ID:deOaTYIP0
俺も最初にプログラミングに入門したときはVC#のGUI開発のチュートリアル的な本をやったけど
全くもって時間の無駄だったわ
その後で@ITのクソ長い川俣の文法解説を苦しみながら読んでやっと身についた
0027デフォルトの名無しさん (アウアウカー Sae1-doPM)
垢版 |
2017/06/10(土) 20:20:15.41ID:rv8ogaG3a
フォームにテキストボックスどれくらいの数までパフォーマンス落ちないでいけるかわかる?
150個近く置きたいんだけど、ロードの時パラパラ漫画なるかな?
0030デフォルトの名無しさん (アウアウカー Sae1-doPM)
垢版 |
2017/06/10(土) 20:30:35.51ID:rv8ogaG3a
>>28
何使ったらいいと思います?datagridview?
>>29
それはもちろん確認しますけど、CPUやらメモリやらの環境依存もあったりするかな?と思って参考までに実績ある人がいたら聞いておきたかったです
0032デフォルトの名無しさん (アウアウカー Sae1-doPM)
垢版 |
2017/06/10(土) 20:45:06.73ID:rv8ogaG3a
>>31
ありがとうございます
やっぱりそうすかねー。んーどうしよう
0035デフォルトの名無しさん (アウアウカー Sae1-doPM)
垢版 |
2017/06/10(土) 21:22:26.64ID:rv8ogaG3a
>>33
ありがとうございます
datagridviewだとレイアウト上ちょっと厳しいんですよね。。
最悪テキストボックスとdatagridviewの組み合わせでいこうとは思ってますが
もしくはformをわけるかですかね。。
0036デフォルトの名無しさん (アウアウカー Sae1-doPM)
垢版 |
2017/06/10(土) 21:24:13.48ID:rv8ogaG3a
>>34
ありがとうございます
一度に全部を確認したいのでタブだと駄目なんですよね
0037デフォルトの名無しさん (ワッチョイ 23ea-wVeE)
垢版 |
2017/06/10(土) 22:33:54.40ID:XdYy5zTm0
150個のテキストボックスなんて表示されてたとしても使う方がついてけないと思うけど。

31 が言ってるみたいにか、(ラベルか何かで)データを表示だけしといてクリックなりのタイミングで
テキストボックスをその位置に表示して編集可能にするとかが妥当だと思うなあ。やるなら。
本当に「一度に全部を確認したい」の? よくよく考えてみたらそんな必要なかったりしない?
0039デフォルトの名無しさん (アウアウエー Sa93-mlCz)
垢版 |
2017/06/10(土) 23:03:35.10ID:Lo444BJba
よー分からんが、入力の時は3ページくらいに分割しといて、確認は1ページみたいな感じが良いんじゃないか?
0041デフォルトの名無しさん (ワッチョイ 23ea-g/1O)
垢版 |
2017/06/10(土) 23:54:35.71ID:ZRXNskxD0
150個なんて全然軽いんじゃないの?
1500個なら重そうだけど
スクロール外にも及ぶなら、virtualViewみたいな設定ってWPFにないの?スクロール外のパーツをスクロールされたときに描写するViewみたいなの
0042デフォルトの名無しさん (ワッチョイ 85aa-wVeE)
垢版 |
2017/06/11(日) 00:07:06.98ID:J1z4hNf20
あるクラスの中でメソッドA〜Zまである中でメソッドA〜Cには同じ引数が渡されるので
これを別クラス化してコンストラクタに引数を渡してクラス変数を参照するように書き換えたらいいかなと思ったんですがどうなんでしょうか?
0050デフォルトの名無しさん (ワッチョイ 0de3-Fz1p)
垢版 |
2017/06/11(日) 15:10:20.00ID:LjgG7elm0
>>27
.NETじゃなくてAccessのフォームに150個近く(たぶん正確には135個)のテキストボックスを
配置して業務用の単票フォームを作ったことあるけど全然問題なく動いてたよ。表示も一瞬で表示されてた

テキストボックスにはデータセット紐づけのほかに計算式入れてたりユーザー定義関数を使ってたりで
色々データを表示してた
0054デフォルトの名無しさん (アウアウカー Sae1-yWa+)
垢版 |
2017/06/11(日) 16:10:25.22ID:ZoOWYz/Pa
>>27です
レスくれた皆さんありがとうございました
自分の環境で確認したら80個くらいまではロード時違和感なく表示されましたが、150個ともなるとロード時に斜めに走るようにパラパラ表示されました
ロードしたその時だけなので別にいいかなという気もしてますがやはりアプリ自体が重たい印象を受けるのでちょっと見直してみます
0058デフォルトの名無しさん (ワッチョイ 0ba2-yTT2)
垢版 |
2017/06/11(日) 17:39:41.98ID:mSEaOp/M0
こんな時XAMLさんならサクサクだったのかも
0059デフォルトの名無しさん (ワッチョイ 2311-W6lL)
垢版 |
2017/06/11(日) 17:59:33.48ID:q49UmmFG0
>>57
> managementstudioはたくさんフィールドがあるテーブル表示してもあんなに軽いのに
テキストしか表示してないにしても確かにあれは驚異的に軽いな
100万件とか表示させても楽々表示してるし
006142 (ワッチョイ 85aa-wVeE)
垢版 |
2017/06/11(日) 21:48:54.89ID:J1z4hNf20
自分的には1クラス長々記述するより、同じ引数の関連性が強いメソッドを別クラスで定義したほうが後々保守しやすいかなと思いまして
でもクラス増えることになってかえってグチャグチャになるかもしれませんね、もう少し綺麗にかけるといいんですけどね
0062デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/11(日) 22:00:02.90ID:3RzQhoqha
>>61
綺麗って誰にとって綺麗なん?
クラス図も無いのに設計書にも仕様書にも出てこないワードでクラス作られたら困るわ
第一拡張って拡張する方向性やらお客さんと相談した上でやっとるんか?
遊びちゃうで?

自分作んのは勝手やねんけどな
誰にとってわかりやすいか考えたことあるんか?
レビューとかあんまりしないで逃げてると下手っぴになってしまうで
0063デフォルトの名無しさん (アウアウイー Saf1-7Kim)
垢版 |
2017/06/11(日) 22:04:06.20ID:bORb47TQa
>>61
根本的に何か勘違いしてるねw

君のやろうとしていることは、会社みたいな組織に例えたら
部署を名前のあいうえお順で分けるような話

何で人事部とか経理部とか営業部とか技術開発部とか
機能別に分割されているか考えたことある?
0068デフォルトの名無しさん (ワッチョイ 0ba2-yTT2)
垢版 |
2017/06/12(月) 06:43:36.79ID:nTXT2jNo0
プログラムの話じゃなくて業務の話だからじゃないかな

俺は>>61はそんな間違ってないと思うけど
基本的なクラス構造は保つべきだけど
頻繁に変更される箇所を別クラスに切り出したりするのは当たり前だと思う
柔軟に対応ってのがオブジェクト指向でしょ理由があるなら
0084デフォルトの名無しさん (ワッチョイ 4542-Ell8)
垢版 |
2017/06/13(火) 12:11:47.02ID:CRzmVHFt0
int[] tmp = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse);
int n = tmp[0];
int k = tmp[1];

エラー処理とかしなくていいとしたら、これをタプルとかで一度にする方法ってありますか?
0088デフォルトの名無しさん (ワッチョイ 4542-Ell8)
垢版 |
2017/06/13(火) 13:05:56.18ID:CRzmVHFt0
説明不足ですみません。nとkという名前は使いたいんです。
入力は、
n k
となっていて、C++だと
cin >> n >> k;みたいな。
scanfみたいにConsole.ReadLine("{0} {1}", a, b)とかはできないようだし。
0090デフォルトの名無しさん (スッップ Sd43-R3Dx)
垢版 |
2017/06/13(火) 13:26:34.53ID:j2Lm3DiZd
そういやラムダ式でタプルやったことないな
できるのかな
0091デフォルトの名無しさん (アウアウカー Sae1-Ell8)
垢版 |
2017/06/13(火) 14:42:31.00ID:5ju7MduYa
すみません。ちょっと質問させて下さい
初めてタイマーコントロールを使ってみたんですが
private void TimerStart()
{
timer1.Interval = 1000;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine("Timer Test");
}
上記を実行すると、1秒おきに「Timer Test」が2回ずつプリントされるんですが
なぜでしょうか。
0095デフォルトの名無しさん (アウアウイー Saf1-7Kim)
垢版 |
2017/06/13(火) 17:07:42.77ID:yp0lpCGoa
>>94
アホはお前。そういうこと言わないの。

質問者はたぶん、ひょっとしてもっとスッキリ書ける方法があるけど
自分が知らないだけじゃないかと思っただけでしょ。

他ではやりづらいアホな質問でも気軽にできる2chの数少ない利点を
つぶすようなことしてどうする。
0096デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/13(火) 17:47:30.12ID:w2943itEa
>>95
それって逆に言うと今の自分レベルには読めないコードを書こうとしてるわけで
突き詰めて考えるとやっぱりバカなんだよ
いいじゃん
バカって言ってあげようよリアルだと
なかなか聞けないし
0097デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/13(火) 17:57:38.76ID:w2943itEa
さらに何がスッキリなんだろう?
現状のコードと改変後のコードを比較して
メリットデメリットを説明できるんだろか?
工数の短縮なのか?
わかりやすさなのか?
汎用性なのか?
他言語への移植のしやすさなのか?
実行速度なのか?
実行負荷なのか?

初心者スレだからこそ問い詰めたい
0098デフォルトの名無しさん (ブーイモ MM43-OlK+)
垢版 |
2017/06/13(火) 18:04:34.41ID:zMNW55ydM
まあまあwww

pythonでは
line="yamda,090-0000-0000"
name,phone=line.split(',')

でnameとphoneが代入できる
これを最初に見た時なんだか目からうろこが落ちた

便利っちゃ便利だわな
0099デフォルトの名無しさん (アウアウイー Saf1-7Kim)
垢版 |
2017/06/13(火) 18:07:10.82ID:yp0lpCGoa
ダメだなこりゃw

なるほど知らないことを知ろうとすることが「自分レベルには読めないコードを書こうとしてる」
ことになるわけか。

こういうのを牽強付会って言うんだよね。
バカって言われるべきなのはお宅の方だと思うよw
0116デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/13(火) 19:58:18.16ID:w2943itEa
>>115
初心者スレで甘やかすのよくねーよ
こんなメリットの説明もできないコード書かれても困る
俺も独学で組んでた時代長かったけど
なんとなくこっち
何となくこれ
って感性でコードの良し悪しを決める癖って仕事で使うときに害にしかならねーよ
0123デフォルトの名無しさん (アウアウイー Saf1-I6cc)
垢版 |
2017/06/13(火) 20:34:56.50ID:w2943itEa
それも1つの選択
ただし、仕事では使えない
説明を求められても回答できない
メリットの説明もできないコードだということは彼の頭にうっすらでもちゃんと残ってくれるだろうね
それでいいよ
0125デフォルトの名無しさん (ワッチョイ d56f-kOr2)
垢版 |
2017/06/13(火) 21:22:39.97ID:swVjUcbe0
C#初心者です。
今、コントロールだけを録画するアプリを作ろうと思っているのですが、いいような録画方法がわかりません。
また、フォームを最小化したり、別のウィンドウがかぶってもできるようにしたいです。

調べてみてもwebカメラのものが多く、肝心な録画方法は見つけられませんでした。

また、Aforgeライブラリを使いBitmapをフレームごとに追加しaviファイルにするというものは見つけられましたが
これは画面自体のキャプチャなのでコントロールのみができません。
もちろん座標とサイズを合うように指定すればよいのだと思いますが、この方法では別のフォームがかぶったときにコントロールの部分は見えなくなります。

また、PrintWindow関数を使った方法で指定したコントロールをキャプチャするという方法もあり、これなら・・・と思いましたが
スレッドの関係で画像を撮るときにコントロールにアクセスするため、UIスレッド?で実行しなければいけないので、実行時に一瞬ですが止まってしまいます。
これを繰り返すともちろんフォームを操作できなくなるので、この方法もダメでした。

他に何かいい方法はありませんでしょうか?
もちろん自分のやり方や理解が間違っているということも十分にあるので、そこは指摘してくれればうれしいです。

長文失礼しました。
0128デフォルトの名無しさん (アウアウイー Saf1-7Kim)
垢版 |
2017/06/13(火) 22:05:04.35ID:00AUiRloa
>>125
単なるキャプチャーじゃなくて動画にするの?
なんでそんな高いハードルを設定するのよw

単なる静止画キャプチャーならControl.DrawToBitmapでできるんじゃない?
キャプチャーするレートにもよるだろうけど、余程複雑なコントロールでもない限り
プチフリとかならんと思うけど
0138デフォルトの名無しさん (ブーイモ MM59-Kg10)
垢版 |
2017/06/14(水) 16:27:38.10ID:TJHy+lk+M
”yyyy/MM/dd HH:mm:ss.fff”
このような時間情報のはいった文字列strを以下のようにDateTimeにcastしますと
DateTime TimeStr = DateTime.Parse(str);
TimeStrの中身は{yyyy/MM/dd HH:mm:ss}となってしまい、ミリ秒の情報がどこかにいってしまいます。
ミリ秒込みでstring型からDateTime型へcastするにはどうやれば良いでしょうか。
0145デフォルトの名無しさん (ワッチョイ db0d-ZzMJ)
垢版 |
2017/06/14(水) 23:04:58.97ID:ji83wWfb0
vs2015でどこからも参照してない古いクラスファイルをプロジェクトから除外→F5起動すると動作がおかしくなる
(DLLimportが失敗する、app.manifestで設定してる高解像度対応が無効になる)

調べてもよく分からないからそのまま使ってるけど、理由わかる人いますか?
0149145 (ワッチョイ 160d-hsT2)
垢版 |
2017/06/15(木) 21:40:53.73ID:3vAYf7Jr0
>>148
ありがとうございますm(_ _)m
今試した限りではダメでした

やっぱり追加、修正してるうちにどこかおかしくなってるのかな
とりあえず時間ができるまではこのまま使うことにします
0150デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
垢版 |
2017/06/16(金) 17:33:39.10ID:+giSoZYq0
コンボボックスやテキストボックスを10個 for文などで処理したいんですけど何使えばいいですか
for i =0
combobox i =***
textbox i =***

イメージ的にこういう感じです
0164デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/16(金) 22:46:38.91ID:BaZST6Yaa
アルゴの性能差が顕著に出そうやなw
0166デフォルトの名無しさん (ワッチョイ 4fe3-W9ZD)
垢版 |
2017/06/16(金) 23:06:59.57ID:e3V6DgTh0
>>153
軽い動画プレーヤー、軽い画像ビューア、アラーム時計、カレンダー
0168デフォルトの名無しさん (ワッチョイ 538e-c+64)
垢版 |
2017/06/17(土) 04:24:32.54ID:N+Hb8N3C0
よろしければ、みなさんが初期に作成したVisualC#のアプリを教えてくださいませんか?
初学者で作れるのはどの程度のものなのか知りたいのです

本当は作りたいものを作るのがいいのでしょうが、どれも難度が高いため、完成させることによるモチベーションを適度に得たいのと、
参考書に載っているのはサンプルのためのサンプルみたいなものばかりで……
よろしければ実例を参考に「こういうのなら作りたいかも」というのを考えてみたいのですが、お願いできませんでしょうか?
0169デフォルトの名無しさん (ワッチョイ 164a-2Jtg)
垢版 |
2017/06/17(土) 05:24:34.32ID:IAjbbKvT0
>>168
Amazonを一通り作れるようになるべき。
まずはログインからか。
0177デフォルトの名無しさん (アウアウエー Saf2-4shY)
垢版 |
2017/06/17(土) 09:44:33.47ID:WmtHpkBVa
>>168
GUIなら電卓は良いんじゃないかな。
おいらは何故か画像表示して、その上に落書きできる機能付けるのが定番だけど。
(ちゃんとWindow重なったり、拡大縮小で画像が消えないようにメモリ上にビットマップを保持して)

CUIだとcat -nと同じ、テキストを行番号付けて表示するって奴。
C#とかはIDE充実し過ぎだけど、LLとかだと自分専用テキストエディタとかモチベーション維持に良いかも。
0180デフォルトの名無しさん (ワッチョイ aea2-yC+1)
垢版 |
2017/06/17(土) 10:13:01.37ID:Vu9y7E7d0
C#が初めての言語って人ここは少ないだろう
CかJava経由じゃないかなあ

ちな、圧縮ファイル内の画像をリサイズアプリ
0185デフォルトの名無しさん (ワッチョイ 4fe3-W9ZD)
垢版 |
2017/06/17(土) 11:20:07.43ID:JDz+7Aqh0
>>168
まずデジタル時計、次に画像ビューア

慣れてきたらデジタル時計にアラームを付ける
そして文字色や背景色をダイアログで設定して変えられるようにするとかフォントも変えられるようにするとか
画像ビューアも自分が便利に使えるようにバージョンアップする

かなり慣れてきたら簡単なテキストエディタや簡単なブラウザを作ってみる
0190デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/17(土) 12:28:42.76ID:25P2TRU/a
フォームアプリで無限ループをまわすと画面が固まるので、ループ処理を別スレッドで行いたいのですが.NET4の環境でこれを行うのはどういう記述をすればいいのでしょうか
ボタン1を押して無限ループ処理開始
ボタン2を押して無限ループ処理停止
みたいな感じです。よろしくお願いします。
0193デフォルトの名無しさん (ワッチョイ 5312-kYIN)
垢版 |
2017/06/17(土) 12:54:36.45ID:mQN0Gi2S0
>>190

bool cancelRequested;

async button1_Click()
{
 button1.Enabled = false;
 button2.Enabled = true;

 cancelRequested = false;
 await Task.Run( DoWork );

 button1.Enabled = true;
 button2.Enabled = false;
}

button2_Click()
{
cancelRequested = true;
}

void DoWork()
{
 while( ! cancelRequested )
 {
  ;
 }
}
0194デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/17(土) 13:23:55.65ID:25P2TRU/a
>>193
ありがとうございます
async/await
を使うと、GetAwaiterの定義が含まれておらず〜って出るのですがasync/awaitを使わずにTask.RUN(DoWork)のみでいいでしょうか
あと、Task.RUN(DoWork)とTask.Factory.StartNew(DoWork)は全く同一処理と思っていいでしょうか
0195デフォルトの名無しさん (ワッチョイ 5312-kYIN)
垢版 |
2017/06/17(土) 13:52:44.39ID:mQN0Gi2S0
>>194
修正版
http://ideone.com/1vh2bo

Task.RunとTask.Factory.StartNewは似てるけど、全く同じではないらしい。
MSDNのTaskFactory.StartNewの備考に書いてある。
今回の例ではどちらでも動くけど。
0199デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
垢版 |
2017/06/17(土) 14:04:47.83ID:n9iTrThT0
テキストボックスを何十個か保存する方法教えてください
プロパティで設定して
Properties.Settings.Default.aaaa = this.textBox0.Text;
と1つ1つ手動で保存する方法はわかるのですが
他に一括でできる方法ありませんか
0200デフォルトの名無しさん (ワッチョイ 5312-kYIN)
垢版 |
2017/06/17(土) 14:09:52.65ID:mQN0Gi2S0
>>194
すまん。.Net4環境だと標準でawait/async使えないの忘れてた。

async/awaitを使わないバージョン
http://ideone.com/34GTJb

>>195でも>>196のを入れれば動くはずだけど。
0202デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/17(土) 14:17:41.38ID:25P2TRU/a
>>195>>196>>200
ありがとうございます!問題なく動作確認出来ました
GetAwaiterは私の勘違いでした
Task task = await 〜
してました。。
.NET4でもasync/awaitは大丈夫でした
Task.RUNは上のを入れればいいんですね?後で確認してみます。大変助かりました
0203デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/17(土) 14:27:54.24ID:25P2TRU/a
すみません。また勘違いでした
async/await使えませんでした
上のをいれてみたら使えました
0212デフォルトの名無しさん (ブーイモ MM06-VgqF)
垢版 |
2017/06/17(土) 19:43:42.82ID:KgLuH5ksM
テキストボックスが何十個も並んでる時点で
俺は泣くと思う

そしてそれがちゃんとしたデータ構造に格納されてないことを知り号泣すると思う
そして10分でリファクタリングを終わらせコーヒーを飲む
0213デフォルトの名無しさん (ワンミングク MMaa-QeqB)
垢版 |
2017/06/17(土) 19:51:50.19ID:fizf5E0aM
業務システムはそんなんばっかりだよね
1画面で事細かに大量に入力するのって疲れるだろうに
可能な限り入力を減らして楽しようとか
分割統治して脳の負担を減らそうって発想がないのだろうか
0229デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/17(土) 22:12:34.98ID:f5T73F7La
>>221
本当は遠回りでもちゃんと構造化プログラミングとOOPを
理解した方がいいんだけど、そういう趣旨の本はないね。

web上の記事だとなおさら少ない。
個人的には、ネットで十分とかいう奴は真に受けてはダメだと思うw

まあ、全部を網羅した本はないからいろいろザッピング気味に読んでみるのがいいんじゃないか。
図書館とか、ブックオフとかアマゾンの古本で十分だと思う。(さすがにC#2.0以前の
古いものは避けた方がいいかもしれんが...)

それでプログラミングの考え方がつかめるようになれば、
言語としてのC#やその新機能を調べるのはwebで十分だと思う
0231デフォルトの名無しさん (ワッチョイ ae61-yC+1)
垢版 |
2017/06/17(土) 22:38:38.18ID:mmWGHNwB0
>>224
「c# 作り方」 というか 「c#」+やりたいことのキーワードだな
「c# 画像ビューワー」 とか
それで見つかりそうになかったらC++で探している。解決方法が似ていることが多いから
C#始めて2年以上たったけどそれで困ったことが無いくらい情報はあった
>>223
VS+C#以上に楽な言語とか想像もつかないな
0234デフォルトの名無しさん (ワッチョイ e3b1-yC+1)
垢版 |
2017/06/18(日) 00:26:44.91ID:HEHabn3K0
>>221
「作って覚えるVisual C# デスクトップアプリ入門」は、レベル0向けとしていいかもしれない。

この本は、文法などは簡単な説明で済まされてしまっているけど
書いてあるとおりに手を動かせば、初歩的なGUIアプリ(タイマーとか付箋アプリとか家計簿アプリとか)を
完成させることができた。
文法だけの本で勉強するのは苦行に感じるかもしれないので、まず実際に動くものを作れるのはいいと思う。
僕はC#2013年版を読んだけど、最新の「作って覚えるVisual C# 2017〜」もたぶん大きくは変わってないはず。

ただしこの本は、レベル0向けに分かりやすくするため、あえて説明を端折ったり、
説明しやすくするためにあまり一般的じゃないやり方が書いてあるところもあるように思う。
勘のいい人だと、この本を足掛かりにWebの情報だけでどんどん先に進めるだろうけど、
どうも応用が利かないと思ったら、独習C#といった文法の本を改めて勉強すればいいんじゃないだろうか。
0236デフォルトの名無しさん (JP 0H9b-HMVo)
垢版 |
2017/06/18(日) 01:33:04.85ID:rNmQ8rlgH
つーかレベル0ってのが変数って何?とかプログラム制御でお決まりのif〜thenとか
forループとか、サブルーチンへ飛んでreturnで戻るとか、その辺りのほんとの初歩の
知識がないってことなら、そういうの解説したC#版入門本・サイトってあるのかね?
そのへんって常識として押さえてないようだと、挫折する可能性高いと思う
0237デフォルトの名無しさん (ワッチョイ 5732-2WTa)
垢版 |
2017/06/18(日) 02:04:31.00ID:ifJ7nIy80
webbrowserを使用したソフトを作っているのですが、
デフォルトだと音量が大きすぎるので音量設定で変更したいのですが、
ミキサーの音量とかってどうやって設定するか探してみたのですが見つかりませんでした。
何かいい方法はないでしょうか?
0240デフォルトの名無しさん (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 11:31:27.68ID:3NNsYvIS0
質問させてください。
本やネットに載っているサンプルをまねて、下記のようなMyCollection<T>クラスを作りました。

public class MyCollection<T> : IEnumerable<T>
{
List<T> list;
public MyCollection()
{ list = new List<T>(); }
public void AddObject(T item)
{ list.Add(item); }
public IEnumerator<T> GetEnumerator()
{ for (int i = 0; i < list.Count; i++) yield return list[i]; }
IEnumerator IEnumerable.GetEnumerator()
{ return this.GetEnumerator(); }
}

このクラスでは、非ジェネリック版のGetEnumerator()は、インターフェイスIEnumerableを明示的に実装しています。
(サンプルがそうなってたのでそうしています。)

== 続く ==
0241240 (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 11:32:03.36ID:3NNsYvIS0
== 続き ==
で、この非ジェネリック版のGetEnumerator()はどんなときに呼ばれるんだろう?と思い、試しに無理やり
呼んでみようと、下のように非ジェネリックなIEnumerator iを経由してMoveNext()をコールしてみました。
しかし、デバッガで見る限り、ジェネリック版のほうのGetEnumerator()が呼ばれるようです。

MyCollection<int> collection = new MyCollection<int>();
collection.AddObject(0);
collection.AddObject(1);
collection.AddObject(2);
//IEnumerator<int> i = collection.GetEnumerator();
IEnumerator i = collection.GetEnumerator();
while (i.MoveNext())
{ var j = i.Current; Console.WriteLine(j); }

ここで質問なのですが、
(1) 上記のコードで、どうして非ジェネリック版のGetEnumerator()が呼ばれないのか?
(2) どんなときに呼ばれるのか?
(3) 上記のコードでは、非ジェネリック版のGetEnumerator()の中からジェネリック版のGetEnumerator()を
呼んでいるが、両者は戻り値が異なる(IEnumerator<T>とIEnumerator)のに、なぜそんなことができるのか?

以上、よろしくお願いします。
0242デフォルトの名無しさん (ブーイモ MMda-mug2)
垢版 |
2017/06/18(日) 11:37:58.02ID:F94toio2M
>>241
1) C#に戻り値の型に応じた型推論はないから
2) collectionをIEnumerableにキャストしてから3) GetEnumeratorすれば非ジェネリックの方を呼べる
IEnumerator<>はIEnumeratorを継承しているから
0244240 (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 13:14:15.29ID:3NNsYvIS0
早速の回答ありがとうございます。

いただいた回答をもとに色々考えましたが、何か釈然としない部分が残っています。

先のコードの、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
の部分は、下記のような動作と考えていいのでしょうか?

@について:
・collectionはMyCollection<int>型である。
・よって、collection.GetEnumerator()のGetEnumerator()はジェネリック版のほうを意味し、
 その戻り値はIEnumerator<T>型である。
・IEnumerator<T>型である戻り値が、IEnumerator型の変数iに入る。
・IEnumerator<T>型の値を、IEnumerator型の変数に入れられる理由は、
 「IEnumerator<>はIEnumeratorを継承しているから」。

Aについて:
・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
 ジェネリック版のGetEnumerator()のほう。

以上の動作は、
インターフェイスI1をI2が継承するとして、
I2型の値をI1型の変数に入れて、I1型の変数経由で、I2にしかないメソッドを呼んでいるように見えます。
(I2にしかないメソッドとは、今回の例ではジェネリック版GetEnumerator()のことです)

== 続く ==
0245240 (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 13:14:32.67ID:3NNsYvIS0
== 続き ==

しかし例えば、

interface I1 { void Method1(); }
interface I2 : I1 { void Method2(); }

class C1 : I2
{
public void Method1() { Console.WriteLine("1"); }
public void Method2() { Console.WriteLine("2");}
}

以上のようなインターフェースとクラスに対して、

I2 i2 = new C1();
I1 i1 = i2;
i1.Method1(); // OK
//i1.Method2(); // エラー

以上のようにしてi1経由でi2にしかないメソッドを呼ぼうとすると、エラーになります。
これはどうしてなのでしょうか?
(長文ですみません)
0246デフォルトの名無しさん (ブーイモ MMaf-mug2)
垢版 |
2017/06/18(日) 13:36:20.31ID:hiI5kOBPM
どこでI2にしかないメソッドを呼んでいるように見えるのかわからん
iにはジェネリックGetEnumeratorの戻り値であるIEnumerator<>オブジェクトが入る
i.MoveNextは非ジェネリックのIEnumerableのメンバたけどIEnumerable<>のメンバでもある
なぜならIEnumerable<>はIEnumerableのMoveNextを継承しているから
0247デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/18(日) 13:47:39.71ID:CKbpnobma
>i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
ここは何か勘違いしているというか、何を言ってるのか分からないというか...

C#は静的型付けの言語なので、I1型の変数i1のメンバーへのアクセスとして
記述可能なのは、I1型のメンバーだけ。

i1には実際はI2型の値が入ってるんだからI2のメンバーも呼び出せるべきだとか言ったって、
実行時にi1にI2型の値が入ってるかどうかなんてコンパイル時にはコンパイラに分かりません
0248デフォルトの名無しさん (ブーイモ MM06-VgqF)
垢版 |
2017/06/18(日) 14:20:22.43ID:sWt6I29PM
>>244
実装はどうなってるか知らないけど
同名のメソッドを継承でオーバーライドされたらそっちのメソッドが呼ばれる

非ジェネリックメソッドをジェネリックでオーバーライドしてたら
ジェネリック版が呼ばれる

それが下位のInterfaceで操作された場合でも
0250デフォルトの名無しさん (ワッチョイ efe0-LlRF)
垢版 |
2017/06/18(日) 14:34:17.42ID:dIx7/lbV0
> ・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。

GetEnumeratorはここではもう関係ない
iという少なくともIEnumeratorを実装しているオブジェクトのMoveNextを呼び出してるだけ
> ・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
 ジェネリック版のGetEnumerator()のほう。
なんでGetEnumeratorがでてくんの?
IEnumerator<T>のMoveNextっていうなら分からんでもないけど
0251デフォルトの名無しさん (ワッチョイ ba66-VgqF)
垢版 |
2017/06/18(日) 14:53:44.56ID:Hoh12jc00
おそらくyieldで記述と実行の順序が見た目と異なる事を言ってるんだろうけど

明示的なインターフェイスの実装は最初のレスでも有るように(IEnumerable)collectionの時に呼ばれるだけであって
結局はIEnumerator<T> GetEnumerator()へのラッパーだし、IEnumeratorに入れようがインターフェイスは全て仮想呼び出しだし
もはやジェネリックがどうとか関係ないな
0252デフォルトの名無しさん (アウアウウー Sa77-VgqF)
垢版 |
2017/06/18(日) 15:49:10.59ID:fcq/NEcZa
>>244
@でジェネリック版のIEnumerator(を実装したクラスのインスタンス≠MyCollection<int>)を返している
AではそいつのMoveNextを普通に呼んでるだけ

そこで渡されているIEnumeratorの仕様に沿ったオブジェクトは
MyCollection<int>と別のクラスというのが
間違えやすいポイント

public IEnumerator<T> GetEnumerator()の
ジェネリック版のyield returnを含んだブロックから全然別のクラスが生成されていて
そいつのインスタンスが渡されている
0253デフォルトの名無しさん (アウアウウー Sa77-VgqF)
垢版 |
2017/06/18(日) 15:53:23.46ID:fcq/NEcZa
デバッグでステップすると
public IEnumerator<T> GetEnumerator()の中を動いてるけど
実際は別のクラスが作られていてその中を実行してる

このクラスはコンパイル時に自動実装される

以前は別クラスを自分で作らなければならなかったけど
yield returnが実装されてから楽になった
0254240 (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 17:54:39.05ID:3NNsYvIS0
たくさんの回答ありがとうございます。

「i.MoveNext()により、実際にGetEnumerator()が呼ばれる」と思った理由は、>>253が書いてくれてるように、
デバッガでステップ実行すると、MoveNext()を呼んだタイミングでGetEnumerator()の中に入っていくためです。

皆のおかげで、その考えが誤りであることがわかりました。

ただ、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
については、まだイマイチ自信がないんですが…。

全員のレスをつなぎ合わせて、下記のように理解したのですが、あってますでしょうか?

@で、
・GetEnumerator()により、ジェネリック版IEnumerator<T>を実装したクラスのインスタンスが生成される
・そのクラスは、ジェネリック用と非ジェネリック用の2つのMoveNext()を持つ
 (IEnumerator<T>はIEnumeratorを継承しているため、両方のMoveNext()が作られる)
・ジェネリック用のMoveNext()の内容は、ジェネリック版のyield returnブロックから生成される
・非ジェネリック用のMoveNext()は、ジェネリック版のMoveNext()のラッパーである

Aで、
・iは非ジェネリックのIEnumeratorなので、非ジェネリック用のMoveNext()が呼ばれる
・それにより、ラップされているジェネリック用のMoveNext()が呼ばれ、結果として、
 「ジェネリック版のyield returnブロックから生成された処理」が呼ばれる。

以上、よろしくお願いします。
0256デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/18(日) 18:22:19.50ID:CKbpnobma
いやいや、「ラッパー」って言葉を誤用している点を除けば質問者の>>254の方が正しいからw

現実のほとんどの実装ではIEnumerator.MoveNextは
IEnumerator<T>.MoveNextをそのまま呼ぶだろうけど、
やろうと思えば別の実装をすることだって可能に決まってる
0259デフォルトの名無しさん (ワッチョイ efe0-LlRF)
垢版 |
2017/06/18(日) 19:03:33.17ID:dIx7/lbV0
共通って言うとなんか分かりづらい
オーバーライドなんて257は一言も言ってないようだが…

interface IEnumerator {
object Current { get; }
bool MoveNext();
void Reset();
}
interface IEnumerator<T> : IEnumerator, IDisposable {
new T Current { get; }
void Dispose();
}
IEnumerator<T>自体はMoveNextを定義しない
派生元のMoveNextをそのまま公開する

なので、IEnumerator<T>の実装はこんなんになる
class HogeEnumerator : IEnumerator<T> {
public T Current { get { 略 } }
object IEnumerator.Current { get { return this.Current; } }
public bool MoveNext() { 略 }
public void Dispose() { 略 }
}
なので、
IEnumerator<T> ia = obj.GetEnumerator();
IEnumerator ib = obj.GetEnumerator();
iaでもibでも同じMoveNextが呼び出される
0260デフォルトの名無しさん (アウアウウー Sa77-VgqF)
垢版 |
2017/06/18(日) 19:06:45.73ID:jItXXYfIa
>>258
誰もそんなことについて言ってるのではないよ
トンチンカンなレスありがとう

MoveNextは別々に必要ない
そもそもシグネチャーは一個だけだから

必要なのは一個だけだと言うこと
さっきのページの変な訳を見てよく考えてほしい
0262デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/18(日) 19:11:42.21ID:CKbpnobma
しかしあれだ、「ほとんどの実装でそうなっている」ことと、「必然的にそうなりそれ以外の実装はありえない」
ことの区別のつかないレベルの人が偉そうに回答する側に回ってはダメだと思うw
0264デフォルトの名無しさん (ワッチョイ ba66-VgqF)
垢版 |
2017/06/18(日) 19:17:16.07ID:Hoh12jc00
>>254
まずコードの見た目と挙動が異なるのはyieldが糖衣構文で>>252が言うように
IEnumerator<T>を実装するクラスをコンパイラが生成してコードがすり替わるから
これはジェネリック云々とはまた別の話、ILSpy等で糖衣構文のデコンパイルをオフにして見てみると良い

私がラッパーと書いたのはIEnumerable.GetEnumerator()の話で、そのコードでは呼び出されていない
これは((IEnumerable)collection).GetEnumerator()などとしてIEnumerable型でコールされた時に呼び出されるだけのもの
仮にそう書いたとしてもyieldで実装されたIEnumerator<T>メソッドへ投げているので、結局iの中身はIEnumerator<T>

あとは中身のIEnumerator<T>がIEnumerator型で操作された時の実装による、明示的なインターフェイスの実装があればそれが呼ばれる
0268デフォルトの名無しさん (ワッチョイ 536e-mug2)
垢版 |
2017/06/18(日) 19:59:37.67ID:ppLsekVC0
言葉足らずかもしれないから補足しとくか
質問者の元の>>240のコードではイテレータ構文によって自動生成されたIEnumerator<>実装が返る
この実装において、MoveNextは非ジェネリックもジェネリックも共通のメソッドが呼ばれるようになっている
>>254で質問者はMoveNextがジェネリック版と非ジェネリック版の2種類の2種類生成されていると思っているようだが、これは誤りだ
これでいいかな
0269240 (ワッチョイ 8bbe-2WTa)
垢版 |
2017/06/18(日) 20:45:02.93ID:3NNsYvIS0
質問者です。

>>264
>>251でラッパーと書いていただいた意図を取り違えてました。失礼しました。

-----

「MoveNextの実装は単一で共通」という点についても、理解できたと思います。

IEnumeratorとIEnumerator<T>で MoveNext()のシグネチャは共通であり、処理内容的にも
イテレータをひとつ進めるだけなので、わざわざ(明示的に実装するなどして)2つを別々に作る意味はない。
現に、yieldで自動生成されるMoveNext()も、共通のメソッドになっている。

…ということですね。


皆さんのおかげで、今回の質問はほぼ解決できたような気がします。
どうもありがとうございました。

# それにしても、「C#はシンプルだから初心者にもわかりやすい」とか聞いたことがありますが、
# 実際にはずいぶん難しいですね。
# 特に「インターフェイス」が苦手です…。
0274デフォルトの名無しさん (ワッチョイ fac4-N71/)
垢版 |
2017/06/18(日) 21:26:40.66ID:gBGY/PYC0
言語仕様がシンプルって触れ込みで本当にシンプルなものにはお目にかかったことがない
brainfuckくらいかな

go、てめーは特に駄目だ
落とし穴ばっかり掘りまくりやがって
0276デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/19(月) 00:34:16.82ID:9HdiQdA0a
ただのIteratorパターンを分かりにくいって言われてもw

ジェネリックのない.NET1.xの段階でリリースしたのは「戦略ミス」だったんじゃないのかって言いたいのなら
それはそうかもしれないけど
0280デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
垢版 |
2017/06/19(月) 02:47:34.68ID:y5kZlHZm0
コンボボックスのアイテムを他のコンボボックスに書き換える方法
これより簡単な方法って存在しますか?

for (int j = 0; j <= combobox1;.Items.Count-1; j++)
{
combobox2..Items.Add(combobox1.Items[j]);
}
0285デフォルトの名無しさん (ワッチョイ 8706-nAjB)
垢版 |
2017/06/19(月) 18:19:56.58ID:I4SWBMMg0
GroupByするのですが、ソートした結果がほしいのです。どうすればいいでしょうか??
例えば、Personクラスがあります。
class Person { public string FirstName, public string LastName }
LastNameでグループ化しますが、persons.GroupBy(p => p.LastName);
この各グループ内でfirstNameでソートした状態でグループ化したいのです。
0289デフォルトの名無しさん (ドコグロ MM32-p9VS)
垢版 |
2017/06/19(月) 22:12:58.54ID:gggoijwOM
業務系のアプリ作るときって、
例外処理どれくらいやるのですか?

個人だとざっくり例外キャッチしときゃいいやみたいな感じだけど、このケースはこういう可能性があるとか全部考慮しないといけない?
0290デフォルトの名無しさん (ワッチョイ 536e-mug2)
垢版 |
2017/06/19(月) 22:26:10.29ID:l5+Ht5Lo0
例外処理で最も大事なのは例外を漏らさないことではなくどこで例外を漏らしても問題のない作りにすること
それを徹底してさえいれば例外は最終的に一番上のイベントハンドラでキャッチしたりWebならフレームワーク任せにしても基本的に問題ないはず
それをあえて例外の発生源により近い場所で処理するのは、あくまでユーザーの利便性を高めるためのオプションであって、それが必須であってはいけない
0291デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/19(月) 22:41:39.10ID:DpavZgQja
>>289
必要に応じて、としか言いようがないのでは?w

なんか無駄にハッスルして(笑)例外処理にこっちゃう人がたまにいるけど、
ぶっちゃけそれでプログラムの本来の効用が上がるわけじゃないんから必要以上に凝るのは
バカげてるとは言えると思う
0292デフォルトの名無しさん (ブーイモ MMda-mug2)
垢版 |
2017/06/19(月) 22:56:05.74ID:n8yR7uvJM
例外はトップダウンで考えるのが効率よく堅牢なソフトウェアを作るコツ
上の方でまとめてリトライすりゃ済むんなら下で細かいケースをいちいち個別に考慮する必要はない
0293デフォルトの名無しさん (ワンミングク MMaa-QeqB)
垢版 |
2017/06/20(火) 00:28:55.36ID:0dk+Bj02M
例外は呼び出しルートでメッセージに変換して出力
要件で明確にこういう障害の時はこうすると決まっていない限りは絶対に個別に処理してはならない
仕様で決まっていないのに処理するということは例外を握りつぶすことと同じだ
0294デフォルトの名無しさん (ドコグロ MMa7-p9VS)
垢版 |
2017/06/20(火) 08:11:57.37ID:OLNd26fgM
ありがとうございます。
例外のメッセージ出されても意味分からないから、分かりやすいメッセージにしろとか、考慮不足なんじゃないのって言われて、まじか、想定できる箇所全部処理させる気か!?みたいな
0296デフォルトの名無しさん (ブーイモ MMda-mug2)
垢版 |
2017/06/20(火) 12:24:05.26ID:iIE7QTSfM
日本人は末端から考えるのが好きだから、例外をその場で全て個別に適切に処理しようとしてコードが膨れ上がり
握り潰しだらけでデバッグ不能なゴミが出来上がることが多いよね
未だにJavaの検査例外を有効であると信じてる人も多いし
0297デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/20(火) 12:46:21.09ID:ghFCA5oRa
むしろ集約例外ハンドラ使えとかなるべく呼び出し階層の上の方で処理しろって言ってる奴を見たら、
ああこいつは何も分かってないなと判断して眉にツバして話を聞くことを勧めるw
0299デフォルトの名無しさん (ワッチョイ c7c0-ehp2)
垢版 |
2017/06/20(火) 16:45:59.98ID:EFljh2yC0
Windows10での話なんですが、
フォームの左上とクライアント領域の左上の差を取得しようとPointToClient(Location)を実行するとおかしな値を返してきます
具体的にはフォームの外枠は1pxでタイトルバーの高さが31pxなので(-1, -31)を返さないとおかしいはずなんですが、(-8, -31を)を返してきます
(これはVSのデザイナなどで表示されてるWindowsベーシックスタイルのタイトルバー高さ、枠の幅なので多分そちらが返ってきているのではと思ったのですが)

表示されている状態に沿った値を取得する方法はないでしょうか
0301デフォルトの名無しさん (ササクッテロラ Spab-Lzg+)
垢版 |
2017/06/20(火) 19:00:18.30ID:Z7Rlaax/p
>>294
考慮不足なんじゃないかというのは、全ての例外を処理しろって事じゃないぞ?
その場で処理するべきかはケースバイケースだが以下は全て考えておくべきだって事だ

発生しうる例外は何か?
どの例外をその場で処理するべきか?
上に投げるのが適切としたのは何故か?

考慮不足じゃないかと言われたら相手が納得するまでこれらの考慮した事を説明すればいいだけ、相手と判断・認識が違っていてもより具体的な話が出来るだろう
もしそれが出来ないなら実際に考慮不足だからもっと考えるべき
0302デフォルトの名無しさん (アウアウイー Saeb-jmzv)
垢版 |
2017/06/20(火) 20:06:21.02ID:Ex7wW9yMa
質問者がどういう文脈のどういうニュアンスで「考慮不足」って言われたかなんか
お前に分かるわけねえだろw
エスパーか何かのつもりかねw

っていうか、何を偉そうに威張り散らして講釈垂れてるのかねw
こういう奴心底大バカだと思うわ
0308デフォルトの名無しさん (アウアウカー Sa33-otAv)
垢版 |
2017/06/20(火) 23:27:20.81ID:dU/FxV4ta
ん?例外はとりあえず呼び出し元にthrowしとけばいいってこと?
それとも下手にcatchするなってこと?
0311デフォルトの名無しさん (アウアウイー Saeb-YD8M)
垢版 |
2017/06/21(水) 03:23:32.47ID:gTS1oBXqa
>>310
クラスを使う側に回ったとき何でもかんでも例外で返すクラスとそうでないクラスと混在してて使いにくいんだよ死ねよ
って感じ
100箇所で呼び出したら100通りのルートを確保して死んでる
0315デフォルトの名無しさん (ワッチョイ 5732-2WTa)
垢版 |
2017/06/21(水) 06:35:50.86ID:1NTI9Fvt0
WebBrowserで動的に変化するページのソースを取得したいのですが、
Browser上のボタンを押す→動画が再生される(HTMLが書き換わる)
といった処理がBrowser内でおこなわれているはずなのですが、
IEのソースを表示ではHTML書き換え前の状態、Chromeの検証(デベロッパーツール)の
elementsでは書き換え後の情報が見れたのですが、

IHTMLDocument2 HTMLDocument = webBrowser1.Document.DomDocument as IHTMLDocument2;
string content = webBrowser1.DocumentText;

としてみても取得できませんでした。
何か他にいい方法はないものでしょうか?
0320デフォルトの名無しさん (ワッチョイ 9e23-u+AO)
垢版 |
2017/06/21(水) 16:39:05.91ID:OqGMB+VY0
public class TestClass {
public enum PublicEnum { One, Two, } //列挙型
private int privateField; //フィールド
public int publicProperty { get { return privateField; } } //プロパティ
public TestClass(int val) { privateField = val; } //コンストラクタ
public string publicMethod(string str)
{ //メソッド
str = "publicMethodが呼び出されました。" + str;
return str;
}
public string publicMethod() { return publicMethod(""); }
}
class Program{
static void Main(string[] args){
Type typeTC = typeof(ConsoleApplication1.TestClass);
MemberInfo[] memberTC = typeTC.GetMembers(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly
);
foreach (MemberInfo m in memberTC) { Console.WriteLine("{0} - {1}", m.MemberType, m.Name); }
}
}
このmemberTCを、typeTC.GetMembers( BindingFlags.Public ); にすると、
NestedType - PublicEnum しか表示されません。
同じようにNonPublicとか他のメンバで試すと何も表示されなくなります。
何かやり方間違っていますか?
0322デフォルトの名無しさん (ワッチョイ 9e23-u+AO)
垢版 |
2017/06/21(水) 17:38:01.17ID:OqGMB+VY0
>>321
ありがとうございます。
0323デフォルトの名無しさん (ワッチョイ 5732-2WTa)
垢版 |
2017/06/21(水) 17:57:52.96ID:1NTI9Fvt0
>>316
自分の実力ではちょっと敷居が高そうですが、Seleniumを使ってみようと思います。
Chromeの拡張機能を使いたいのは山々なのですが、動画のURLを再生ソフトに渡すために
外部プログラムを起動するにはかなり厄介そうなので諦めました。

>>317
やってみましたが無理でした。

レスしてくださった方々、ありがとうございました。
0324デフォルトの名無しさん (ブーイモ MMaf-VgqF)
垢版 |
2017/06/21(水) 18:40:33.78ID:Os8YZW2iM
DOM書き換えはソース書き換えじゃないからな
ソース見れる場合は独自にDOMからソースを組み立ててるだけじゃないかな?
IEがそういう機能提供しているとは思えない
0325デフォルトの名無しさん (ワッチョイ bafc-VgqF)
垢版 |
2017/06/21(水) 19:05:13.46ID:r7sO91Ct0
例えば整数の配列(リスト)
nums = {4,1,9,7,5,3,1,3,6,7,2,1,3,5,2,6,...}
というのがあって、
これを出現数をキーにしてグループ化するには

nums.GroupBy(x => x)
   .Select(x => new { count = x.Count(), number = x.First() })
   .GroupBy(x => x.count, x => x.number)

としたらできたんだけど、それぞれ各グループのソートもしたい
出現数順なら、単純に最後に OrderBy すりゃいいんだろうが
やりたいことはそれじゃない

説明くどいかもしれんが、表にすると

出現   数グループ
----------------------------------
1 回   {4, 9}
2 回   {5, 2, 6}
3 回   {7, 1, 3}
.      .
.      .
.      .
.      .

の表の右側の各配列をそれぞれソートしたい
まあ foreach 回せばいいんだろうが、後学のために
もっとスマートな方法があれば知りたいなと
0328デフォルトの名無しさん (ワッチョイ bafc-VgqF)
垢版 |
2017/06/21(水) 19:25:57.93ID:r7sO91Ct0
>>326
期待してるのは、俺がよく知らないLinqのクエリ演算子
使って一発でって感じだけど
でも別に唯一無二の正解を聞きたいわけでもない
他の人はどうやるのか知りたいだけで
細かいルールとか気にしなくていいよ
0344デフォルトの名無しさん (ワッチョイ baea-IEdM)
垢版 |
2017/06/21(水) 23:46:15.23ID:SXybjlfe0
NPOIは結構バグあったな
自分も次やるならClosedXMLだな
ExcelCreatorは障害報告するとバージョンアップで直りますが多かった
要件によっては未だにPIAもあり
0353デフォルトの名無しさん (アウアウイー Sa0b-3gws)
垢版 |
2017/06/22(木) 19:26:52.09ID:lD81v1Toa
>>352
何言ってるかよく分からんけど、ワークブックはエクセルで開く前提で作るんでしょ?

「再計算もやってよ」ってユーザーさんの要望の意味は、マニュアルであるセルの値を変更したら、
その系列の合計とか平均値とかが自動的に再計算されるようにしてって意味じゃないの?
0354デフォルトの名無しさん (ワッチョイ b74b-ZLad)
垢版 |
2017/06/22(木) 20:13:34.35ID:yaPeNTze0
Officeがインストールされている環境ならNetOffice使えばOK
印刷もできるし互換性の問題も絶対に発生しない
COM開放なんかも何も考えずに使えるし楽勝

あとExcelだけじゃなくてWordやOutlookなんかも操作可能だぞ
0364デフォルトの名無しさん (ワッチョイ ffa2-LvKX)
垢版 |
2017/06/23(金) 21:14:53.75ID:BInF8U/X0
証券会社が提供してるビットコインのWebAPIを呼び出すってこと?
0367デフォルトの名無しさん (ワッチョイ f796-ZLad)
垢版 |
2017/06/23(金) 21:34:42.44ID:phaIeuJh0
キー入力をエミュレートする方法教えてください
string a = e.KeyCode.ToString();
a="{"+a+"}";
sendkeys.send(a);

だいたいこういう流れでやってるんですがCTRL SHIFTができません
装飾キーは+ ^をつければいけるのですが単独で送る方法がわかりません
あと数字キーは D1, nampad 1となるのでできません
0378デフォルトの名無しさん (ワッチョイ 9711-LvKX)
垢版 |
2017/06/24(土) 02:56:07.29ID:01B0kJ2m0
>>371
ザイフもビットフライヤーもC#一から勉強して出来たぞ。
API取得はコピーして自分のkeyだけ差し替えたらできるやろ
あとはJSONのパースを検索して調べたらできる。

bitflyerブログ
https://github.com/kobake/BitflyerBotSample

nuget
https://www.nuget.org/packages/BitflyerApi

zaifブログ
https://kokenji.net/zaif-api/

teratail
https://teratail.com/questions/35250
0384>>315 (ワッチョイ b732-ZLad)
垢版 |
2017/06/25(日) 02:15:51.98ID:u51yDIuc0
自己解決しました。
webkit phantomjs Seleniumなどを試して納得できることができなかったため、
もう一度調べてやってみたところ

IHTMLDocument2 HTMLDocument = webBrowser1.Document.DomDocument as IHTMLDocument2;
string content = webBrowser1.Document.Body.OuterHtml;

こうすることでcontentの中に意図するものを入れることが出来ました。
0385デフォルトの名無しさん (ワッチョイ d76f-q+YL)
垢版 |
2017/06/25(日) 18:03:00.35ID:sNamIhLK0
非同期でフォームをフリーズ?させずにコントロールをいじることはできないのでしょうか?
Invokeを使ってもつまるところ一緒だと思うのですが、何か方法はありませんでしょうか。

例えるとタスクマネージャのような感じです。
あとは、ListViewにアイテムを追加する・・・のような。
0392デフォルトの名無しさん (ワッチョイ 9f19-q+YL)
垢版 |
2017/06/25(日) 20:56:21.54ID:yN128eA50
複数の人とスカイプでやりとりをしています。
そのうち、特定の人との送受信を行ったファイルを一度に取得するプログラムを組んでます。

ただ、スカイプの仕様で添付ファイルの保存パスは一律同じです。
何か良い方法はありませんか?
0395デフォルトの名無しさん (ワッチョイ 9f19-q+YL)
垢版 |
2017/06/25(日) 21:30:38.11ID:yN128eA50
>>393
スカイプで
私と、一郎、二郎、三郎の3人とメッセージのやりとりをしているとします。
写真・動画・PDFなどのファイルをそれぞれとやりとりしています。

二郎とのスレッドの中でやりとりをしていた
ファイルは大切な内容を含むのでまるごと保存したいと思いました。

ただ、やりとりをして長い為、とても手動では全部を保存する事が出来ません。
そこでプログラムを組んで一発で自動で保存してやろう!

と思った次第です。

保存したいのはあくまで二郎だけであって、一郎・三郎と送受信したファイルは保存したくありません

課題:Skypeでは全員のファイルの保存先が同じパスになっている、
という事です。

こんな場合にはどの様にすればよいの?エスパープログラマさん助けてください!
0396デフォルトの名無しさん (アウアウカー Sa6b-m1nn)
垢版 |
2017/06/25(日) 21:40:14.88ID:TFKG+xLIa
それはプログラマーの技量云々の問題じゃなくてskypeの仕様上どうしようもないんじゃ

同時に複数とやり取りしてなきゃファイルの作成日時で分別可能だが、正確な方法はないだろ
0405デフォルトの名無しさん (ワッチョイ 9f19-q+YL)
垢版 |
2017/06/26(月) 03:06:43.27ID:6QaOoL2B0
Windows API で人の操作をエミュレーション


ユーザを選択 → スレッドを開く → 画面を上にスクロール → 画像を見つける → 右クリック → 所定フォルダ(ユーザ名)で保存


で実現できそう。
0409デフォルトの名無しさん (ワッチョイ b732-ZLad)
垢版 |
2017/06/26(月) 15:41:10.67ID:CxA8zKJy0
Skype何年も使ってないから仕様は覚えてないが、チャットログがあれば
受信したファイル名の横にファイルを開くとかファイルを保存とかあるんじゃねえの?
あるいは、拡張子が表示されてたように思う
ログから、拡張子がついている部分(ファイル名+拡張子)だけを抜き出してListにでもいれて、
ファイルががあるフォルダを順次検索していけば抜き出せるんじゃね?
一時保管されてるファイル名と、送られてきたファイル名が違うなら、受信日時で大まかに振り分けるしか無いだろうが
0411デフォルトの名無しさん (ワッチョイ 9f66-NIhq)
垢版 |
2017/06/26(月) 19:10:18.82ID:Bg26KhHa0
妙に原始的な話が続くのが謎だけど、WindowsならAppDataにSQLiteファイルがあるでしょ?
古いのはmain.dbのTransfersテーブル、最近のVerはmedia_messaging\storage_dbの方に情報あったような気がするが
0414デフォルトの名無しさん (ワッチョイ bfea-gp2z)
垢版 |
2017/06/26(月) 19:17:22.09ID:H4Gyz9lD0
短絡的に考えると私、一郎、二郎、三郎の4人になるが常識的に考えると「私」は自分自身のことになるので普通は除外する
4人と言っているのは相当日本語が不自由か頭が固すぎるかのどちらか
0415デフォルトの名無しさん (ドコグロ MMdf-Stqb)
垢版 |
2017/06/26(月) 19:42:00.73ID:ErfyIPbgM
>>413
> スカイプで

> 私と、
> 一郎、二郎、三郎の3人「が」

> メッセージのやりとりをしているとします。

なら間違えようがないんだが

> 私と、
> 一郎、二郎、三郎の3人「と」

と書いてるから

> (どこかの誰かが)
> 私と、
> 一郎、二郎、三郎の3人「と」

と解釈する余地を残してしまった
それでもその下の文章を読めば私と三人のやり取りだと言うことはわかるはず
0420デフォルトの名無しさん (ワッチョイ 9f66-LvKX)
垢版 |
2017/06/26(月) 21:45:23.21ID:Qwo6nzBc0
「あなたと私」=2人。「あなたと私と彼」=3人。「あなたと私と彼と彼女」=4人
だから「私と、 一郎、二郎、三郎 」も4人が正解だが、何故か3人と錯誤する人も少なくない
これは名前の「一郎、二郎、三郎」につられて居るんじゃないかと仮定する
「私と、二郎、三郎、四郎」・・コレなら多くの人は4人と認識するんじゃないかな

と、屁理屈をでっち上げてみたがどうだろう?
0428デフォルトの名無しさん (ワッチョイ 9f19-q+YL)
垢版 |
2017/06/27(火) 01:16:37.97ID:GqKcgcUi0
>私と、一郎、二郎、三郎の3人とメッセージのやりとりをしているとします。

やりとりをしている対象は3人だろ


4人とかいってる奴は糖質で自分と脳内で会話してる基地外
0430デフォルトの名無しさん (アウアウイー Sa0b-3gws)
垢版 |
2017/06/27(火) 02:22:35.77ID:D1caoPdja
>>406も頭悪いけど、反論してる連中もアホだね

>>395の言う3人とは「私」から見たやりとりの相手の人数のこと。
こう言えば>>406がいくらお馬鹿でも理解するだろうに、
無駄に喧嘩腰に容量を得ないことをいうから無駄にスレが荒れる。

そんな奴に限って俺は正義の味方みたいに思ってるから始末に負えないね
0440デフォルトの名無しさん (ブーイモ MM3b-aomt)
垢版 |
2017/06/27(火) 13:55:12.80ID:thSLzROjM
AJAX Control Toolkitがどうというより、今時のWebはビューにサーバーサイドのフレームワークに合わせた仕掛けを入れるということ自体を一切しないよ
基本的にPHP的なプリミティブな作りにして必要に応じてJSON Web API+JavaScriptってのが今風
0441デフォルトの名無しさん (ワントンキン MM7f-NIhq)
垢版 |
2017/06/27(火) 14:12:22.32ID:saHJxNU8M
笑われるようですが、VS2008の既存のWebアプリをVS2013に移植する作業をしています。

>>439
CalendarExtenderがツールの中に見当たらないようなので。
チャートとかは標準で入ってるようですが。

>>440
やっぱり変わってるのですね。
JSON Web APIですか。調べています。
0442デフォルトの名無しさん (ワッチョイ b732-ZLad)
垢版 |
2017/06/27(火) 14:37:03.26ID:yJfi3v1W0
関数AでWebBrowser1にURL入れて
DocumentCompletedで要素を抜き出す、抜き出した結果を関数Aの返り値として使いたいのですが、
DocumentCompletedイベントが発生して要素を抜き出すあいだ、関数Aを止めとかないと戻り値として使えないですよ?
非同期処理とかスリープ試した見たんですが、うまくいかないんですが、いい方法無いでしょうか?
0455デフォルトの名無しさん (ワッチョイ 9f66-LvKX)
垢版 |
2017/06/27(火) 22:31:20.30ID:Z6j0KWDP0
>>454
私は、hogeとhageの二人と酒を飲みました
私と、hogeとhageの三人で酒を飲みました

「は」の時は自分以外の人数となり、「と」の時は自分を含む人数となる
つまり間違っているのはアンタの方だなw
0457デフォルトの名無しさん (ワッチョイ b74b-ZLad)
垢版 |
2017/06/27(火) 22:36:22.93ID:uJ1RODaw0
>398 :デフォルトの名無しさん (ワッチョイ 9f19-q+YL) [sage] :2017/06/25(日) 21:56:53.75 ID:yN128eA50 [3/3]   
>Windows APIを使えば実装できると思ってますが
>どうでしょう?

こんな発言してるお前にだけは言われたくないわw
0461デフォルトの名無しさん (ワキゲー MMdf-Jbg4)
垢版 |
2017/06/27(火) 23:47:38.24ID:9dRWF27nM
>>459
一考したら通じるけど曖昧で遠回りなんだよ
わざわざ考えなきゃならない言い回しをするのは文学だけで十分

複数人でプログラムを設計する時に大切な事は明確な意志疎通
誰もお前の思考は覗けない
0468デフォルトの名無しさん (ワッチョイ d76e-aomt)
垢版 |
2017/06/28(水) 08:00:03.46ID:5KCPdjT60
MVCじゃない方のレガシーASP.NETってなんで普及してしまったんだろう
普通にPHP的な作り方の方が遥かにわかりやすいと思うけどな
HTMLのフォームのPOSTとかはホスト系で緑色の文字のAAでGUI作ってた時代の考え方と基本的に同じようなもんだから、
決してドカタ開発に馴染みのないスタイルってわけじゃないのに
0474デフォルトの名無しさん (アウアウカー Sa6b-yeEX)
垢版 |
2017/06/28(水) 11:51:02.56ID:BH39HJOwa
質問失礼します
PC(C#アプリケーション )から外付けのIOポートの切り替わりを確認したいのですが、どういった感じの処理をすればいいでしょうか
IOポートの確認はできる前提として、それが一定の周期(100mS)できちんとON/OFFして動いているかを判定したいです
参考意見で構いませんのでよろしくお願いします
0479デフォルトの名無しさん (アウアウイー Sa0b-3gws)
垢版 |
2017/06/28(水) 12:37:27.33ID:7gqvDpUwa
>>474
質問が曖昧過ぎるけど、入力の周期とかデューティー比を監視したいってことなら、
GPIOの状態の取得方法(ボードの仕様)にもよるし要求される精度にもよるけど、
Windowsだけでは難しいと思った方がいいんじゃない?
0481デフォルトの名無しさん (アウアウカー Sa6b-yeEX)
垢版 |
2017/06/28(水) 13:10:10.61ID:3p9zCna+a
>>474です
曖昧な質問ですみませんでした
まだ検討段階でWindows機のアプリケーションからの操作で外付けのマイコンの状態を簡易的にモニタリングしつつ処理をと考えてたのですが、例えばそういうことをするにはどうしたらいいのか参考までにお聞きしときたかったのです
>>476さんのような形になるのかなと考えてはいたのですがイベント発生の時間差で判定するのか、はたまたもっといい方法があるのか事前に知っておきたかった次第です
0482デフォルトの名無しさん (ワッチョイ 9f80-gp2z)
垢版 |
2017/06/28(水) 13:24:26.37ID:QXyxvRuc0
最近のICEは、インターフェイス内にCPUが入ってて、
そいつが仲介してる。
インターフェイスからPC間はUSBシリアル通信で、
インターフェイスからマイコン間は低レベルシリアル通信をしてるな。
リセット信号でマイコンを止め、低レベルシリアル通信で、
中身をトレースし、インターフェイス内にいったんキャッシュし、
そいつをPCに送ってる感じだな。
0483デフォルトの名無しさん (ワッチョイ f732-u7/v)
垢版 |
2017/06/28(水) 20:37:09.67ID:F1IECJZL0
>>481
WindowsはリアルタイムOSじゃないので、アプリでポートをポーリングしても、なんとなくの時間精度でしか監視出来ないよ。
一定周期でバッファにサンプリングしてくれるIOボードでも使えば良いんだろうけど。
0492デフォルトの名無しさん (ワッチョイ 1911-CicO)
垢版 |
2017/06/29(木) 17:09:13.23ID:wGgfLCtF0
***SLAMO***

}

000-"F","TAP","0","1M","L","E-07"/0B"[9BA%]"^"2*73B"="0"/"9GA"
001-"Do"[[[%9DE=HUF%%!%$0B1OTU"NE"]]]<\b>
002-<<%!!!HNDEL%!0DAI@$7[1B]!0#!@>>
3000-{{1\B%HUF!0$$\%6/0Q\%6/GA[[7BU]]%9TE!%$en$}}


---

[[[C%%]]]
}

000-"5802"/"α"="0.1888412376155482"%en{
0493デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/29(木) 20:46:58.12ID:f7/aluE/a
複数の非同期スレッドからひとつのメソッドを実行したいのですが、このメソッドが実行されているとき(ビジー状態とします)他のスレッドからの呼び出しが実行されないようにするにはどうしたらいいでしょうか
ただその呼び出し自体はタスクが溜まっていくかのようにメソッドのビジー状態がとけたら順次実行させたいです
どうしていいかわからず非常に困ってます。。どなたかお助けください
0500デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/29(木) 22:07:08.30ID:f7/aluE/a
皆さんアドバイスありがとうございます
ちなみにメソッドというのはTcpClientの送信メソッドで
複数のスレッドからサーバーに送信をしたいのですが、おそらくその送信のタイミングが競合を起こしうまく動作してくれません。。
ロックオブジェクトを作ってロックかけてるつもりなんですがうまく機能してないのです
0503デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/29(木) 23:25:53.82ID:f7/aluE/a
>>501
ありがとうございます
出来ない理由は私の力不足によるものです
どういった実装になるのか検討がつきません
何か具体的なものありましたらよろしくお願いします

>>502
ありがとうございます
lockは出来ないのですか。。それは更に困りました
System.Threading.SemaphoreSlim
と書かれてるのを調べてみます
0507デフォルトの名無しさん (ワントンキン MM92-HpRm)
垢版 |
2017/06/30(金) 00:19:17.08ID:8Sz1FGh4M
>>500
こういうのはスレッドセーフなキューを使うのが伝統
複数のスレッドからキューにコマンドオブジェクトをエンキューする
処理スレッドはループをぐるぐる回しながらコマンドオブジェクトをデキューして実行する
これは初心者でもわかりやすいが効率は良くない
0508デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/06/30(金) 00:20:08.64ID:vkcMcAZ50
ええー
わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ
単一スレッドから各スレッドに巡回していけばバッティングおこんねーじゃん
って言ってるだけなのにマジで通じないのかよ残念ぷぅ
0510デフォルトの名無しさん (ワッチョイ 5d23-nIbb)
垢版 |
2017/06/30(金) 00:23:25.92ID:SpH8vRbw0
キューでもいいが、SemaphoreSlimでスレッド制限かけたほうがシンプルにはなりそう。知らんけど
0517デフォルトの名無しさん (ワッチョイ c20d-lO1+)
垢版 |
2017/06/30(金) 09:37:27.51ID:arYqdS+00
C#にエラー値ってありますか?
EPPlusを使ってExcelの値をコピーしているのですが、
WriteSheet.Cells[yy, xx].Value = ReadSheet.Cells[yy, xx].Value;
と記述した時、元セルの値が「=na()」の時、文字列の「#N/A」となってしまいます。
使用するセルに文字列が入っていると不具合となるので、
回避する為にセルを判定して「#N/A」となった時は文字列では無くエラー値を入れたいのですが、
何を入れたら良いかがわかりません。
double.NaNとかで代用では無く、エラー値の時は同じくエラー値が入る様にしたいです。
よろしくお願い致します。
0523デフォルトの名無しさん (アウアウイー Sa31-aC11)
垢版 |
2017/06/30(金) 12:19:52.56ID:tSIy+uHPa
何度も言うけど、質問文を普通に読む限りlockで解決する問題としか読めないけど、
質問者が明示的に言ってもいない要件を勝手に妄想して無駄に問題を複雑にして
何か意味あるのかね。
0524デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/06/30(金) 13:22:15.27ID:vkcMcAZ50
>>523
lockだと解決しねーと思うけどな
短サイクルでデータを上げまくるような
プログラムだと十分に上げる隙間ができない限り
データが上げられないスレッドができてくる
根本的な解決方法は単一スレッド側から巡回することだろ
ま、偶然でも動きゃいいのよってんであれば別にこだわらないけどね
でも仕事でやりやがったら俺が監督してたら組み直し必須
0527デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/30(金) 14:12:30.99ID:KBnGYkuha
>>500です
レス遅くなりすみません
SemaphoreSlimやらlockやらもう一度調べてみました
結論から言うとどちらでもうまくいってました

tcp側でもう一つ別な要因がありそっちでエラーを出してました

そのエラーはというと連続的にサーバーに送信をしていた為、使用可能なポートを食いつぶしていてしまったものでした
netstatで確認して判明しました
とりあえず上限値とtime_waitの調整でなんとかなりました
皆さんのアドバイス本当に助かりました
また別な問題が起こったらご教示下さい
0531デフォルトの名無しさん (ワッチョイ f106-k1q/)
垢版 |
2017/06/30(金) 15:07:31.36ID:nrnKInBX0
>偶然でも動きゃいいのよってんであれば
ロックで偶然とか意味不明wwwwwwww

ロックの目的わかってねぇのかよww

草生えるわ。

>でも仕事でやりやがったら俺が監督してたら組み直し必須
これが仕事なら馬鹿な上にさらにかっこ悪く話を必死にそらそうとしてる
お前を他の人と交換必須
0532デフォルトの名無しさん (ワッチョイ 4266-CicO)
垢版 |
2017/06/30(金) 15:39:34.88ID:Hr6XSLiS0
>わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ
そもそもココが間違ってるんだよな
lock呼び出してもスレッドが変わるわけないのに・・・

lockで保護されるのは、単一スレッドじゃなくて単一資源だよ
0539デフォルトの名無しさん (ワッチョイ c532-LTry)
垢版 |
2017/06/30(金) 20:28:04.26ID:s5ngZ7Gk0
>>524
ロックの頻度が高いようならロックを使わない方法を考えるけど、逆に頻度が低いならロックで十分だ。
単一スレッドに処理させるにしても、各スレッドを見に行くとか無駄。他の人も言ってるスレッドセーフなキューを使うだろ。
0550デフォルトの名無しさん (ワッチョイ 6143-MtvO)
垢版 |
2017/07/01(土) 01:47:44.04ID:soqTvVBx0
>単一スレッドから各スレッドに巡回
と言ってる人に質問だけど、
その場合、どうやって巡回対象のスレッドを特定するの?

…やっぱ、非同期スレッドから Queue にやるべき処理を入れてもらうんじゃないの…?

巡回対象となるスレッドがあらかじめ決まってるなら、そりゃ、それに合わせて何とでもできるだろうけど…
0551デフォルトの名無しさん (アウアウイー Sa31-aC11)
垢版 |
2017/07/01(土) 02:10:53.25ID:1nrcRWj9a
まだやってるんかーい

想像だけど、巡回の彼は、単にあるメソッドAが同時に複数のスレッドで
実行されるのを禁止するだけでは足りなくて、各スレッドがメソッドAを実行する
順番を制御する必要があると「忖度」したんだと思うけど、質問者はそんなこと
どこにも書いてない。

もちろん質問者の本当の要件がそうである可能性は否定できないが、
質問の文面上にはそんなこと書いてない
0552デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/01(土) 07:33:43.70ID:41xGfxtKM
そもそも「他のスレッドを巡回」という表現がよくないね
これはスレッドが他の複数のスレッドを直接管理していないと出てこない表現だ
そんな雑なコードを書いてはいけない
スレッドは他のスレッドのことを知らなくても動作するように書くこと
0553デフォルトの名無しさん (ワッチョイ 4211-zH8r)
垢版 |
2017/07/01(土) 07:58:29.50ID:qXTa/p8N0
>>551
逆でしょ
> 単にあるメソッドAが同時に複数のスレッドで
> 実行されるのを禁止するだけ
しか考えてなくて>>550も指摘してるけどメソッドAの実行タイミングを考えてない
プログラムの構造も>>514, >>552が指摘してる通りメンテが面倒になるし
0559デフォルトの名無しさん (ワッチョイ 5d23-nIbb)
垢版 |
2017/07/01(土) 08:37:34.56ID:PzxrAcCk0
そもそも元々が非同期だっつってんのに処理の順番もクソもあるんか?
0560デフォルトの名無しさん (ワッチョイ c16e-0ipK)
垢版 |
2017/07/01(土) 08:38:45.75ID:tqv04I/40
>>558
Unkoが各スレッドからの要求でそれがスレッドと一対一ってこと?
それ各スレッドが同時に1つしか処理を要求できないからスレッド内でリエントラントにならないし
一つだけ大量の処理を要求するスレッドがあると滞るよ?
0569デフォルトの名無しさん (ワッチョイ c9aa-a07H)
垢版 |
2017/07/01(土) 09:26:03.94ID:7kq0BhxN0
C#(.Net4.5)でSQL Serverに読み書きしたいんですがDataSet?というのが便利なのでしょうか?
DataGridViewやテキストボックス、チェックボックス等でSQL serverを更新・追加したいのですがやったことがないのでどれがいいでしょうか?
もちろん運用テストはしっかりするつもりです
0584569 (ワッチョイ c9aa-a07H)
垢版 |
2017/07/01(土) 20:55:39.87ID:7kq0BhxN0
返信ありがとうございます
とりあえずDataset使ってみたいと思います

>>578
VS2010使ってるからです
0588デフォルトの名無しさん (ワッチョイ 2e61-CicO)
垢版 |
2017/07/02(日) 08:57:33.81ID:CReiXwHD0
>>587
ネット上の参照はやったことはないけどunko1の同じ形式のパスを適用したらいいだけでは
「データ内の」がいまいちわからないがパスが相対パスならば補完して絶対パスにするとか
ローカルでの参照ならそうする
0590デフォルトの名無しさん (ワッチョイ c123-wjSU)
垢版 |
2017/07/02(日) 10:04:30.01ID:IJgSt27L0
出来てなかった
絶対パスだと別のパソコンに移したりしたときとかに画像が読み込まれん
http://i.imgur.com/A7kdZFD.png
これをこうすればできると思ったけどこれだとエラーを吐いてしまいます
なぜでしょうか?
当方C#どころかパス云々についての知識もさっぱりの初心者なので・・・
0593デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/07/02(日) 10:44:40.55ID:BaqIvPNda
C#を勉強し始めた初心者ですが質問させて下さい
LIST<T>に、あるクラスのインスタンスを追加していって、必要なくなったらRemoveしてるのですが、このRemoveしたインスタンスの破棄処理は明示的に行ったほうがいいのでしょうか
その場合どういう風にすればいいのか教えていただけないでしょうか
0594デフォルトの名無しさん (アウアウウー Sa25-nP2k)
垢版 |
2017/07/02(日) 10:49:58.90ID:uZLVxHTaa
何を突っ込んでるかによる
PCのリソースを独占したり圧迫するようなものなら破棄作業したほうがいい
でもよくあるデータだけの小さなクラスのインスタンスはほっとけばいい
0598デフォルトの名無しさん (アウアウイー Sa31-aC11)
垢版 |
2017/07/02(日) 11:57:12.72ID:nvssW8dPa
>>593
(1) リストから削除するアイテムの型がIDisposableを実装している
(2) リストから削除後はもう使うことはない

この2つを満たすならDispose呼んだ方がいいのかもね。

俺ならやらないけど、コード1行でも減らさないと死ぬ病気なら
拡張メソッド使ってIDisposable実装してたらRemoveと同時にDispose呼ぶメソッドでも追加するとか
0600デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/02(日) 14:03:45.88ID:vHDN06g30
俺のアプリは10秒に一度強制ガベコレが動く
って実装にしといたら引き継いだやつが組んだコードが落ちまくる
強制ガベコレ動かすと落ちるプログラム組む奴って結構いるよ
オススメ
0606デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/02(日) 15:47:41.79ID:vHDN06g30
>>603
Diposeしてるやつ使おうとしたりremoveatしてるやつをremoveatされてないかのように使ったりして死んでる
後中身の見えないクラスで実はしんでんすよその状態的な

後はマルチスレッド関係で削除してんのに別スレッドではそうでないつもりで動いてたり
強制ガベコレかけるとゾンビも速攻であの世行くし不具合発見にいい
こういうタイミングが微妙なコード書くやつのソースって落ちやすい
0608デフォルトの名無しさん (ワッチョイ 42ea-a07H)
垢版 |
2017/07/02(日) 16:41:39.44ID:BVHjPtPq0
そういえば、使い終わったオブジェクトは using 使うなりして破棄してね。
ってリクエストしたら、try - catch の finaly で .dispose するからいいんだって言った人がいたな。
結果は同じだけど、どうせ直すなら using の方が素直な気がしたんだけど。まあいいけど。
0619デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/07/02(日) 20:12:27.11ID:ZKny9U86a
>>593です
レス頂いた皆様ありがとうございます
listの追加はインスタンスの作成と同時に行いlistから削除した後は2度と使用しません
そのクラスは個別のデータを管理するだけのクラスです
とりあえずあまり何も考えずGCの対象になると思い明示的な解放は必要ないのかなと思ってたのですが作法的にどうなのかと思い確認しました
ですので現状IDisposableは実装しておらず言わばリストから削除してほったらしの状態です
GCについてはあまり勉強していないので調べてみたいと思います
その他アドバイスありましたらよろしくお願いします
0620デフォルトの名無しさん (アウアウエー Sa4a-kiAr)
垢版 |
2017/07/02(日) 21:55:59.98ID:19kDKEGSa
>>606
そんなコード書き奴いるのが驚きだけど、居るところにゃ居るんだなぁ。。。
0621デフォルトの名無しさん (ドコグロ MMa9-zH8r)
垢版 |
2017/07/03(月) 07:19:58.02ID:oiFj/hKrM
>>620
> Diposeしてるやつ使おうとしたりremoveatしてるやつをremoveatされてないかのように使ったりして死んでる
これGC関係ないし
> 後はマルチスレッド関係で削除してんのに別スレッドではそうでないつもりで動いてたり
別スレッドだろうが参照もってりゃ回収されないし
どう見てもおかしい人だから相手しなくていいと思うよ
0623デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 10:16:25.45ID:5B3ucqRJ0
>>621
強制ガベコレすると落ちるけどしないと落ちないときあるじゃん
ってまあヘンテコなコード書いてないとお目にかかれないけどさ
そんなことないと主張するなら別にそれでもいいよ
俺は困らないし
0625デフォルトの名無しさん (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 13:36:19.21ID:SOE5pMOT0
Visual StudioC#
同じ階層のフォルダをクリックしたら、設定を変更してメモ帳を起動でませんか?


構造
フォルダ0
ーーフォルダ1
ーーメモ.txt

フォルダ1をクリックしたら、同じファイルのメモ.txtを太字にして、
閉じる時に元に戻す。
0626デフォルトの名無しさん (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 13:37:07.82ID:SOE5pMOT0
>>625
太字にして起動でした。
0627デフォルトの名無しさん (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 13:50:01.76ID:SOE5pMOT0
すいません。
どうもテンパってる見たいです。

フォルダを開くと同時にメモ帳でフォルダ内のテキストファイルを全て起動
メモ帳を起動する前に 太字とファントにして文字サイズを変更したい。
メモ帳を閉じたら、設定を元に戻す

どうしたら良いでしょうか?
0628デフォルトの名無しさん (ワッチョイ 2d6f-wjSU)
垢版 |
2017/07/03(月) 15:16:40.85ID:SV1wmXKG0
落ち着け
フォルダをクリックしたらってのはエクスプローラ上でってこと?

フォントはメモ帳開く前にレジストリ変更、開いたら戻すって感じでできると思う
0630デフォルトの名無しさん (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 15:58:34.40ID:SOE5pMOT0
やゃ落ち着きました。

アクティブフォルダ(操作中のファオルダ)内にtxtファイル存在するか調べる。
もしも、存在するなら、Windows10のメモ帳で全てのtxtファイルを開く。
存在しないなら、何もしない。

メモ帳を開く場合
    規定フォントかを調べる。
windows10付属の規定フォントで無いなら、規定フォントにする。
_規定フォントなら、文字を大きくする。
_次に太字にする。

メモ帳の開く場所をディスプレイ中央に設定する。

やりたい事はこんな感じです。
0632デフォルトの名無しさん (ワッチョイ 2e61-CicO)
垢版 |
2017/07/03(月) 17:26:05.31ID:KvFRlLU90
>>630
アクティブフォルダを検知する手段が見当つかないけど
それをドロップされたフォルダ(指定されたパス)で実行するに変更ならすぐできるんじゃない?
1.指定されたディレクトリに*.txtがあるか調べる
2.見つかればメモ帳の設定をバックアップして変更>>628
3.メモ帳に*.txtを順次渡して起動
4.メモ帳が全て終了したら設定を元に戻して終了
0633625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 17:40:07.28ID:SOE5pMOT0
>>632
アクティブフォルダを検知する方法はボクも知らないです。

タスクバーに存在するフォルダがアイドル常態かどうかを調べて、
アクティブなら実行させる とか考えました。

一日、数百回ほど、
フォルダを開くのに対してドロップ&ドラッグは流石に勘弁して下さい。
0638デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 18:00:01.58ID:5B3ucqRJ0
まず現行業務フローの洗い出しができてないよね
1日数百回フォルダ移動してる暇な奴ってすでに俺には聞き込み調査か粛清が必要なレベル
プログラムを組むんじゃなくて
ローキックの連打で解決できそうな臭いしてる
0639625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 18:14:18.18ID:SOE5pMOT0
皆さん、いろんな意見をありがとうございます。

(笑わないで聞いて下さい。)
毎回落としてくる、エロ画像がボクの宝物なので、
大事にパスワードを設定してます。

開く時にパスワードを書いたメモファイルを何時も開き忘れるので、
フォルダを開いたと同時に表示して欲しいんです。

>>638
画像によっては属性が夢の様に、いっぱい詰まってるので毎回、移動させてます。
0641625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 18:17:23.61ID:SOE5pMOT0
フォルダにパスをかけなければと言う人も居ますが、フォルダにパスワードは必要です。
メモファイルは隠しフォルダにしたら何とか隠せますが、パスがついてない画像は
閲覧されちゃいます。
0644652 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 18:34:05.18ID:SOE5pMOT0
>>642
メモ帳が必要な理由としては、コメント書いてるんです。
「今日も可愛いね」「その猫耳が似合ってるよ。」とか書き込んで、
後から同じファイルを開いた時に追加してコメント入れてるんので、メモ帳を起動させたいのです。
0646625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 18:46:56.71ID:SOE5pMOT0
現状では634の方法で行きたいと思います。
一部を保留にしながら、632にを参考に進めて行きたいと思います。
0647625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 20:33:26.13ID:SOE5pMOT0
レジストリを触りたくないので、メモ帳を起動後にフォントと文字サイズを変更
しようと思ってますが、やり方が見つかりません。

ファイル内に.txtが有るか調べる
ファイルを指定してメモ帳で起動するまで行きましたが、
起動後、メモ帳の設定の仕方が分かりません。
どなたか教えてくれませんか?

(ファイルへの書き込みと読み込みは結構、でてくるんですけどねw)
0648デフォルトの名無しさん (ワッチョイ c1c0-CicO)
垢版 |
2017/07/03(月) 21:08:48.55ID:i2Oq28ow0
DLL AとAが参照しているDLL Bがあって、BでAのPOCOクラス使いたいんだけど循環参照になっちゃうからPOCOクラスをDLL Cとか別で定義するしかないよね?
C#なら別DLLにしなくてもいけると言われたんだが、どうやるのか見当つかない・・・
0649デフォルトの名無しさん (アウアウエー Sa4a-kiAr)
垢版 |
2017/07/03(月) 21:10:48.36ID:UwBLUxpla
メモ帳だから出来ないんよ。
最低限テキスト編集機能しか無いからね。
ワープロじゃ無いから、テキスト編集さえ出来れば良い(高機能でも快適な編集が出来ればいい)ってのがテキストエディタ。
フォントとかはワープロの領分だよ。
0653デフォルトの名無しさん (アウアウエー Sa4a-kiAr)
垢版 |
2017/07/03(月) 21:21:13.75ID:UwBLUxpla
あったっけ。
ま、どうでも良いけど。
0660デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 22:01:47.75ID:5B3ucqRJ0
そのリファクタリングが正しく出来なさそうだからまず資料作れって言ってんだよハゲ
っていう不毛な会話はもうしない
突貫工事が好きなところといい
きっと彼は土属性に違いないのだから
0661625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/03(月) 22:32:44.15ID:SOE5pMOT0
てっきり無視されるかと思ってました。w

フォルダを開くのを認識させるのは、どうしたら良いのでしょうか?
指定したフォルダを開く事はできても、これから開くフォルダを認識する事なんてできるのでしょうか?

質問ばかりで申し訳ないです。
0663デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/03(月) 22:40:33.08ID:+vluAADOM
>>660
正しいドキュメントを書くことはコードを書くことよりはるかに難しい
循環参照するような破滅的コードが相手だとまともなドキュメントを工数に見合う時間で作れる見込みは少ない

そもそもコンパイラや静的解析ツールを利用して体系だった機械的なプロセスでコードの品質を高めて可読性を上げることができる
それがリファクタリングの中でも大きなメリットの1つだろ
そこへ来てドキュメントを書いてからリファクタリングなどというのは全く見当違いの馬鹿馬鹿しい行為なんだよ

ドキュメントを作るのはリファクタリングで整理されてドキュメント化可能な状態になってから
あるいは探索的リファクタリングで得た知識を忘れないようにドキュメント化する
なんにせよコードを弄った後の話だ

こんなこと普段からコードを書いてリファクタリングしてれば知識がなくとも体感的にわかることなんだけどね
この業界はコードを書かない自称エンジニアさんばかりでため息が出るね
0665デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 22:46:38.52ID:5B3ucqRJ0
>>663
お前、ドキュメント書いてからソース書いたことないな

異なる文化を持ってる会社と仕事したらボコボコにぶっ叩かれるな
設計書を完璧にfixしないとソースコード触らせてもらえないとこあんぞ
でも一度はそういうところに行くべきだと思う
きっと違った世界が見えるはずだ
0669デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/03(月) 23:06:11.28ID:+vluAADOM
>>664
リファクタリング対象を選ぶために、という理由でなら資料を作る意義はあるかもしれない

例えば複雑度、更新頻度、バグ密度などリファクタリングをする価値を判断できる数字というのは結構、ある
殆どのデータは自動収集できるものでレポートを手作りすることはないだろうが
ざっと目を通した時の難易度などは手作業の方が早いかもしれないね

でもね、リファクタリングの方法を探るために先に資料を作るというのは、ない
制限時間付きのパズルを解こうとしているのにまずはドキュメント?冗談でしょう
やるとしても、パズルを弄りながらメモ書き、程度でしょ
0671デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/03(月) 23:24:29.30ID:+vluAADOM
>>665
ガラパゴスの国だからね
文化の違いは認めるよ
修正は設計書のレビューを通してからコーディングという現場に居たこともある
しかし徹底的なドキュメンテーションが正解だとは思わない
ドキュメンテーションには時間がかかるし統一的な記法も機械的な検証方法も無い
実際の挙動を決定するコードと同期しているか定かでは無い
何よりこの手の現場ではコードを弄るという探索的プロセスを軽視する傾向が強いことが問題だ

コードを弄らずにドキュメントだけ正しい状態に持っていこうとするということは
まるでパズルを頭の中で組み立てて手順を資料化するような馬鹿馬鹿しい行為だ
パズルに挑戦する人は誰だって自分の手でパズルを弄りながら考える
それと同じでリファクタリングの方法を考える人は自分の手でリファクタリングをしながら方法を考えるんだ
手を動かす前に思いつくようなアイデアはいつだって陳腐で使い物にならないものばかりだ
0674デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/03(月) 23:39:08.40ID:+vluAADOM
>>670
そもそも設計ってなんだと思う?

俺はビルドを実行する前までのプロセスが設計だと思う
コーディングは設計フェーズでコードは設計書
製造はビルダーの仕事

俺らが作るものは最終的には動くプログラムなんだよね
それでコードはそのプログラムがどういう仕組みでどういう風に動きますっていう定義をずらずらと書いたものだよね
それってまさにプログラムの設計書じゃないか

じゃあ世間の言う設計書ってなんだって話だけど
俺からするとそういうのは設計概要とか設計方針の方がしっくりくるんだわ
0675デフォルトの名無しさん (ワッチョイ 5d23-nIbb)
垢版 |
2017/07/03(月) 23:41:12.61ID:LZbV1PnE0
どっちのいいぶんもまぁわからんでもないが結局プロジェクトの規模によるんじゃないの?
みんなだいたい一人どれくらいのプログラムの量かくの?
0676デフォルトの名無しさん (アウアウエー Sa4a-kiAr)
垢版 |
2017/07/03(月) 23:41:26.60ID:hTTgnp+ka
宣言型言語で書くならそうだが、普通コードは命令書であって設計書じゃない。
0678デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 23:49:00.34ID:5B3ucqRJ0
>>674
いやぁさすがにそれは詭弁にしか聞こえない
だってお前のは材料数も期間もなんもでねーじゃん
ただ単にパズルが解けるまで遊んでるだけで最悪なんの成果もないわけじゃん
0680デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/03(月) 23:52:11.27ID:5B3ucqRJ0
だいたいリファクタリングとか言ってるけど
ここまで来てそんな問題起きちゃうのはただの設計ミスだよね?
設計書から完成させる文化の仕事受けて1回軍法会議にかけられて死ねばいいよ
0681デフォルトの名無しさん (ワキゲー MM8a-I/sj)
垢版 |
2017/07/03(月) 23:53:02.74ID:MkRtof65M
ひとつの型が唯一解とは思わないが設計書は必要だよ
コーディング以降は各テストレビュー完了毎にメンテナンスするくらいの頻度でいい

アルゴリズムの伝達にプログラム要素は含まれない
0682デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/03(月) 23:59:24.25ID:+vluAADOM
>>678
現実的な時間で終わるかどうかの見極めはコード弄ってればすぐにわかるよ
むしろコード弄らずにドキュメントベースで話を進めると簡単だと思ったら実は思ったより時間かかりました〜なんてことになる
悲しいけど世の中そんなプロジェクトで溢れかえってるのが事実なんだ
0686デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/04(火) 00:10:19.18ID:MbM3EkKwM
>>681
概要を素早く把握するには設計書はちょうどいい文書だと思う
しかし概要を超えた明細はコードで語るべきだ
コードを直す前に必ず設計書修正しろなんてパラノイア的なやり方は負担を増やすだけで利益は少ない
コスト意識のない完璧主義者に付き合わされるのは苦痛だ
0688デフォルトの名無しさん (ワキゲー MM8a-I/sj)
垢版 |
2017/07/04(火) 00:16:28.89ID:L/qJLU5VM
>>686
テストレビュー完了毎にメンテナンスするって意味がうまく伝えられなくてすまん
修正毎とか時間と人件費の無駄、やってらんねーっすよってこと

俺にとっての設計書ってのはほぼテスト仕様書
詳細設計=単体テスト
概要設計=結合テスト
要件設計=統合テスト
0689デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/04(火) 00:21:53.60ID:MbM3EkKwM
>>685
どんなに慎重にやっても設計ミスは出る
そもそも仕様そのものが業務の変化に依存している以上不変ではない
完全な設計書などこの世界には存在しない
設計書の間違いを検証する手段がないので設計書には間違いがないと勘違いする人が居る
設計ミスではなくともリファクタリングを行うことが多々ある
0690デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/04(火) 00:24:42.89ID:WRdzRcYr0
>>686
いやーさすがにテキストボックスが右詰めか左詰めかとかまで書かせるのはキチガイだと思うけど
全体の大まかな構造までしけちゃってるのを見ると流石に見逃せねぇ
ってところじゃん?
しかもそこからの対応もパズルとか言って用は動くまでブラウン管テレビぶん殴ってるババアと大差ねぇなと
これはねぇキミ、プロのやるこっちゃないよ
0692625 (ワッチョイ 2e96-naxa)
垢版 |
2017/07/04(火) 01:07:42.92ID:cQQJFeYO0
色々考えましたが、解決法が見つかりませんでした。
どなたか、何か良い案は有りませんかね?
0695デフォルトの名無しさん (ドコグロ MMe1-rRjJ)
垢版 |
2017/07/04(火) 02:03:27.54ID:Xx7vldzqM
nameofって短縮系の名前しか得られないの?
名前空間とかそのまま欲しいな
0697デフォルトの名無しさん (ワッチョイ c9aa-IRuQ)
垢版 |
2017/07/04(火) 07:32:18.26ID:6x2CTTFI0
動的にはtypeof(...).Namespaceやらで取れるからそれで十分って判断じゃね
文字列で完全限定名が取れて嬉しいケースってあんまり思いつかん
属性で型名を指定するのはコンパイル時に型を参照できないからなわけでそこでnameofは使えないし
0698デフォルトの名無しさん (ワンミングク MM92-HpRm)
垢版 |
2017/07/04(火) 07:44:04.75ID:MbM3EkKwM
>>690
故障したテレビを外から眺めながら中身のことを妄想して原因はあーでもないこーでもないと議論するのが設計書文化

とりあえず安全確保はしておいてから、テレビを分解して内部構造を調べ、故障原因を理解し、原因を取り除いたり、より良い構造になるように努力するのがコーディング文化

どちらが有意義な仕事をして居るかは一目瞭然だね
0712デフォルトの名無しさん (ワッチョイ c16e-0ipK)
垢版 |
2017/07/04(火) 22:09:38.11ID:IVSy+wIs0
慣れてくるとあんまりプロパティ作らなくなるけどね
C#初心者はWinFormsとかの「お客さん向け」設計を真似してプロパティを大量に作りがち
次第に整合性を重視するようになると自然にプロパティは減っていく
0718デフォルトの名無しさん (ワッチョイ c16e-0ipK)
垢版 |
2017/07/04(火) 23:22:54.20ID:IVSy+wIs0
>>714-715
プロパティを正しく公開するのって結構大変なんだよ
内部で生じた一時的な変な状態を外に見せないようにしたり、
常にプロパティの値が外から書き換えられることを考慮する必要があったり
不特定多数の人に便利に使ってもらうためのクラスならそこに手間をかける価値はあるけど、我々が作るクラスのほとんどはそうではない
0726デフォルトの名無しさん (ワッチョイ cd69-OXoP)
垢版 |
2017/07/04(火) 23:37:40.88ID:WRdzRcYr0
お客さんは開発者だろ?
マイクロソフトが開発者向けに用意したコントロールと
うちらが仕事で仕様を満たすために作るものとは手間やクオリティが全然違うってことだろ
0730デフォルトの名無しさん (アウアウイー Sa31-aC11)
垢版 |
2017/07/04(火) 23:55:16.97ID:vts0HE+ua
そういう話なら、初心者は何でもpublicにしがちだけど慣れてくると
適切なアクセス修飾子を使うようになる、とか言わなきゃ。

でもこれってそんな気張って言うような話じゃなくて、初歩の初歩の話だよねw
0738デフォルトの名無しさん (ワッチョイ 6eca-HpRm)
垢版 |
2017/07/05(水) 18:14:22.85ID:IuExXpbW0
お騒がせしました
公開されてるソースと比べたところ、違いは勇者の名前と勝手に追加したゴールドの乱数だけでした
結局String name ="";の行を弄ったらバグらず表示することができました
名前の文字数が5文字以下だと文字がバグりました
0740デフォルトの名無しさん (アウアウウー Sa25-kiAr)
垢版 |
2017/07/05(水) 21:34:50.46ID:z3CI8qH6a
それ動画主もクソやんか。
どこがどうクソなのか自分で理解出来るようにしなよ。
0745デフォルトの名無しさん (ワッチョイ ffb3-O3UY)
垢版 |
2017/07/06(木) 09:19:32.16ID:9B2MU8kU0
webbrowserでダイアログボックスを開いて操作することってできるんでしょうか?
たとえば画像アップロードサイトでファイルをアップロードするために「ファイルを選択」ボタンを押すと
ファイル選択画面になりますが、ここにファイル名を自動で入力して自動で「開く」ボタンを押したいと。

外部のブラウザならウィンドウハンドルを取得してそこに投げてやればいいのはわかるのですが、
webbrowserでやろうとして失敗しました。
0746デフォルトの名無しさん (ワッチョイ 9f66-rvkC)
垢版 |
2017/07/06(木) 09:36:10.51ID:SJTPfom00
>>745
webのやり取りは普通は[POST]と言う命令をサーバーに送るだけなので、C#で制御するにはそのページがデータを送る仕組みを解析して
同じようにデータを送る方法があります
そのページで何をやっているのか知るために、htmlとjavascriptの基本は抑えておいたほうが良いよ
0747デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/06(木) 15:47:39.70ID:R3A9km6A0
今更 var に感動してるんだけど、foreach の中じゃ無理なん?

System.Web.UI.WebControls.CheckBoxList checkboxlist;
foreach(var list in checkboxlist.Items)
{
  list.・・・
}

System.Web.UI.WebControls.ListControl 型を類推してほしいのだが、object になってしまう。。。
0750デフォルトの名無しさん (ワキゲー MMdf-bHlx)
垢版 |
2017/07/06(木) 16:07:03.45ID:qhsH+LBBM
ジェネリックは.NET 2.0から
System.Web.UI.WebControlsみたいな.NET 1.xからあるものはIEnumerableしか実装してない
IEnumerator.Currentがobjectなのでvarは常にobjectとしか扱えない
0751デフォルトの名無しさん (ドコグロ MM8b-jxDt)
垢版 |
2017/07/06(木) 16:10:25.20ID:j+3WJv+ZM
msdnみた。
itemsはlistcollectionという型を返すらしい。
それはenumrableを継承した型でジェネリックによる型推論が効かない。
キャストでEnumrable〈型〉を指定すればいけるんじゃないかな。
0754デフォルトの名無しさん (ワッチョイ ffb3-O3UY)
垢版 |
2017/07/06(木) 19:25:03.65ID:9B2MU8kU0
>>746
そのやり方自体はテキストベースではやったことがあるので使い方はわかりますが、ファイルを添付したい場合にどうしたらいいか
知らなかったのでウィンドウ操作のほうでやってみました。
ウィンドウ操作の方法もご存知でしたら教えてください。
0762デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 06:06:54.85ID:1OiH67XQa
>>760
CPUの分岐予測みたいに予測間違ったらストールして待って今予測し直すからって失敗時に待たされるんですね分かります。
思い通りのコードが出るまで何度も予測させるってなるとFacebookみたいに色んな感情選べるgoodボタン要るね。
0766デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/07(金) 08:27:59.78ID:9lQTb6dz0
var a = new ・・・
は、意図どおりに型定義されるからいいけど、
var a = 1;
は何か嫌だなぁ

int32? int16? 
どっちに判断したんだろって思ってしまう

var a = 1;
while(a < 100000000000)
{
 // 処理
a++;
{

みたいにすると、勝手にint64に判定してくれるの?
0768デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 08:31:31.51ID:3s7e5LVua
文脈から判断出来るならしてくれるはずだが。
気持ち悪いって。。。
むしろそこが目指すところじゃん。
0769デフォルトの名無しさん (ワッチョイ bf23-jxDt)
垢版 |
2017/07/07(金) 08:58:12.84ID:G2hd19q10
コンパイラに何を望んでるの?
何が言いたいの?

勝手に型推論されると困る箇所は、明示的に定義するで済む話じゃない?

それとも、宣言より、後で出てきた命令も、
型推論の対象にしろと言っているの?

論点は何?
0770デフォルトの名無しさん (ワッチョイ f769-LU+S)
垢版 |
2017/07/07(金) 09:05:15.42ID:Vo0hmpPS0
バグが増えるの目に見えてんだよ
しかも組み手が面倒だからって理由だろ?
いらね

この程度で工数が縮まるわけじゃないし
品質は悪くはなるけど良くはならないよね?
って理由
0773デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/07(金) 09:56:03.26ID:9lQTb6dz0
うん、だから自分は

System.Collection.Generic.List<string> a = new System.Collection.Generic.List<string>();

var a = new System.Collection.Generic.List<string>();

という時にしか使ってないな。
0777デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 10:51:37.63ID:NO/da/cwa
>>769
出来ないん?
型が確定するまでだから、そんな深くまで見なくて良いと思うんだが。
関数型言語の真似って手続き型言語だとそんな難しいんか。
0779デフォルトの名無しさん (ドコグロ MMdf-d65a)
垢版 |
2017/07/07(金) 12:21:38.99ID:XSZI/EScM
>>766
> var a = 1;
> は何か嫌だなぁ
> int32? int16? 
> どっちに判断したんだろって思ってしまう
数値リテラルの型を理解してないのか?
long (符号つき64bit) としたいなら
var a = 1L;
って書きなさいよ
0786デフォルトの名無しさん (ワッチョイ f7e4-iVv1)
垢版 |
2017/07/07(金) 14:00:45.31ID:SiIRctva0
>>777
varで宣言した変数に

数値と文字列を代入してたら
あるいは、実数と整数を代入してたら
ベースクラスと派生クラスと代入してたら

どっちが正しいのかどうやって判断するの?

結局どうやって判断しても、それがコードの品質にも
生産性にも寄与しないって判断なんじゃないの
0787デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/07(金) 14:14:59.32ID:9lQTb6dz0
>>786
この話題の言い出しっぺで恐縮だが
var と VB の Variant 型と混同してないか?
宣言だけじゃコンパイル通らないよ
定義した行で型が決定される

var a;   ←コンパイルエラー

var a = 1;  // OK
var a = "1";  // OK

var a = new ペースクラス();  // OK
var a = new 派生クラス();   // OK


>>766 な俺が言うのもナンだが
var a; だけで通ると思い込んでいての発言としか思えない。
0791デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/07(金) 16:26:40.00ID:9lQTb6dz0
制限時は小さい値だけど、実際にはLongまで使っちゃうよ、って場合に
バグの原因になると思うけど、c++ でも int に毛嫌い感じていた自分としては
全く受け入れられないほどでもない。

まぁ最初に書いたように、var を積極的に使うのはクラス生成時くらいだが
0792デフォルトの名無しさん (ワッチョイ f7e4-iVv1)
垢版 |
2017/07/07(金) 16:46:34.06ID:SiIRctva0
varを使う最大の理由は、それしか匿名型を宣言できないから

LINQなんかで匿名型使うときに使えって話で
LINQテクノロジ入門で著者の赤間氏は
自動型推定機能だけを取り出して、「コーディングの手抜きをするための機能」として使うのは大きな誤りである
と言いきってるぞ
0793デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/07(金) 17:07:33.31ID:9lQTb6dz0
自分はVBもやってるけど
C# に var がなかった時代に

System.Collection.Generic.List<String> a = new System.Collection.Generic.List<String>();

はさすがにありえんだろ、と思ったぞ
みんなが悪口を叩くVBですら

Dim a As New System.Collection.Generic.List(Of String)();

ってシンプルに定義&宣言できたわけで
0797デフォルトの名無しさん (ワッチョイ 9f19-zXdO)
垢版 |
2017/07/07(金) 18:10:03.94ID:uxSF98L50
スカイプを使っていますが、
送ったメッセージが時間しか表示されません。

2017年7月7日 18:10

みたいなここまで時間を表示させたいのですが
何か方法はありますか?
0803デフォルトの名無しさん (ドコグロ MMdf-jxDt)
垢版 |
2017/07/07(金) 19:25:06.02ID:WzcYN8gwM
c# asp.net mvc でアプリを作っていますが、
アプリケーションのバージョンってどこに持たせますか?

gitのブランチ名と同期?というか、バージョン名のうまい運用方法などあったら教えて頂きたいです。
0804デフォルトの名無しさん (ワッチョイ 9fac-Razr)
垢版 |
2017/07/07(金) 20:05:53.11ID:cfjlOUj60
>>766
個人的には組み込み型はintとかって書く派ではあるけど、varの推論はオーバーロード解決と同じなので理解しておかないとまずい。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/int
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/byte
にあるように、intで表せればint。無理ならuint,long,ulongの順に優先される。
ただし、右辺値がintより小さいとリテラルの場合は暗黙的に型変換される。

>>777
どこまで推論するかにもよるけど、実際にはかなり時間がかかる状況があるらしい。
コンパイラならまだしも、C#ではリアルタイムに正確なインテリセスが出せないといけない都合上、高度な型推論は無理みたいだね。

ここらにまとまってた。ついでに>>795の左辺値による型推論についてもちょうど乗ってるな。
Roslynのissueがあるのかと思って探したけど、数が多すぎて見つからん
http://ufcpp.net/study/csharp/sp3_var.html?p=2#rhs-inference
0805デフォルトの名無しさん (ブーイモ MMbf-4VhL)
垢版 |
2017/07/07(金) 20:28:27.40ID:ZSQ0qsfGM
>>803
CIやれば?
ツールは何でもいいけど、要はgitから特定のコミット取得→ビルド→デプロイ→どっかの構成情報にコミットIDを書き込む
までを自動化してやればいいわけでしょ
そんなに難しいことではないと思うけど
0806デフォルトの名無しさん (アウアウイー Sacb-G8QH)
垢版 |
2017/07/07(金) 20:49:06.51ID:591C1YpBa
いい加減アルツハイマーの繰り言みたいなvarの話に乗りたくないけど、
なんか「推論」って言葉の語感に騙されてる人が何人かいるねw

あえて推論という言葉を使ってるのは、例えば

class Hoge:IHoge
{
}

var x = new Hoge();

においてxの型がIHogeやObjectでも矛盾が起こらないのに
矛盾が起こらない一番狭い型Hogeに決まるからだろうけど、
実体は推論っていうより重複する型指定が省略できるってだけの話
0809デフォルトの名無しさん (ワッチョイ f7e4-iVv1)
垢版 |
2017/07/07(金) 23:11:26.49ID:SiIRctva0
>>807
まあそれはその通りだ
あの本はLINQのための本だから、多少言いすぎ感はある

ただ、匿名型の宣言はvarでしかできないってのと
やりすぎるとプログラムの見通しが悪くなる
って点はまあ気に留めといて良いんじゃね
0817デフォルトの名無しさん (ワッチョイ ffa2-rvkC)
垢版 |
2017/07/08(土) 21:41:27.81ID:+Y6XHfRP0
var便利!型なんて気にしなくていいじゃん!いっぱい使お
0821デフォルトの名無しさん (ワッチョイ d74f-rvkC)
垢版 |
2017/07/08(土) 22:32:13.97ID:DL1526nj0
C#を勉強していて、1年くらい前に少しだけPythonもかじってみた素人だけど
Pythonの型のほうに違和感をおぼえた・・・
たとえばメソッドに想定外の型を渡そうとしたら、C#だとコンパイルエラーになるし
Pythonも実行時にたいていエラーになるんだろうけど
Pythonで、型が違うけどたまたまエラーにはならず、でも想定外の挙動をしているって場合は
面倒なことになるんじゃないかなと思った

ちょっと勉強してPythonはやめてしまったので、自分が知らないだけでたぶん型の間違いを
防ぐ方法はあるんだろうし、C#も勉強を中断中だからいろいろ的を得てないかもしれないけど・・・
0824デフォルトの名無しさん (ワッチョイ ff4b-zXdO)
垢版 |
2017/07/08(土) 23:00:56.87ID:n52tISe+0
JavaScriptで関数を定義したとき仮引数は本来何でもOKなのだが
実際には99.9%その仮引数に特定の種類の値を想定するわけで
VSCodeでインテリセンスに頼ろうと思うと結局JSDocコメントつけて静的型付け同然にしちゃう
0827デフォルトの名無しさん (ワッチョイ 7f4c-KuRC)
垢版 |
2017/07/09(日) 22:42:35.74ID:H6/RuZ0J0
{"price":{"apple":"100","orange":"50","grape":"80"}}
こういう形式のjsonをC#でデシリアライズしたいんですが、コントラクトはどう書けばいいんでしょうか?
果物の数と名前は不特定です。
0830デフォルトの名無しさん (ワッチョイ d7aa-gXZb)
垢版 |
2017/07/10(月) 18:47:09.19ID:w+1H0LRc0
C#でテトリスを作っているのですがブロックによっては回転させるとおかしくなったり、また端っこまで寄せてそれ以上移動させようとすると変形したり散々です
ブロックを回転させるときにx座標にyを、y座標に-xを入れればいいと書いてあったのですが違うのですか?

http://ideone.com/35p7Ko
0832デフォルトの名無しさん (アウアウカー Sa2b-P7Iq)
垢版 |
2017/07/10(月) 19:34:24.67ID:O/cYMYfea
>>830
自分で紙にでも書いてみりゃわかるが単にx=y,y=-xにしても望む回転はしないよね?
それはx=0,y=0を軸とした回転であって動いてるブロックの中心を軸とした回転じゃない
ブロックの中心軸回転したいなら中心座標からのオフセットを回転させる的なことしないとダメ
詳しくは調べりゃ絶対出てくる
0836デフォルトの名無しさん (ワッチョイ 7732-KuRC)
垢版 |
2017/07/10(月) 22:23:10.72ID:6R2l0O8O0
WebBrowserのプロキシ設定をやりたいのですが、InternetSetOption使うとIEの設定まで変わっちゃいますよね?
アプリはプロキシ通してIEはプロキシ通さない方法ってないですかね?
0839デフォルトの名無しさん (ワッチョイ b732-oOTD)
垢版 |
2017/07/11(火) 03:12:45.75ID:7rDHAaRU0
初心者が練習で作るなら何でも良いだろうに。
Hellow world作るなと難癖付けてるのと同じ位無意味。
テトリスならプログラミング的には割と単純だし、練習の題材としては悪くないだろう。
0847デフォルトの名無しさん (ワッチョイ 1f91-KuRC)
垢版 |
2017/07/11(火) 12:32:43.48ID:7obiTgu70
分かりやすく既成品で言うと
TextBoxとLabelに共通する機能を追加したいとき、
共通機能を MyClass に書いて

class MyTextBox : TextBox, MyClass
class MyLabel : Label, MyClass

って風にしたオリジナルクラスを作りたいのだが、それが出来ない。
Interface定義するにせよ、中身はそれぞれに書かないといけない

拡張メソッドで
public static MyMethod(this System.Web.Ui.WebControl Control, ・・・)
って風に共通化させざるを得ない
0848デフォルトの名無しさん (ワキゲー MMdf-R1hf)
垢版 |
2017/07/11(火) 12:39:25.35ID:w51PVrvpM
>>843も言ってくれてるけど拡張メソッドは所詮ただのstaticメソッド
同じような感じでプロパティってなるとどこからでも参照できる単一の状態となる

プロパティの存在意義を考えたらstaticな状態はとっても危険
0852デフォルトの名無しさん (アウアウイー Sacb-G8QH)
垢版 |
2017/07/11(火) 13:43:38.38ID:t4lUkhAUa
Rectangleに右下の座標をPointで返すプロパティが欲しいとか、
配列の最後の要素のインデックスを頻繁に使うからa.Length - 1じゃなくてa.LastItemIndexって書きたいとか、
要するにプロパティを追加したいケースなんて普通にコード書いてれば山ほどあるよ。

例に挙げたのはゲッターだけだけどセッター込みで欲しいケースもね。
0873デフォルトの名無しさん (ブーイモ MM5e-5eCk)
垢版 |
2017/07/14(金) 04:59:45.06ID:+GVaW66DM
C#はだいたいJavaの上位互換
Javaにある機能はだいたいC#にもあり、C#の方がずっと機能が多く複雑な言語
周辺技術は圧倒的にJavaの方が充実してる
C#はその点MS技術の枠内でわりとコンパクトに完結するので比較的わかりやすい
0876デフォルトの名無しさん (ワッチョイ 4023-z+eH)
垢版 |
2017/07/14(金) 07:20:35.60ID:PnYwerQL0
僕はC#もといプログラミング初心者でふ(^^
まだ関数の有用性がわからないのでふ(^^
優しく関数の使い道や例を紹介してるサイトはありまふか?(^^
0878デフォルトの名無しさん (ワッチョイ 4023-z+eH)
垢版 |
2017/07/14(金) 07:28:46.03ID:PnYwerQL0
僕はまだなぜ関数が便利なのかよく分かってまふぇん(^^
なので関数をコピペ以外で使ったことがないのでふよ(^^
関数を使うとなぜ便利なのかを解説してるサイトを教えてくらふぁい(^^
ボッキング!(^^
0883デフォルトの名無しさん (アウアウウー Sa08-1CH6)
垢版 |
2017/07/14(金) 10:23:02.18ID:D7n96xFVa
関数には大事な機能がいくつもある
処理の一般化
処理の抽象化
コールバック関数
再帰を利用できるようになる
スコープの局所化
他にもいろいろある


でも最初は同じ処理をなんども書かなくていいぐらいでいいんだな
0891デフォルトの名無しさん (ワッチョイ 321b-HOJV)
垢版 |
2017/07/15(土) 07:49:42.88ID:tXCHrVaZ0
どうもinterfaceがよくわかりません。
調べていくうち↓のサイトがありました。
http://garicchi.hatenablog.jp/entry/2014/09/11/181456

クラス設計する際、hasかasかの考え方があります。
メンバとして別なクラスを持たせるのか、継承するかですが。
ここに出てくるTVクラスとISwitchインターフェースは、

public class TV:ISwitch

となってて、TVクラスがISWitchから派生した子供のクラスのように見えてすごく違和感があります。
TVはISWitchを継承するんじゃなくISWitchをhasしてる方がはるかに考えやすいんですが。
そもそも、インターフェースってのは継承するものじゃなく、具備してるものでやっぱhasだと思うんですが、
どう考えたらいいんですかね?
0892デフォルトの名無しさん (ワッチョイ 321b-HOJV)
垢版 |
2017/07/15(土) 08:06:44.71ID:tXCHrVaZ0
あと上のサイトでTVのメンバ変数channelがprivateなので、触れないとか書かれてますが、
class TVそのものにChangeChannelメンバ関数を追加改変するならISwitchがあろうが無かろうが関係なく
channelを自由にいじくれるんですけど。
0893デフォルトの名無しさん (ワキゲー MM6e-FZLt)
垢版 |
2017/07/15(土) 08:54:29.21ID:0zGsqKYGM
テレビそのものに書くって事は人はチャンネルを変えらんない
もしくは変えるために直接テレビを触らねばならない
そうしたときにラジオが出てきたらめんどくさいことになる

interfaceは受付窓口と同じ
駅、遊園地、ライブは内部でどんな処理をしてるかそれぞれ異なったとしても利用側はどこでも受付ってinterfaceに切符を渡せば望む結果を得られる

c#は実装側の書き方がabstractとinterfaceでほぼ同じなので慣れるしかないよ
それかここだけjavaで勉強するってのもあり
0894デフォルトの名無しさん (ワッチョイ 321b-HOJV)
垢版 |
2017/07/15(土) 09:24:34.53ID:tXCHrVaZ0
ChngeChannel を public にしてしまえば。
あるいはアクセサを用意すればprivateメンバに誰でもアクセス可能かと思われますが?
インターフェースというならこういうアクセサのほうがずっとしっくりきます。
そもそもアクセサってインターフェースですよねwww

たとえば既製のクラスにインターフェースを追加したいときってどうすればいいんでしょうか?
よく既製のクラスを拡張するのに、基本クラスのコードには手をつけず、継承して、機能追加しますよね。
インターフェースにこういう発想は根本的に間違ってるのかな?
でも、上のテレビで、址から赤外線リモコンインターフェースを追加したいと、
そして、元のTVクラスのソースヘッダは触れないときはどーすればいいか?です。
0895デフォルトの名無しさん (ワキゲー MM6e-FZLt)
垢版 |
2017/07/15(土) 09:35:28.99ID:IcmPd+odM
そしたら人が直接テレビを触らねばならない
人は必ず有効値を入れるとは限らない
故障の原因になり得る

触りたくないのであれば既存のクラスを継承してinterfaceを貼り付けた新しいクラスを作ればよい
0896デフォルトの名無しさん (アウアウウー Sa08-1CH6)
垢版 |
2017/07/15(土) 09:45:52.69ID:K6HEWwBua
そのサイトの例が悪いとしか言えない

ISwitchじゃなくてISwitchableとでも考えればいい

TVはスイッチを持っている!やTVはスイッチだ!
じゃなくてTVはチャンネルを切り替えられるぐらいのこと
0897デフォルトの名無しさん (ワッチョイ e266-1CH6)
垢版 |
2017/07/15(土) 10:10:22.92ID:uJRk81Er0
>>894
インターフェイスは継承関係のないクラスたちを、同じ手続きで操作する為の物なので…
そのサイトの例だと対象が1つなので、確かにアクセサの説明かの様になってしまっている
.NET Reference Sourceで既存インターフェイスの使われ方を見てみるのも良いと思う、複数実装とか

継承か委譲かというのはまた少し異なる話…というか妙な例えは往々にして本質からずれる気がする
0900デフォルトの名無しさん (ワントンキン MM3e-roJc)
垢版 |
2017/07/15(土) 10:32:45.07ID:qqsDF0t/M
多重継承するとメモリレイアウトがおかしくなって効率悪すぎ

じゃあ継承はひとつだけにしようか

でもフィールドなければ問題なくね?

ならフィールドなしなら多重継承していいよ

悪く無いねっていうかメソッド実装も衝突するから要らなくないか

なんだこれ凄くイイぞコーディングがめちゃ捗る

あまりにも便利だから名前付けて言語機能にしよう

インターフェース誕生
0907デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 13:41:14.84ID:YwzOlwqa0
結局テストするときはマトリックス書いて全部抜けが無いようにしなきゃいけないからインターフェイスなんて邪魔だけどな
継承なんてありがたがってるやつはまともなテストなんか要求されないゴミ環境にいるとしか考えられない
0909デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 14:14:37.87ID:YwzOlwqa0
>>908
そうかな?
じゃあインターフェイスから派生してる処理は全部でいくつあってそれぞれいつ呼ばれるの?
一覧になってる?
こんな当たり前のこと聞かれても
本能に任せて作っちゃったもんだから
全く説明できないでしょ?
じゃ、明日までに一覧作ってテストやり直してくれるかなぁ?
って言われちゃうよ
0911デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:22:44.84ID:4WiC8QMiM
>>909
そんなのすぐにわかるよ
わからないならそれはお前にスキルがないだけだろ

というか君の認識は全く逆だよ
そういった「機能が幾つあるのか」「どんな時に使われるのか」ってのを明確にするためにインターフェースを使うんだろ
インターフェースを使ったらそれがわからなくなるという発言は全くもって理解が足りてない証拠

インターフェースも使わずに密結合しまくった汚いシステムだと
そもそも「どっからどこまでが1つの機能なの?」って問いに明確に答えられない
そして境界がわからないから、「幾つあるか」も数えられないし
それが「どんな時にどれが有効になるのか」もわからない(どれ?という問いは当然だけどそれぞれが明確に区別できる前提がないと答えられない)
0912デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:27:02.76ID:4WiC8QMiM
さらにいうと
インターフェースで疎結合を維持すれば自動テストを構築できる
そうすれば明日までと言わずに1時間もあれば回帰テストをやり直せる

インターフェースを使わないガチガチに密結合したシステムではこうはいかない
テストだけでも丸一日、下手すれば数日はかかる
0916デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 14:34:40.29ID:YwzOlwqa0
ここから俺とお前で

(*゚∀゚)明確になるなる!
(*゚∀゚)明確にならないならない!
(*゚∀゚)なるなる!
(*゚∀゚)ならないならない!

って1000レスぐらい想定www
0919デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:43:55.40ID:4WiC8QMiM
タイプコードswitchはたいていの場合おなじようなswitchをコードのあらゆるところにばら撒いてどこで何やってんだ状態(いわゆるスイッチヘル)に陥る
インターフェースを使うとそのようなswitchは一箇所にまとめられたり、設定ファイルに抽出されたり、コーディング規約に従って動作するようになり、誰が見てもはっきりとどんな時のどの実装が使われるかを理解できるようになる
このように構造化されていれば機能一覧や使用条件などをリアルタイムに出力することすらできる
switchとの格闘で費やしていた無駄な時間をバカンスに割当てることもできるのだ
0924デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:50:14.71ID:4WiC8QMiM
>>920
間違いがあるのはswitchを多用する複雑怪奇な方法
間違いがないのはインターフェースを使ってエレガントな方法

switchでパターンがわかるのは1箇所だけ
実際にはswitchの数だけ掛け算したパターンを把握しなければならない
3分岐のswitchが4箇所で使われていたらそれだけで3 * 3 * 3 * 3 = 81パターンの実行パスが考えられる
このコードベースで処理パターンと条件を列挙するのは事実上無理と言っていい
ところがインターフェースを使った方法ならswitchは1箇所で済むのでコードパスの爆発は起こらない
機能一覧と使用条件を洗い出すのもとても容易になる
0925デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:53:15.41ID:4WiC8QMiM
>>922
コード全部ちょうだい
コードってのはインターフェース使ってOOPで書かれたコードのことな
あっという間に数えてやるよ
ちなみにお前の書いた汚いswitchスパゲティは意味わからんからいらないよ
それはコードじゃなくてゴミだから
0926デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 14:59:32.85ID:4WiC8QMiM
>>923
容易に判明するよ
インターフェースを使っていれば生成箇所だけを見れば判断ができる
場合によってはソースや設定ファイルを見ただけでわかるし
生成箇所が変数に依存して実行するまでわからない場合も生成箇所だけにログを仕込めばわかる
そして何より重要なポイントは仮に死にコードだとしても全く害がないということ

スイッチヘルだと全てのコードを追跡しなければならない
何時間も何日もかけてソースを読んで
ログを仕込む作業何百回と繰り返し
そのログを仕込む作業で凡ミスしてないかの確認を要求されて
また何時間も何日もかけて回帰テストを手作業で行い
スイッチヘルだと死にコードだからと言って無視することはできない
なぜならスイッチヘルでは死んでるコードと死んでないコードが密結合していて分けて考えることが極めて難しいから一緒くたに行きていると判断するしかないからね
もう考えただけでも嫌になってくるよ
0929デフォルトの名無しさん (ワントンキン MM88-roJc)
垢版 |
2017/07/15(土) 15:11:54.72ID:4WiC8QMiM
>>927
そう言っておかないとお前後出しするじゃん

じゃあ逆に

void main() {
switch (unko) {
case 1: foo();
case 2: bar();
case 3: baz(); } }

このシステムにおいてどの機能がいつ使われるか全て列挙して
もちろん関数の呼び出し先にも無数のswitchがあるけど聞かれたことしか教えないよ
0930デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 15:13:00.41ID:YwzOlwqa0
>>928
だろ?

(*゚∀゚)なるなる!
(*゚∀゚)ならないならない!

ウォーズになっただろ?
そもそも根拠も示さないで
明確になるなんて嘘つくのが悪い
switch case以上のものなんかできねぇよ
0934デフォルトの名無しさん (スフッ Sd70-Icm7)
垢版 |
2017/07/15(土) 15:16:58.46ID:qtlS5nEUd
底辺SIer丸出しで草
まあ初心者なら混乱するよな、処理追おうとして読んでもインターフェースの呼び出ししか書いてないからswitchのほうが分かりやすいってなる
0935デフォルトの名無しさん (アウアウカー Sa0a-kIy9)
垢版 |
2017/07/15(土) 15:20:47.88ID:Ha2IzMP7a
リポジトリが泣いとるわ
0936デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 15:22:43.89ID:YwzOlwqa0
>>934
いや、明確に判断するにはインターフェイスが継承されてるクラスをくまなく追っかけて呼び出されてる箇所マークして
死にコードと生きコードを分けなきゃならんでしょ?

こんな面倒臭いものをなんで有難がってるのか?
頭がおかしいのか?
switvh caseが問題とかいってるけどお前の脳味噌のが問題だよwww
0937デフォルトの名無しさん (ワッチョイ c469-zKZC)
垢版 |
2017/07/15(土) 15:25:53.28ID:YwzOlwqa0
>>933
全部見ないと分かんないって言ったよね?
あの一言で僕の勝ち
君の理論は腐っている

そして全部みなきゃ分からないという君の主張は正しい
だけどそんな複雑なものを好んで使おうとしてる君の脳みそは腐っている
0939デフォルトの名無しさん (ワッチョイ 9623-MRQN)
垢版 |
2017/07/15(土) 15:39:40.47ID:RkJDHgF90
前回の再復刻がふたつ同時だったから、以降はふたつずつ追加されるのかと思ったら今回はひとつだけで残念
実は実装間隔が半分に短縮されている…とかじゃないよね?
0948デフォルトの名無しさん (アウアウイー Sa81-lKTh)
垢版 |
2017/07/15(土) 19:24:08.20ID:1X9hghUUa
>>891
要は、本来全然違う物を同じ物とみなして使いたい場合が結構あるってこと。
例えば、

例1:
外部機器との通信プログラムで、USBもRS-232Cもイーサも「通信ポート」とみなして
同じように扱えるようにしたい

例2:
ゲームのプログラムで、物理的なゲームコントローラも、過去の操作の記録データも、
AIによる操作も同じように扱えるようにしたい

インターフェイスは同じ物とみなされるために必要な要件を定義するためのもの。
0949デフォルトの名無しさん (ワッチョイ 3043-1bhL)
垢版 |
2017/07/15(土) 19:37:37.93ID:dGaj0Gpt0
C#使っててinterfaceの有用さを実感したいなら、IEnumerable<T>を実装したクラスたちについて調べるといいと思う
(そして同時にジェネリックのありがたみもわかる)
0965デフォルトの名無しさん (ワッチョイ 741b-HOJV)
垢版 |
2017/07/16(日) 06:41:53.08ID:S+S2REts0
>>928
たとえばclass PCを定義したいと、
インターフェースとしてUSB、HDMI、DP、PCI-exを持ってる。
この場合
class PC: interface USB, HDMI, DP, PCI-ex
より。
PCはUSBやHDMIを具備していると解釈するのが自然でしょ。つまり

class PC{
public:
Interface USB{
};

Interface HDMI{
};

Interface DP{
};

interface PCI-ex{
};
};

とでもした方が感覚的にしっくりきませんか?
アクセス権としてはclass 内部でInterface宣言されたものはPCのリソースに無条件でアクセスできる。
としたほうが直感的にわかりやすくないですか?
USBやHDMIがPCを出産するってのはあまりに無理がある。
0966デフォルトの名無しさん (ワッチョイ 741b-HOJV)
垢版 |
2017/07/16(日) 06:43:38.07ID:S+S2REts0
つづき
工業製品のシミュレートを考えると継承でインターフェースを増やす、とか機能を増やすとかがしっくりこない。
新製品が旧製品を継承するってならOKだけど、
ある世代のみの製品を定義するなら、
基本モデルに搭載された機能があって、
そこにオプションが追加されて、製品グレードが構成される方がしっくり来ませんか?
この機能追加が継承で実現されるってのはしっくり来ない。

>USBもRS-232Cもイーサも「通信ポート」とみなして
>同じように扱えるようにしたい

これこそ各種インターフェースが通信ポートと派生関係 (is a)関係にある話で、
それらが搭載される大本のPCを派生関係に巻き込むのはおかしな話じゃないですか?
PCから見て同じ通信機能を有するポートと見なしたいだけならエイリアスにでもするとか。
通信ポートがセクロスしてPC出産するなんて考える方が無理ボ
0968デフォルトの名無しさん (ワッチョイ ec90-k9rv)
垢版 |
2017/07/16(日) 07:36:55.65ID:DFiYZAtb0
is-aって電子回路で例えるとICの非公開の隠しコマンド使うようなもんだからなあ
その密結合した側からは百歩譲っていいとしても他からそのICを使うと整合が取れなくて
マニュアル通りの動作をしないような事態になったらほとんど手直し不能と言う
0969デフォルトの名無しさん (スップ Sd02-sREA)
垢版 |
2017/07/16(日) 09:15:00.53ID:HardVP8Ld
インターフェイスとしては、
IDataIOConnectable みたいなのを持つのでは?
0974デフォルトの名無しさん (ドコグロ MM2e-eqnq)
垢版 |
2017/07/16(日) 14:59:39.16ID:qZs6BFdqM
きませんかと言われてもきませんとしか言えんわな

Interfaceを理解することが目的じゃないならチラ裏いき
理解したいならとりあえず自分で利用したコードをかけとしか
0976デフォルトの名無しさん (ワッチョイ f6e4-esLu)
垢版 |
2017/07/17(月) 00:13:06.25ID:rrWwnLpM0
そもそもPCクラスが直接USBインターフェイスを実装する必要なんてないし
USBインターフェイスを実装したUSB1クラスとかUSB2クラスをプロパティで持つのが普通だろ

IO装置としてのインターフェースって用語と、プログラミング用語としてのそれを混同してるとしか思えん
0977デフォルトの名無しさん (ワッチョイ 2623-KaH7)
垢版 |
2017/07/17(月) 01:30:28.73ID:ka/V7JjN0
そもそも、USB端子2つ持ってたらどうするの?
PC自体にUSBの機能を持たせたら、usb1と2の区別ができない。
よって、そういった場合を考慮すると、部品化して、プロパティとしてusb1、usb2を持たせるのが正しい。

終了。
0979デフォルトの名無しさん (ワッチョイ 8ee3-S4qQ)
垢版 |
2017/07/17(月) 12:18:55.20ID:tm+LZBsa0
Visual Studio2017でタプルを使いたいのですが
(ネットで公開されている)正しいコードを入力しても「valueTupleがインポートされていません」
と言われてしまいます。
ターゲットフレームワークがタプルをサポートしているものより古い4.6.1であるのが原因だと思うのですが、
プロジェクトのプロパティには4.6.1までしか表示できず、visual studioの更新もいろいろ試したのですが(CreatorsUpdateなど)
どうしても4.7を採用できません。

どうしたらよいでしょうか OSはwin10です
0980デフォルトの名無しさん (ワッチョイ ec90-k9rv)
垢版 |
2017/07/17(月) 12:32:26.53ID:+UBTk6HR0
>>979
新しいプロジェクトの作成画面で.NET Framework 4.7になってないとか
もし古い.NETでプロジェクトを作成してしまっていたらソリューションを右クリック→プロパティ→アプリケーション
で、ターゲットフレームワークを.NET Framwork 4.7に変更する
0984979 (ワッチョイ 8ee3-S4qQ)
垢版 |
2017/07/17(月) 13:13:20.69ID:tm+LZBsa0
解決しました ありがとうございます

個別のコンポーネントを選択していませんでした。
0985デフォルトの名無しさん (ワッチョイ 4128-NvYO)
垢版 |
2017/07/17(月) 13:59:58.84ID:T9aCvdZt0
複数の読み込みタスクと一つの書き込みタスクを並列で動かすとき、
書き込みタスクを優先させて動かしたいんだけど、どうするのが正解?

タスクのプライオリティ上げるのかと思ったけど、調べるとどうも違いそうで。
ConcurrentExclusiveSchedulerPairとかのスケジューラをうまく使うのかな?
0987985 (ワッチョイ 4128-NvYO)
垢版 |
2017/07/17(月) 17:22:16.54ID:T9aCvdZt0
・複数サーバからネットワーク経由でファイルDL
・ファイル数が閾値を超える毎にDB書き込み(シリアル)
DLタスクの並列数を増やすと、書き込みタスク1つあたりの処理時間が伸びて困ってる・・
0988デフォルトの名無しさん (ワッチョイ e9c0-S4qQ)
垢版 |
2017/07/17(月) 17:27:24.08ID:aUy3ijYs0
それタスクの優先度じゃなくて単にファイルIOの問題じゃないの
ファイルDLの書き込みとDLしたファイルの読み込みとDB書き込みを同じストレージに対して行っているなら処理時間伸びるのは当然に思えるが
0989985 (ワッチョイ 4128-NvYO)
垢版 |
2017/07/17(月) 17:41:44.40ID:T9aCvdZt0
>>988
書き方が悪かったかな、すまない。
DLタスクは書き込まない、HttpClientのGetStringAsyncでメモリに読み込む
0997985 (ワッチョイ 4128-NvYO)
垢版 |
2017/07/18(火) 01:08:53.19ID:4C5Wl6we0
>>990,991
ありがとう。スケジューラの方向で色々やってみる

>>992,993
ありがとう。動機を説明してみるので、おかしな実装だったら指摘してもらえると嬉しい。
わりと見たことある実装だと思ってるんだけど・・
どこの部分に対する指摘かわからなかったので3点で書いてみる

1.なんでファイルDLしてるの
→空いた時間にダウンロードして、日時の決まった時間にDBを更新するようなバッチじゃないから

2.DLタスクが並列な理由
DLタスクでは数kbのファイルを読み込んで、それをパースしてDBに格納するデータに変換してる。
ファイルは10数個のサーバ毎に日時で1万個くらい生成される。
→各サーバに対して並列で一斉(ないし数台)にリクエストを送る方が、サーバ*ファイル数分、直列でやるより速いと思ってる

3.DLタスクとDBへの書き込みが並列な理由
DLタスクが終了してからDB書き込みしてももちろん動作はする
(実際はメモリの関係で、何度かに分割するだろうけど)

DLタスクはネットワークがボトルネック
DBタスクはDBでの処理がボトルネック*1

→だったらDLタスクが一部終わる毎にDBに書き込ませていった方が、全体のパフォーマンスとして効率的だと思ってる

(本当にpriorityが問題なのかとか、*1が正いかとか、スケールの話は実装とか環境によると思うので省いてほしい。パースはDBタスクの方じゃってのも)
0998985 (ワッチョイ 4128-NvYO)
垢版 |
2017/07/18(火) 01:13:35.64ID:4C5Wl6we0
訂正
誤)1.なんでファイルDLしてるの
正)1.なんでファイルDLして保存しないの
1000999 (ワッチョイ 1e6e-5eCk)
垢版 |
2017/07/18(火) 02:23:36.02ID:tovqy0R70
訂正
ConcurrentQueueを使ったBlockingCollectionだな
BlockingCollectionなら上限数を指定しとけばコンシューマの処理が追いつかないときにプロデューサをブロックすることもできるよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 38日 7時間 47分 35秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

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

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