18/10/26 00:36:10.18 pE8f1AMra.net
>>253
低い抽象度でものを考えすぎている
お前がやりたいのはExcelの操作を自動することではなくて目的とする結果を得ることだろ?
まず要件を明確にし、それをそのままコードに落とすだけだ
カーソルだのセルだのは最後の最後に出てくるどうでもいい瑣末な部分だ
263:デフォルトの名無しさん
18/10/27 08:30:41.59 F8L6v78S0.net
複数の.csvファイルを一つの.xlsxファイルに簡単に纏められる?
264:デフォルトの名無しさん
18/10/27 08:55:21.44 BNqfM2zkM.net
VBAでできることはC#でも全く同じ方法でできる
C#ではなく "VBA CSV 複数 結合" でググったら一発でサンプルは出てくる
そして "C# Excel 操作" でググって出てきたサンプルを真似してC#に機械的に書き直せ
それ以上細かいことはスレ違い
265:デフォルトの名無しさん
18/10/27 09:14:14.56 if75aWaZ0.net
>>256
できる
266:デフォルトの名無しさん
18/10/27 11:23:15.72 AkygrdAXM.net
>>256
やればできる
267:デフォルトの名無しさん
18/10/27 15:22:42.49 GAIyH11Qr.net
やれば出来るだろうが、手間は掛けられん。
簡単に出来るなら、ちょっと考えてみるかな。
ありがとう。
268:デフォルトの名無しさん
18/10/27 15:42:55.29 QwPOuwmq0.net
>>256
テキストの状態で全ファイル連結して一つのcsvファイルを作り、それをExcelで開いてxlsxで保存。
というローテクな方法でもできる。
269:デフォルトの名無しさん
18/10/27 15:57:45.83 if75aWaZ0.net
>>260
普通にc#からエクセルファイル操作できるから
270:デフォルトの名無しさん
18/10/27 15:58:58.91 ntx2HiKDa.net
便所掃除ができることをドヤ顔で言わなくてよろしい
271:デフォルトの名無しさん
18/10/27 22:41:19.36 Qgr0BHqv0.net
>>262
お前の「普通に」って何だよwww
初心者用なんだしやり方を詳しく教えろやくださいませ
まさかopenXMLのAPIのことじゃないよね
272:デフォルトの名無しさん
18/10/27 23:31:57.17 /aRXu6mM0.net
VBEでC#書けたりするの?
273:デフォルトの名無しさん
18/10/27 23:56:23.88 cqzal98J0.net
C#のクラスを考えるときにテストのことを考えるとさ
privateの関数や変数は持たない方が望ましいと聞いたんだがそこまで意識してプログラミングしてる?
役割を逸脱してる可能性が高いと言われてるのだがコード的にそうはさせない方法とかあるのだろうか
274:デフォルトの名無しさん
18/10/28 00:27:12.07 hf5/u8050.net
えなにそれ
publicな変数にしろってこと?
275:デフォルトの名無しさん
18/10/28 01:01:32.10 sLs9tkqy0.net
>>267
全部パブリックにしろって話ではないと思うのだが、
クラスとしてちゃんと機能してるかをテストしやすくするものとして確認しやすいように設計をするようにと言われた
アクセッサを準備しろってことなのか
、protectedで作って継承してテストをしやすくしろってことなのかはわかってない
276:デフォルトの名無しさん
18/10/28 01:01:48.04 z9u8vCUJ0.net
>>266
なにそのキチガイ発言
277:デフォルトの名無しさん
18/10/28 01:05:59.90 sLs9tkqy0.net
>>269
たぶん本質は内部所持して扱う変数を極力減らしましょうってことなんかなって思ってる
クラスを使うのにA・B・Cを事前に呼び出して内部変数の設定をしないと使えないですとかだと
バグのもととかになるから条件縛りを減らしましょうとかってことなんじゃないかと
278:デフォルトの名無しさん
18/10/28 06:10:51.67 e0hkCJOP0.net
全部public staticにしろ
279:デフォルトの名無しさん
18/10/28 08:05:20.34 3RT+wTpd0.net
日曜プログラマです
理屈に疎いので教えてください
Win32APIをマーシャリングしてプログラムを作成中なのですが
コールバックをデリゲートでやってるので
これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか?
このコールバックからの信号をトリガーにForm上のコントロールを触ると
「別スレッドからアクセスした」と怒られます
これを回避するために別のデリゲートを挟んでコントロールを触っていますが
これ以外に方法ないでしょうか?
デリゲート挟むと時々信号取りこぼすみたいで
上手くコントロールが反応しないことがあるんで改良したいのです
280:デフォルトの名無しさん
18/10/28 08:25:18.25 SibvNmKY0.net
どうでもいいけどココって本当に初心者用スレなのかね
281:デフォルトの名無しさん
18/10/28 08:56:08.45 kvhoQsiz0.net
>>272
> コールバックをデリゲートでやってるので
> これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか?
どこのなんのコールバックなのかこっちは知らんのだが
「別スレッドからアクセスした」と怒られるんならそうなんでそ
> これを回避するために別のデリゲートを挟んでコントロールを触っていますが
デリゲートを挟んでとあるけど、前提としてコントロールを触る処理はInvokeメソッドにちゃんと投げてる?
282:デフォルトの名無しさん
18/10/28 10:44:38.69 zjm6bfwn0.net
すみません、c#の初心者です。UnityでRPGを製作しているのですが、質問があります。
if (条件式1) {
条件式1が真の時のダメージ処理;
...;
}else if(条件式2) {
条件式1が偽で条件式2が真の時のダメージ処理;
...;
これに、ダメージを999以下に抑えたいので<=999を入れたいのですが、どこに入れればいいのでしょうか?
簡単な質問で申し訳ありませんがよろしくお願いします。
283:デフォルトの名無しさん
18/10/28 10:51:17.84 JM6DGBKw0.net
>>275
ダメージ処理終わった最後
int dmg=0;
if (条件式1) {
条件式1が真の時のダメージ処理;dmg+=a;
...;
}
}else if(条件式2) {
条件式1が偽で条件式2が真の時のダメージ処理;dmg+=b;
...;
}
dmg=dmg>999?999:dmg;//またはif (dmg>999) dmg=999;
284:デフォルトの名無しさん
18/10/28 10:59:20.84 zjm6bfwn0.net
>>276
早速のご回答ありがとうございます!やってみます!
285:デフォルトの名無しさん
18/10/28 11:20:25.94 zjm6bfwn0.net
無事反映されました!ありがとうございます。
286:デフォルトの名無しさん
18/10/28 11:48:33.54 3RT+wTpd0.net
>>274
Invokeメソッドに投げるとはこういうことでしょうか?
private void _TS()
{
TextShowDelegate dlgTS = new TextShowDelegate(TextShow);
IAsyncResult ar1 = BeginInvoke(dlgTS, null);
}
Tipsの寄せ集めでやってるので理屈はあまりよくわかってませんwww
287:デフォルトの名無しさん
18/10/28 11:54:36.96 Lzmpvi1g0.net
FXのEA(自動売買ツール)を提供しています。
興味がありましたら見てみてください。
URLリンク(hbgfvtgvfvr.weblog.to)
288:デフォルトの名無しさん
18/10/28 13:12:56.47 sLs9tkqy0.net
>>271
クラス化してる意味がほぼ無さそう....
コンストラクタで引数渡してメンバ変数にデータを覚えさせて使うのと
ことあるごとに内部関数の引数にデータを渡すのってどちらのが良いのだろう?
影響範囲とか小さくすることを考えると後者なのかなって思うけども
289:デフォルトの名無しさん
18/10/28 16:02:02.80 gvAysy2V0.net
>>281
あるメソッドで使うからコンストラクタで渡すって考え方自体おかしいかな
メンバはそのクラスが持つ必要があるから持っているわけでメソッドで使うから持っている訳では無い
例えば体クラスでBMIを計算するときは体重、身長は体情報だからクラスのメンバで持たせる
身長クラスでBMI計算するときは身長はメンバで持って体重はメソッドの引数で渡す
290:デフォルトの名無しさん
18/10/28 17:25:54.20 sLs9tkqy0.net
>>282
クラスの役割的にはそれであってるのだと思う
聞きたかったのは例えばその身長クラスに特化した話で
身長をそもそもメンバに持つ必要性はあるのだろうか?って話
291:デフォルトの名無しさん
18/10/28 17:38:11.82 ISWax1KhM.net
何か正しいかはユースケース次第
クラス単独での設計の正解なんか存在しない
292:デフォルトの名無しさん
18/10/28 18:47:58.26 VnMv7Anc0.net
身長クラスではなくBMI計算機クラスがいいのかな
293:デフォルトの名無しさん
18/10/28 20:53:14.99 c1Io2A4L0.net
>>279
URLリンク(qiita.com)
自分は上のに近いのでやってる
InvokeRequiedで判定してスレッドセーフにするのが定石みたいだね
294:デフォルトの名無しさん
18/10/29 11:51:55.81 IQ5w1AIM0.net
>>286
情報ありがとうございます
勉強させていただきます
295:デフォルトの名無しさん
18/10/29 13:34:23.83 09l7CDuO0.net
C#ではnumpy.randomみたいにSeed値を指定するようなことってできるんでしょうか?
296:デフォルトの名無しさん
18/10/29 13:36:55.22 f3zS/OjjM.net
できる
297:デフォルトの名無しさん
18/10/29 14:41:55.61 xwSUZkbbd.net
とても初歩的な質問なんですが
protected AbBb _abbb;
こんな感じのプログラムってなんていいますか?
298:デフォルトの名無しさん
18/10/29 14:44:34.42 f3zS/OjjM.net
クソコードというんじゃない?
フィールドをprotectedにしているプログラムはC#では一般的にはそう呼ばれる
299:デフォルトの名無しさん
18/10/29 14:47:11.97 xwSUZkbbd.net
>>291
なんていうか、_と書くことで別のところから持ってこれるようになる方法のことです
300:デフォルトの名無しさん
18/10/29 14:52:04.17 oAZGLoeZ0.net
_から始まろうがそうでなかろうがC#では普通の識別子であって言語的に意味の違いはない
メタ的に意味はあるかもしれんがそれは文脈次第
なのでもうちょっと文脈を示してもらわないと意味分らん
301:デフォルトの名無しさん
18/10/29 14:52:15.80 ZsrJ9icq0.net
>>292
DIっていうんだよ
302:デフォルトの名無しさん
18/10/29 20:42:23.22 1yFXm6Bf0.net
>>294
初心者相手なんだから略してない名称も書いてあげたら
303:デフォルトの名無しさん
18/10/30 17:44:38.38 Vdu6vWjQ0.net
C#で組込み系ってできるの?
304:デフォルトの名無しさん
18/10/30 17:54:37.52 HzRny5oEM.net
最近は可能だが案件はなさげ
デバイスは限られるが自作なら余裕
305:デフォルトの名無しさん
18/10/30 17:59:29.99 Vdu6vWjQ0.net
>>297
案件あって戸惑ってる
また1から学ばないといけないのか...
306:デフォルトの名無しさん
18/10/30 18:45:34.87 E+8/TrgCM.net
C#で実務の組み込みって制御系だろ?
変なプロトコルで機器と通信する必要があるだけで、普通のWinPCだぞ
307:デフォルトの名無しさん
18/10/30 19:37:58.29 cJDinX9aa.net
ググったら.NET Micro Frameworkってのがあるらしい
どのくらい使われているかは知らん
308:デフォルトの名無しさん
18/10/30 20:17:27.88 HzRny5oEM.net
ラズパイにwindows IOT入れてUWPで作ったり unityからUWP吐くとかもできるぽよ
従来の組み込みの世界とは別物だろけど
沼っぽいけど実績になれば
キャリア的には面白いと思う
309:デフォルトの名無しさん
18/10/31 02:11:45.22 90i4Cfzn0.net
c#って何から覚えてけばいいのだろう?
今の知識としては、インスタンス化は何かnewする奴だっけ? 的なレベル、何というか世界が広大すぎるしネットで調べてもサイトは何書いてんのか分からないし……わりぃ、やっぱつれぇわ
310:デフォルトの名無しさん
18/10/31 02:34:46.39 YeNkIpaX0.net
作りたいものを作る
その過程で必要なものだけを調べる
道具の使い方だけ勉強しても意味がない
道具は使うためにある
311:デフォルトの名無しさん
18/10/31 03:38:24.10 OyhA4eFa0.net
>>302
C#は後発なだけあって負の遺産みたいのが少ないから
まずは自分に必要なところから覚えていけば大丈夫
やりたいことをやってるうちに疑問に思ったところを調べていけばおk
312:デフォルトの名無しさん
18/10/31 06:18:25.29 AV1WSlFbM.net
そのうち道具を使う為の道具を作り始める
負の遺産が溜まっていく
313:デフォルトの名無しさん
18/10/31 06:49:24.56 nRECWsn80.net
ラムダ式というのがよくわからないので教えてください
読んでる入門
314:書に例えば普通のメソッドで int add(int n){return n+2}; とあればラムダ式なら n=>n+2;と書けるとあるのですがどうやって使えばいいのか?が書かれていません どのように使えば良いのでしょうか?何が便利になってるのかも?です。
315:デフォルトの名無しさん
18/10/31 07:13:16.37 QxiZIYdtM.net
>>306
なんか色々説明が必要な時点でもうあんまよくない臭いしてるだろ?
316:デフォルトの名無しさん
18/10/31 07:29:35.90 xX3V2hUr0.net
間に合わせの説明として利便性をいうと
わざわざ関数addを明示的に作らなくてもその場で関数を作れる=関数名もつけるまでもない匿名関数として便利
ついでに引数と戻り値の型も省略できるからLINQの述語やプロパティ値をシンプルに記述できる
あとMVCのrazorでもヘルパーへの引数に、プロパティ値ではなくプロパティを渡すのに使われたり
317:デフォルトの名無しさん
18/10/31 07:57:27.30 AQSs4bkC0.net
>>306
書く方も別の場所にいちいち関数定義しなくて良い
読む方もそこに処理の内容が書いてあった方が良い
…とも一概に言えない場面は多いので、自分がコーディングしてて
脳が「ここラムダ式で書きたい」と自然に出てくるまでは封印しててもええんやで
void Do() {
int buffer = {1,2,3,4,5};
var q1 = buffer.Where(Even).Select(Plus2);
var q2 = buffer.Where(x => x % 2 == 0).Select(x => x + 2); // q1とやってることは同じ
}
bool Even(int x) { return x % 2 == 0; }
int Plus2(int x) { return x + 2; }
318:デフォルトの名無しさん
18/10/31 12:29:27.76 NuHnUQr6a.net
>>306
デリゲートは理解してるの?
まずそっちを先に理解しないと、いきなりラムダ式を理解するのは無理ですw
319:デフォルトの名無しさん
18/10/31 17:27:52.66 nRECWsn80.net
>>310
すいません理解できてないです
というかまだ読んでる本で説明がなされていないようです…
この章を取り敢えず読み切った後また読み返せば理解できるってことですね
LINQとラムダ式?とやらを使わずにメソッド使えばいいやって認識だとこの先苦労しますか?
回答くださった方ありがとうございます
320:デフォルトの名無しさん
18/10/31 17:53:59.42 kfZUY5yUM.net
ちょうど600ページのよさげな本が出たぞ
321:デフォルトの名無しさん
18/10/31 18:24:52.71 NuHnUQr6a.net
>>311
LINQはともかく、ラムダ式は必須の知識でしょうね。
少なくとも使えるとコードの書き方に大きな差が出るのは間違いない
ただ、デリゲート自体が初心者には理解しづらい概念とも思うので
よく分からない場合は固執せず後回しにした方がいいかもしれないね
本質的にはそんなに難しい話じゃないから、最初分からなくても時間が解決するはず
322:デフォルトの名無しさん
18/10/31 18:35:27.38 hTEse2SW0.net
>>313
移植するとき面倒だから使わないで
323:デフォルトの名無しさん
18/10/31 18:45:54.15 kfZUY5yUM.net
LINQもRxも他言語に移植されまくりだが
324:デフォルトの名無しさん
18/10/31 19:35:13.26 VqQq8o9J0.net
>>310
へえ、ラムダ式はデリゲートが基本にあるのか
325:デフォルトの名無しさん
18/10/31 20:19:37.23 hVPInHiK0.net
あるいは匿名メソッドを指して言ってるとか
記述が簡潔というのもあるけど肝はクロージャではなかろか
326:デフォルトの名無しさん
18/10/31 20:57:39.60 yW33Sn/GM.net
お前の知ってる言語とは限らんぞ
クソ会社特有の独自スクリプトとかな
327:デフォルトの名無しさん
18/10/31 21:09:44.33 N9TdgOC+0.net
>>315
MJD? KWSK
328:デフォルトの名無しさん
18/10/31 21:31:50.61 GKybvSyw0.net
リンクってのがよく理解できていない
329:デフォルトの名無しさん
18/10/31 23:31:16.71 Q2P2Jyf/0.net
SQLはひらめくけど、リンクはひらめかない
330:デフォルトの名無しさん
18/10/31 23:45:42.03 kwqElk+D0.net
linqより理解しやすいメカニズムも無いと思うけど
331:デフォルトの名無しさん
18/10/31 23:51:55.59 lqvIUA6e0.net
ラムダ式を理解するのにデリゲートなんて要らねえのにな
一体どんな頭してんだ
332:デフォルトの名無しさん
18/11/01 04:47:03.77 7mP44JOI0.net
タイプセーフな関数ポインタやコールバック、匿名関数で説明してるけど
それで通じないと どこから説明すれば良いかたいへん
デリゲートからの説明はしんどい…
333:デフォルトの名無しさん
18/11/01 04:56:16.11 7mP44JOI0.net
>>319
Wikipediaにもいくつか乗ってるよ
334:デフォルトの名無しさん
18/11/01 07:48:57.67 PBz6MbCm0.net
Linq は、Java のStream、Ruby on Rails と同じ。
関数型
メソッドチェーンしていって、一番最後にレコードを取得する。
遅延実行
ずっと、フィルター・SQL 文だけを組み立てて、一番最後だけアクセスする
335:デフォルトの名無しさん
18/11/01 11:43:18.05 Ezzdmjted.net
>>323
元の質問が理解は出来るけど使い方がわからないって話だからな
FuncやActionか、メソッドのデリゲート引数ぐらいでしか使わないしあながち間違えてない
336:デフォルトの名無しさん
18/11/01 11:46:58.88 DtT8Cv0dM.net
デリゲートはイベントにも使うよ
そしてそれこそがデリゲートを理解しにくいものにしている最大の原因でもある
337:デフォルトの名無しさん
18/11/01 13:53:28.62 Ezzdmjted.net
ラムダ式を何処で使うかの話でデリゲートを何処で使うかについてはふれてないよ
デリゲートの使い道でいうと非同期実行するために使うとか色々ある
ラムダ式に関しては、FuncやActionかメソッドの引数ぐらいでしか使ってないと思うんだけど他になんかある?
338:デフォルトの名無しさん
18/11/01 14:16:07.14 aKMxEeDc0.net
ローカル関数がなかった時代のローカル関数代わり
339:デフォルトの名無しさん
18/11/01 18:07:39.71 0xRkJrzka.net
式木
340:デフォルトの名無しさん
18/11/01 18:49:47.61 ECytQ9s20.net
ラムダ式使ったのはfind関数のときくらいかな
それ以外ほぼ使ったことない
341:デフォルトの名無しさん
18/11/02 00:13:13.50 cBjseW3X0.net
ワシの波動球はラムダ式まであるぞ
342:デフォルトの名無しさん
18/11/02 03:44:16.47 hToiCYAd0.net
Postgresを、SQLiteみたいにDBファイルとコネクタだけで使うにはどうすればよいでしょうか?
343:デフォルトの名無しさん
18/11/02 13:32:10.56 1IoIYp5Z0.net
無理だろそりゃ
344:デフォルトの名無しさん
18/11/02 13:46:37.38 n/9UgDRl0.net
>>335
portable版使ったことないの?
345:デフォルトの名無しさん
18/11/02 13:51:48.43 1IoIYp5Z0.net
>>336
>コネクタだけ
って書いてるからどうにもなんないよ
346:デフォルトの名無しさん
18/11/02 13:55:23.85 n/9UgDRl0.net
>>337
なんで?
347:デフォルトの名無しさん
18/11/02 13:56:59.71 1IoIYp5Z0.net
>>338
じゃあ俺には無理だから、あんたが教えてあげたら良いんじゃないの
348:デフォルトの名無しさん
18/11/02 17:21:36.81 ouVO3wBCd.net
namespace Drawlinetest
{
public partial class Form1 : Form
{
PictureBox pbox = new PictureBox();
Point pt = new Point(-1, -1);
public Form1()
{
InitializeComponent();
pbox.Location = new Point(0, 0); pbox.Size = new Size(500, 500);
this.Controls.Add(pbox); this.ClientSize = pbox.Size;
pbox.Image = new Bitmap(pbox.Width, pbox.Height);
pbox.MouseDown += MD;
}
private void MD(object sender, MouseEventArgs e)
{
Point p = e.Location;
if (e.Clicks > 1) { pbox.Image = new Bitmap(pbox.Width, pbox.Height); return; }//ダブルクリックで画像リセット
int x = pbox.Width - 1, y = pbox.Height - 1;
if (pt.X < 0 |
349:| pt.X > x || pt.Y < 0 || pt.Y > y) { pt = p; return; } Graphics g = Graphics.FromImage(pbox.Image); g.DrawLine(Pens.Black, pt.X, pt.Y, p.X, p.Y); pbox.Refresh(); g.Dispose(); pt = p; } } } 前スレにあったのを参考に400角にピッチ20の方眼を作りました。 クリック時に近い点を取って連続線にしたい場合どうすればいいですか?
350:デフォルトの名無しさん
18/11/02 17:41:50.22 KsjOw3TM0.net
>>340
「近い点」の定義は?
座標差が10以内の場合を0に近いとした場合
p.X=p.X-p.X%20+((p.X%20)>10?20:0)
Y座標にも同じような計算式を適用
でそのコピペしたところに組み込むときは画像範囲外の座標を指定した場合はリセットされるので、その辺も改変しないと
351:デフォルトの名無しさん
18/11/02 17:44:00.81 1rdv+QTJ0.net
リージョン
352:デフォルトの名無しさん
18/11/02 18:39:24.09 Zmz30XyOa.net
>>340
マウス座標に一番近い格子点の座標を求める方法って意味なら、
(1) マウス座標を囲む4つの格子点を返すメソッドを書く(マウス座標が格子点上の
場合に何を返すかは適当に決めて)
(2) マウス座標と任意の座標の距離(の2乗)を求めるメソッドを書く(ラムダ式でいい)
(3) LINQのOrderByでも使って(1)と(2)から求められる
353:デフォルトの名無しさん
18/11/02 18:43:56.30 Zmz30XyOa.net
今気づいたけど、MSDNのリファレンス、無茶苦茶見づらくなってない?
拡張メソッドはどこで見られるのこれ?
VS2010時代の人力で翻訳されたドキュメントも読めなくなってるし....
MSっていらんことする天才だなw
Googleもそうだけど
354:デフォルトの名無しさん
18/11/02 18:48:39.64 3EaYIZ29M.net
「英語で読む」が付いて格段に読みやすくなったわ
英語読めない人は大変だなw
355:デフォルトの名無しさん
18/11/02 19:00:33.18 YQK0i7tX0.net
サンプルコードがないメソッドを報告するって付けてよ
356:デフォルトの名無しさん
18/11/02 22:00:12.56 qBR9F2NOM.net
chromeの翻訳は実用十分
MSDNは昔より酷いよな
英語です読むオプションが便利やね
357:デフォルトの名無しさん
18/11/02 22:05:20.63 n/9UgDRl0.net
>>344
docsじゃなくて?
358:デフォルトの名無しさん
18/11/03 01:49:56.08 m4AFUYcO0.net
>>340
数学の問題かな
マウスの座標を20で割って商nと余りを求める
余りが0<10
x=20n
余りが10<20
x=20(n+1)
yも同様にして座標が求まる
2点の座標p1,p2に線を引く
これの繰り返し
359:デフォルトの名無しさん
18/11/03 02:19:46.79 ++9uwWwJa.net
グリッドならわざわざ距離なんか求めずX軸Y軸独立に最近傍検索しても同じことか
そりゃそうかw
360:デフォルトの名無しさん
18/11/03 07:55:15.80 SApjZlYC0.net
>>345
コンストラクタ、プロパティ、方法、イベント
「方法」ってなんだ?
と思ったらメソッドかよ!
こんなクソ訳付けられるなら英語の方がマシだなwww
361:デフォルトの名無しさん
18/11/03 08:03:39.30 rSl2Ac3O0.net
ついにMSもバカをきりすてはじめたか
いちいちバカの相手をしてたら大変だからな
362:デフォルトの名無しさん
18/11/03 11:23:12.64 +zJSXhjW0.net
方法はさすがに草
363:デフォルトの名無しさん
18/11/03 12:53:13.50 q2N3VeHVa.net
あえて誰にでも間違いがわかるバカな翻訳を残すことで、
俺達はもう英語の読めないバカジャップを相手にする気はない、英語を読むか廃業しろ、
というメッセージを伝えようとしているのだろう
364:デフォルトの名無しさん
18/11/03 13:25:00.49 X
365:ovyTjqY0.net
366:デフォルトの名無しさん
18/11/03 13:37:41.08 N8ATSODSM.net
>>355
ビルドで切り替えるなら #if DEBUG で十分
Web開発で使われるような動的な設定の切り替えは、同じビルドを環境に応じた異なる設定で実行したいというニーズにおいて使用するもの
Webだと、ビルドしてステージング環境でテストしてそのまま同じものを本番にデプロイするんだよ
367:デフォルトの名無しさん
18/11/03 17:26:27.47 Kq73EWlFd.net
デリゲートって関数登録して好きなタイミングでそいつ呼べますよって使い方のイメージだけども違うんかね
368:デフォルトの名無しさん
18/11/03 18:29:16.11 SHI5qsHHa.net
>>357
前にも書いた気がするけど、本質はデリゲートっていう概念を導入することによって
デリゲート型の変数が作れるってことだと思うよ。
C#からデリゲートがない言語を見た場合、それは
デリゲートのリテラル( = メソッド)の定義は出来るのにデリゲートの変数の宣言はできない不自由な世界に見える
369:デフォルトの名無しさん
18/11/03 23:43:38.27 QP19bU4J0.net
数作ってる内に最初の設計こそが一番大事な気がしてきた
が、それで最後まで行けた試し無し
370:デフォルトの名無しさん
18/11/04 00:27:59.79 Ujv6OCQma.net
設計においては全体像を常に持ちながらもフェーズに応じて必要以上に詰めすぎることなく適切な抽象度に留めるバランス感覚が重要
厳格なウォーターフォールだろうとアジャイルだろうとそこは同じで、最初から細部を詰めようとするのは確実に時間の無駄
371:デフォルトの名無しさん
18/11/04 00:56:11.57 ycEmTONY0.net
設計力を高める(学習)するのに適切な書籍またはサイトがあれば教えてください。
372:デフォルトの名無しさん
18/11/04 00:56:42.60 316Hfb/o0.net
まあそうなんだけど、前工程が適当だと後工程が確実に割を食うじゃん。
どこら辺にいい加減があるんだろうな。
373:デフォルトの名無しさん
18/11/04 01:09:06.89 xCAdckZOM.net
>>361
ちょっと古いけどこれなんかわりと有名
URLリンク(docs.microsoft.com)(v=pandp.10)
374:デフォルトの名無しさん
18/11/04 10:06:20.84 TRDIKx2zM.net
権力のあるところがざっくりやって、弱い連中に細かいとこ押し付ける。
375:デフォルトの名無しさん
18/11/04 10:54:42.18 iKmrkyIQ0.net
ユーザーなども含めた他人の意見をフィードバックしようなどと
色気を出した瞬間、どこまで詰めるかなんて分からなくなる
結局一人で設計してどこまでやるかなんて一人で決断するしかない
アプリなんて自分が使って満足ならOK
376:デフォルトの名無しさん
18/11/05 15:59:03.10 QhIuz4Ucd.net
disposeを継承したクラスのインスタンスのデストラクタが参照があるときに呼び出されてるのだけど
そんな現象に見回れた人居ませんか
disposeの継承は関係ないかもしれないけどそのクラスの作りは今そうなってます
377:デフォルトの名無しさん
18/11/05 16:25:54.17 9y9XQ9xCM.net
ありえない
今更CLRのそんな基本的なところがバグってるなんて考えられないから、バグがあるのは間違いなく貴方の目か頭の方です
378:デフォルトの名無しさん
18/11/05 17:39:02.66 ci20RGBId.net
>>340
これって前打った点と新しい点を線引いてるけど、前の点はどう記憶してるんですか?前の点にもう一個情報を持たすのは可能ですか?
線が被った時、線をずらして書こうと
379:思ってるんですけど、 例えば↓2マス↑6マスとクリックして書いたとき被るのをちょっと右にずらして書くのは出来たんですけど、 条件をpt.X==p.X && pt.Y<p.Y だと変わって欲しくないときもズレる。 ズラす条件は直角で、始点を0を基点として ↓に引いた時は左 ↑に引いた時は右 ←に引いた時は上 右に引いた時は↓
380:デフォルトの名無しさん
18/11/05 19:35:41.47 W+eHh5+20.net
>>368
>前の点はどう記憶
フィールドのPoint pt
描画範囲が被る場合の判定がちょっと思いつかないけど
前の点にもう一個情報じゃなく描画した点の位置を全部記憶してからになる気がする
線描画を半透明にして被った場合にもわかるようにとか駄目なの?
381:デフォルトの名無しさん
18/11/05 23:06:04.46 CiuGU7fm0.net
>>367
ありがとう
めっちゃ上位層でインスタンス破棄されてました
382:デフォルトの名無しさん
18/11/06 00:58:16.86 2irnAq2B0.net
>>368
pt = pが前の点の記録
383:デフォルトの名無しさん
18/11/06 16:46:04.32 KNaAB8gP0.net
async/awaitが難しすぎる
一見簡単そうに見えるんだけど、結構注意深く使わないとこれはまるよね
(Web見ていると使い方で注意事項多いし)
これって、MS的には何を目指したものなの
最初見た時は、初心者向けかなと思ったら偉い難しいのでびっくりした
BackgroundWorkerなんて、結構納得しやすかったのに
384:デフォルトの名無しさん
18/11/06 17:49:22.75 Irg6T2PQa.net
そこはそんなに難しく考えることないかと
「非同期的にAの終了を待機してその後Bを実行」みたいなコードを
普通のシーケンシャルな処理みたいに書けるようにするためじゃないの?
385:デフォルトの名無しさん
18/11/06 18:02:29.90 tGae1nmw0.net
まぁ初心者向けというか、Progress<T>等でも実装を隠蔽しつつ
UIスレッドで行うべき処理を文脈的に記述しやすく…?
いや、個人的にはyieldよろしく妙なコードを生成した気がするし
.NET 4考慮でSynchronizationContext捏ねる方が好きだけどね
386:デフォルトの名無しさん
18/11/06 18:04:31.43 YGMwXXKod.net
>>372
何がどう難しすぎるの?
387:デフォルトの名無しさん
18/11/06 18:14:27.73 BgqxGxaf0.net
すまんが、あるクラスがインスタンス化された際、そのクラスのコンストラクターでインスタンス化した元のオブジェクトorクラスを取得することってできないの?
デバッグに使いたいんで引数で渡すのはなしでたのむ
388:デフォルトの名無しさん
18/11/06 18:41:26.83 YGMwXXKod.net
>>376
日本語で頼む
389:デフォルトの名無しさん
18/11/06 18:45:38.66 tGae1nmw0.net
>>376
インスタンスは正攻法だと無理そうな気配がする
呼び出し元のメソッドが定義されているクラスは
new StackFrame(1).GetMethod().DeclaringType
390:デフォルトの名無しさん
18/11/06 19:01:18.64 ySONZz/l0.net
象徴天皇制の現代で国民の意見を象徴しなかったらそら叩かれるだろw
391:デフォルトの名無しさん
18/11/06 19:01:53.71 ySONZz/l0.net
誤爆だすまん
392:デフォルトの名無しさん
18/11/06 19:29:28.47 KNaAB8gP0.net
あれ?難しいと思っているの俺だけ?
>>375
下の場合、基本 処理1=>test()=>処理2と逐次処理する。
test()のとこでawaitしているにもかかわらず、すぐにTestAsnc()は終了しちゃうとこ
test()で止まっているのに、値も設定されず次の処理にいくとか、動作が見た目と違い過ぎる
main(){
int ret = TestAsync();
}
async Task<int> TestAsync() {
処理1;
int ret=await test();
処理2;
return ret;
}
int test() {
24時間かかる処理;
}
393:デフォルトの名無しさん
18/11/06 19:44:02.97 KNaAB8gP0.net
>>375
◆async void は使うな
投げっぱなしは、なんでダメやねん
◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ
シングルスレッド止めたら、戻ったら動かないのは理解出来る
でも、async/awaitってTaskクラスを元にしてるんでしょ。
だったら、似たような動作をしてくれるもんだと…
◆SynchronizationContextとは何者?
UI処理に使うのはわかった。でも、これってその為だけ?
でも、一番の理由は、背景を含めてきちんと解説しているHPあるいは書籍が欲しいかな
394:デフォルトの名無しさん
18/11/06 19:47:29.55 bqFqbezi0.net
testがTaskになってない
395:デフォルトの名無しさん
18/11/06 19:53:25.35 HIVoSst90.net
>>381
mainメソッド自体が非同期じゃねーだろそれ
396:デフォルトの名無しさん
18/11/06 20:04:46.85 X+2KbTG8r.net
awaitって日本語に直すと「あ待て」なの?
397:デフォルトの名無しさん
18/11/06 20:16:58.70 KZ0uzBLfa.net
>>382
未確認飛行 Cの本サイトやブログが詳しい、例えばこれ
URLリンク(ufcpp.wordpress.com)
async voidを避けるべき理由は URLリンク(neue.cc) を見てくれ
awaitとWaitを混ぜるとデッドロックするのはSynchronizationContextが関係していて
awaitするTaskの終了後は、awaitする前のスレッドで続きの処理をしようとするのが理由(ConfigureAwait使えば別のスレッドで続きの処理をする)
WaitはTaskが終了するまでそのスレッドで何もできなくなるから、awaitの「続きの処理をしようとする」ことが出来ずにデッドロックする
それで件のSynchronizationContextは、UI処理で使うためのものと思えばいいと思う
Webサーバー側でも同期コンテキストの概念があるらしいがよく知らない
>>385
URLリンク(ufcpp.net)
398:デフォルトの名無しさん
18/11/06 20:22:22.86 hiXG5OoB0.net
>>381,382
await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると
「わかった」と言ってる部分すら疑ってかかってしまう
> ◆async void は使うな
わざわざ特別に許可されている構文であり使うなってことはない
使うべきではない場面で手抜きの為に採用するな、という文脈なら理解できる
> ◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ
ConfigureAwaitまわりについては確かに直感に反する場合が多々あるが
結局のところをどちらを既定にするべきかという話になる
> ◆SynchronizationContextとは何者?
UI処理に使うのはただの一例。await(に限った話でもないが)の継続する処理を
どこでに実行するのかカスタマイズするために自分で実装することもできる
399:デフォルトの名無しさん
18/11/06 20:24:08.32 M0pxYueSp.net
非同期処理はここが分かりやすかった
URLリンク(www.kekyo.net)
400:デフォルトの名無しさん
18/11/06 20:39:00.29 Irg6T2PQa.net
>>381
落とし穴が存在する、という意味で難しいのは確か。
非同期メソッドに限らず非同期処理は全部そうだけど
>動作が見た目と違い過ぎる
これは勘違い。
testの終了を(非同期的に)待機して終了したら下の行を継続するんだから
むしろ見た目通りでしょ。
そこでメソッドを抜けてるわけじゃない。
ただスレッドの占有を止めるだけ
401:デフォルトの名無しさん
18/11/06 20:54:24.19 KNaAB8gP0.net
>>387
>await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると
どういうこと?
ちなみに、俺はmain中のint ret = TestAsync();はコンパイラーエラーを期待していた。
普通に実行できるうえに、test ()を待たずして、TestAsync()が終了するのに
びっくりしたけど、そういう動作なんでしょ?だから分からないと
>>389
>そこでメソッドを抜けてるわけじゃない。ただスレッドの占有を止めるだけ
でも、test()が終了していないのにTestAsync()が終了するのはなぜ?
retにはTask<int>型が入って、Result未設定になってるけど。
402:デフォルトの名無しさん
18/11/06 21:02:02.39 KZ0uzBLfa.net
>>390
試したコードを貼ってくれないか?
皆が >>381 の書き込みを見て想像したコードは
URLリンク(ideone.com) こんなのだと思うけど
ご覧の通りTask<int>からintには変換できないし、intはawait出来ない
403:デフォルトの名無しさん
18/11/06 21:05:03.24 KNaAB8gP0.net
>>388
他の人が出してきたのは、既にざくっとだけど読んでたものだったけど
これはみてなかった。後ほど見てみる。
404:デフォルトの名無しさん
18/11/06 21:06:23.76 QbvaQ8DKa.net
初心者には難しというか誰に対しても理念をしっかり理解しないと使えないし
それでも誤用してる人も多い
スレッドの流れもわからないでいろいろバグコード作ってて後で思ったように動かなくなる
それよりもTaskを使ったシグネチャーで一貫性が損なわれてるのが気持ち悪い
あとから出てきた言語などではasync awaitはきれいになってたりする
それまでが暗黒だったのですこし明るくなっただけでもすごく進歩してると思い込んでる
405:デフォルトの名無しさん
18/11/06 21:11:19.20 QbvaQ8DKa.net
awaitは一次的に呼び出し元へ順繰りにreturnするもの
406:デフォルトの名無しさん
18/11/06 21:16:42.51 QbvaQ8DKa.net
kekyoの丼は昔昔async/awaitでおかしな記事を書いてたな
MVPなのにこの程度の理解なのかと思った
407:デフォルトの名無しさん
18/11/06 21:17:05.17 J1JRrSzC0.net
①座標A(50,50)
座標B(100,50)
にABを結ぶ下半分の半円。
②座標C(100,50)
座標D(50,50)
にCDを結ぶ上半分の半円
まず、正方形の左上、右下の座標をangleに入れ
①angle=(50,25,100,75)
②angle=(50,25,100,75)
①DrawArc(Pen, angle, -180, -180);
②DrawArc(Pen, angle, -180, 180);
これで合ってます?
よく解らない点
angle座標の計算式
半円の角度の意味がいまいち分からないです。
408:デフォルトの名無しさん
18/11/06 21:17:13.88 KNaAB8gP0.net
>>391
>試したコードを貼ってくれないか?
長いソースなんでそれは無理だけど
単純に簡略化したつもりだったんだけど
実際にはmain()でなくGUI
Task<int>ではなく、Task<bool>本質的には変えてないつもりだったんだけど…
悪いけど
ちょっと、時間もらって 明日に仕切り直しということで
409:デフォルトの名無しさん
18/11/06 21:31:56.37 8KRwrCef0.net
>>396
>angle座標の計算式
何の計算式が欲しいのかよくわからない。angle=四角に内接する楕円がベースになる
ここを参照
URLリンク(dobon.net)
ここだとRectAngleの座標をそのまま入れているけど意味は変わらない
水平方向右が角度開始位置
実行できる環境が無いのでなければ数値変えて自分で動かしてみる方が早く理解できる
410:デフォルトの名無しさん
18/11/06 21:42:34.61 pbTvUYL60.net
>>396
c#と何が関係あるの?
411:デフォルトの名無しさん
18/11/06 21:44:58.51 ahLHh+wMd.net
>>397
お前のコードだとawaitもTaskも全く基本的な使い方すらできてないやろ
少しはドキュメント読めよ
412:デフォルトの名無しさん
18/11/06 21:44:59.53 QbvaQ8DKa.net
ボタン押したらクリックイベントハンドラ(メソッド)で重い処理をしてGUIが固まってしまう
これを何とかするにはGUIに制御を返してやらないといけない
awaitではasyncメソッドの中のどこかのレベルで新しいTaskを作って
そっちで別の処理をさせて上のメソッドに制御を戻すことができる
必ずではないけどawaitに出会ったらスレッドは結果としてそのメソッドを離脱して
上位のコードを実行する
413: awaitに出会ったらスレッドは処理が終わるのを待ってはいない!(重要) この場合はGUIに制御が戻ってる awaitの戻り値が用意できたら良きタイミングでまたGUIから処理(スレッド)をかっぱらって続きを実行させるだけ!
414:デフォルトの名無しさん
18/11/06 21:48:32.21 QbvaQ8DKa.net
昔?はmainでawaitできなかった
一次的にでもmainを抜けると言うことはプログラム終了だもの
415:デフォルトの名無しさん
18/11/06 21:48:56.89 Irg6T2PQa.net
>>396
(1) まず最終的に描きたいパイをパイに切り取る前の全体の円(楕円)を考えて、
(2) その円(楕円)に外接する長方形を考える
こういう順番だと思うよ
DrawArcが引数に要求するのはその外接する長方形と、時計の3時からの開始位置の角度と
パイの角度だと思う
使ったことはないがw
416:デフォルトの名無しさん
18/11/06 21:56:24.33 QbvaQ8DKa.net
以下はよく見かける間違い
awaitに出会ったらGUIに処理を渡します
awaitに出会ったらそこで待機して結果が出るのを待ちます
417:デフォルトの名無しさん
18/11/06 22:26:22.46 KNaAB8gP0.net
作ったんで、書き込もうとするんだけど 書き込めない
HTTP 403 Forbiddened が出る。
418:デフォルトの名無しさん
18/11/06 22:37:57.23 KNaAB8gP0.net
これって、まじなソースコードって書けないの?
全角に変換してみた
public Form1()
{
InitializeComponent();
this.AllowDrop = true;
wtest();
}
void wtest()
{
var ret=TestAsync();
System.Diagnostics.Debug.WriteLine(ret.ToString());
}
async Task<bool> TestAsync()
{
bool ret = false;
var task = Task.Run(() => {
System.Threading.Thread.Sleep(10 * 1000);
ret = true;
});
await task;
return ret;
}
419:406
18/11/06 22:39:33.41 KNaAB8gP0.net
半角に変換して試してw
試したのは、GUIなのでFormアプリで作ってみた
で、疑問点は、
1.これがそのまま動くこと。var ret=TestAsync();でコンパイラーエラーの方が納得する
理由は、retに値が設定出来ないから。そのうえでTestAsync()呼び出しにawaitを強制するとか
2.await taskでTestAsnc()で待ちが入ると、その上位のメソッドの処理に流れが移ること
要するに流れが直観的でないと感じる。ただし、この流れはがTestAsyncがasync voidならまだ納得がいく
420:デフォルトの名無しさん
18/11/06 22:49:42.00 jcRa2hVA0.net
>>406
>>1にリンク張ってあるideoneかdotnetfiddle使いなよ
簡単なコードならサイト上で実行まで出来るぞ
421:デフォルトの名無しさん
18/11/06 22:54:04.17 QbvaQ8DKa.net
1.
var ret=TestAsync();でコンパイラーエラーがでるとtaskをそのまま受けたい場合に困る
retはただのTask<bool>であってそいつのResultじゃないからそれでいいだろう
2.
そういう流れで処理をしたいのでawaitを使ってる
それが疑問に思うならスタートがまちがってる
422:406
18/11/06 22:54:57.62 KNaAB8gP0.net
これでいいのかな?
URLリンク(dotnetfiddle.net)
>>408
Thx
423:デフォルトの名無しさん
18/11/06 22:54:58.69 tGae1nmw0.net
>>407
asyncメソッドと言っても戻り値は単なるTask<bool>だし
Taskにawaitが強制されたらTaskを待つ場所を選べなくなる
動作的に言えばawaitした時点で抜けて後に再開しようとする
ILSpy 3.0.1とかでasync/awaitデコンパイルを無効にして
ビルド後のバイナリからメソッド内容を見てみ
424:るといい まずTask.ContinueWith()+TaskScheduler.FromCurrentSynchronizationContext()とか 従来の書き方を学んだ方が良いと思う、コルーチン的な物の前に
425:デフォルトの名無しさん
18/11/06 22:55:30.26 LW+aJyL/0.net
varについてすら理解できてないじゃん
なんで406でのvarが381でintに置き換えられるって思ったの?
426:デフォルトの名無しさん
18/11/06 22:57:50.35 QbvaQ8DKa.net
重い処理Aをやってる最中にBもやりたいのでawait asyncを使ってる
重い処理Aの次にCをやるのとBが実行されるのを混同してはいけない
427:デフォルトの名無しさん
18/11/06 22:58:30.18 hiXG5OoB0.net
全 角 に 変 換 し て み た
やべえコイツ思っていた以上に馬鹿だぞ!!!
int に変換できるとか言ってたらvarで受けてるし面白すぎんだろ
428:デフォルトの名無しさん
18/11/06 23:01:12.62 QbvaQ8DKa.net
初心者あおりみっともない
しかも前のレスは初心者には理解できないだろ
429:デフォルトの名無しさん
18/11/06 23:01:39.73 KNaAB8gP0.net
>>409
おおっ 多分これが答えだな
納得はしていないけど、納得しやすい答えかな
例えば、2については、>>404の
>awaitに出会ったらそこで待機して結果が出るのを待ちます
という受け取り方もあるけど、なぜ
>それが疑問に思うならスタートがまちがってる
のかな?
で、この考え方に到達するに参考する書籍等は?
430:デフォルトの名無しさん
18/11/06 23:04:27.04 QbvaQ8DKa.net
>>416
いつも新刊の入門書をざっと見てるけど入門書でまともにawait asyncを扱ってる書籍はないよ
あってもごまかしてあるか間違ってる
431:デフォルトの名無しさん
18/11/06 23:07:21.50 QbvaQ8DKa.net
重い処理Aをタスクでやって同時にメインのスレッドを実行し続けるのが目的なので
上位のメソッドが引き続き実行されるのが期待の動作
awaitされた重い処理Aの続きのCが実行されるのはまた別の話
432:デフォルトの名無しさん
18/11/06 23:13:59.85 QbvaQ8DKa.net
1. 順番に処理をやってるけど別の処理も同時にやりたいな A B
2. その処理が終わったらそのタイミングで別の処理をやりたいな A → C
というのを書くのが従来の非同期処理だと面倒なのでawait asyncを使ってる
433:デフォルトの名無しさん
18/11/06 23:21:04.01 QbvaQ8DKa.net
上の2は従来だとコールバックメソッドだったが
今はawaitより下の行のこと
従来だと処理が終わったらコールバックメソッドを実行する
awaitだと処理が終わるまで待つ
やってることは同じでも概念が変わって見える
でもやっぱり待つと言うのと違うんだよなあ
434:デフォルトの名無しさん
18/11/06 23:26:37.38 KNaAB8gP0.net
ありがとう 真面目に答えてくれた人w
差しあたって、消化しきれていないけど
なんとなく見えてきたので、よく考えてみまーす
>>420
うん。awaitって、2つの意味があるんだよね。
非同期で実行する + ここで同期する(戻り値設定とか)
でも、そこが分かりづらい
でさらに、呼び出し元のスレッドは動く だから、呼び出し元の関数が動くということなんだろうけど
435:デフォルトの名無しさん
18/11/06 23:26:58.31 QbvaQ8DKa.net
Aを待ったあとにCをやってほしいのに先にBが実行されてしまう
これはけしからん!
というのはスタートが間違い
AとB同時にやってるけど非同期処理Aが終わったらCをやってほしいが正解
436:デフォルトの名無しさん
18/11/06 23:30:08.92 jcRa2hVA0.net
>>406
> var ret =TestAsync();
retにTestAsync()が返すbool値が入って欲しいなら、
var ret = await TestAsync();
437:デフォルトの名無しさん
18/11/06 23:37:32.97 QbvaQ8DKa.net
awaitではどのスレッドも待ってない
元のスレッドは呼び出し元の続きを実行し続ける
新しいtaskスレッドは実行し続ける
勝手に第三のスレッドができて待機したりしない
438:デフォルトの名無しさん
18/11/06 23:49:27.64 jcRa2hVA0.net
await Task.Run( () => { 処理A } );
処理B
とあったら、
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
var task = Task.Run( () => {処理A} );
task.ContinueWith( (t) => {処理B}, scheduler );
みたいに置き換わる。実際はもっと複雑だけど。
439:デフォルトの名無しさん
18/11/06 23:51:27.64 LW+aJyL/0.net
これでMSは何目指したの?なんて煽りするほどの相手に初心者煽りと言われてもなーって感じする
そもそもソフトウェア技術でハマりやすいスレッド周りをかなり触りやすく提供してくれてる技術だと思うし、その点でMSに苦情なんて出る?
440:デフォルトの名無しさん
18/11/06 23:56:24.75 QbvaQ8DKa.net
さっきも書いたけど美しくないしわかりづらいんじゃないの?
数年前はもっと理解してる人が少なかった
リアルで合う人の9割ぐらいの人は誤解してたかわからないと言ってた
ググって上位に出てくるいくつかのサイトも間違いを助長するような内容ばかりだったので
誤解するのも仕方ないかなって思ったなあ
441:デフォルトの名無しさん
18/11/07 00:01:47.29 qsaRvVqe0.net
>>424
なるほど 最初は、async/awaitの発想って非同期処理を同期処理のように見せることだと思ってた。
(結局これが正解なのね)
Webを漁っても、元々の動機からずれていくような気がしてたんだけど、
awaitで非同期処理を挟むけど同期処理をしているものと思えば、
当初の動機との整合性は取れる。
で、async/awaitの関数は(TestAsync)と書いたものは非同期なのだから
当然呼び出し元は、そのまま動いていくと。
これで、自分の中では大きなとこの整合性はとれたのかな
442:デフォルトの名無しさん
18/11/07 00:02:18.96 dWNwSiW+a.net
>>426
それは煽ってるわけじゃなくて、純粋にそう疑問に感じただけでしょうw
少なくとも他人を批判的に見る程度には自分自身も批判的に見た方がいいと思うよw
443:デフォルトの名無しさん
18/11/07 00:20:23.00 qsaRvVqe0.net
>>425
BackgroundWorkerからasnc/awaitに飛んだから
Taskすらまともに理解していなんだけど、
TaskSchedulerとSynchronizationContextはキーワードとし覚えてる
レベルアップするために、そこを解説したものを教えてください。
444:デフォルトの名無しさん
18/11/07 00:35:56.72 +978RLDn0.net
>>406-407
cmd.exe とか、特定の命令を半角で書くと、5ch は受け付けない。
ちょっとした英単語の書き込みでハッキングされるとか、5ch の運営は、アホなんだろう
Mango 板で、単語の絞り込みのテストができる
例えば、ドットなら、💩e みたいな文字参照を使えば、書き込める
cmd💩eexe
445:デフォルトの名無しさん
18/11/07 00:38:25.44 T3rtNmkK0.net
>>424
a「wait」って名前が誤解招いている感じ
446:431
18/11/07 00:40:03.17 +978RLDn0.net
16進数の2e は間違い。ウンコが表示されたw
例えば、ドットなら、10進数の. みたいな文字参照を使えば、書き込める
cmd.exe
447:デフォルトの名無しさん
18/11/07 00:41:05.63 NkMDfY750.net
>>429
俺も純粋にvarの理解すら怪しいのにasync周りが難しいってそんなもんじゃないかな?って思っただけなんすけどね
別に批判的に見てるつもりはなくて俺もasync周りは難しいと思ってる
448:デフォルトの名無しさん
18/11/07 01:11:44.95 qsaRvVqe0.net
>>434
>俺も純粋にvarの理解すら怪しいのに
逆に聞くと、varってどう誤解するの?もっとも俺はvarを誤解してるかもしれないけどw
余計誤解されるかもしれないとおもって書かなかったけど
解説しておくとすると、そこはシンタックスシュガーだと思ってた Task.Resultを返す
だから、上のほうで、本来ならコンパイラーエラーを出すべきだと書いたのも そこら辺の理由
他の人も指摘してるけど、そこはawaitを書くべきだと自分も書いたのも、あるべき姿はそっちだろうと思ってたから
実際には、動かした段階で、Task<bool>なのは知ってたんだけど そこで気づくべきだった。
とは思うけど、誤解する心理とはそういうものだと思う。
ちなみに、本当にasync/awaitで知りたいのは モナドとの関わりあい
F#ではコンピュテーション式で、async/awaitが実装されてるらしいんだけど
どう実装されているのかが知りたい。
449:デフォルトの名無しさん
18/11/07 01:29:03.21 NkMDfY750.net
>>435
まずvarはシンタックスシュガーじゃないよ
メソッドの戻り型を自分で定義してるのになんでTask外れると思ったの?
定義した型と違う
450:型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない asyncなんか関係なくTask<bool>型を返すメソッドを作って、その戻り値をbool型に入れるって、あれ?ってなるよね どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
451:デフォルトの名無しさん
18/11/07 01:42:24.43 qsaRvVqe0.net
>>436
>まずvarはシンタックスシュガーじゃないよ
というのは、どこで判断するの?
シンタックスシュガーか否かなんての 言語仕様以外の判断基準って存在するの?
delegate、匿名メソッド、ラムダ式周りなんて、旧バージョンでは許されなかった
代入が普通に許されてなかったっけ?
疑問に思った全てを、MSDNで確認するわけではないよね。
>定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
いやvarだから定義すらしてないし、脳内変換では、boolだと思い込んでるから
>どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
だから、テストした段階で、気づいていると>>435にも書いたんだけど これは、今回の一連の質問以前に知ってた
実際には、retに何が入るのかは気になるからローカルウォッチで見た
だから、コンパイルエラーの方が本来の姿だと思ってたけど…
452:デフォルトの名無しさん
18/11/07 01:50:14.49 Z88Q6V1f0.net
>>436
XMLDocumentにかざしたけど出ないね
453:デフォルトの名無しさん
18/11/07 01:50:48.17 Nx5407ci0.net
具体的にはどの行がコンパイルエラーになるべきだと思ってる?
454:デフォルトの名無しさん
18/11/07 02:07:33.40 NkMDfY750.net
>>437
>async Task<int> TestAsync()
TestAsyncメソッドの戻り値をTask<int>型と定義したのは君だよ?
varは右辺から型を推論する、メソッドが○○型を返しますって定義されてるからその型になる
455:デフォルトの名無しさん
18/11/07 04:03:10.82 4Q/iuGqA0.net
久しぶりにvarすら使えないやつを見た
456:デフォルトの名無しさん
18/11/07 07:40:05.39 Nn5ja2xC0.net
まあvarとawaitの合わせ技で混乱すると言うのはわからん話じゃない
C++でautoとPPLを絡めると俺も怪しい時があるし
コンパイルが通るコードを
コンパイルエラーになって欲しいと妄想したコードに勝手に改変して
コンパイルが通ると主張して出してきたくだりはさっぱりわからんがw
>>438
URLリンク(i.imgur.com)
出るぞ
べつに型名スペルミスしててもusingなくても出るぞ
457:デフォルトの名無しさん
18/11/07 07:55:13.01 7FHAql48a.net
>>385
ちょ待てよ
458:デフォルトの名無しさん
18/11/07 08:24:11.94 o5rBIXZlM.net
>>442
マジか
いつの間にかできるようになってやがる
459:デフォルトの名無しさん
18/11/07 10:07:36.67 qsaRvVqe0.net
>>440
一応、以下は煽りのつもりは無いんだけど
実は未だに混乱してるんだけどね varのとこw
var ret=await TestAsync() とawaitをつけると、bool
var ret=TestAsync() とawaitをつけないと Task<bool>
とか、でも、TestAsync()関数内のreturn retはboolなんだぜ
混乱しないか?var ret=TestAsync()の方が、
普通の関数ぽいからこっちの方がboolぽいという見方もできるし
460:デフォルトの名無しさん
18/11/07 10:37:39.04 qsaRvVqe0.net
これで最後にするけど、
多分初心者にとって誤解を与えるのは、
”非同期処理を同期処理のように扱える” わけではないと思う。
きちんと、Taskを理解したうえでasync/awaitに入らないと、誤解する可能性があるということ
awaitを魔法の言葉のようにとらえると、誤解の森をさまようってしまうって感じかな
awaitできるのは、Task型に対してで決して普通の関数に適用できるわけではない。
async/awaitの書式が自然に思えるのは、Taskから入った人
そこを飛ばす人間にとっては、”非同期処理を同期処理のように扱える”が逆に誤解を与える
461:デフォルトの名無しさん
18/11/07 10:37:56.63 +HyKX3eQM.net
>>435
F#の computation expression でも let! ret = Async.AwaitTask (TestAsync()) で ret が bool になるんだが?
君には抽象化という考え方は難しいようだね
そ�
462:ネんじゃF#なんか夢のまた夢だぞ
463:デフォルトの名無しさん
18/11/07 10:51:40.13 DKcaR4dnd.net
>>445
右辺の型が違うんだからvarによる型推論の結果も変わるだけ
varの話をしてたのにawaitによる処理の話にすり替わってる
retがboolだろうがなんだろうがメソッドの戻り型はTask<bool>と定義したんだろ?
じゃあ疑問が出るのはメソッドの呼び出し箇所じゃなくて実装箇所じゃないの?
なんで戻り型はTask<bool>なのにreturn boolでおkなんだろう?って
ここにvarなんて関係ないのにごっちゃにするから話がこじれる
464:デフォルトの名無しさん
18/11/07 11:06:26.88 pyY+8g+op.net
>>445
async関数を書く立場と使う立場でごっちゃにし過ぎ
> var ret=TestAsync()の方が、普通の関数ぽいからこっちの方がboolぽいという見方もできるし
そんな見方はできないよ
関数を使う側は戻り値のシグニチャに従うだけだ
逆にawait式の戻り値がTaskじゃないのが直観的じゃない、と言うなら初心者視点に限って見ればまだ理解はできる
とは言え型推論のvarが非同期機能のawaitまで勝手に面倒を見てしまうという妄想を
まるで仕様により勘違いを誘発されたかのように語るのはお門違いだな
基礎を疎かにしているのに最短距離だけ求める欲求が強すぎるて歪んでいる
465:デフォルトの名無しさん
18/11/07 11:10:22.09 pVsScpvPM.net
varはわざわざ型名書かなくて済むためのシュガーだと思うの
当然、型が自明か気にしなくて済むくらい明瞭なコードなら、可読性も満たす
書き方で型が変わるシチュで、
変数名もretにして混乱してたら本末転倒かと
466:デフォルトの名無しさん
18/11/07 11:21:51.89 DKcaR4dnd.net
asyncが難しいことを誰も否定していないのに勝手に初心者でも理解できると解釈して、そんなことない!って文句垂れてるようにしか見えないんだよね。
基本や順序すっ飛ばして全部一気に詰め込むなんて土台無理な話なのに
467:デフォルトの名無しさん
18/11/07 11:33:01.55 +tTqHYr+0.net
そもそもawaitがTaskからResult取り出すものだってわかってなかっだけだな
468:デフォルトの名無しさん
18/11/07 11:36:32.44 +tTqHYr+0.net
あとasyncが戻りを勝手にTaskにしてくれるのも混乱のもとか
469:デフォルトの名無しさん
18/11/07 11:44:16.22 h4FWJh3Ka.net
読んでてHaskellのIOモナドみたいとか思った。
asyncが>>=でawaitがreturn。
(Haskellのreturnは戻り値にIOを被せる)
実行順序がコード通りとは限らないと言う意味では遅延評価も非同期か。
470:デフォルトの名無しさん
18/11/07 11:46:01.13 qsaRvVqe0.net
一応読んでるよ~
>>452
そこもまだ混乱してるんだけどね
var tas=TestAsync()
bool ret=tas.Result
とすると、デッドロックするんでしょ 理由は分かってるから説明不要
var ret=await TestAsync()
ならOKとか。違いがわかりづらい
471:デフォルトの名無しさん
18/11/07 11:50:22.74 T9rK23F2M.net
なんでこんなに書き込み増えてんねん
472:デフォルトの名無しさん
18/11/07 11:53:24.50 xNIAd77Ep.net
いつからC#はセミコロン不要になったんだ?
473:デフォルトの名無しさん
18/11/07 11:57:23.58 h4FWJh3Ka.net
>>454
あ、asyncとawaitの>>=とreturnの関係逆だった。
474:デフォルトの名無しさん
18/11/07 12:11:39.88 h4FWJh3Ka.net
要するにさ。
時間かかり過ぎる処理がUIスレッド占有するとプログラム上正常でもユーザーからは固まったように見えるから、非同期でUIスレッドから切り離してしまいましょうって機能でしょ?
asyncで別スレッドに切り離して、直後のコードで押したボタンとか無効化しておいて、答えが返ってきたら有効化する。みたいな。
(だからUIスレッドは他の操作もできるけど、await付きメソッドは(async部分以外は終わってるけど)async返るまで正式な終了では無い。みたいな。
んで、UI弄るのはUIスレッドのみって縛りを解決する為にSynchronizatrionContextがあると。
齧った限りはそんな理解。
475:デフォルトの名無しさん
18/11/07 12:12:41.51 j1BgkYjRd.net
476:何もドキュメント読まずに妄想だけでコーディングしようとするからこんなアホが生まれる
477:デフォルトの名無しさん
18/11/07 12:29:37.11 GX8LMMiJa.net
>>446
まあ気持ちは分からんでもないけど、「非同期処理を同期処理のように扱える」なんて
宣伝してる人はいないよね。
大概の記事は「同期処理のように<書ける>」となってるんではないか。
違うかもしれないが、あなたはasyncで修飾されたメソッドの内側の視点と、
外側からの視点の区別がついてないんじゃないか。
「同期処理のように<書ける>」というのは、あくまでasyncで修飾されたメソッドを
書いてる時の、内側の視点に立った場合の話。
先にTaskをある程度知らないと混乱するのはその通りかもしれないが、
知らなくても「async/awaitの書式が自然に思える」とは思うけどな
>>455に書いてるような落とし穴が分かりづらいのはその通りだしたぶん大方が同意するところ。
だから非同期メソッドは糞、と言いたいならそれはないんじゃないかと
478:デフォルトの名無しさん
18/11/07 14:33:31.51 uHgdkwYaM.net
馬鹿は犬のクソでも拾ってろ
479:デフォルトの名無しさん
18/11/07 15:23:16.06 B5IB+WEZ0.net
>>460
そしてそんな池沼解釈を自慢げに広めて馬鹿の量産を狙うんだよな
マジで害悪
480:デフォルトの名無しさん
18/11/07 16:08:24.07 RZxjCpbR0.net
C#に関しては特にそうだけど、QiitaとHatenaは検索から除外したほうが良いよ
481:デフォルトの名無しさん
18/11/07 18:02:56.35 Z88Q6V1f0.net
>>464
qiita助かってるよ
javascript関連かなり助けてもらった
482:デフォルトの名無しさん
18/11/07 18:03:21.43 Z88Q6V1f0.net
hatenaも
483:デフォルトの名無しさん
18/11/07 18:04:06.24 B5IB+WEZ0.net
こうやって馬鹿が量産されるわけだ
484:デフォルトの名無しさん
18/11/07 18:25:46.93 GPEu9teNa.net
めるか機械翻訳に慣れているなら
stackoverflow英語版見に行けばほとんどのことは書かれていると思うよ
485:デフォルトの名無しさん
18/11/07 22:06:05.59 F0eFVJRp0.net
Dispose();
リソースを解放ってどういう意味ですか?
486:デフォルトの名無しさん
18/11/07 22:24:06.37 EkNn3I7h0.net
デバッグ時にスレッド数分のウィンドウが出て
一斉かそれぞれでステップインしていけたりしないかなあ
487:デフォルトの名無しさん
18/11/07 23:36:12.44 fWOqg0Pc0.net
頭ワルイヤツが頭ワルイ日記を読んで
ネトウヨやパヨチョンや放射脳になる
コレと同じ
タチがワルイ頭ワルイのが量産される
コレは低学歴知恵遅れに顕著
488:デフォルトの名無しさん
18/11/08 06:47:12.34 2O0gVFLm0.net
c#に限らずググって見つかったページを鵜呑みにするだけならキータだろうがハテナだろうがダメに決まってるだろ。
489:デフォルトの名無しさん
18/11/08 07:53:34.07 HzGiMKkRd.net
配列について。
例えばクリックイベントが起こるたびに配列に1つずつ入れたい時、使いたい1次元配列を宣言して、要素数を1つずつ増やしたいときってどうすればいいですか?
490:デフォルトの名無しさん
18/11/08 07:59:27.65 t5YueCJxp.net
arraylist
491:デフォルトの名無しさん
18/11/08 08:00:45.70 HzGiMKkRd.net
一番上のパブリックで宣言時はやっぱ一個は確定でつくるものですかね?
492:デフォルトの名無しさん
18/11/08 08:16:23.72 Tu3rCJEka.net
>>473
whileの代わりにイベント使うと考えればおk
493:デフォルトの名無しさん
18/11/08 08:53:08.32 YlmbbEml0.net
可変長なら配列じゃなくてList<型>を使えばいいよ
494:デフォルトの名無しさん
18/11/08 09:02:34.53 CSIZeDt+0.net
ワッチョイ 8a7e-zV7r
495:デフォルトの名無しさん
18/11/08 09:25:03.69 CSIZeDt+0.net
ああごめん 間違えて書き込んじゃった
いいレスしてるなぁ抽出しようとして
496:デフォルトの名無しさん
18/11/08 22:05:15.41 62lAQ4k70.net
>>474
過去の遺物
497:デフォルトの名無しさん
18/11/09 08:06:06.00 XmmzP5eBa.net
先入れ先出しとかならQueueを使うかな
498:デフォルトの名無しさん
18/11/09 14:44:37.04 beO0HsiNM.net
先っちょだけ抜き差しするならstackやな
499:デフォルトの名無しさん
18/11/10 09:47:43.85 sUbsN3PYp.net
質問します。
C#初心者。プログラミング初心者です。
よろしくお願いします。
csvファイルがあって中身は
a,b,c,d
e,f,g
h,i,j,k,l,m,n
のような
行によってカンマの数(1行ずつ読み込んで配列に入れた場合は要素数)が違います。
プログラグの処理としは
このcsvファイルをの内容を1行ずつ読み込んで
xmlまたはjsonファイルに変換したいのですが
どのような処理をすれば
行によって要素数が異なるこのデータ達を
変換できるでしょうか?
よろしくお願いします。
500:デフォルトの名無しさん
18/11/10 09:52:04.57 HbWc37XyM.net
Split使えば配列に変換してくれるでしょ
501:デフォルトの名無しさん
18/11/10 09:59:03.63 sUbsN3PYp.net
Splitメソッドで配列に格納するところまではできてますが、その後の要素数の異なる配列を
xmlやjsonの要素に入れる際の処理のコードが腫れ上がって困ってます。
配列の要素数のパータンに応じて
If (配列の要素数=3){…}
else If(配列の要素数=4){…}
else If(配列の要素数=5){…}
のように
配列の要素数に応じてコード量が
多くなってしまいます。
他に処理の仕方はございますか?
502:デフォルトの名無しさん
18/11/10 10:31:22.39 sUbsN3PYp.net
If(3<配列の要素>7){
オブジェクト名.xmlのタグ名1= 配列名[0];
オブジェクト名.xmlのタグ名2= 配列名[1];
オブジェクト名.xmlのタグ名3= 配列名[3];
オブジェクト名.xmlのタグ名4= 配列名[4];
オブジェクト名.xmlのタグ名5= 配列名[5];
}
のようにすると
配列の要素数とxmlのタグ数が違う場合にエラーがでてしまいます。
例えば上記のコードだと
配列の要素数が5以外の場合はエラーになります
503:デフォルトの名無しさん
18/11/10 10:46:41.57 kamloJld0.net
>>483
入力データフォーマットはわかったので
出力データフォーマットを書いて見てください
それが曖昧だからどうやったらいいかわからないんじゃない?
504:デフォルトの名無しさん
18/11/10 11:21:38.15 sUbsN3PYp.net
ルコード
namespace Sample.model
{
public class PersonModel
{
/// <summary>
/// ID
/// </summary>
[System.Xml.Serialization.XmlAttribute("id")]
public String ID { get; set; }
/// <summary>
/// 名前
/// </summary>
[System.Xml.Serialization.XmlElement("firstname")]
public String FirstName { get; set; }
/// <summary>
/// 苗字
/// </summary>
[System.Xml.Serialization.XmlElement("lastname")]
public String LastName { get; set; }
/// <summary>
/// 誕生日
/// </summary>
[System.Xml.Serialization.XmlElement("birthday")]
public String Birthday { get; set; }
}
}
505:デフォルトの名無しさん
18/11/10 11:23:23.72 sUbsN3PYp.net
ファイルを読み込み処理
.
.
string data =1行ずつ読み込みこんだデータ;
string xml[]= data.Split(,);
/シリアライズする為のPersonsインスタンスを生成
Sample.model.PersonsModel model = new Sample.model.PersonsModel();
model.Persons = new List<Sample.model.PersonModel>();
//インスタンスに値を設定
// Persons1
Sample.model.PersonModel person1 = new Sample.model.PersonModel();
If (3<配列の要素数<8){
person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
//出力先XMLのストリーム
System.IO.FileStream stream = new System.IO.FileStream(@"D:\DATA\EXPORT.XML", System.IO.FileMode.Create);
System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8);
//シリアライズ
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonsModel));
serializer.Serialize(writer, model);
writer.Flush();
writer.Close();
506:デフォルトの名無しさん
18/11/10 11:26:08.88 q+mWhUVW
507:a.net
508:デフォルトの名無しさん
18/11/10 11:27:19.41 sUbsN3PYp.net
person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
ここの処理に困っています。
この場合は読み込みだデータの配列の要素数が4以外の場合エラーになります。
エラー原因は要素が4未満の場合は
指定したxmlのタグの数に満たないためだと考えられます
509:デフォルトの名無しさん
18/11/10 11:28:55.94 sUbsN3PYp.net
間違えました
data[0]ではなく
xml[0] でした
510:デフォルトの名無しさん
18/11/10 11:33:51.32 sUbsN3PYp.net
>490
ご指摘ありがとうございます。
要素数が異なる配列を
xmlタグ要素に入れる処理の
ご指摘を頂けると幸いです。
読み込んだ1行のデータの配列の要素が異なる場合の処理はどのように書くのがスマートでしょうか?
511:デフォルトの名無しさん
18/11/10 12:23:15.91 h+MQ7FTQa.net
>>491
要素が足りない場合に、Birthdayなどをどう書き込むべきかによる
何かしらの既定値を書き込みたいなら
string GetOrDefault(string[] xml, int index, string defaultValue)
{
if (0 <= index && index < xml.Length) { return xml[index]; }
return defaultValue;
}
のような補助メソッド作って
person1.Birthday = GetOrDefault(xml, 3, "1000/01/01");
のように取得する
要素が足りない場合にはBirthdayなどを書き込まないなら
xml出力の方では、PersonModelクラスのメンバーにDefaultValue属性を付けて
その属性で指定した値を格納しておけば書き出されなくなる
JSONの方も同じように書き出さないように出来ると思う
512:デフォルトの名無しさん
18/11/10 12:35:22.80 2+OzQsKxM.net
>>493
サルなの?
仕様も決めないでどうやるもこうやるもねぇよ
じゃあ、全部key,valueでいいよ
csvに存在するすべての要素をkey,valueで出せ
keyのフォーマットはcolumn-rowな
xmlでのタグ名はdata
属性はkeyとvalue
513:デフォルトの名無しさん
18/11/10 13:04:57.13 q+mWhUVWa.net
>>493
var persons = File.ReadAllLines("file.csv")
.Select(line => { var a = line.Split(","); Array.Resize(ref a, PROP_COUNT); return a; })
.Select(a => new Person() {
ID = a[0],
Name = a[1],
...,
LastProp = a[PROP_COUNT - 1]
});
var json = JsonConvert.SerializeObject(persons);
514:デフォルトの名無しさん
18/11/10 15:54:29.53 48CyTBFD0.net
jsonって名前=値ペアの連想配列は順序が保証されないので
順序を保証したい場合は配列で囲って [{名前: 値}{名前: 値}] みたくすると思うんですが、
データ保存用途として見た場合使い難くないですかね?
シリアライズした時も処理系によって順序が保証されないから単純diff比較も使えずパースして比較する必要がありますよね
これって問題にならないんですか?
515:デフォルトの名無しさん
18/11/10 16:48:27.38 gqodC/ga0.net
名前と値で取れるんだから、順序関係ないだろ?
516:デフォルトの名無しさん
18/11/10 16:49:31.82 gqodC/ga0.net
つか、シリアライズした結果がいつでも同じだと思うのか?
517:デフォルトの名無しさん
18/11/10 17:04:14.17 hLxIIZfE0.net
>>498
テキストだからdiffしたいって言うのは割とよくある要望
518:デフォルトの名無しさん
18/11/10 18:05:23.42 48CyTBFD0.net
たとえばweb屋なら画面のチェックボックスとかの状態をjsonでデータ管理するとして
そのデータから設定仕様書とかを起こす時に困
519:るんじゃないかな なんかここだけアルゴリズム依存で時代と逆行してるような気がしてイマイチなんですよ
520:デフォルトの名無しさん
18/11/10 18:07:52.91 /C4Raf5+p.net
んなもん仕様書の書き方次第だろ。
521:デフォルトの名無しさん
18/11/10 18:26:43.69 ZJVvB/9K0.net
なんかよくわからないけど、このJSON君はお金出して誰かに作ってもらったほうがいいんじゃねえの?
522:デフォルトの名無しさん
18/11/10 18:31:49.77 jXgJ1KMYM.net
JSONがイマイチだというお前の小言にこのスレはつき合わなければならないのか?
C#に関係ないんだが
523:デフォルトの名無しさん
18/11/10 18:41:55.53 kamloJld0.net
俺もjsonはイマイチだと思う
要素があるのかないのかわからん
524:デフォルトの名無しさん
18/11/10 18:45:43.38 jXgJ1KMYM.net
文句があるならこいつに言ってこい
URLリンク(plus.google.com)
嫌ならママに聞いてもらうか穴掘って叫んでろ
525:デフォルトの名無しさん
18/11/10 18:56:12.67 Y9Dl3F80M.net
自宅の壁にでも書いてろ
526:デフォルトの名無しさん
18/11/10 19:01:40.71 /crW2tCF0.net
c#とオブジェクト指向の勉強にオススメの本ありますか?
今まで組み込みのcばっかやってきたので、こっちの世界の定石みたいなものを身に付けたいのです
527:デフォルトの名無しさん
18/11/10 19:22:15.67 q+mWhUVWa.net
>>508
1冊ならAdaptive Code C#実践開発手法
528:デフォルトの名無しさん
18/11/10 21:28:30.80 lx5S0cHm0.net
>>491
jsonいじらないと細かいことわからんけど
while とswitchつかうとか?
繰り返す回数はxml.length
i=0の場合はperson1.ID=data[0]
エラーは配列が存在しないから出てるんじゃね
529:デフォルトの名無しさん
18/11/12 20:04:46.62 q8PdpD4Q0.net
public List< string > textsplit(string strdata) {
var ls = new List<string>();
ls.Add("1"); ld.Add("2");
return ls;
}
関数内部でNewしてそれを戻しても問題ない?
530:デフォルトの名無しさん
18/11/12 20:15:33.08 fLLyDCF20.net
問題ない
531:デフォルトの名無しさん
18/11/12 20:23:24.20 NInYtJ3Hp.net
あーC#ならね。
532:デフォルトの名無しさん
18/11/12 20:29:35.59 Fg4ONeCp0.net
それって他の言語だとまずいん?
533:デフォルトの名無しさん
18/11/12 20:33:45.12 NInYtJ3Hp.net
ガベコレの無い言語だと、作った人が解放する掟に反するから、ひと悶着あるんだよなw
534:デフォルトの名無しさん
18/11/12 20:37:51.48 8vdHE86ca.net
スタックに自動変数で確保した領域のポインタを返すのは普通はバグだよね
C#はそれが起らないから問題ない
535:デフォルトの名無しさん
18/11/12 20:48:26.07 NInYtJ3Hp.net
>>516
そっちは、レジスタ渡しされるから無問題だったりする。
まあ、コンパイラによるがな。
536:デフォルトの名無しさん
18/11/12 20:50:44.04 4IQEu5KyM.net
これがアウトなら、C言語のmalloc関数等は存在そのものがアウトという理屈になるな
537:デフォルトの名無しさん
18/11/12 21:02:40.60 q8PdpD4Q0.net
戻した後で使うんだが使うのが翌日になっても大丈夫?
1日に一回だけUPする場合、そういう可能性がある。そのときにガベージコレクション
されて無くなってるってことない? 関数を抜けてるので。
538:デフォルトの名無しさん
18/11/12 21:06:30.48 8vdHE86ca.net
>>517
レジスタ渡し?
539:デフォルトの名無しさん
18/11/12 21:26:19.59 sWgkDKTV0.net
>>519
関数抜けてても戻り値受けてる変数がいきてるならガベージコレクションの対象にはならないんじゃね?
540:デフォルトの名無しさん
18/11/12 21:39:50.73 ce53GWJ3d.net
翌日だとアウトになるような仕組みなら1秒後でもアウトになる可能性あるじゃん
541:デフォルトの名無しさん
18/11/12 22:11:23.36 k/0PxRaR0.net
Listみたいな参照型は実体はヒープに確保されてスタック上にあるのはそれを指すポインタだけ
ガベージコレクションされる可能性があるのは関数を抜けた時ではなくそのオブジェクトへの参照が1つもなくなった時
親関数が戻り値を受け取る事で新たに参照が出来るので、子関数が終了しても消えない
542:デフォルトの名無しさん
18/11/12 22:28:48.44 JxfhNlMua.net
>>523
違う。それで済むならGCなどという大層な仕組みは必要なく、単なる参照カウンタで十分。
循環参照の場合は、オブジェクト参照まだ残っていてもGC対象となる必要がある。
正しくは、GCされる可能性があるのは、スタックまたはstaticフィールドから参照を辿れなくなったときだよ。
543:デフォルトの名無しさん
18/11/12 23:52:29.85 D6ILV7Jxa.net
>>516
その為のstatic。
static付いたローカル変数はスコープはローカルだけど、
寿命はグローバル変数と同じ、宣言されてからプログラムの終了までになる。
544:デフォルトの名無しさん
18/11/13 00:05:00.82 1GLtCoZ4a.net
>>525
その為、ではないと思うけどね
少なくとも普通は。
ポインタを返すためにstaticにするってそれはないっすわw
そもそもCの話をしてるわけでもないですし
545:デフォルトの名無しさん
18/11/13 00:23:31.91 lWwaeoUH0.net
そう、C#ならね
546:デフォルトの名無しさん
18/11/13 00:39:11.71 7xmY+SYc0.net
>>520
そう、アセンブラレベルで見ると、戻り値はR0レジスタとか決まってたりする。
547:デフォルトの名無しさん
18/11/13 00:44:34.29 1GLtCoZ4a.net
>>528
そういう問題じゃないんですがw
548:デフォルトの名無しさん
18/11/13 00:45:20.73 p27/Ddjo0.net
なぜARMの呼出規約みたいな話が出てくるのか
ヒープへのポインタでスタックすら関係ないし
549:デフォルトの名無しさん
18/11/13 01:19:58.69 ADQqJemu0.net
Methodを渡すのになんでFunc<string,int> fnc みたいになったの?
string Func <string> fncの方が分かりやすいと思うが、、
550:デフォルトの名無しさん
18/11/13 02:01:53.20 bZ0HXQ7Xa.net
>>526
ポインタや参照返してたらC#もCも危険性変わらんよ。
ガベコレされるまで危険なのは同じ。
と言うかポインタは普通返さない。
void関数なりメソッドで入力用のポインタ(参照)と出力用のポインタ(参照)を引数に取る。
551:デフォルトの名無しさん
18/11/13 02:06:18.61 kG9DLvmd0.net
>>531
そんな記法C#には存在しないし、入れ子の場合はどうすんのさ
552:デフォルトの名無しさん
18/11/13 02:12:38.95 1GLtCoZ4a.net
>>532
何を言ってるのかさっぱり分からんけど>>518
>>528の人もなんか勘違いしてるっぽいので論点整理
char *int_to_str(int x)
{
char buf[20];
sprintf(buf, "%d", x);
return buf;
}
これのどこがマズいか分かります?
>>511の人はこれと同類の落とし穴がC#にもあるのか心配してると思ったわけ
553:デフォルトの名無しさん
18/11/13 02:20:42.52 bZ0HXQ7Xa.net
>>534
return抜ける時にchar[20]が消えちゃうんでしょ?
んで、そう言う時にreturn抜けても消えないのがstatic char[20]
554:デフォルトの名無しさん
18/11/13 02:24:11.95 1GLtCoZ4a.net
だから、普通はそんなことしませんて...
URLリンク(detail.chiebukuro.yahoo.co.jp)
555:デフォルトの名無しさん
18/11/13 02:26:43.91 7xmY+SYc0.net
>>534
それじゃあ>511と問題が違うだろw
だから、ポインターの戻り値なんてレジスタで帰るから気にすんなって話。それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。
556:デフォルトの名無しさん
18/11/13 02:28:55.08 bZ0HXQ7Xa.net
んで、今度は呼び出元全部がchar[20]と同じに(1回目も2回目も2回目と同じ値に変化する?)なりかねないので、通常
void int_to_str(int x,char* str)
{
sprintf(str, "%d", x);
}
と言うふうに、出力用のポインタ引数用意する。
557:デフォルトの名無しさん
18/11/13 02:31:57.72 bZ0HXQ7Xa.net
>>536
言ってること同じやん( ´Д`)y━
558:・~~
559:デフォルトの名無しさん
18/11/13 02:32:00.35 1GLtCoZ4a.net
>>537
だからレジスタで返るとかそういう問題じゃないんですがw
問題が違うのは当たり前w
だから、C#にも>>534と同類の落とし穴があることを心配しているんじゃないかなと思って
>>516みたいに書いたわけ
もちろん別のことを心配してるのかもしれん。
>それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。
だから最初からそう言っていますw
560:デフォルトの名無しさん
18/11/13 02:34:25.29 1GLtCoZ4a.net
>>539
同じじゃないでしょ。
>と言うかポインタは普通返さない。
これ間違ってるから>>518
561:デフォルトの名無しさん
18/11/13 02:38:05.39 1GLtCoZ4a.net
たぶん>>537の人はポインタと左辺値の区別がついてないんじゃないのかな。
これはポインタって言葉の使い方が混乱してるからしょうがないけど
それともそもそもスタックとかポインタの意味が分かってないのか
562:デフォルトの名無しさん
18/11/13 02:38:54.17 p27/Ddjo0.net
C#のnewに相当するのはC++でもnewだし、C#でもstackallocでスタック配列は可能
しかもローカル変数のアドレスを取得し返すコードもunsafeならビルドできる
返すものが抜けるスタックだと不正なのはレジスタも呼出規約も言語も関係ない
C++でもお行儀はともかく適切にdeleteすれば済むし、C#ならGCが回収するってだけ
>>531
戻り値たるintとかどっかいってる上に奇妙な文法増えちゃうよ
563:デフォルトの名無しさん
18/11/13 02:49:42.48 bZ0HXQ7Xa.net
>>541
言い過ぎだとしても、>>538的な方が普通な気がするが。
試しに普通のポインタ返す関数を。。。とここまで書いて関数ポインタ思い出した。
でも通常かと言うと疑問。
組込関数にもあるけど、それを通常と言って良いかどうか。
それと同じ仕組みの関数作るのが通常とは思えない。
564:デフォルトの名無しさん
18/11/13 07:44:20.95 4VfxC09pd.net
ピクチャーボックスに書いた線の座標を配列にいてれおいて、右クリックの時に一つ前に書いた線を消したい時って再描画させるにはどうしたら出来ますか?
配列の最後を消して配列要素分ループして書いても書けず、前の書いた線が残りっぱなしでやり方が分かりません。
565:デフォルトの名無しさん
18/11/13 07:56:39.45 OewfmfIr0.net
>>545
再描画する前にピクチャーボックスを掃除しているか?
再描画処理が正しいか?
566:デフォルトの名無しさん
18/11/13 09:19:44.70 4VfxC09pd.net
>>546
線色変えたら同じ線上にかかれてました。
しかし、前に書いた線が消えません。
どうすれば消えますか?一回全てクリア?