◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net->画像>2枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1467142749/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1 :
デフォルトの名無しさん
2016/06/29(水) 04:39:09.19 ID:sT3gw8va
■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part88 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1437808445/
C#, C♯, C#相談室 Part89
http://peace.2ch.net/test/read.cgi/tech/1443271409/
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
2 :
デフォルトの名無しさん
2016/06/29(水) 18:23:32.48 ID:UgmC8hz1
>>1
3 :
デフォルトの名無しさん
2016/06/30(木) 22:05:57.88 ID:JGx4fkAA
>>1

こっちが先だから一度上げておこう
4 :
デフォルトの名無しさん
2016/07/02(土) 06:31:52.76 ID:OubZeepB
Task使うとたまに
var a = new A();
list.Add(a); <- NullReferenceException
とか出るんやが、これ何なん?
5 :
デフォルトの名無しさん
2016/07/02(土) 06:53:26.32 ID:VHbSiagN
俺は見たことない

お前の環境が悪いもしくはお前のコードが悪い
おま環もしくはおまコー
6 :
デフォルトの名無しさん
2016/07/02(土) 09:13:06.45 ID:K03FbX+c
>>4
listをどこかでnewし直してるんじゃない?
7 :
デフォルトの名無しさん
2016/07/02(土) 10:04:13.18 ID:h0xKmlhE
aかlistかどちらかがnullで間違いないが作った本人しか確認しようがない
デバッガで見るか検証用のコード挟めばすぐ原因わかるだろう
仮に .Netのバグでも対処するしかないんだからw
8 :
デフォルトの名無しさん
2016/07/02(土) 10:31:02.23 ID:OubZeepB
スレッドの問題だった。
listは静的なメンバで宣言時にNewしとった。
止まった時変数確認したら中身入っとるし、なんやこれと思ってたが
ググったら別スレからアクセスされるとたまに出るってさ。
9 :
デフォルトの名無しさん
2016/07/02(土) 10:33:03.36 ID:076trUWv
var a = new A();
おま環以前にこれで静的メンバを表したつもりとか池沼すぎるわ
10 :
デフォルトの名無しさん
2016/07/02(土) 12:13:19.40 ID:h0xKmlhE
>>9
お前は何を言っているんだw
11 :
デフォルトの名無しさん
2016/07/02(土) 13:59:47.20 ID:ntDBmTYJ
12 :
デフォルトの名無しさん
2016/07/02(土) 15:22:19.85 ID:vZ4Zd/Cc
ファーw
13 :
デフォルトの名無しさん
2016/07/06(水) 22:53:40.68 ID:IPuEGOod
質問失礼します。

foreach(string key in tbl.Keys)
{
なにがしかの処理

if(とある条件) {
tbl.Remove(key);
}
}
(tblはHashtableです)

上記のコードはエラーになります。
ループ命令(for , foreach , while)で回しつつテーブルの要素をRemoveしていきたいのですが、どうしたら良いでしょうか?
tbl.CopyToで一旦Arrayに確保してループ命令で回す事で可能ではありますが、CopyToが省メモリやCPU負荷対策の観点からあまりよろしくないので、
別のやり方で行えるのであればやり方を教えていただきたいです。
分かる方、よろしくお願いします。
14 :
デフォルトの名無しさん
2016/07/06(水) 23:01:12.41 ID:3aTr7TOP
>>13
foreachで消したらダメなんだと思う
forかwhileでも普通に昇順(i++)に消すと格納位置がずれて違う場所がRemoveされていく
forかwhileで最後から降順(i--)でやると確実で安全。
もっといい方法があると思うけど
15 :
デフォルトの名無しさん
2016/07/06(水) 23:12:33.81 ID:3aTr7TOP
連投スマン。最後のは「多分もっといい方法があると思うけど、わからないのでそれは他の人に任せるw」
一応昇順でまわすときはRemoveしたときはi++しなければいいんだけどスマートじゃないんだよなあ
16 :
デフォルトの名無しさん
2016/07/06(水) 23:47:15.55 ID:S9qDm7+H
コンテナの巡回中に、要素を削除したら、誤動作する

ループ {
if(条件){要素削除}
}

普通に外側のループに、コンテナを使わなければいいだけ
17 :
デフォルトの名無しさん
2016/07/06(水) 23:49:28.30 ID:iKP3ua4N
for 文の降順処理がいいってジッちゃが言ってた。ような気がする。
18 :
デフォルトの名無しさん
2016/07/07(木) 00:03:26.11 ID:Cqn+hsLw
降順といっても、Hashtableにindexあるのかな?
(…しかしなぜHashtable… Dictionaryではダメなのかな?)

・削除対象のkeyを集めたListを作って、そのListをループしてtblの該当要素を削除
(2回ループを回すことになるけど、List作りをLINQでやれば、まぁ、すっきりはする)
・削除しない要素だけ集めた新しいHashtableを作る
…のどっちかがいいような…
19 :
デフォルトの名無しさん
2016/07/07(木) 00:20:47.19 ID:DrRAacIx
>>18
別の配列作って処理したくないって書いてあるから下になるな
抜き出した物も作りたくないといわれたらHashtableはindexが参照できないんだから無理って結論に
20 :
デフォルトの名無しさん
2016/07/07(木) 00:35:33.67 ID:Cqn+hsLw
削除対象が少なければ、上のListを作る方法の方がメモリの無駄は少なくすむけどね…
逆に削除対象が多いなら下の方がいいんだと思う
21 :
デフォルトの名無しさん
2016/07/07(木) 00:35:47.86 ID:Ry0ooGfS
Hashは、O(1) 定時間の計算か、O(log) 木だろ

ループなんかしない
22 :
デフォルトの名無しさん
2016/07/07(木) 01:08:17.44 ID:LRi+CZUT
Linqでやるのが正解でしょ
23 :
デフォルトの名無しさん
2016/07/07(木) 01:50:14.86 ID:G6Z9/BO/
最近オブジェクト指向エクササイズというものを知ったんだけど
1つのクラスにインスタンス変数2つ、getter、setterは使わない
というのはEntityFrameworkを使ううえで無理が出るし
1行につき1ドットまでってのはLinqで無理が出ると思うんだけど

この辺は単純に例外と思っておいていい?
それとも何か推奨される対処法があったりする?
24 :
デフォルトの名無しさん
2016/07/07(木) 02:57:33.14 ID:9h7rnjZ8
>>13
ご要望には沿えないけど、こう書いちゃうかな。

string key in tbl.Keys.Cast<string>().ToArray()
25 :
デフォルトの名無しさん
2016/07/07(木) 09:08:15.73 ID:StSHjZGi
>>13
List<string>DeleteKeyListを用意して判定追加と要素削除の2回にわけるかな
その方がデバッグしやすそうだ
26 :
デフォルトの名無しさん
2016/07/07(木) 14:36:10.59 ID:cR5h4Dc8
画像ビューアのファイル選択機能として
エクスプローラ風のツリービューとリストビューを付けたいのです
http://www.ipentec.com/document/document.aspx?page=csharp-shell-namespace-create-explorer-tree-view-control-and-linked-list-view
このページを参考に作成したのですがvisual studioやcodepackを利用してそのまま引っ張って来るようなものはありますか?
また、ファイルの移動方法を自作アプリでやらずにwindowsの標準のコマンドプロンプト動作に投げるにはどうすれば良いでしょうか
27 :
デフォルトの名無しさん
2016/07/07(木) 14:52:24.48 ID:/YvaTbjD
>>26
下はWINAPIになるんじゃね
Dragイベント作ってcopyかmoveでやった方が楽な予感
28 :
デフォルトの名無しさん
2016/07/07(木) 15:06:46.03 ID:StSHjZGi
XPライクなUIを作りたいという意味だよね
エクスプローラー風と言われてもリストビューに変わってから10年経ってるし
29 :
デフォルトの名無しさん
2016/07/07(木) 15:25:19.93 ID:cR5h4Dc8
vixという画像ビューアがあるのですが、まずソコを目指して作りたいのです
30 :
13
2016/07/08(金) 10:47:54.12 ID:qHLHYGvL
レスありがとうございました!
削除リストを作成して、後で消すようにしました。
また、HashtableもDictionaryにするようにしました。
31 :
デフォルトの名無しさん
2016/07/10(日) 00:47:56.09 ID:IeFM40zW
GCHandleってAllocした後もインスタンスをどこかに取っておかないと勝手にFreeされて消えます?

C++とP/Invokeで相互に呼び出すコードの何処かで
FatalExecutionExceptionが起きて困ってたんですが
GCHandleをリストの中に置いておくと例外が発生しなくなったように見えます
32 :
デフォルトの名無しさん
2016/07/10(日) 01:07:27.92 ID:rCgj8vMa
Freeされない限りオブジェクト自体が削除されるような仕様はないと思うぞ

Normalだとアドレスが差し変わる可能性はあるから
Pinnedにせずにアンマネージドの関数ポインタにデリゲート渡したりしてると危ないけど
33 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 08:50:31.57 ID:ks2mzQ2K
メソッド内でPinnedしているのはメソッド抜けたらFreeされるんじゃないかって思ったことはあるな
確認の仕方がわからないから必ずIsAllocatedで見てFreeしているがw
外でAllocしていてもし勝手にFreeされるのなら困るw
34 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 10:56:30.30 ID:IeFM40zW
GCHandle自体もGCの対象になるのなら参照を保持するためにどっかに置いておかないといけないのでは?と思いました

渡してるのはBlittableなオブジェクトではなく普通のC#のオブジェクトなので
Pinは出来ないと思います

MSDNのGCHandleの使用例だと一関数分使っただけでFreeで解放してました
この例だとスコープ抜けるまではGCHandleが有効だから問題無いのでしょうか

私のプログラムはいろいろ事情があってアプリケーション終了まで保持する必要があります

https://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.gchandle.tointptr(v=vs.110).aspx

GCHandle.ToIntPtrはオブジェクトの内部表現を返すとありますが
GCHandleそれ自体も普通にGCの対象になるのなら
GCHandleが回収された時にIntPtrの指す内容も無効になるのでは?

FatalExecutionEngineErrorが起こるとどうデバッグして良いやらわからないので
もう見たくないです・・・
35 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 12:09:09.40 ID:N/CI4kdC
>>34
GCHandle自体は構造体でメンバもIntPtrだけなのでGCは関知しないはずです
まずは設計がおかしくないか具体的なコードとエラーコードを書くことからかな…
36 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 12:43:38.65 ID:IeFM40zW
>>35
ありがとうございます
直ったような気がしたのは気のせいか・・・

別の問題っぽいのでちゃんと整理してから書きます
37 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 13:14:24.60 ID:u4LDxQcE
そのIntPtrをネイティブの中で使ってないよね?

Normalで作成したGCHandleのToIntPtrはネイティブコードの中で有効なポインタとして使えないはず
コールバックの中でGCHande.FromIntPtrとかやるなら可能

ネイティブ中で使うにはPinnedにしないとダメ
38 :
名無しさん@そうだ選挙に行こう! Go to vote!
2016/07/10(日) 19:53:46.55 ID:IeFM40zW
>>37
解決しました

マネージドのバイト列をC++に渡すコードで1箇所間違ってポインタの固定を解除している場所がありました
使い終わってからポインタの固定を解除するようにしたらAccessViolationやらFatalExecutionEngineErrorは起きなくなりました

ヒープが破壊されると毎回異なる場所で例外が発生するので
発見に少々手間取りました
39 :
デフォルトの名無しさん
2016/07/11(月) 15:22:47.57 ID:7hd/2RYR
VC# を対象としてグーグルで検索したいんですが
みんなはどんな単語で検索してます?

ステータスバーつけたいなーと思って
VC# ステータスバー
で検索してもVC#の話は全然引っ掛からないし
もうおうちにかえりたい
40 :
デフォルトの名無しさん
2016/07/11(月) 15:43:32.75 ID:sXHA9YNX
C# ~~の方が引っ掛かると思うぞ
41 :
デフォルトの名無しさん
2016/07/11(月) 15:57:20.24 ID:/bG0/Vab
Visual C#ならまだしもVC#だと無理だろw
そもそもここのスレタイ見て気づけとw
42 :
デフォルトの名無しさん
2016/07/11(月) 16:09:48.40 ID:dXiH2hED
言語の話なら、C#
IDEの話なら、Visual Studio
で検索するなぁ。
Visual C#って単語で検索したこと無い。
43 :
デフォルトの名無しさん
2016/07/11(月) 16:10:29.12 ID:7hd/2RYR
>>40-41
ありがとう・・・ あたたかい・・・これがインターネットのぬくもりか
44 :
デフォルトの名無しさん
2016/07/11(月) 17:21:12.19 ID:mNZL1sAZ
昔は # が検索できなかったから C# の検索は大変だったなw
45 :
デフォルトの名無しさん
2016/07/11(月) 18:00:51.26 ID:21c/Fb1J
実行形式のアセンブリ(exe)なんだけど、他のアセンブリから参照されて
クラスライブラリ的にも利用されるアセンブリAがあるとします。

Aのコードの中で、自分が実行ファイルとして起動されたのか
他のアセンブリから参照されているのか判定する方法ってあります?
46 :
デフォルトの名無しさん
2016/07/11(月) 18:05:40.12 ID:9RtbpjtG
>>45
exeのエントリポイントで判断
47 :
デフォルトの名無しさん
2016/07/11(月) 18:10:00.83 ID:JPy01ADF
Assembly.GetEntryAssemblyかな
48 :
デフォルトの名無しさん
2016/07/11(月) 18:15:05.34 ID:21c/Fb1J
>>46
mainが実行されたかどうかで判定するってことですか?
泥臭いような気もするけどそれが確実ですかね...

>>47
Assembly.GetEntryAssemblyとAssembly.GetExecutingAssemblyが同じかどうかで
判定する方法は自分も考えたんですが、もうすこし格好いい(笑)方法ないですかね。

とにかくどうもです。
49 :
デフォルトの名無しさん
2016/07/11(月) 18:42:30.85 ID:aujF0DMP
>>39
CSharp
50 :
デフォルトの名無しさん
2016/07/12(火) 12:39:20.12 ID:DwgB0X0X
素人です
日時で 131112345678901234 のような 18 桁の既存データがありまして
yyyy/MM/dd HH:mm:ss.fff に変換して表示したり
任意の日時からこの形式に変換して検索とかしたいのですが
1600年と9時間ずれてまして、、、これと多分同じだと思います
http://stackoverflow.com/questions/18467157/converting-systemtime-native-c-to-datetime-c

オフセットすればよいのでしょうがダイレクトに変換する方法があれば教えてください
51 :
デフォルトの名無しさん
2016/07/12(火) 12:48:51.77 ID:dfUVeTds
1600年w
52 :
デフォルトの名無しさん
2016/07/12(火) 12:50:24.25 ID:sNZqT3ZR
>>50
試してないけど↓は使えない?

DateTime.FromFileTime メソッド (Int64) (System)
https://msdn.microsoft.com/ja-jp/library/system.datetime.fromfiletime(v=vs.110).aspx
53 :
デフォルトの名無しさん
2016/07/12(火) 13:12:08.29 ID:tZSPgDcN
どの日でも 1600年と9時間のズレなら、 その数字から
ズレ分の数字を足したり引いたりするだけでいいんじゃねーの
54 :
50
2016/07/12(火) 13:13:59.61 ID:DwgB0X0X
すみません自己解決しました
FromFileTime
ToFileTime
というので出来そうです

>>52
はい、その通りです
55 :
デフォルトの名無しさん
2016/07/12(火) 13:14:11.68 ID:r71+yGRx
とりあえず変換関数にまとめてオフセットしとけばいいじゃないの
その値の出どころを特定できれば逆変換の関数も用意されてると思うけど
56 :
デフォルトの名無しさん
2016/07/12(火) 21:41:05.53 ID:5gnI1m0l
どう見ても 9 時間は時差じゃね?
57 :
デフォルトの名無しさん
2016/07/14(木) 09:16:24.08 ID:C+m8YTLM
roslyn for scriptingのcsxで、
ランタイムにコンパイルしたとき、コンパイルエラーなどの情報の取り方がわからないのですがどこかにドキュメントか情報ありますか?
58 :
デフォルトの名無しさん
2016/07/15(金) 11:52:40.40 ID:hUkr60wB
CやC++はわかってるけど、C#もWindowsGUIも初めての人
が対象のお勧め本はありますか?
59 :
デフォルトの名無しさん
2016/07/15(金) 18:13:53.98 ID:ZmDm8hzp
>>58
C++でwinアプリを作れるならC#はかなり簡単らしいから本とかなくてもすぐ出来る用になると思うよ
「C# WPF」でぐぐるかやふればいい
60 :
57
2016/07/19(火) 17:20:00.19 ID:v3yTzoHI
コンパイルエラーは例外で投げられてました
なかなかデバッグが捗らないけど
とりあえずこれで頑張ります
ツールでも作るか
61 :
デフォルトの名無しさん
2016/07/25(月) 18:34:49.84 ID:TFIdnWtI
>>45
そんなのが分かったとして何に使うとよ
62 :
デフォルトの名無しさん
2016/07/25(月) 18:36:17.01 ID:txLZaHuP
そもそもexeをライブラリとして使えた?
63 :
デフォルトの名無しさん
2016/07/25(月) 18:43:48.98 ID:TBSuk6cv
>>62
DLLと同様に参照することはできる
64 :
デフォルトの名無しさん
2016/07/25(月) 19:14:23.85 ID:txLZaHuP
>>63
つまりエントリポイントがあればexeにもdllにもなれる、なければdllのみって事か
65 :
デフォルトの名無しさん
2016/07/25(月) 19:20:39.43 ID:TFIdnWtI
>>63
objフォルダとbinフォルダに同じdllやexeが入っているがどっちのフォルダを参照してもいい?
66 :
デフォルトの名無しさん
2016/07/25(月) 19:35:04.16 ID:yBIpEw9W
>>65
exeはライブラリとして使ったことないけどDLLはビルド時に参照位置から必要な場所にコピーされるだろ
67 :
デフォルトの名無しさん
2016/07/26(火) 17:32:31.16 ID:7lk5fbdf
>>45
getmodulename
68 :
デフォルトの名無しさん
2016/08/01(月) 15:50:07.60 ID:a4noEYcd
12.3456789 度っていうdegの出力を12.34にするにはどの関数を使えばできますか?

出力はdoubleでも構いません
69 :
デフォルトの名無しさん
2016/08/01(月) 15:52:18.56 ID:NbFJgIpb
100倍して小数点以下切って100分の1
70 :
デフォルトの名無しさん
2016/08/01(月) 22:18:47.79 ID:p/i6dojq
>>69
有効数字を切る関数ってないんですね
できました、ありがとうございました
71 :
デフォルトの名無しさん
2016/08/02(火) 21:09:59.79 ID:bZmJ9j82
##.00のフォーマットじゃだめなのん?
72 :
デフォルトの名無しさん
2016/08/02(火) 21:12:38.19 ID:l2W1ufxp
フォーマットって四捨五入じゃなかった?
てか一度文字列化してまた数値に戻すとか無駄ありすぎでしょ
73 :
デフォルトの名無しさん
2016/08/02(火) 21:31:28.58 ID:1biageaY
>>72
四捨五入されるのか?
https://msdn.microsoft.com/ja-jp/library/0c899ak8%28v=vs.110%29.aspx
表示に使うか計算を続けるかで変わるが
個人的に表示なら.ToString("F2")とかを良く使っているな
http://dobon.net/vb/dotnet/string/inttostring.html
数値として使い続けるのなら>>69のやり方一択だが
74 :
デフォルトの名無しさん
2016/08/02(火) 21:40:43.95 ID:fbhAMiPd
こういうのってMath.Truncateで標準実装して欲しいよな
75 :
デフォルトの名無しさん
2016/08/02(火) 21:49:13.47 ID:l2W1ufxp
>>73
両ページの例見りゃ分かるけど四捨五入してるじゃん
それと今回の質問は切り捨てだからそれじゃ要件満たさない
76 :
デフォルトの名無しさん
2016/08/02(火) 22:08:08.02 ID:kMeLb5Qs
丸めなら、double Round( double value, int digits, MidpointRounding mode )でmodeをAwayFromZeroにすれば行けるな。
77 :
デフォルトの名無しさん
2016/08/02(火) 22:09:05.46 ID:kMeLb5Qs
丸め→四捨五入
78 :
デフォルトの名無しさん
2016/08/02(火) 22:21:50.97 ID:tn1deP8x
>>75
今回の例だと、切り捨てたいのか銀行丸めで良いのかわからんのだが
79 :
デフォルトの名無しさん
2016/08/02(火) 22:38:02.66 ID:HL5T2dK4
>>73
2ケタなら問題ないだろうけど、もっと下のケタで切り捨てる時に
そのやり方で誤差が出ないか(意図と違って切り上げになったりしないか)ちょっと疑問かも。
80 :
デフォルトの名無しさん
2016/08/02(火) 22:46:11.79 ID:HL5T2dK4
かといってどうすりゃいいのかよく分からんな。
static double Truncate(double x, int decimals)
{
  if (x == 0) return 0;
  var round = Math.Round(x, decimals, MidpointRounding.AwayFromZero);
  if (round / x <= 1) return round;
  var digit = Math.Sign(x) * Math.Pow(10, 1 - decimals);
  return Math.Round(round - digit, decimals);
}

これじゃ何か無駄っぽいし
81 :
デフォルトの名無しさん
2016/08/03(水) 08:09:04.52 ID:izDrDrnm
>>74
切り捨てや切り上げは丸めと違って誤差が影響した場合のインパクトが大きいから実装したくないんだろ
「0.0999999999999999」の切り捨ての結果は大抵のプログラマは0.1を期待してるだろうけど、普通に実装したら0.0になるわな
82 :
デフォルトの名無しさん
2016/08/03(水) 08:20:28.03 ID:rSz0AB29
実装されてないのは桁数を指定した切り下げ、切り上げだよ
桁数指定できないのはあるだろ
83 :
デフォルトの名無しさん
2016/08/03(水) 08:38:06.19 ID:nNYUFf9P
> 「0.0999999999999999」の切り捨ての結果は大抵のプログラマは0.1を期待してるだろうけど、

いや、それは無い
84 :
デフォルトの名無しさん
2016/08/03(水) 11:13:35.07 ID:8916Nt3B
切り捨て?
85 :
デフォルトの名無しさん
2016/08/03(水) 11:16:43.05 ID:ZXeq6keH
丸めが気になる数字にdouble使うのはどうかしているだろ
decimalは何のためにあるのかね
86 :
デフォルトの名無しさん
2016/08/03(水) 11:22:03.76 ID:vCrtu5C1
decimalって関係あるのか?
動的型付けのキーワードなのに
87 :
デフォルトの名無しさん
2016/08/03(水) 11:35:20.08 ID:wuBisWbe
>>85
その発想がおかしいw
問題意識が逆立ちしてるなw
88 :
デフォルトの名無しさん
2016/08/03(水) 12:41:58.26 ID:jT3/wbav
>>86
もしかして:dynamic

decimalはこっち
https://msdn.microsoft.com/ja-jp/library/364x0z75.aspx
>>decimal キーワードは、128 ビットのデータ型を示します。
>>decimal 型は、浮動小数点型よりも有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています。
89 :
デフォルトの名無しさん
2016/08/03(水) 12:48:18.71 ID:vCrtu5C1
>>88
あっそっちか
dから始まるクソ長いキーワードとして覚えていたから勘違いした
90 :
デフォルトの名無しさん
2016/08/03(水) 17:46:25.42 ID:qqYjumI6
>>85
doubleならそれほどでもないと思うが
singleならともかく
そもそも特定の桁から下切って使い続けるってめったにないだろうし
誤差許容範囲を作るのにやったことはあるな
91 :
デフォルトの名無しさん
2016/08/03(水) 17:52:51.31 ID:vCrtu5C1
NLuaからC#のジェネリック型を使うにはどうすればいいでしょうか?
List<T>を使いたいです
92 :
デフォルトの名無しさん
2016/08/03(水) 18:26:06.69 ID:oiDTcOGH
NLuaの作者に聞いたら?
93 :
デフォルトの名無しさん
2016/08/03(水) 18:29:01.37 ID:vCrtu5C1
>>92
国産じゃないので無理です
94 :
デフォルトの名無しさん
2016/08/03(水) 18:32:02.06 ID:oiDTcOGH
C#も国産じゃないからこのスレで質問するな
95 :
デフォルトの名無しさん
2016/08/03(水) 18:36:54.29 ID:vCrtu5C1
>>94
国産じゃないから作者に質問できないって言ってるんですが
96 :
デフォルトの名無しさん
2016/08/03(水) 18:41:13.99 ID:rSz0AB29
wwww
そんなくだらないことで作者の手を煩わせるなよ
その手はここで聞くよりstackoverflowの方が早くて確実だと思うぞ
97 :
デフォルトの名無しさん
2016/08/03(水) 19:20:36.10 ID:OMwBzZOo
まあ安っぽい煽りにのって見当はずれなレスつけるくらいなら2chやらない方がいいな
98 :
デフォルトの名無しさん
2016/08/03(水) 21:01:35.46 ID:MkOQGcCX
decimal と dynamic の区別もつかない子なんだから
みんな優しくスルーしてあげようよ
99 :
デフォルトの名無しさん
2016/08/03(水) 21:15:10.43 ID:LSSVX5ne
>>98
普通の長さの単語なのにねぇ。
100 :
デフォルトの名無しさん
2016/08/03(水) 21:30:26.93 ID:o77xN4AH
decimal
default
delegate
do
double
descending
dynamic
101 :
デフォルトの名無しさん
2016/08/03(水) 21:34:28.09 ID:vCrtu5C1
default
delegate
do
double
はよく使うから覚えてるけどdecimal、descending、dynamicは使ったことないから許して
102 :
デフォルトの名無しさん
2016/08/03(水) 21:35:21.21 ID:vCrtu5C1
descendingってLINQのキーワードか
103 :
デフォルトの名無しさん
2016/08/03(水) 21:43:15.83 ID:R02UCwO4
85だが、dynamicくんは良いとして、87の人がキレた理由がさっぱり分からん
本人でも他の人でも良いけど解説してもらえないでしょうか?
104 :
デフォルトの名無しさん
2016/08/03(水) 21:50:10.97 ID:wuBisWbe
>>103
キレてるように見えないとおもうけどw
特に理由がないならdecimalのような高コストな型の使用は避けるのは当たり前だw

浮動小数の演算は誤差を生む可能性があるが、それは必用な精度を確保する手段がない
ことを意味してない。
105 :
デフォルトの名無しさん
2016/08/03(水) 21:50:37.36 ID:DDCmgbTU
計算するときに丸め気にしないことなんてないから、doubleの必要性がなくなる
106 :
デフォルトの名無しさん
2016/08/03(水) 22:49:52.73 ID:R02UCwO4
>>104
丸めが問題になる金融系だとdecimal使うのは常識だろ
decimalのコストが気になるほど速度にシビアでdobleの丸め誤差が気になる場面はめったにないな
金融の大規模な計算はDBにやらせるのが筋だし
107 :
デフォルトの名無しさん
2016/08/03(水) 23:06:36.38 ID:wuBisWbe
だから誰も金融系の話なんかしてないでしょ。
何をいってんの。

「丸めが気になる数字にdouble使うのはどうかしている」なんて寝言を言ってる奴がいるから
そんなことはねえよ、そういう話だよ。
108 :
デフォルトの名無しさん
2016/08/03(水) 23:13:17.50 ID:R02UCwO4
>>107
金融系除いて、decimal使えないほど速度にシビアで丸め誤差が気になる場面って一体何時起こりえるの?
109 :
デフォルトの名無しさん
2016/08/03(水) 23:20:57.08 ID:+uSGRXQT
機械学習とかイメージングは演算誤差が大敵
かつ速度も要求される
110 :
デフォルトの名無しさん
2016/08/03(水) 23:25:25.51 ID:+uSGRXQT
かといって高精度整数を扱うのにはコスト的に無理があった彼らは
べらぼうにサンプルを増やして誤差を均一化するか, 補完法を改良することでお茶を濁した
111 :
デフォルトの名無しさん
2016/08/03(水) 23:37:11.41 ID:R02UCwO4
>>110
後、もう一つ大事な条件書き忘れていた
「C#で」
112 :
デフォルトの名無しさん
2016/08/03(水) 23:42:43.18 ID:fJKhNvbj
>>109
「誤差」という言葉でひとくくりにしすぎ。
そういう一般的な数値処理は誤差が許容範囲以下であればいいんであって、丸め誤差の問題とは
やや性質が違う。そもそも処理の途中でいちいち丸めないし。
113 :
デフォルトの名無しさん
2016/08/04(木) 00:05:21.11 ID:Vi80rqnk
>>108
何を言ってるのか意味がわからないけど、繰り返しになるが
必用もないのに高コストなdecimalを使う理由はないし、そんなプログラマもいません。
理屈を分かってないダメグラマは別にしてね。
114 :
デフォルトの名無しさん
2016/08/04(木) 00:09:13.58 ID:5NqeNpQm
予想通り言いがかりでしたw
115 :
デフォルトの名無しさん
2016/08/04(木) 00:09:46.86 ID:cADM294i
たとえ遅くても演算誤差でバグが発生しない方を俺は使うね
116 :
デフォルトの名無しさん
2016/08/04(木) 00:15:15.90 ID:oWVthcOw
decimalとdoubleでそんなにコスト違うのかね

誤差とコストでどっちとるって話だが
まあそのコスト差すら気にするコストにシビアな環境なら気を付ければいいさ
そこまでシビアな環境でC#を使うこと自体の意義を問い詰めたいけどな
通常は多少のコストで誤差がなくなるなら、そっち選ぶと思うけど
117 :
デフォルトの名無しさん
2016/08/04(木) 00:17:30.28 ID:5NqeNpQm
>>113
>必用もないのに高コストなdecimalを使う理由はないし
だから具体的にdoubleで問題が出る(=丸め誤差が問題になる)C#のジョブを書いてくれよ
想定なしなら言いがかりだよね
118 :
デフォルトの名無しさん
2016/08/04(木) 00:20:22.77 ID:Vi80rqnk
当たり前だけどdecimal使ったって誤差を無くせるわけじゃないよw
doubleみたいに基数2の浮動小数であることに起因する誤差を無くせるだけ。
無理数が有限の情報量で表現できるわけないでしょw
119 :
デフォルトの名無しさん
2016/08/04(木) 00:23:01.22 ID:Vi80rqnk
>>117
だから何を言ってるの?意味が分からん。

俺はdoubleにはその手の演算誤差があっても必用な精度を確保する手段はあるから
無暗にdecimalなんか使わずにdoubleを使うのが普通だと言ってるんだけど。

何が「だから」だよ。
120 :
デフォルトの名無しさん
2016/08/04(木) 00:24:34.98 ID:5NqeNpQm
最初のレスから「丸め」と書いてあるのに今更何言ってるんだかw
121 :
デフォルトの名無しさん
2016/08/04(木) 00:27:02.95 ID:Vi80rqnk
>>120
その「丸め」って言葉を恐らく君は誤用してるんだけどねw
122 :
デフォルトの名無しさん
2016/08/04(木) 00:27:22.12 ID:oWVthcOw
0.1が正確に表現できない環境が普通なやつとは話が合わんな
123 :
デフォルトの名無しさん
2016/08/04(木) 00:27:46.10 ID:5NqeNpQm
>>119
最初から「丸めが気になる数字にdouble使うのはどうかしているだろ」と言っているのに日本語判らないのかな?
気にならなければdouble使えばいいだけだろ
124 :
デフォルトの名無しさん
2016/08/04(木) 00:31:49.11 ID:Vi80rqnk
>>123
じゃあ聞くけど、そもそも「丸めが気になる数字」ってどういう意味?
言葉通り受け取ると全然理解不能なんだけど
125 :
デフォルトの名無しさん
2016/08/04(木) 00:33:41.63 ID:5NqeNpQm
>>121
浮動小数点は2進数表現だが、実際に使われている10進数を完全に表記できないから
誤差が生じるってこと以外の丸め誤差を書いてくれ

俺は何と勘違いしているんだ?
126 :
デフォルトの名無しさん
2016/08/04(木) 00:34:26.87 ID:oWVthcOw
Vi80rqnkの主張は普通はdoubleで良いだろって主張なのは理解できるが
5NqeNpQmの主張は俺にもいまいちよくわからん
127 :
デフォルトの名無しさん
2016/08/04(木) 00:34:43.49 ID:bt/hw+Ix
相談内容置いてきぼりの議論は、
このスレ使ってあげて。

ふらっと C#,C♯,C#(議論用)
http://echo.2ch.net/test/read.cgi/tech/1469538912/
128 :
デフォルトの名無しさん
2016/08/04(木) 00:37:31.68 ID:Vi80rqnk
>>125
何言ってるんだか意味がわかりません。
誰と戦ってるの?w
129 :
デフォルトの名無しさん
2016/08/04(木) 00:41:16.26 ID:5NqeNpQm
>>128
細かいことが気になるならdecimalを使って、気にならないならdouble使えばいいってことだよ
decimalを目の敵にしているのか理由が分からん

そもそもアンタはdoubleで問題になる具体例を出せないじゃないか
130 :
デフォルトの名無しさん
2016/08/04(木) 00:46:58.32 ID:Vi80rqnk
何でdoubleで問題ないからdouble使えって言ってる人間に
doubleで問題になる具体例を求めるんだよw

意味わかんないよw
131 :
デフォルトの名無しさん
2016/08/04(木) 00:51:13.09 ID:5NqeNpQm
>>130
丸めが気になるならdouble駄目じゃんw
そういう時はdecimal使えよ
132 :
デフォルトの名無しさん
2016/08/04(木) 01:04:42.73 ID:Vi80rqnk
だから「丸めが気になる」ってどういう意味?w
133 :
デフォルトの名無しさん
2016/08/04(木) 01:07:56.03 ID:5NqeNpQm
>>132
>その発想がおかしいw
ってレスしておきながらいまさら・・・
134 :
デフォルトの名無しさん
2016/08/04(木) 01:09:13.13 ID:Vi80rqnk
あのねえ、こんなの学部のプログラミングの最初の講義で習うような話だと思うけど、
https://ideone.com/8wrQC7

何も考えずにdoubleを使うと上のgrossの結果にあるように演算結果に誤差が
出ちゃうことがあるけど、ちゃんと誤差の性質を理解していれば、何度も言ってるように
必用な精度を得ることが出来るんですよ。
135 :
デフォルトの名無しさん
2016/08/04(木) 01:57:41.32 ID:kCsBXGZ7
>>134
これって最後に Math.Round してるのは答えが 100000 になるって知ってるから?
それとも必要な精度の1つ下の位を Math.Round しておけばどんな計算でもOKなの?
136 :
デフォルトの名無しさん
2016/08/04(木) 02:15:13.20 ID:Vi80rqnk
>>135
有効数字が小数的1桁の数字(delta)を何回加減算しても
結果の有効数字は小数的1桁

だから累積誤差が±0.05を超えない限り、小数点1桁で丸めた値は必ず
数学的に正しい値になる。

もちろん演算結果の桁数(指数表記した時の仮数部の桁数ね)があまりに大きい
(doubleの場合確か16桁ぐらいだと思ったけど)と正しい結果にはならないけどね。
137 :
デフォルトの名無しさん
2016/08/04(木) 07:07:58.69 ID:1Q45SAfi
>>136
問題はRoundの結果に対する誤差の影響についての方だろ?
結果が100000.05付近になるとき、100000.1になるか100000.0になるかは
累積の丸め誤差に依存するよね
MSDNでも実際にそれが問題になっている例が示されてる
https://msdn.microsoft.com/ja-jp/library/f5898377(v=vs.110).aspx
結局>>81が示してるようなコーナーケースがあるんだよ
138 :
デフォルトの名無しさん
2016/08/04(木) 08:22:56.73 ID:sK75NDgM
現実には結果に±が付くような問題よりも0.051を0.05として四捨五入するような問題の方がずっと多いにもかかわらず、
情報系の教育って後者の分野を軽視する傾向があるよね
学者さん達はCOBOLの悪夢で辟易してるんだろうけど、
>>134みたいなのを社会に送り続けている責任について真面目に考えるべき
139 :
デフォルトの名無しさん
2016/08/04(木) 09:30:43.38 ID:hQiyrQkt
教科書ネタは伸びるな
140 :
デフォルトの名無しさん
2016/08/04(木) 10:09:13.73 ID:/RaQ1xov
悪いけど>>81>>137-138も何を言ってるのかさっぱり分からんな
何か盛大に勘違いしてることだけはよく分かるけどw
141 :
デフォルトの名無しさん
2016/08/04(木) 10:13:24.57 ID:/RaQ1xov
まあ人づだけいっておけば、丸め処理には誤差があるぞって得意気に言ってるのかもしれないが、
それは丸め処理の誤差じゃなくて上にも何度も出てくる浮動小数の仕様に起因する誤差であって、
問題でも何でもない。

問題があるとすれば、そんな問題でもなんでもないもののせいで間違った答えを吐き出すような
コードを書いてしまう無能な、 sK75NDgMのような無能なプログラマの方だ。
142 :
デフォルトの名無しさん
2016/08/04(木) 16:48:07.32 ID:wj+CJSh1
科学技術計算的には多少の誤差あっても
いいって習ってたから
なんか駄目なのか?って思ったけど
要は使い方とプログラミングの問題よな?
143 :
デフォルトの名無しさん
2016/08/04(木) 17:00:50.42 ID:dpx64fng
>>142
というか全てに当てはまる基準なんかないんだから
用途もわからないのにこっちの方が正しいとか言う議論なんか無駄の極み
144 :
デフォルトの名無しさん
2016/08/04(木) 18:07:34.85 ID:9MgkqNZw
バタフライ効果を起こさない程度にしとけよ
145 :
デフォルトの名無しさん
2016/08/04(木) 18:17:15.13 ID:/RaQ1xov
>>143
絵に描いたような2chネラっぽいアホな意見でいいねそれw
146 :
デフォルトの名無しさん
2016/08/04(木) 18:21:20.99 ID:/RaQ1xov
>>142
多くの用途で誤差があっても許容できるというより、誤差は制御できる
(誤差の影響を受けずに必用な精度を得る方法はちゃんとある)というのが正しい理解。
147 :
デフォルトの名無しさん
2016/08/04(木) 19:09:46.69 ID:7IFnluUJ
>>146
制御したいのは誤差じゃなくて丸めの挙動な
知識を披露したいのはわかるが、話を逸らさないように
doubleの計算で結果が中間値に極めて近い値になるときの丸めの挙動が予測困難であることについて君は何も答えられてないよね
148 :
デフォルトの名無しさん
2016/08/04(木) 19:30:45.91 ID:7IFnluUJ
数値計算の誤差の考え方には二種類あるんだよ
・誤差があるのは当然だから誤差は明示的に示すか不明確な桁は表示しない
・たとえ計算上の誤差が影響した桁だろうが、ある決まった桁まで数字を出さなければならない
後者は金融系が代表的だね
そして後者の場合、誤差範囲の中でなぜその数字になったか説明するための理由が必要だ
それには、丸めの挙動を制御することが非常に重要なんだよ
149 :
デフォルトの名無しさん
2016/08/04(木) 19:45:50.27 ID:/RaQ1xov
>>147
相変わらず何を言ってるのかさっぱり分からない。

丸めの挙動に予測不能性があるとして、そんなものに結果が影響されるような
コードを書くのはただの馬鹿だ。
150 :
デフォルトの名無しさん
2016/08/04(木) 19:50:17.42 ID:/RaQ1xov
そもそもdoubleの実装の都合上、別に丸めに限らずあらゆる演算に誤差
(お馬鹿さんの表現で言えば予測不可能性)が酒れらず、
にも拘わらずそれは制御可能であってまったく問題にならないと
実例を上げて言ってるのに馬鹿じゃなかろうか。
151 :
デフォルトの名無しさん
2016/08/04(木) 19:53:02.49 ID:/RaQ1xov
お馬鹿さんに行っても分からないだろうけど、丸めの結果がどっちに転ぶか
予想できないような場面で丸めを実行するようなコードを書いてるとしたら
それはただのプログラマの頭の悪さに起因するバグだ。
152 :
デフォルトの名無しさん
2016/08/04(木) 19:58:40.44 ID:7IFnluUJ
>>151
だからそれをdecimalで解決できるケースもあると言ってるんだけど、理解できないかな?
あんたの理屈だとdouble値が10進数の中間値をとるケースなんて想定すること自体が間違っているということになるよね?
俺もそれには同意するよ
153 :
デフォルトの名無しさん
2016/08/04(木) 19:59:53.58 ID:u/EohbaA
予測不可能性なんてないからw
金計算するならdecimal使えばいいだけのこと
そのためにあるんだから
154 :
デフォルトの名無しさん
2016/08/04(木) 20:03:08.07 ID:/RaQ1xov
>>152
桁の多い演算でdecimalでしか対処できない領域があるのは最初から当たり前。
当たり前だまったく何の必要性もない型をわざわざ用意するものか。

最初から言ってるように、ありえないのは>>85のような愚かな考えだ。
155 :
デフォルトの名無しさん
2016/08/04(木) 20:12:27.08 ID:zUHRzBd8
NGでスッキリ
156 :
デフォルトの名無しさん
2016/08/04(木) 20:16:12.36 ID:jAu1xEMv
doubleだろうがdecimalだろうが性質理解して使うのならどっちでもいいだろうに
つまんない事にこだわっているのを見るとコードを書かない人なのかなって思う
それとも学校や職場でそう教えられるのかね。趣味グラマには理解できない
157 :
デフォルトの名無しさん
2016/08/04(木) 20:20:11.12 ID:u/EohbaA
物理の計算においてdoubleじゃ間に合わないケースがある極大な数×極小な数とかね
doubleまででしか使えない場合はなんとか工夫するわけだけどそれじゃ間に合わない場合がある
そういう場合のために4倍精度(128ビット)とか8倍精度(256ビット)の2進浮動小数点が使えるように
なってる環境がある

反して金計算ではよくは知らんが必要な制度はせいぜい20何桁程度だろ。
それも小数点以下は5桁もあれば十分という。。。
すべては適材適所なんだよ。
158 :
デフォルトの名無しさん
2016/08/04(木) 20:37:57.07 ID:09bMzMPy
Π使うような場合は有理数計算するけどね
159 :
デフォルトの名無しさん
2016/08/04(木) 20:40:45.33 ID:nf3Jdc8S
ゲーム作ってるけどdoubleの誤差で困った事なんか一回もないぞ
160 :
デフォルトの名無しさん
2016/08/04(木) 20:43:36.47 ID:/RaQ1xov
>>157
>極大な数×極小な数とかね
浮動小数なんだからそれはないよw
doubleで対処できないのは大きな桁の有効数字(たとえば20桁とか)が要求されるケースだけ。
161 :
デフォルトの名無しさん
2016/08/04(木) 20:50:57.73 ID:/RaQ1xov
しかしさあ、丸めの挙動の問題とかで
桁数の多い演算でもないのにdoubleでは対処できないケースがあるなら
後学のためにぜひideoneかどこかに実例で示して欲しいよ。
本当真面目に。

まあそんなのありえねえと思うけどさw
162 :
157
2016/08/04(木) 20:51:41.79 ID:u/EohbaA
あれ、間違えた
間に合わなくなるのは
☓ 極大な数×極小な数
○ 極大な数+極小な数
のケースね。
そういうのを扱わななくちゃいけない場合はここにいる人の大多数にとって普通はないだろうけど場合によっては必要となる。
ブラックホールをシミュレートしなけりゃいけない時とか。。。
163 :
デフォルトの名無しさん
2016/08/04(木) 20:58:59.60 ID:4Cs3sXx+
まだやってんのかよw
164 :
デフォルトの名無しさん
2016/08/04(木) 20:59:49.63 ID:cADM294i
ここって浮動小数スレなの?
165 :
デフォルトの名無しさん
2016/08/04(木) 21:05:50.97 ID:nf3Jdc8S
_ _ ''< _ _ _ _ _'i゛゛゛ _ _ _ _      i'''''l      T'''>    __/' _ _ _ _ _ _'l゛゛゛ _ _ _ _    _ _ _ _ _ _ _ __ _ ____ / <
_ '<  ' l _ _ _ _ _ _ _ _ _ _ i     ノ i      ノ l     `‐ _ _;ノ _ _ _ _ _ _ _ _ _ _ l  ノ _ _ _ _ _ _ < `゛____ _ ‐´
  _' /' _ _ ノ_ '  _/ _ ' _ _   l''''''''' _ ''''''''ii''''''''''''  ''''''''l    ' /゛ _ _> _ _ __` _< _ _    _ _ _ _ _ _ _ノ ノ
     i _ _ _ < _ _ _ < _i    '''''''> T''''''゛''''''''''/ l'''''''       ノ __ _ _ _ '_ _   _l    ノ _ _ _< l ノ ‐‐‐‐‐‐‐‐
'/‐‐‐ _ノ 'il''''''   '''''lノ i    _>   ゛'‐ _   /  ノ    '/‐‐‐ _ノ lT''''' _ "'''''ll ノ   i ノ  _l ノノ '/‐‐ _‐‐‐
ノ‐ _ ノノ ノ_゛┘ ゛゛゛ノ l   __` __ '/_ _'/ _` __ _ノ    `‐ _  i l ノ゛゛゛ ゛゛゛ノ i   ノ _゛゛゛゛ i ノ l  l _ l
  _l  i i _ lノ i゛゛ノ ノノ ノ  '/ _ _''i _ノ _ ''‐゛ __ _i ノ     ノ ノノ l i _'i゛´ノ ノノ ノ   _l ノ゛゛ ‐‐゛/ _i  ノ l
  _l  i i _ iノ _ _ _ _ /` i   ' < _ノ i _ノ ___ ゛ ノ _i      l  ノノ _l l _ _ _ _ /` i    ノ i     / _'l   i ノ
_ < __ _ '''''' `゛ _ _ _ `'''''' <    ノ l   ゛   __ノ i     _‐゛ _ _ '''''' `´ _ _ _ "'''''' <  '/ ノ  __ ゛ ノ   ノ ノ
_> ‐ _ ''‐ _ _ _ _ _ _ _ _ _ _     _L_ノ    ノ___ ノ    _' _‐ _ ''‐ _ _ _ _ _ _ _ _ _ _/  '‐_/   '' _ ‐    ノ _ノ
166 :
デフォルトの名無しさん
2016/08/04(木) 21:06:28.51 ID:nf3Jdc8S
  ∧∧ ミ  ドスッ
  (  ) _____
  /  つ 話題終了|
~(  /   ̄|| ̄ ̄ ̄
 ∪∪   || ε3
      ゙゙~゙~
167 :
デフォルトの名無しさん
2016/08/04(木) 21:34:01.22 ID:/AeganYA
相変わらずよくわかってないトーシロですけども
とりあえず

・二進法の都合上、小数点以下の実数は完全には
表すことが出来ない
・実数を表すのに浮動小数点数方式を
使うがあくまで擬似的な手段かつ
何処かしらで丸めるので
必ず誤差は発生する。
しかしプログラミング次第でその誤差は小さくできる。

・一切の誤差が許されないような環境、
つまり銀行などの金融関係では
decimalを使う

一般教養としてはこういう理解で
よござんすよね?
168 :
デフォルトの名無しさん
2016/08/04(木) 21:34:41.98 ID:p5IuCpCb
>>148
> ・たとえ計算上の誤差が影響した桁だろうが、ある決まった桁まで数字を出さなければならない
そんな要件見たことないけど
ましてや金融で w
169 :
デフォルトの名無しさん
2016/08/04(木) 21:41:56.25 ID:jAu1xEMv
まあ質問専用スレじゃないし気の済むまでやればw
170 :
デフォルトの名無しさん
2016/08/04(木) 21:47:00.53 ID:nf3Jdc8S
だから適材適所って言ってんだろゴラァ
どちらか片方しか使えない呪いでもあるんですかね…
両方使えるなら両方使い分ければいいだろ
速度と精度を天秤に掛ける事も出来ないんですかね
171 :
デフォルトの名無しさん
2016/08/04(木) 22:02:22.78 ID:/RaQ1xov
>>167
だからdecimal使ったって一切の誤差を無くせるわけじゃないってばw
無くせるのは基数が2の浮動小数であることに起因する誤差だけだと言ったでしょ
172 :
デフォルトの名無しさん
2016/08/04(木) 22:13:24.71 ID:esG2QQER
本当に誤差を避けたいときはすべて整数型で処理して割り切れない除算もしない
馬鹿らしいけど実際に俺はやってる
173 :
デフォルトの名無しさん
2016/08/04(木) 22:19:48.10 ID:xurP0kD8
そもそも物理の世界では有効桁ってのがあってだな
丸目誤差なんてハナから相手にしてないとか
174 :
デフォルトの名無しさん
2016/08/04(木) 22:32:15.88 ID:nf3Jdc8S
>>171
一切の誤差が嫌なら分数・n方根etc型作れよ
javaと違って演算子の定義出来るから楽だろ
175 :
デフォルトの名無しさん
2016/08/04(木) 22:35:32.01 ID:/RaQ1xov
>>174
作れよ、だってさ
命令口調の奴って例外なくアホだな。
176 :
デフォルトの名無しさん
2016/08/04(木) 22:38:49.19 ID:pbDOEnve
decimalの価値は、表記と内部の値が完全一致することだが
説明してもどうせ無駄なんだろうな
177 :
デフォルトの名無しさん
2016/08/04(木) 22:40:49.97 ID:nf3Jdc8S
>>175
作れ→命令
(~をしたいなら)作れよ→自分でやりたい事を実現するためには自分でするしかない
178 :
デフォルトの名無しさん
2016/08/04(木) 22:51:47.89 ID:1Q45SAfi
誤差が嫌なら整数型でやればいいじゃんってのを実装したのが
まさにdecimalなんだが
179 :
デフォルトの名無しさん
2016/08/04(木) 23:00:21.90 ID:u/EohbaA
decimalは10進浮動小数点だからな。普通の金計算の範囲では十分ってだけで誤差がなくなるわけじゃない
簡単な話、たとえば1/3は誤差なく表現できない
有理数型をサポートしてる体系があったり、C#でも自分で実装してもいいわけだけど
それでもpiを誤差なく表現できるわけではないし(笑)
全ては求められる精度によるんだよ
180 :
デフォルトの名無しさん
2016/08/04(木) 23:05:13.41 ID:nf3Jdc8S
PIはPIとして定義するとかでいい
数学と同じ
181 :
デフォルトの名無しさん
2016/08/04(木) 23:10:14.23 ID:nOpr2vNl
ここまでID赤いのは全部NGでおk
具体例もないから参考にもならない
182 :
デフォルトの名無しさん
2016/08/04(木) 23:12:39.70 ID:vfnh4WuI
元々は>>69を誤差なく実行出来るのを保証したいのが出発点でないの
今となってはそれすら良く分からんが
183 :
デフォルトの名無しさん
2016/08/04(木) 23:15:17.05 ID:nOpr2vNl
>>182
何が目的かわからなければ誤差をどこまで許容するかわからない
そして元の質問者は既に納得して解決済み
184 :
デフォルトの名無しさん
2016/08/04(木) 23:18:19.93 ID:uRE0pXxR
ちょっとした計算でなんとなくLispを使ってしまう俺としては、モダンな言語で
そろそろ有理数型が基本型として使えるのが当たり前になってほしいところ
185 :
デフォルトの名無しさん
2016/08/04(木) 23:31:08.16 ID:pbDOEnve
世の中には1/3円は存在しないし、πmの定規も存在しない
decimalの解像度は十分な精度を持っているということだね
186 :
デフォルトの名無しさん
2016/08/04(木) 23:36:46.06 ID:/RaQ1xov
>>185
ちょっと単細胞過ぎるよ
カネ勘定の世界でも普通に除算は使いますw
例えば按分ね
187 :
デフォルトの名無しさん
2016/08/04(木) 23:55:18.85 ID:pbDOEnve
10円を3つに分ける場合3円、、3円,4円で分けるよな
1/3円など存在しない金額は使いみちがない
188 :
デフォルトの名無しさん
2016/08/05(金) 00:08:43.40 ID:cEIuN7pH
技術的にはお互いに理解してるのに、相手が理解してないと思い込んで話してるせいでぐちゃぐちゃになってる
日本語力の低さがやばい
189 :
デフォルトの名無しさん
2016/08/05(金) 00:17:08.00 ID:QZhqwH4E
>>187
そんな単純じゃないよ。
普通の商売でも小売り以外は銭以下の単位で単価を設定するのは当たり前。
金融ならなおさらだ。

何が言いたいかって言うと、金勘定ならとにかくdecimalを使っておけば安全だ、
などということはありえないということ。
190 :
デフォルトの名無しさん
2016/08/05(金) 00:24:08.31 ID:rof2NfJh
プライドの安さも大したもんだろ
スーパー玉出よりひどい

ここまでバカやってりゃどっちか飽きるぞ普通は
普通じゃないのがコラボレーションするとこうなる
191 :
デフォルトの名無しさん
2016/08/05(金) 03:39:17.62 ID:WxI1qvCL
よく知らないんだが、doubleだと0.1を10回足しても1にならないって聞いたんだけど
doubleで問題ないって人は、0.1を10回足して結果表示するコード書いてみてほしい
必要な桁数の精度は整数部2桁、小数部2桁で4桁もあればいいから
192 :
デフォルトの名無しさん
2016/08/05(金) 06:45:29.67 ID:9GrcbVCu
>>191
https://ideone.com/GFUHjj
( ゚∀゚)アハハハ
193 :
デフォルトの名無しさん
2016/08/05(金) 06:47:06.05 ID:Kzn0CH9Z
ちょっとした計算はそろばんを使ってしまう俺としては、23桁以上の足し算は苦手だ
194 :
デフォルトの名無しさん
2016/08/05(金) 07:12:01.39 ID:U1grrEll
つ 算木
195 :
デフォルトの名無しさん
2016/08/05(金) 07:26:46.31 ID:t4YicZGs
>>189
端数はシステムでどうするか指定できる(考慮している)のが普通なんじゃね
そこまで話を膨らませたらイチャモンに思えるわ
196 :
デフォルトの名無しさん
2016/08/05(金) 09:28:38.14 ID:HSLNFCI0
>>189
会計は取引や決算の段階で全て円単位に矯正されて、総額と明細の差額は端数処理されて別勘定に振り替えられる
金融関係はdecimalで全く問題がないんだよ
197 :
デフォルトの名無しさん
2016/08/05(金) 11:34:33.31 ID:ybsuHohg
>>191
そもそもそういう目的で使うならdouble使わないですしおすし
使い分ければいいって話してるのにそれが分からないの?
お前はゲーム作るのにもクッソ遅いdecimal使う気?
単細胞死ね
198 :
デフォルトの名無しさん
2016/08/05(金) 11:38:33.06 ID:ybsuHohg
【C#】decimal VS double/float [無断転載禁止]?2ch.net
http://echo.2ch.net/test/read.cgi/tech/1470364669/

まだやるなら移動
199 :
デフォルトの名無しさん
2016/08/05(金) 11:44:50.24 ID:awNm9k8p
ウザいのは分かるが自重しろ
自分が使わないスレ立てるのは荒しと一緒だぞ
200 :
デフォルトの名無しさん
2016/08/05(金) 11:59:26.11 ID:ybsuHohg
>>199
「どちらが優秀か」みたいな議論になってきてるやん
>>191みたいなのが問題ない時もあるのに
201 :
デフォルトの名無しさん
2016/08/05(金) 12:30:21.67 ID:P4D3CPGd
>>197
「そういう目的」でもdoubleで十分なんですよ。>>134
あえてdecimalを使わなきゃならない場面なんて普通はまずない。

それから、必用もないのにdecimalを使うような人(要するに誤差の問題をよく理解してない人)が
decimalを使っても意図したような誤差を含まない演算結果が得られないコードを
書く可能性が高い。
202 :
デフォルトの名無しさん
2016/08/05(金) 12:51:24.52 ID:dWErFYHi
>>200
まず自分が移動しろ
203 :
デフォルトの名無しさん
2016/08/05(金) 12:59:22.80 ID:WxI1qvCL
>>192,201
たしかに必要な精度が4桁で良いって前提なら問題ないように見えるけど
誤差は累積しないのか?
たとえば0.1を10回たして1.0を引く処理を1000万回ぐらい繰り返しても問題ないのか?
それともその場合はあえてdecimalを使わなきゃならない場面なのか?
204 :
デフォルトの名無しさん
2016/08/05(金) 13:35:00.84 ID:P4D3CPGd
>>203
基本的な考え方は>>136に書いてあるよ。
205 :
デフォルトの名無しさん
2016/08/05(金) 13:45:52.92 ID:bSGkK4bY
日本は戦闘機を一つ一つ職人による
手作業で寸分の狂いなくつくった

一方アメリカは公差に基づいて
大量生産した

それなりに動けばいいんだよ
206 :
デフォルトの名無しさん
2016/08/05(金) 15:56:50.82 ID:WxI1qvCL
>>204
>>136は、累積誤差が必要な桁数を超えない限り問題ないって書いてあるだけだろ

聞きたいのは、ほとんどの状況でdoubleでOKだって言ってる人に
じゃあどういう状況がdouble不可なんだって事

誤差がどの程度累積するかなんて、正確に見積もれるのか?

doubleとdecimalでどんだけ速度差あるのかも良くわからん
基本、適材適所なのはその通りだけど
速度(とメモリ)に問題なければ基本decimalでOKって考え方の方が安全だと思うんだがな
207 :
デフォルトの名無しさん
2016/08/05(金) 16:12:11.71 ID:ybsuHohg
移動しろ
208 :
デフォルトの名無しさん
2016/08/05(金) 16:18:39.34 ID:YTOm0VxE
double不可は小数の離散値を扱う場合と情報落ちが問題になる場合だな
209 :
デフォルトの名無しさん
2016/08/05(金) 16:19:30.22 ID:P4D3CPGd
>>206
何を熱くなってるのか知らないけど、見積もれるに決まってるでしょ。
まさか誤差はランダムな値だとでも思ってるの?
馬鹿じゃないの。
210 :
デフォルトの名無しさん
2016/08/05(金) 16:27:24.03 ID:WxI1qvCL
>>209
1回の誤差は実行される式の値でわかるとしても

毎回同じ値の計算しかしないとでも?
何回実行されるかわからなくてもどれだけ累積するか見積もれると?
211 :
デフォルトの名無しさん
2016/08/05(金) 16:28:44.47 ID:1+55aK49
doubleの情報落ち対策は、例えば1E6個の値の総和を求めるなら
1E3個ごとに分けて和を求めて得た1E3個の和の和を求める、なんてことをするね
単純に数式弄るだけじゃないので結構辛い
212 :
デフォルトの名無しさん
2016/08/05(金) 16:38:02.60 ID:P4D3CPGd
>>210
一回の加減算でどの程度の誤差が発生しうるかは分かる(恐らく演算結果の
最上位桁の1の1e-15より小さい)のだから、どの程度の回数の演算まで「安全」かは
扱う数値の範囲と有効桁数から事前に計算できるでしょ。
213 :
デフォルトの名無しさん
2016/08/05(金) 16:49:27.59 ID:WxI1qvCL
>>212
安全な回数を実行回数が超えるような場合でもdoubleでOKなの?その場合はdouble不可なの?

乗除でどの程度の誤差が発生するかも事前に計算できるの?
安全な回数がわかったとして、実行回数がそれを超えるかどうかはどう見積もるの?

基本doubleでOKだって言うのは、毎回その安全な回数と予測実行回数を算出してるの?
それとも体感上とか経験上とか、あるいは何の根拠も無く安全な回数を超えないと思ってるだけなの?
214 :
デフォルトの名無しさん
2016/08/05(金) 16:55:17.30 ID:ybsuHohg
使い分けも出来ない低能どもはいい加減移動しろよキモすぎ死ね
215 :
デフォルトの名無しさん
2016/08/05(金) 17:23:54.01 ID:P4D3CPGd
>>213
少しは自分の頭で考えてよw
累積誤差が「安全」なうち必用な位置で丸めを行えば
数学的に正しい答えが得られなくまで誤差が累積することを防げるでしょ?

乗除算(特に除算)の誤差についてはdoubleに固有の問題じゃない。
216 :
デフォルトの名無しさん
2016/08/05(金) 17:25:12.91 ID:Fe92dXPj
夏真っ盛りだからな
真っ赤なのは頭の中茹であがってんだろう
設計段階で予測できそうにない誤差が出そうならdecimalでもdoubleでもなくint使っとけ
217 :
デフォルトの名無しさん
2016/08/05(金) 17:31:35.93 ID:WxI1qvCL
>>215
だからその途中で丸める必要性の有無やタイミングを正確に把握できないのに
基本doubleでOKだってのにどういう根拠があるの?って聞いてるんだが
218 :
デフォルトの名無しさん
2016/08/05(金) 18:01:19.80 ID:P4D3CPGd
>>217
正確に把握する必要なんてないの。
「安全」が確証できる間に丸めを行えば必用十分。
何を言ってるのかね。
219 :
デフォルトの名無しさん
2016/08/05(金) 18:03:05.39 ID:P4D3CPGd
っていうか、今の大学のカリキュラムってこういう話やらないの?
220 :
デフォルトの名無しさん
2016/08/05(金) 18:07:37.18 ID:ybsuHohg
俺がスレ建ててやったんだからいい加減移動して続きやれよ
221 :
デフォルトの名無しさん
2016/08/05(金) 18:09:32.64 ID:ybsuHohg
ID:WxI1qvCLはもう一度勉強しなおせ
222 :
デフォルトの名無しさん
2016/08/05(金) 18:32:40.21 ID:WxI1qvCL
正確に把握できないものの安全を確証できるのか
確かに俺には理解できんわ

つまり、基本dobleでOKってのは、安全を確証できるならdoubleでOkってことでいいのかね
どうやって安全を確証してるのかは俺にはわからんけど
223 :
デフォルトの名無しさん
2016/08/05(金) 18:43:00.59 ID:ybsuHohg
224 :
デフォルトの名無しさん
2016/08/05(金) 19:10:31.31 ID:6fbUqWOr
>>219
10進小数を2進数で表現するときの誤差の問題って学校だとあまり真面目に扱わないからね
それが重要になるような分野だと昔は10進固定小数点を持つCOBOLが使われてたからあまり問題にならなかったんだろう
そしてC系がCOBOLの領域を奪った現代になって、正しい教育を受けてない君みたいな問題児が出てきてるわけだね
225 :
デフォルトの名無しさん
2016/08/05(金) 19:46:46.35 ID:Fe92dXPj
問題児というか同じ理屈何度も書き込んでいる馬鹿にしか見えん
226 :
デフォルトの名無しさん
2016/08/05(金) 19:54:24.29 ID:OKNkohy6
ずっと気になってたんだけど、必用じゃなくて必要だよね?
227 :
デフォルトの名無しさん
2016/08/05(金) 19:57:54.35 ID:k8Mh0VZx
EventArgs e とかの 'e' って何の略でしょうか?
228 :
デフォルトの名無しさん
2016/08/05(金) 20:04:46.22 ID:ybsuHohg
>>227
イベント
229 :
デフォルトの名無しさん
2016/08/05(金) 20:06:59.74 ID:x6bLb0/N
e、e、e、気持ちe!
じゃないの(もうすぐお盆だね)
230 :
デフォルトの名無しさん
2016/08/05(金) 20:21:23.45 ID:V0c90CvV
>>224
みっともない負け惜しみだな。
231 :
デフォルトの名無しさん
2016/08/05(金) 21:09:38.75 ID:aiX4oSLp
お前らまだやってたのか
232 :
デフォルトの名無しさん
2016/08/05(金) 22:22:08.96 ID:UfFmSPxx
ここで議論している人たちはスレ違いってことに気付いていないのかな
233 :
デフォルトの名無しさん
2016/08/05(金) 22:31:14.21 ID:V0c90CvV
>>232
いつも思うけど、こういう寝言書く奴って自分は特別とでも思ってるのかね。
お前自身のやってることは何なんだ馬鹿。
234 :
デフォルトの名無しさん
2016/08/06(土) 00:13:37.40 ID:WVtyz3N8
>>228
ありがとうございます
やっぱそうなんですね
235 :
デフォルトの名無しさん
2016/08/06(土) 04:32:43.48 ID:0IB3Z6XQ
>>234
納得してるところ悪いけど違うと思うよw
型名(EventArgs)のイニシャルだと解釈するのが普通
236 :
デフォルトの名無しさん
2016/08/06(土) 07:39:21.33 ID:WVtyz3N8
>>235
ありがとうございます
237 :
デフォルトの名無しさん
2016/08/06(土) 08:38:43.76 ID:AMCUmI5q
例外処理で被るから無性に腹が立つよ
238 :
デフォルトの名無しさん
2016/08/06(土) 09:59:43.52 ID:aFqyb+q8
例外はexで統一した
239 :
デフォルトの名無しさん
2016/08/06(土) 23:44:54.17 ID:sc1eQQS3
統一したら被るんじゃない?
240 :
デフォルトの名無しさん
2016/08/07(日) 00:26:15.92 ID:9x/mUqeF
>>239
FooException ex と BarException ex を同時に使う状況ってこと?
241 :
デフォルトの名無しさん
2016/08/07(日) 00:28:08.51 ID:NgeF8SpO
ごくまれにcatchの中でtry-catchすることはあるがまあその時は柔軟に
242 :
デフォルトの名無しさん
2016/08/07(日) 00:31:45.60 ID:e9qgeSIc
かぶったらex1とかex2でok
どうせスコープは短いだろうし適当な名前で問題なし
243 :
デフォルトの名無しさん
2016/08/07(日) 00:47:22.73 ID:S/UbGMUU
>>240
いや、それはキャッチのスコープが違うから問題なかろうけど、>>241のケース
244 :
デフォルトの名無しさん
2016/08/07(日) 00:50:27.58 ID:9x/mUqeF
catchの中でtry-catch…! そういうのもあるのか……!
245 :
デフォルトの名無しさん
2016/08/07(日) 09:23:00.24 ID:mCHosifW
エラーのリカバリー処理でエラー発生リスクが有る場合かな?
色々見なおしたほうが良さそうな気もする
246 :
デフォルトの名無しさん
2016/08/07(日) 12:01:30.30 ID:9x/mUqeF
for文のi j k みたいに e f g って続いてたら笑ったのに
247 :
デフォルトの名無しさん
2016/08/08(月) 06:26:49.16 ID:4wAqez6C
>>245
普通にあるでしょそんなもん
そのへんをいい加減に作ると後片付けがうまくいかなくてフリーズする
よくあるゴミアプリが誕生する
248 :
デフォルトの名無しさん
2016/08/08(月) 19:52:54.53 ID:0f2Bh+Sl
ねぇ、いつまで 場合によるだけの話を続ける気?
人格だの人の能力を言い出しては もうプログラムの話ではない。
マ板行け
249 :
デフォルトの名無しさん
2016/08/08(月) 20:50:56.99 ID:bsQ3M/kD
>>247
やむを得ないこともあるけど、できるだけ避けるべきですね
エラー処理の中でエラーが起こるとデバッグに支障が出る場合もある
250 :
デフォルトの名無しさん
2016/08/08(月) 22:43:36.18 ID:uowaRDGP
Visual Studio2015 について質問です。

VisualStudioにて複数ソースを開くと上部に複数タブが出てきます。

で、よくわからない内に選択したソースのタブが勝手に一番左に来るようになりました。

これが非常に面倒くさくて、選択したソースが一番左に来ないようにしたいのですが
どなたか解決方法ご存知ないでしょうか?
251 :
デフォルトの名無しさん
2016/08/09(火) 00:07:43.18 ID:+GDJlmm9
>>250
タブがピン留めされてない?
252 :
デフォルトの名無しさん
2016/08/09(火) 00:29:21.39 ID:PJVjRNSn
>>251さん
253 :
デフォルトの名無しさん
2016/08/09(火) 00:36:05.38 ID:PJVjRNSn
途中投稿すいません。

>>251さん レスありがとうございます。

ピンなどの機能は使っていません。
全てのタブを閉じたり、Visual Studioを落としたりしても
直らないのです。

検索して同様の件を探そうにも、タブやソースを検索ワードに入れると
プログラムの製作方法ばかりで困ってます。
254 :
デフォルトの名無しさん
2016/08/09(火) 03:44:24.30 ID:JQFwElds
文面見る限りでは俺もそうだけど…
これじゃ嫌なの?
てかさ、まず何に困ってるのか書かないと。
255 :
デフォルトの名無しさん
2016/08/09(火) 04:34:03.25 ID:T9h0Wo+i

256 :
デフォルトの名無しさん
2016/08/09(火) 17:26:16.40 ID:PJVjRNSn
>>254さん >>255さん レスありがとうございます。

文面では状況が伝わりにくいと思い Gifで撮影致しました。
http://gyazo.com/4144867f165f3deeb0493bc089ec6cb6

この様にタブの順番が変わってしまうのが非常に辛いのです。
自分はタブの位置 順番でソースを把握しているので複数開いている時
非常に煩雑になります。

>>255さん
頂いた画像の部分の項目や 他部分変更したのですが
自分の求めている部分の変化はありませんでした。
257 :
デフォルトの名無しさん
2016/08/09(火) 17:36:54.04 ID:PJVjRNSn
大変申し訳無いです。自己解決致しました。
別に入れておりましたvisualstudioのプラグインによって
タブがソートされておりました。

これが何かのキッカケでオンになってしまっていたようです。
大変お騒がせ致しました。

お返事頂けた方々ありがとうございました!
258 :
デフォルトの名無しさん
2016/08/09(火) 19:14:43.91 ID:10xMu+CU
ネタフリ

textboxから数値取り出すのってどうしてる?
いまだにTryParseとかやってる?
それだけのためにプロパティをバインディングしたりしてる?

一時期stringに拡張メソッドつけて数値とっていたけどそれすらめんどくなってきた
めんどいもっと楽させてほしい
259 :
デフォルトの名無しさん
2016/08/09(火) 19:25:41.64 ID:mk3kxjVQ
VBでも使え
そして二度と帰ってくるな
260 :
デフォルトの名無しさん
2016/08/09(火) 19:41:20.86 ID:/QPZwEhn
数値しか入れないのにTextBox使わない
261 :
デフォルトの名無しさん
2016/08/09(火) 19:54:32.32 ID:Ulr7R0RZ
>>258
Windows Formの話だと思うけど、TextBox継承して数値入力専用のを作ればいいよ。
実際やってみると以外と大変だけどねw
こんなの本当は標準で用意して欲しいよね。
262 :
デフォルトの名無しさん
2016/08/09(火) 19:57:01.35 ID:AJ2CLbue
>>259
VBじゃなくてVBScript勧めたほうがいいんじゃねw
>>260
ごもっともw
263 :
デフォルトの名無しさん
2016/08/09(火) 19:59:46.34 ID:2xtWtUt/
>>258
一文字入力されたら数字とBS以外スルーするようにしとけよ
264 :
デフォルトの名無しさん
2016/08/09(火) 20:04:18.47 ID:JS0TrNVx
T使って継承すればよろし
265 :
デフォルトの名無しさん
2016/08/09(火) 20:17:13.72 ID:h+7CEzP0
いい加減
数値⇔文字列
の変換をするキャストメソッド追加しろよ
266 :
デフォルトの名無しさん
2016/08/09(火) 21:01:17.26 ID:mk3kxjVQ
>>264
お前ふらっとの方でも似たような書き込みしてるけど何も理解できていないな
267 :
デフォルトの名無しさん
2016/08/09(火) 21:04:36.79 ID:10xMu+CU
似たような感じでしょうもない変換メソッドとか毎回書かされるのはもうつまらん
c#はここから先に進まないのか?
268 :
デフォルトの名無しさん
2016/08/09(火) 21:06:08.84 ID:h+7CEzP0
変換メソッド自動生成はもうAIの領域だな
269 :
デフォルトの名無しさん
2016/08/09(火) 21:53:33.39 ID:rTlnm3J6
両端にスペース入りのカンマつき数字をコピペしてくる強者がいる
まずクリアするのがこれで
次が全角数字の人、その次が丸つき数字の人、その次が数字の途中か終りにマイナスを入れてくる人
270 :
デフォルトの名無しさん
2016/08/09(火) 22:36:34.91 ID:Ulr7R0RZ
ペーストの処理は面倒だからコンテキストメニューを殺してペースト禁止するのが楽だねw
271 :
デフォルトの名無しさん
2016/08/10(水) 10:54:02.06 ID:sZvpYadZ
そういえば**演算子と//演算子の追加予定ないの?
n乗とn乗根演算子欲しい
272 :
デフォルトの名無しさん
2016/08/10(水) 11:01:59.51 ID:vUhFEZdN
>>271
//の方はコメントつけたソースが大変な事にw
273 :
デフォルトの名無しさん
2016/08/10(水) 11:14:15.16 ID:sZvpYadZ
あっ…w
/*でもコメントだしな~
274 :
デフォルトの名無しさん
2016/08/10(水) 13:38:46.88 ID:yH6Tmb7K
そこに気付くとはやはり天才か(棒)
275 :
デフォルトの名無しさん
2016/08/11(木) 18:47:30.48 ID:Lr/mSCyz
string s1 = "10 ~ 20";
string s2 = "1-500";
string s3 = "-25 - -10";
string s4 = "0~1";

のように、FROM + 半角スペース(ありorなし) + -または~ + 半角スペース(ありorなし) + TO
というような範囲の含まれている文字列があります。
(FROMとTOの数字はマイナスや小数点あり)

FROMだけを取り出したいのですが、何かいい方法は無いでしょうか。
正規表現などを使うとできるんでしょうか?
276 :
デフォルトの名無しさん
2016/08/11(木) 18:50:37.65 ID:PgxrnQsD
-?¥d+
277 :
デフォルトの名無しさん
2016/08/11(木) 20:02:01.76 ID:gnwNFYm1
>>276
> 小数点あり
-?¥d+(¥.¥d+)?
278 :
デフォルトの名無しさん
2016/08/11(木) 20:59:51.07 ID:Lr/mSCyz
ありがとう!
やってみる!
279 :
デフォルトの名無しさん
2016/08/15(月) 16:48:49.78 ID:C0q0R5N5
スレッド違いかもしれないですが教えてください。

Google Analitics でトラフィックを確認したところ
↓の様にIP+ポート番号でのアクセスがありました。

通常であれば、YahooやGoogleなどの検索エンジンからの流入だけになるハズが
この様なアクセスがあり警戒しています。これは何か攻撃を受けているのでしょうか?

10.160.XXX.XXX:XXXXX
280 :
デフォルトの名無しさん
2016/08/15(月) 16:58:13.22 ID:zs1ooRaK
帰れカス
281 :
デフォルトの名無しさん
2016/08/15(月) 22:44:50.60 ID:C0q0R5N5
279

です。誰か教えてください。

>>280
のキチガイはスルーで
282 :
デフォルトの名無しさん
2016/08/15(月) 22:47:06.97 ID:9j969OGV
ふらっとの粘着がこっちに移動してきたか
283 :
デフォルトの名無しさん
2016/08/15(月) 23:02:56.98 ID:ga2FZEJa
>>281
C#とGoogle Analiticsにどんな関連性があるの?
さっさと帰れよ
284 :
デフォルトの名無しさん
2016/08/15(月) 23:19:34.56 ID:C0q0R5N5
279

関連スレッドがあれば教えてください
そちらで質問します。
285 :
デフォルトの名無しさん
2016/08/15(月) 23:46:15.43 ID:/I3SQKNS
>>284
死んでろ

ここも次の次はワッチョイだな
次は既に立ってるから
http://echo.2ch.net/test/read.cgi/tech/1467211515/
286 :
デフォルトの名無しさん
2016/08/16(火) 13:51:24.11 ID:vfH4bKhl
new byte[1024*1024*1024]で1GBのメモリ確保は出来るのに300*300の画像を読み込み、Clone(300*300*4*2=720000byte=0.7MB弱)をするとメモリエラーが発生します
何故でしょうか
287 :
デフォルトの名無しさん
2016/08/16(火) 14:50:00.40 ID:o15hK2EL
クイズですか?
288 :
デフォルトの名無しさん
2016/08/16(火) 15:10:19.55 ID:qGC1dEkn
プログラムは思った通りではなく作られた通りに動くから
289 :
デフォルトの名無しさん
2016/08/16(火) 17:06:36.47 ID:KuBIRE+Q
System.DrawingというかGDI+は困ったらすぐOutOfMemory返してくる
290 :
デフォルトの名無しさん
2016/08/16(火) 18:11:02.75 ID:imMBMuem
>>286
そもそもコピーされるわけでもないCloneを使うなと
>>289
そのせいで便利な機能あるのに変換とか下手に任せられないんだよな
291 :
デフォルトの名無しさん
2016/08/18(木) 14:05:26.86 ID:e8NCsKv7
クイズワロタ
292 :
デフォルトの名無しさん
2016/08/18(木) 14:19:15.35 ID:CKZSwyTz
indexオーバーフローみたいな感じのが原因みたいでした
何でオートオブメモリーが発生したのかは分かりませんが
293 :
デフォルトの名無しさん
2016/08/18(木) 14:34:24.97 ID:tXC5KaDm
indexが悪かったからだろw
294 :
デフォルトの名無しさん
2016/08/18(木) 14:41:42.86 ID:KZM7ssxd
indexエラーとout of memoryは状況が全然違うエラーだろ
どうせCloneの元を削除したとかその辺だろうな
295 :
デフォルトの名無しさん
2016/08/18(木) 14:50:17.82 ID:CKZSwyTz
>>294
クローンで画像切り抜こうとしたら画像の範囲越えてた
296 :
デフォルトの名無しさん
2016/08/18(木) 14:50:47.64 ID:CKZSwyTz
オートオブメモリーは行番号出ないからどこで発生したか分かりにくいし
297 :
デフォルトの名無しさん
2016/08/18(木) 14:54:22.77 ID:MLAmiHPT
オートw
298 :
デフォルトの名無しさん
2016/08/18(木) 14:56:31.03 ID:PpWXAaq4
このスレまじヤバ
299 :
デフォルトの名無しさん
2016/08/18(木) 15:03:18.90 ID:CKZSwyTz
>>297
↑こいつ馬鹿すぎワロタwwwwwwwwwwwww
300 :
デフォルトの名無しさん
2016/08/18(木) 15:16:29.46 ID:dOs+cdOj
顔真っ赤だぞ
301 :
デフォルトの名無しさん
2016/08/18(木) 15:34:56.78 ID:r1qD6HKD
>>296
OutOfMemoryでエラー位置示されないことは稀にあるけど出ないのが普通みたいなこと書かれても困る
最初の質問の要点も違っているし、次からは初心者スレへどうぞ
302 :
デフォルトの名無しさん
2016/08/18(木) 16:32:11.96 ID:Qi6POpo5
オートレストランってまだあるのかなあ。
303 :
デフォルトの名無しさん
2016/08/18(木) 16:46:38.64 ID:iO4p2OMA
エラー位置出すのにメモリ確保伴うから省くんじゃないの
何かのライブラリで OOM 例外だけ予め構築済みのまま使い回すの見て感心したおぼえがある
304 :
デフォルトの名無しさん
2016/08/18(木) 17:55:49.08 ID:RNZU/l3x
オートオブメモリが流行っているのか
305 :
デフォルトの名無しさん
2016/08/18(木) 18:32:39.29 ID:KC0cWNIH
たぶんエラーはオートオブメモリじゃなくてオートオブランゲなんだろうな
306 :
デフォルトの名無しさん
2016/08/18(木) 18:54:33.61 ID:q9ZhHGDc
ふらっとがワッチョイ付いたからこっちに移住してきたのかな
307 :
デフォルトの名無しさん
2016/08/18(木) 19:09:53.77 ID:VT/uRpp6
308 :
デフォルトの名無しさん
2016/08/18(木) 19:17:24.52 ID:sh92haT+
CTRL+ALT+E で例外設定出して、OutOfMemoryExceptionにチェック入れたら普通に止まるけど
それとは違うことなんだろうか?
309 :
デフォルトの名無しさん
2016/08/18(木) 19:24:39.04 ID:zEQl8UVs
OutOfMemoryに限らずデバッガで該当する場所でなくエントリポイントが表示されたり
GDI+関連のエラーだと意図していない場所のRefresh()とかで止まることならある
try-catchを入れとけばそこで表示されるから済む話だが
310 :
デフォルトの名無しさん
2016/08/18(木) 19:33:28.84 ID:CKZSwyTz
>>306
そう
前はふらっとにいたけどワッチョイ付いたら他の板での書き込みバレるからこっち来た
311 :
デフォルトの名無しさん
2016/08/18(木) 20:03:39.26 ID:oJeK6Bjx
cppでアウトオブメモリー処理のために汎用メモリーを取っておくシステムを見たことあるがそこまでやるべきなのか
312 :
デフォルトの名無しさん
2016/08/25(木) 23:14:01.46 ID:HsD7PkbO
313 :
デフォルトの名無しさん
2016/08/25(木) 23:42:36.74 ID:MmwMpV4v
>>312
throw式以外は全部ボツだろうなこれ
ジャストアイデアとしても酷すぎ
314 :
デフォルトの名無しさん
2016/08/25(木) 23:57:25.92 ID:Pgok0gcb
>>313
タプルとパターンマッチング
315 :
デフォルトの名無しさん
2016/08/26(金) 00:02:49.66 ID:TYI3AeP1
>>314
なんだよ。かまわんよ、存分にそれらについて語ってくれよ…
316 :
デフォルトの名無しさん
2016/08/26(金) 00:04:14.57 ID:cD5Ga51Z
>>312
tupleとdeconstructionは欲しいな
317 :
デフォルトの名無しさん
2016/08/26(金) 00:26:51.57 ID:qEbjB0B4
C#7.0はいい感じだね
早く業務で使いたい
318 :
デフォルトの名無しさん
2016/08/26(金) 00:32:45.54 ID:zWe+Xnw2
パターンマッチはdeconstructionと組み合わせられないとほとんど意味ない、
というかOCPを破るだけで有害
やるなら最初からやらないとこんな中途半端なもの出したら
コーディング規約で軒並み禁止されちゃうぞ
319 :
デフォルトの名無しさん
2016/08/26(金) 00:39:32.65 ID:TYI3AeP1
プロパティ禁止とか最早ブラックあるあるネタだもんな…今更感はある
320 :
デフォルトの名無しさん
2016/08/26(金) 00:48:13.71 ID:PgCAqldG
>>319
そもそもプロパティを知らないおっさんがいて驚いたわ
321 :
デフォルトの名無しさん
2016/08/26(金) 01:01:05.00 ID:b/aYUiUZ
getX(),setX()書く人は、まれに良く紛れ込むね
322 :
デフォルトの名無しさん
2016/08/26(金) 01:13:44.01 ID:ZXi/bCeq
.NET4.0とC#7の組み合わせって可能なのかなあ。
まだあと5年ぐらいはXPのPC無視できないよね。
323 :
デフォルトの名無しさん
2016/08/26(金) 01:18:27.62 ID:PgCAqldG
>>322
4.0とかとっくにサポート切れやで
324 :
デフォルトの名無しさん
2016/08/26(金) 01:27:27.85 ID:AjmVo6xU
>>321
それがうちのルールなう
325 :
デフォルトの名無しさん
2016/08/26(金) 01:29:19.51 ID:MwmpSlTr
カワイソス
326 :
デフォルトの名無しさん
2016/08/26(金) 01:35:14.31 ID:b/aYUiUZ
>>324
残念すぎる(´Д`)
327 :
デフォルトの名無しさん
2016/08/26(金) 01:56:48.53 ID:iK8FV/yi
>>322
ウチはWindows2000(.NET 2.0)も無視できない場合がある。
設備制御用のスタンドアローン機だが。
328 :
デフォルトの名無しさん
2016/08/26(金) 17:37:43.90 ID:MxDOiAHv
よくわからないけどパターンマッチングってどういう局面で必要?
いままでのコーディングが大幅に減るとかいい面を教えてほしい
今のところ見にくいなあと感じる
329 :
デフォルトの名無しさん
2016/08/26(金) 18:46:17.17 ID:zWe+Xnw2
>>328
本格的なパターンマッチングならこんなことができる
double GetArea(Shape shape) {
switch (shape) {
case Rectangle(x,y,w,h): return w * h;
case Circle(x,y,r): return PI * r * r;
}
}
さらに、変数にキャプチャするだけでなくxに具体的な値を指定すればxが特定の値の場合だけという条件指定も可能
今の貧弱な仕様だとお前の疑問の通りメリットはほとんどないのでまあ最終的には却下だろうな
330 :
デフォルトの名無しさん
2016/08/26(金) 20:21:13.42 ID:6mUdfhCy
オブジェクト指向からswitch地獄に退化してないそれ?
関数型とかだとそれが普通なのかな
331 :
デフォルトの名無しさん
2016/08/26(金) 21:28:47.03 ID:MxDOiAHv
必要に応じて使わないと退化だな
332 :
デフォルトの名無しさん
2016/08/26(金) 22:32:43.70 ID:zWe+Xnw2
関数型はあくまで関数が主だからね
(本物の)パターンマッチは静的検査でパターンの網羅性を担保できるから、
やってることはインターフェースを実装してるのと同じようなもん
333 :
デフォルトの名無しさん
2016/08/27(土) 00:18:55.08 ID:nVNQ8rj/
この場合は単純にGetAreaをabstract methodにして
各クラスでoverrideさせた方がよくないっすか?
334 :
デフォルトの名無しさん
2016/08/27(土) 00:20:04.19 ID:1AQozIyW
if(x > y) (x, y) = (y, x);
335 :
デフォルトの名無しさん
2016/08/27(土) 00:38:01.47 ID:gXVhUUHW
>>333
その方がいいと思う理由は?
>>333にとって関数型よりオブジェクト指向の方が馴染みがあるからそう感じるだけじゃない?
どっちがいいかじゃなくて考え方が違うんだよ
336 :
デフォルトの名無しさん
2016/08/27(土) 00:57:01.73 ID:p93C1zWb
C#は関数型言語を目指すのか?
337 :
デフォルトの名無しさん
2016/08/27(土) 00:58:08.99 ID:dfJ7JP1w
>>336
良いとこを取り入れようとしている
338 :
デフォルトの名無しさん
2016/08/27(土) 01:26:03.53 ID:zYdR+KfD
マルチパラダイム言語なんだから、あるプログラミングパラダイムには大して効果的でない
(が、他のプログラミングパラダイムでは効果的な)機能が入ることもあるさ
339 :
デフォルトの名無しさん
2016/08/27(土) 01:43:46.91 ID:p93C1zWb
まあたしかに今のC#はマルチパラダイムなんだろうけど
そもそもマルチパラダイムを意識して設計された言語なのだろうか

良いとこ取りしようって考え方はいいんだが
マルチパラダイムで複数のスタイルに対応しようとか、言語の複雑さが増すだけだと思うんだがなぁ

まあそのうち、オブジェクト指向でやりたい人はこれは不要(というか使うな)とかいう機能と
関数型でやりたい人はこの機能は使うなとかいう分類が出来ていくのだろうかね
だったら初めから言語分けろよと思うわけなんだが
340 :
デフォルトの名無しさん
2016/08/27(土) 08:01:26.33 ID:uwQm2EgT
このままではVB6になってしまう
341 :
デフォルトの名無しさん
2016/08/27(土) 08:50:02.94 ID:ZCfqwLYC
>>330
switchで分岐して分かりやすいと思う
342 :
デフォルトの名無しさん
2016/08/27(土) 08:50:57.27 ID:ZCfqwLYC
>>333
switchがいい
343 :
デフォルトの名無しさん
2016/08/27(土) 08:59:36.29 ID:xPu9ULSF
パターンマッチングは大変な事になりそう
ようするに型を調べて分岐の糖衣構文でしょ
バッドプラクティスの糖衣構文なんてよくないよ
344 :
デフォルトの名無しさん
2016/08/27(土) 09:04:35.71 ID:SmFG8gRK
      ク    ク || プ  //
      ス  ク ス  | | │ //
       / ス    | | ッ //   ク   ク  ||. プ  //
       /         //   ス ク ス _ | | │ //
         / ̄ ̄\     /  ス   ─ | | ッ //
       /  _ノ  .\     /         //
       |  ( >)(<)       ___
.        |  ⌒(__人__)     ./ ⌒  ⌒\
        |    ` Y⌒l    /  (>) (<)\
.         |    . 人__ ヽ /  ::::::⌒(__人__)⌒ \
        ヽ         }| | |        ` Y⌒ l__   |
         ヽ    ノ、| | \       人_ ヽ /
.         /^l       / /   ,─l       ヽ \
345 :
デフォルトの名無しさん
2016/08/27(土) 09:18:21.32 ID:xncZCRpk
ポリモフィズム過負荷で歪なクラスを量産するよりはよい
346 :
デフォルトの名無しさん
2016/08/27(土) 09:56:58.93 ID:gXVhUUHW
型で分岐するのがどうして問題かというと、
後で型を追加したときに分岐の箇所を自分で探して条件を追加しなきゃいけなくなるから。
ちゃんとした関数型だと、パターンマッチで分岐させるような型って
type Shape = Rectangle(double x, double y, double w, double h)
  | Circle(double x, double y, double r);
みたいな感じでクローズしておくんだよ。
これでShapeがとりうる全ての型をコンパイラが認識できるから、
Shapeに型を新たに追加したら>>329がコンパイルエラーになってくれる。
イメージ的には 列挙体 + タプル に近いかな。OO言語の超強力なクラスとは全然異なるもの。
このように、パターンマッチは根が深いからにわか言語が中途半端に導入するとおかしなことになる。
347 :
デフォルトの名無しさん
2016/08/27(土) 10:14:58.12 ID:xncZCRpk
データベースやXMLで不定形データ受け取って
パースした後の分岐に使うくらいかな
348 :
デフォルトの名無しさん
2016/08/27(土) 10:17:36.05 ID:xPu9ULSF
>>346
モジュールの配布面倒くさそう
パターンをを追加したら参照元コード全部追記してねって全ユーザーに通知するの?
349 :
デフォルトの名無しさん
2016/08/27(土) 12:08:15.98 ID:vp5ltHnS
>>346
しかしそれだと書く側にとってはOOPの方がいいが。

機能追加がクラス追加で対応できるとき、
OOP: 既存部分に一切手を入れる必要はない。
FP: 既存部分も書き直す必要がある。

普通はどう見ても退化だよ。
書き直す部分がSyntaxErrorで見つかるのは便利だけど、
OOPでもそのクラスの全メソッドを列挙するのは簡単なので、漏れる事もない。

OOPは実際の詳細なクラス毎の動作はその部分のコードからは読みとれない。
それがswitchの方がいいという人の意見なのだろうけど、
大概の場合は読みとれないのは低位記述のみであって、読みとる必要がないから問題ない。

>>329にしてもGetAreaメソッドの方がいいし、
本家の例にしてもExplainMyselfメソッドの方がいい。
本来はメソッドとしてくくれないswitch分岐に使えばいいのだろうけど、
本家にしてもそのいい例を探せなかったということじゃないか。
つまり要らない子。
350 :
デフォルトの名無しさん
2016/08/27(土) 18:13:53.32 ID:gff3j1Ec
C#はjsのオブジェクトリテラルを導入すべきだ
C#の匿名型は書きにくいし見辛い
351 :
デフォルトの名無しさん
2016/08/27(土) 19:31:49.76 ID:p93C1zWb
つまりパターンマッチはオブジェクト指向とはきわめて相性が悪いって事か
まあ、型チェックと代入が一発でできる機能だけなら便利に使える場面もあるだろうけど
352 :
デフォルトの名無しさん
2016/08/27(土) 19:54:25.56 ID:0MFbcQeG
相性が悪いんじゃなくて使い分けだと思う

上ででたShapeでは各クラスが面積を出すメソッドを持っててもべつにいいだろうけど
GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい

その場合はどこか別で限定的にこのパターンマッチを使えばいいのではないか?
353 :
デフォルトの名無しさん
2016/08/27(土) 19:54:53.32 ID:vp5ltHnS
相性が悪いわけではなく、用途がないんだと思う。

型ありOOPの場合は、型判定+分岐を仮想関数で対応するのが基本思想である為、
そもそもの例がswitch文で型判定の時点で要らない子でしかない。
もうちょっとマシな例はなかったのかよ、とも思うが。

つかどっちかというと、
パターンマッチングが活躍している言語のソースを眺めた方が良いのではないか?
誰か知ってたら教えてプリーズ。
354 :
デフォルトの名無しさん
2016/08/27(土) 20:00:45.28 ID:vp5ltHnS
あ、ただ、絞り込みは出来るようだから、それは役に立つか?

> case Rectangle s when (s.Length == s.Height):
> case Rectangle r:

もちろんメソッドでも出来るが、色々まどろっこしくなるのかも。
(俺はC#erではないので詳しくは分からない)
355 :
デフォルトの名無しさん
2016/08/27(土) 20:33:04.97 ID:vp5ltHnS
>>352
> GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい
言っていることは分かるけども、それは思想によると思うよ。

OOP原理主義だとして、GUI側からの描画リクエスト対応もメソッドとして持たせた場合、
オブジェクトのメソッドは永遠に追加されていくことになるので、オブジェクトのソースが確定しない。
でも、OOPの基本理念、「動作しているコードには一切触れることなく機能追加可能」は実現出来る。
したがって、デグレードの危険が全くない。

機能の切り分けとしてはGUI側に持たせたいところだけど、
これだと追加Shape毎にGUI側もいちいち対応しないといけなくなる。
(動いているコードを修正する必要がある)

オブジェクトが肥大化するけども、
バグを出さない為の管理なら、オブジェクト側に持たせた方が楽だと思う。
他プログラムとオブジェクトを共用する気なら、
オレオレメソッドで肥大化したオブジェクトなんて要らないから、
GUI側に持たせることになる。

もしかして拡張メソッドってこのため?アレいまいちピンとこなかったんだが。
356 :
デフォルトの名無しさん
2016/08/27(土) 21:12:00.13 ID:n0Zp8t3m
Shapeのコンテキストによるだろ
数学や物理の計算に使うモデルなら描画用メソッドなんて書いた時点で解雇されるし
描画モデルなら描画用メソッドがあってもいい
357 :
デフォルトの名無しさん
2016/08/27(土) 21:43:02.69 ID:vp5ltHnS
だからそのための拡張メソッドじゃないの?
今回の例なら、GUI側で拡張メソッドを追加して対応する。
すると、既存コードに手を加えることもなく、描画部分もswitch文無しという、両取りが可能。
追加Shapeがあった時もGUI側の拡張メソッド部分に追加するだけ。管理もしやすい。
https://msdn.microsoft.com/ja-jp/library/bb383977.aspx
358 :
デフォルトの名無しさん
2016/08/27(土) 22:01:19.98 ID:gXVhUUHW
>>357
それは詭弁だな
拡張メソッドは単に型ごとにGetAreaをオーバーロードしてるだけだ
オブジェクト指向というよりはむしろ関数型的なやり方
型switchや仮想メソッドは実行時型に応じた動的な多相を実現する手段で、拡張メソッドで代替できるものではないよ
359 :
デフォルトの名無しさん
2016/08/27(土) 22:23:19.62 ID:E9zwljSJ
>>357
今の流れに拡張メソッド全く関係ないよね
360 :
デフォルトの名無しさん
2016/08/27(土) 22:23:59.95 ID:vp5ltHnS
>>358
> 実行時型に応じた動的な多相
C#には無いだろこれ。
361 :
デフォルトの名無しさん
2016/08/27(土) 22:37:21.41 ID:gXVhUUHW
>>360
?
普通にメソッドのオーバーライドによる多態のことだよ
362 :
デフォルトの名無しさん
2016/08/27(土) 22:42:35.41 ID:vp5ltHnS
>>361
例えばJavaScriptでは動的に型を変更出来る。
だから実行時にswitchでやるのとコンパイル時に静的にリンクするのでは動作が異なってくる。
そういうのはC#にはないでしょ、って話。

だから話を戻すと、>>329のケースは通常のOOPの多態、
>>352のケースは拡張メソッドが一番良いと思う。
本家のも普通はOOPで対応する。
ただそれだと例にならないのでクエリがわざわざくっつけられているのだと思う。
363 :
デフォルトの名無しさん
2016/08/27(土) 22:43:28.66 ID:yK/3tXKV
何の話をしてるのかなってちょっと上からレス読んでみたけど、
>>352の話ならShapeがDrawを持っても別に必ずしもおかしくないし、
持たせたくないならShapeで描画側が要求する描画に必要なデータを提供する
一連のメソッドやプロパティを定義しておけば済む話だよね。

描画側で型を見て分岐なんてどう贔屓目に見ても最悪のやり方にしか思えんね俺も。
364 :
デフォルトの名無しさん
2016/08/27(土) 23:01:52.80 ID:gXVhUUHW
>>362
最初の4行は俺にはよく意味がわからないけどそれはまあいいとして、
>>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
Shapeの外部にメソッドを定義しつつ多態相当の動作をさせたい、そのうえ明示的な型判定はダメというんなら、
引数をdynamicにキャストして強引に動的ディスパッチさせるみたいなことが必要。
365 :
デフォルトの名無しさん
2016/08/27(土) 23:02:26.56 ID:ygls7M0s
>>363
おかしいかおかしくないかは場合による
このShapeが幾何学計算ライブラリのShapeだったらDrawはおかしい
図形描画用のライブラリならDrawがあってもおかしくないしなくてもおかしくない
366 :
デフォルトの名無しさん
2016/08/27(土) 23:10:16.02 ID:vp5ltHnS
>>364
> List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
出来るよ。というかそちららの認識が間違っていると思うが、
拡張メソッドはソース上では普通のメソッドと見た目は同じだよ。
367 :
デフォルトの名無しさん
2016/08/27(土) 23:15:37.10 ID:ygls7M0s
>>366
ネタかマジかからかってるかわからないんだけど
368 :
デフォルトの名無しさん
2016/08/27(土) 23:18:51.07 ID:gXVhUUHW
>>366
ほんとに?
https://ideone.com/lmc8TO
たまには自分の思い込みを疑ってみるのも大切だぞ
369 :
デフォルトの名無しさん
2016/08/27(土) 23:19:50.69 ID:vp5ltHnS
>>364
>>367
いやこちらも意味不明なのだが。
逆に>>364の言う「メソッドでは対応出来るが拡張メソッドでは対応出来ない」ケースって出せるか?
370 :
デフォルトの名無しさん
2016/08/27(土) 23:28:42.22 ID:vp5ltHnS
>>368
いやそれOOPじゃないと思うが、、、ただのオーバーロードだよね。
371 :
デフォルトの名無しさん
2016/08/27(土) 23:31:52.50 ID:gXVhUUHW
>>370
だから俺は>>358からそう言ってるじゃん
拡張メソッドでは対応できないケースを示しただろ?
372 :
デフォルトの名無しさん
2016/08/27(土) 23:33:00.29 ID:ygls7M0s
>>369
拡張メソッドにできない事、のシンプルな答えとして挙げるなら、インスタンスメソッドにはなれない、だな
それでもう終わりだろこの話
わからないなら入門書読み直してくれ
373 :
デフォルトの名無しさん
2016/08/27(土) 23:40:42.34 ID:vp5ltHnS
>>371,372
まあ俺はC#erではないので拡張メソッドは使ったことがないし、
俺の理解が間違っている可能性もあるが、
MSDNの仕様書を見る限り、当たり前だがメソッドを拡張したように見せかけているのだと思うよ。
だからその場合は Rectangle と Circle に対して拡張メソッドを追加する。
これができないのならそちらの言うとおりだが、それだと拡張メソッドなんてゴミじゃん。

まあどのみち俺かそちらの仕様に対する勘違いだと思うので、この話はこれで終わりでいい。
374 :
デフォルトの名無しさん
2016/08/27(土) 23:48:05.17 ID:vp5ltHnS
>>372
いや悪いがやっぱりそっちが間違ってるぞ。
拡張メソッドで普通にthisが取れてる。(引数の所に書く)
つかそうじゃないと意味無いだろ。

> public static int WordCount(this String str)
> {
> return str.Split(new char[] { ' ', '.', '?' },
> StringSplitOptions.RemoveEmptyEntries).Length;
> }
> https://msdn.microsoft.com/ja-jp/library/bb383977.aspx
375 :
デフォルトの名無しさん
2016/08/28(日) 00:08:50.44 ID:s1SxoEZK
>>374
あんたにも分かるように説明してあげよう
拡張メソッドとは、HogeClass.func(x) を x.func() と書けるシンタックスシュガーである
そ れ だ け
376 :
デフォルトの名無しさん
2016/08/28(日) 00:15:50.55 ID:zGC1w6Ia
>>365
だからそう言ってるでしょ。
377 :
デフォルトの名無しさん
2016/08/28(日) 00:17:10.42 ID:+mkoP4gZ
>>375
それはオブジェクト指向がその意味でのシンタックスシュガーでしかないよ。
class構文が無かったCでも関数ポインタ+構造体で同じ事が出来たわけだし。

重要なのは拡張メソッドにthisが渡っていることだよ。
静的メソッド(クラスメソッド)にはthis使えないでしょ。
今回の例で言えば、宣言部分は以下になるということ。
ただしコンパイルが通るかどうかは知らんが。
通らないのなら君の言うとおり、通るのなら俺の言い分が正しいことになる。

public static void Draw(this Rectangle rect)
public static void Draw(this Circle circle)
378 :
デフォルトの名無しさん
2016/08/28(日) 00:19:39.62 ID:UJTSRlJK
何で拡張メソッドってstaticクラスじゃないと定義出来ないんだ?
何か理由あるの?
別に制限はstaticメソッドだけでいいと思うけど

例えばString.IsNullOrEmpty(String)
もしstaticクラス以外に拡張メソッド定義出来たら
String.IsNullOrEmpty(this String)
みたいになって更に便利になると思うのに
379 :
デフォルトの名無しさん
2016/08/28(日) 00:21:24.05 ID:hQF+q+Zk
そこのthisは単に拡張メソッドのマーク
通常のthisとは違う意味

拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
RectangleやCircleにキャストすることになる
そこで登場するのがパターンマッチングと
380 :
デフォルトの名無しさん
2016/08/28(日) 00:26:26.11 ID:UJTSRlJK
今更変えるのは互換性的な問題で難しいだろうけど、
==演算子を等価演算子
===演算子を等値or不変インスタンスかつ等価演算子
にするべきだと思った
不変かは属性とかで定義して
Equalsメソッドとかいらねーだろ
==演算子と両方定義しろとかどうなってんだ
381 :
デフォルトの名無しさん
2016/08/28(日) 00:31:26.64 ID:+mkoP4gZ
>>379
いや拡張メソッド内で自分自身のメンバを参照出来るよ。多分。

> 実際に、拡張メソッドは、それらが拡張している型のプライベート変数にはアクセスできません。
> https://msdn.microsoft.com/ja-jp/library/bb383977.aspx

普通に考えれば、わざわざプライベートは駄目って書いてある時点でpublicならいけるって事でしょ。
要するに外面的には Draw(circle) でしかないところを circle.Draw() と書けるだけでしかない。
その辻褄はコンパイラが合わせるけど、privateをpublicには出来ないのでこれは無理。
MSDNの説明には矛盾を感じないけど。
382 :
デフォルトの名無しさん
2016/08/28(日) 00:36:48.79 ID:+mkoP4gZ
>>379
> 拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
バインディングはコンパイル時だし、多分普通に呼べると思うよ。
というか呼べないと拡張にならないから、文法が違ったとしても何らかの呼び方は必ずあるはず。
383 :
デフォルトの名無しさん
2016/08/28(日) 00:37:11.60 ID:zGC1w6Ia
>>380
EquqlsというかIEquatableが不要とは思わないけど、
VBと同じように参照等価検査専用の演算子を用意して、==はオーバーロードしないと
使えないようにしてくれた方が分かりやすかったね。
384 :
デフォルトの名無しさん
2016/08/28(日) 00:43:30.59 ID:hQF+q+Zk
>>379
RectangleとCircleにDraw拡張メソッドが定義されているなら以下のようになる
void hoge( Shape shape )
{
//できない
//shape.Draw();
if(shape is Rectangle)((Rectangle)shape).Draw();
else if(shape is Circle)((Circle)shape).Draw();
}

拡張メソッドを呼び出すときにキャスト必須

「Shapeを継承したクラスはすべてDraw拡張メソッドを定義しなければならない」
という条件はかなり強引で、ヘタすればCLRや共通言語仕様にも手を入れなければいけない問題になる
385 :
デフォルトの名無しさん
2016/08/28(日) 00:45:09.67 ID:s1SxoEZK
>>378
スコープが広がってルールが複雑になるから
例えばこういうときどうする?
/* ファイル1.cs */
namespace NS1 { class Hoge { public static void EX(this Hoge h) { … } }
/* ファイル2.cs */
namespace NS2 { class Test { public static void Main() { new NS1.Hoge().EX(); } } }
これ、現在の仕様から類推すればファイル2内ではNS1をusingしてないから
EXは拡張メソッドとして呼び出せないはずだけど、直感的には呼べた方が自然だと思わない?
それとか、拡張メソッドを含むクラスを別の名前空間のクラスが継承したらどうする?
386 :
デフォルトの名無しさん
2016/08/28(日) 00:59:15.28 ID:hQF+q+Zk
>>382
拡張メソッドはコンパイラで解決しなきゃいけない
しかし、外部のDLLがShapeの子クラスを実装して、それを動的に読み込む可能性があるのでコンパイラでは解決不能

>オブジェクト指向がその意味でのシンタックスシュガーでしかないよ
そういうことを言ってるんじゃない
オブジェクト指向は共通言語仕様に書かれているのでILにその情報が残り、すべての言語が対応する
それに対しシンタックスシュガーはコンパイラの機能でILに完全には残らなかったり、属性をつけることで対応しているコンパイラのみが利用する
387 :
デフォルトの名無しさん
2016/08/28(日) 01:12:12.64 ID:+mkoP4gZ
>>386
コンパイラ云々は俺は普通に出来ると思っているのだが、まあそれは置いておこう。

>>384
こちらを先にやろう。

> //できない
> //shape.Draw();

これって出来ないんだっけ?というかこちらは最近はJavaScript(型無し)でやっていて、

void hoge(var shape ) // var なので何でも入る
{
shape.Draw(); // 勝手に直近のvirtualが呼ばれる。
}

で普通にオーバーライドされたvirtualが呼べる(circle.drawなりrectangle.drawなり)から、
実際のC#での記述の仕方は知らない。
ただ、アップキャストしたらもう仮想関数は呼べません、ダウンキャストしてからにしてください、
だとOOPとしてはかなり無理があるから、自然なやり方がないわけ無いと思うけど。
だってその is 構文ってのも新しいんでしょ?
だったらそれがなかったこれまではOOPできませんでしたーってことになっちゃうじゃん。
388 :
デフォルトの名無しさん
2016/08/28(日) 01:32:13.31 ID:hcj7YQtW
しつけえなあ
入門書ぐらい読んでからにしろよ
なんでど素人がそんな自信満々なんだよ
389 :
デフォルトの名無しさん
2016/08/28(日) 01:33:21.98 ID:+mkoP4gZ
>>384
以下見る限り、virtual付けたら普通にOOPできるとしか読めないが。
てか当たり前だが。
引き数渡ししたら出来なくなるって事もないと思うけど。

> しかし、動的な型に基づいて呼び出されるメソッドを決定したい場合があります。
> (というより、ほとんどの場合、メソッド呼び出しは動的に決定した方が都合がいい。)
> 動的な型に基づいて呼び出されるメソッドを選びたい場合、
> 以下のように、 メソッドに virtual という修飾子を付けます。
> http://ufcpp.net/study/csharp/oo_polymorphism.html
その上にvirtual付けなかった場合も書いてあるから見比べれば分かると思うよ。
390 :
デフォルトの名無しさん
2016/08/28(日) 01:37:09.54 ID:+mkoP4gZ
>>388
まあその通りだ。今は最新環境がないので試せない。
確かにこれ以上やっても意味無いので、後日最新環境で試せば良いだけだね。
「拡張メソッド」ってのに俺が夢を見すぎているのかもしれんし。
391 :
デフォルトの名無しさん
2016/08/28(日) 02:08:02.18 ID:hQF+q+Zk
>>389
何度も行っているように、拡張メソッドではオーバーライドできない。
なぜなら拡張メソッドはただのC#限定のstaticメソッドのシンタックスシュガーに過ぎないから。
そのURLではどこにも拡張メソッドのことは書いてないでしょ

class Triangle : Shape{}
ってプラグインみたいに外部のDLLで宣言されて、それを動的に読み込んで、hogeに渡ってきたらどうするの?
外部のDLLのことなんてコンパイルの地点では知らないので存在しない拡張メソッドを呼べるはずがない。

夢を見すぎているんじゃなくて、ただ無知でC#とかCLIをよく理解してないだけだと思う
javascriptで言うならprototypeの存在も知らないでjavascriptはウンタラカンタラ言っている状態なので、基礎から学び直したほうがいい
392 :
デフォルトの名無しさん
2016/08/28(日) 08:45:51.40 ID:UJTSRlJK
>>385
そういう事か…確かに面倒だな
それならnull可メソッド的な物を作ればいいんじゃない

public null void Hoge(){
  //thisがnullの可能性あり
}
393 :
デフォルトの名無しさん
2016/08/28(日) 09:58:20.62 ID:+mkoP4gZ
>>391
試したぞ。VSCommunity2015はサインインしないと使えなかったから、VS2008EEだが。
その範囲では確かに出来なかった。コードは以下ページを参考に改変した。
> http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&;id=cs002_ExtensionMethods
しかし理由は拡張メソッドがstaticだからだよ。以下コードで、

class SampleClass1 {}
class SubClass : SampleClass1 {}
static class hoo
{
static public void SampleExtensionMethod1(this SampleClass1 sampleClass1)
{
Console.WriteLine("super_ex");
}
static public void SampleExtensionMethod2(this SampleClass1 sampleClass1)
{
Console.WriteLine("super_ex2");
}
static public void SampleExtensionMethod1(this SubClass subClass)
{
Console.WriteLine("sub_ex");
}
}
static void test(SampleClass1 sampleClass1)
{
sampleClass1.SampleExtensionMethod1(); // (A)
sampleClass1.SampleMethod1(); // (B)
}
static void test3(SubClass subClass)
{
subClass.SampleExtensionMethod2(); .// (C)
}
394 :
デフォルトの名無しさん
2016/08/28(日) 09:59:05.95 ID:+mkoP4gZ
(B)は通常メソッドで、SubClassが与えられると当然SubClassのメソッドが呼ばれる。
ただし(A)は常にSampleClass1(親クラスというより「そこに記述された」クラス)の拡張メソッドが呼ばれる。
なお(C)はSampleClass1の拡張メソッドが呼ばれる。
(つまり子→親に関しては辿れる)

(B)が動作する以上、thisポインタは正しく渡っている。
あとは拡張メソッド側に継承関係を明記し、実行時型でこれを解決すれば良いだけなのだけど、
C#はどうやら文法的にこれを禁止している。(技術的には全く問題なく出来るはず)

今回出来ないのは、拡張メソッドがstaticだからコンパイル時にそこにリンクされるからだ。
そこでvirtual指定してみたが、これはSyntacErrorで落ちる。
どうやらそれ以前にC#は静的クラスは継承禁止で、当然virtualには出来ない。
しかしそもそも静的クラスが継承出来ないのが問題だ。
何故これを禁止しなければならないのかは分からない。

結局>>378の「static縛り」或いは上記「staticクラスは継承出来ない」のが問題。
とはいえこの仕様では「拡張メソッド」がイマイチなのはC#開発側も認識出来るだろうから、
何らかの理由があってこの仕様なのだとは思うが。

したがって>>364の指摘どおり、
> >>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
これは間違いだった。拡張メソッドが多態出来ないのは知らなかったから。

となると>>352
・Shapeクラスにメソッド追加---(α)
・GUI側でShapeクラスを継承したクラスを作って対応---(β)
>>384方式で is XXXX 形式で全部書く---(γ)
のどれかになるが、俺ならαかβであって、γはないね。
395 :
デフォルトの名無しさん
2016/08/28(日) 10:08:01.32 ID:acJIbkh4
スクリプトコーダーらしいパフォーマンス無視の考え嫌いじゃないよ
396 :
デフォルトの名無しさん
2016/08/28(日) 10:18:04.05 ID:+mkoP4gZ
釣りか?
仮想関数とif/switch分岐でのコストはC++の連中が死ぬほど議論しているが、
結論はどっちもほぼ同じだよ。
だからαもβもγも動作速度は大して変わらないはずだけど。
しかしそもそもC#ってパフォーマンス重視出来る言語じゃないよね。
397 :
デフォルトの名無しさん
2016/08/28(日) 10:21:51.48 ID:acJIbkh4
>>396
そこじゃない
398 :
デフォルトの名無しさん
2016/08/28(日) 10:24:49.86 ID:+mkoP4gZ
じゃあどこだよ?
てかチャットじゃねーんだから意見があるのなら分かるように書けよ
399 :
デフォルトの名無しさん
2016/08/28(日) 10:26:20.15 ID:acJIbkh4
>>398
それ君が言うんだ?
400 :
デフォルトの名無しさん
2016/08/28(日) 10:32:20.35 ID:1sBWhH04
>>396
>C#ってパフォーマンス重視出来る言語じゃないよね
これ免罪符に糞コード生み出す奴多いから困る
401 :
デフォルトの名無しさん
2016/08/28(日) 10:34:33.21 ID:acJIbkh4
入門書も読まないスクリプトコーダーはdynamicでも使ってろってこった
402 :
デフォルトの名無しさん
2016/08/28(日) 11:04:12.58 ID:h1JFz9az
ウザイから質問者と回答者以外が3行以上書いたら死刑な
403 :
デフォルトの名無しさん
2016/08/28(日) 12:58:05.84 ID:0rJ/vUpY
ひょっとして結局拡張メソッドからは型の外のスコープからアクセスできるメンバーにしか
アクセスできない、っていう糞当たり前の話を延々やってだけなの?

そんなのちょっと我慢して拡張メソッドの解説記事を5分も読んだら猿でも分かる話だろw
404 :
デフォルトの名無しさん
2016/08/28(日) 13:59:05.59 ID:ZfPDxmLp
フロントエンドコーダーってろくな人材いないよな
405 :
デフォルトの名無しさん
2016/08/28(日) 14:35:00.94 ID:hQF+q+Zk
>>394
実行時に解決するのは非常にコストが高い。
多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している

>そもそもC#ってパフォーマンス重視出来る言語じゃないよね。
大きな勘違い。Roslynとかではパフォーマンスをかなり重視してる。
実行時はネイティブコードになるので書き方によってはC++と同等の速度が出る。
(ただし、C++は危険な操作を行ったりできるのでその分有利)

>staticクラスは継承出来ない
なぜなら、staticクラスは「インスタンス化、継承できない」という指定付きのクラスだから。なぜintは数値しか表せないのかみたいな意味不明な主張

>・Shapeクラスにメソッド追加---(α)
Shapeクラスが汎用的に使ったり、ライブラリとして公開するクラスならどうしようもない
WPF、WinForms、Xamarinなど、プラットフォームによって描画方法は全然異なるのでDrawメソッドを決められない

>・GUI側でShapeクラスを継承したクラスを作って対応---(β)
手間が掛かり過ぎるし、構造体やsealedクラスなら継承はできない。
クラス内にフィールドで保持してもいいが、Int32WrapperとかStringWrapper、加えて列挙体や関数、タプルなんかのラッパークラスができて複雑に。
状況によってはInt32WrapperWrapperみたいなものも爆誕
406 :
デフォルトの名無しさん
2016/08/28(日) 14:43:51.29 ID:hQF+q+Zk
普通にココらへんのリンクで十分か
http://www.buildinsider.net/column/iwanaga-nobuyuki/004


>GUI側でShapeクラスを継承したクラスを作って対応
これは構文解析ライブラリは継承前のクラスを返してくるわけだから、無理があった
407 :
デフォルトの名無しさん
2016/08/28(日) 14:55:35.63 ID:14dFRx50
拡張メソッドで話がだいぶ逸れたけどなに話してたんだっけ
408 :
デフォルトの名無しさん
2016/08/28(日) 14:56:21.93 ID:QOlzH7cc
できない君か
409 :
デフォルトの名無しさん
2016/08/28(日) 15:27:24.87 ID:+mkoP4gZ
>>405
先に了解事項を書いておく。

> >staticクラスは継承出来ない
> なぜなら、それが定義だから(意訳)
これは了解。こちらも調べている限り、どうやらそのようだと分かった。
staticクラスはシングルトンの糖衣かと思っていたが、わざわざ別物を用意しているね。

> 静的クラスはシールされるため、継承できません。
> https://msdn.microsoft.com/ja-jp/library/79b3xss3.aspx
> staticクラスとSingletonでは以下の違いがあります。
> http://takachan.hatenablog.com/entry/2016/01/04/211414

したがって、疑問は何故staticクラスにしか拡張メソッドを置けないか、になり、
つまり>>378と同じで、そちらの見解は>>385というのもいい。
ただ俺はこの回答に納得しているわけではないが、
結局これはどこまでやるかということだから。
410 :
デフォルトの名無しさん
2016/08/28(日) 15:30:05.25 ID:+mkoP4gZ
次に今回の実装方式について、
(α)についてはその通り。
(β)については「継承」が出来ればそっちの方がいいが、無理なら「内包」でも問題ない。(β+)
コンストラクタでShapeを与えて内包したRectangleDraw、CircleDrawクラスを作り、
ShapeDrawクラスを継承する。
つまりラッパーオブジェクトを作成して同階層構成でXXXXDrawクラスを構成する。
これだと自前クラスなので何も問題なくOOPできるが、
コンストラクタ内では1回だけ is XXXX でswitchしなければならない。
それでも毎回記述が必要な(γ)よりマシ。

> クラス内にフィールドで保持してもいいが
後の文を読む限りこれはばらしてということだと思うが、
(β+)はばらさすにそのまま保持する。(フィールドとして Shape shapeを持つ)
そして各Drawメソッドからは this.shape.xxxxとしてアクセスする。
こうすれば、アクセサに関してもShapeの定義そのままであり、追加記述は必要ない。

これにより、外枠以外の本質的記述が(γ)に対して増えることはない。
これでどうだ?


最後に以下だが、
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
これはいろいろだいぶ違う気がするが、確認も時間がかかるし、後回しでいい。
411 :
デフォルトの名無しさん
2016/08/28(日) 15:40:18.87 ID:xWdxGs/J
パターンマッチング推進派の巧妙なアンチ書き込みか!
412 :
デフォルトの名無しさん
2016/08/28(日) 15:50:02.41 ID:+mkoP4gZ
>>406
リンク先読んだ。筆者の考え方とは同意する。

結果、俺は以下に該当するのでオブジェクト側に突っ込みたいと考える。
> 型だけを見た単純な分岐しかしない場合、
> 仮想関数を使う方が実行性能面でも保守しやすさの面でもいいだろう。

そちらは以下に該当すると考えてパターンマッチングというのも了解だ。
> 1つは、型の外に実装を書く方が好ましい場合だ。(中略)
> 特定の種類のアプリでしか使わないような機能を書く場所としては (型は)【追補】
> 不適切となる。
413 :
デフォルトの名無しさん
2016/08/28(日) 16:06:33.60 ID:+mkoP4gZ
>>405
ちなみに以下について俺の疑問点を先に挙げておく。
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している

・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。
それが一番簡単だし。
(クラス自体がstaticではないのでコンパイル時にリンクは無理)
したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
・呼び出しに失敗って何?C#ならコンパイルが通っている限りあり得ないと思うが。
(C++みたいな<reinterpret_cast>とかは無しで)
・実行時に解決って言ったって、vtableの場合は解決済みのthisポインタを持っているわけであって、
何かを比較したりすることはない。間接呼び出しになるだけ。
コストはゼロではないが、リフレクションとかとは全く違う。

URL付きのツッコミは歓迎。
414 :
デフォルトの名無しさん
2016/08/28(日) 16:30:05.10 ID:+mkoP4gZ
追記
俺の間違いが分かったので書いとく。

× > ・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。(>>413)
○ 置いてない。静的メソッドは直接呼び出し。

× > したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
○ 直接呼び出しする非virtualの方がvirtualよりは速い。
  staticメソッドには言及されていないが、多分非virtualと同じ。

> メンバ関数
> https://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/


他の下2件はどこを調べればいいか分からないのでツッコミ待ち。
よろしく。
415 :
デフォルトの名無しさん
2016/08/28(日) 18:36:26.78 ID:hQF+q+Zk
>>410
>1回だけ is XXXX でswitchしなければならない
その時にパターンマッチング使えば楽だよねって話でしょ
毎回使うかどうかは好みや書き方次第かと

>呼び出しに失敗
拡張メソッドの実装を理解してる?
ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。
https://msdn.microsoft.com/ja-jp/library/system.runtime.compilerservices.extensionattribute%28v=vs.110%29.aspx?f=255&;MSPPError=-2147217396

継承関係とは違って共通言語仕様に定められていない(はず)なので、全言語が対応していない
例えばShapeクラスとかをライブラリとして公開したとすると、他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
そうすると、存在しないメソッドは呼び出せないので失敗することになる

何なら、動的に新しい型自体を作成してメソッドに渡すことすらできる。

>実行時に解決
拡張メソッドはそもそもサポートしてない言語もあるし、全く独立したクラスなのでそもそも動的に解決するのが困難
やろうとすればたぶん共通言語仕様とかの変更が必要で影響ばかりでかくて利点が皆無
416 :
デフォルトの名無しさん
2016/08/28(日) 19:17:00.51 ID:+mkoP4gZ
>>415
いや>>352に対する君の主張は「毎回べた書き」だろ。すり替えるなよ。

それはさておき、通常はクエリメソッドを用意しておいてそれで対応だ。
例えば Shape.type で 'rectangle' や 'circle' が取れるとか。
だからパターンマッチング自体の記述は要らんよ。(見た目は同様ではあるが)
というかそれが絶対に必要ならこれまでどうしようもなかったことになっちゃうだろ。

> ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。(中略)
> そうすると、存在しないメソッドは呼び出せないので失敗することになる
だから何?コンパイラが通らないだけだろ。

話がずれているか?
上記話のすり替えをしてくる奴だから信用はしていないが。
>>405を見る限りこちらは「一般」の仮想関数だと認識して回答した。(>>413,414)
そちらは
・「拡張メソッド」の動的解決はコストが高くて、仮想関数になりえなくて、呼び出しに失敗する
ことを言っていたか?
それなら「一般メソッド」について記述した>>413,414については見解の相違なしということでいいな。

> 他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
当たり前。というか静的にリンクするんだから、namespaceに名前がない時点でコンパイルが通らないだけ。
使う気なら自前で定義なりusingしなければならないし、無ければ使えない。
多態する気なら、例えば多重継承として実装すればいいだけ。特別なコストはかからない。
実装方式は>>414のリンクに記述してあるとおり。
拡張メソッドを多重継承として実装出来ない理由があるか?

> 利点が皆無
どこがだよ?やけくそになってないか?
拡張メソッドが多態出来ればメリットがあるのは見たら分かるだろ。
今多態出来ていないのは何か理由があるか手を抜いているか(今後対応するか)だよ。
417 :
デフォルトの名無しさん
2016/08/28(日) 19:49:44.91 ID:hQF+q+Zk
>>416
>毎回べた書き
その主張は俺じゃないが?

>クエリメソッド
何を言っているんだ?今でもできるぞ??
if( hoge is Rectangle){ ((Rectangle)hoge).Draw(); }
とか。状況によってもっとわかりにくくなるから、もっと簡潔に書きたいね、という話なんですが・・・
流石に語るのにC#を知らなすぎじゃないか?

>静的にリンクする
静的にリンクしないこともある。わざわざプラグインとかDLLとか言ってるでしょ?
C#では言語仕様上、コンパイル時に継承した型をすべて把握できない

あと、「他言語は対応していない」の部分を完全に無視してるみたいだけど、そこも要点なんですが

>「一般メソッド」について記述した>>413,414については見解の相違なし
訂正が入って主張がわかりにくくなってるが、一般メソッドに関しては問題ないと思われる
拡張メソッドはC#の言語仕様ではなくて共通言語仕様の方で対応してないので、同じ仕組を実現できない

>多重継承
全く独立したクラスのstaticメソッドをどうやって多重継承するの?

>拡張メソッドが多態出来ればメリットがあるのは見たら分かるだろ
ほぼ拡張メソッドじゃなくてさっき君が言ったShapeDrawクラスを使うべき案件
僅かにメリットがあっても、共通言語仕様を置き換えて、多言語のコンパイラ(VB.NET,F#,C++/CLI,JScript.NET等)を書き換え、UnityやMono、Xamarinを対応させ、後方互換を除去してまで導入する機能かというとそうは見えないな
.NET Frameworkが始まる前とかに提案すればよかったかもしれんが
本気で完璧な利点があると思うなら、Roslynにissueを立てると良い
418 :
デフォルトの名無しさん
2016/08/28(日) 20:04:28.22 ID:hQF+q+Zk
>Shape.type で 'rectangle' や 'circle' が取れるとか。
ちなみに、これは一番危険
標準ライブラリにあるShapeクラスをA社とB社が継承し、AライブラリとBライブラリを作ったとする。
そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
そこで使うのが「型」なわけだ。

現在でも出来てるけど、コンパイラ制作とかだと頻繁に出てくるよね~、なら、パターンマッチング導入しよう!という流れかと。


ちなみに、ShapeDrawクラス見たいのにも問題はあって、例えば構文解析した要素が10000を超える巨大な木構造があるとする。
それをGUI側ですべてNodeDrawみたいなクラスにラップするとその変換にかかる時間とメモリが馬鹿にならなくなってくる
さらに、ライブラリの木構造が変更されると、GUI側ではすべて構築しなおし
手間を防ぐためにキャッシュしたり差分のみを変更して・・・という状況になる場合もある
419 :
デフォルトの名無しさん
2016/08/28(日) 20:23:46.58 ID:5A6j7Ufp
なんでこんな荒ぶってんのこいつ
とりあえず落ち着いて猫でもわかるC#でも読みなって
420 :
デフォルトの名無しさん
2016/08/28(日) 20:23:47.93 ID:+mkoP4gZ
>>417
こちらの認識は、ID:gXVhUUHW = ID:hQF+q+Zk だ。
違っていたのならすまんかった。

> クエリメソッド
クラスの中に複数種が入ることがある場合、(多態される場合)
一般的に「何が入っているか」は分かるようになっている。だからそれを使う。
C#の文法による解決は必要ない。(というかそうじゃないと動的型を取れない言語で使えない)

> あと、「他言語は対応していない」の部分を完全に無視してるみたいだけど、そこも要点なんですが
これについては関係ないとしか思えない。
拡張メソッドを自動的にエクスポート出来ると思っているのならそれが間違いだろ。
namespaceの中に拡張メソッドが見えていないと使えないのだから、
使う側が全部管理しないといけない。
同じ拡張メソッドを他でも使いたければ、その拡張メソッドを格納したクラスを使う側がusingしないといけない。
現在の実装はあくまで「コンパイラがstaticクラスのstaticメソッドに対しての関数呼び出し」に変更するだけ。
それがコンパイル時に出来なければコンパイルが通らない。他言語はどこに関係あるんだ?

> 全く独立したクラスのstaticメソッドをどうやって多重継承するの?
多重継承は全く独立したクラスを継承することですが?
当然これをやる時はvirtualにする(今現在のC#の制限事項をはがす)のだが、ついて来れているか?
元々「継承出来ないクラス」(stat;icクラス)にしか拡張メソッドを置けないのが問題であって、
拡張メソッドをシングルトンに置ければ何も問題なくなる。
そしてそれが実現出来ない技術的障害はない、というのが俺の主張。
この辺を最初から知っていて傍観してるのが>>378だろ。

> ほぼ拡張メソッドじゃなくてさっき君が言ったShapeDrawクラスを使うべき案件
いやそっちの意見は何なんだよ?
君はパターンマッチングが一番良いと思ってるんだろ?

俺は、「拡張メソッドで多態」(α)(β)(β+)の順で検討する。
ただ第一候補が今は駄目なことを知らなかったから迷走したが。
421 :
デフォルトの名無しさん
2016/08/28(日) 20:32:09.16 ID:+mkoP4gZ
>>418
> そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
それは最初からポインタの型が違うから区別出来るだろ。

> ちなみに、、、、以降(ry
それがないように、本来は「直接クラスを拡張」(α)するなり「継承」(β)するべきだろ。
やむなく内包(β+)なりパターンマッチング(γ)になった場合は変更の影響は受けるのは当たり前。
ただ、(β+)よりも(γ)の方が記述の変更量は多いよ。
その辺はMSDNにもそのまま書いてある。
> 拡張メソッドは、一般的に、必要な場合に限り注意して実装することをお勧めします。
> クライアント コードで既存の型を拡張する必要がある場合、
> 可能であれば既存の型から派生した新しい型を作成することで行ってください。
> 詳細については、「継承 (C# プログラミング ガイド)」を参照してください。
> 拡張メソッドを使用して、変更できないソース コードのある型を拡張する場合、
> 型の実装の変更により拡張メソッドが破損するというリスクを負うことになります。
> https://msdn.microsoft.com/ja-jp/library/bb383977.aspx
422 :
デフォルトの名無しさん
2016/08/28(日) 20:34:15.18 ID:veN4TyYm
>>420
何を言ってるのかよく分からんけどなんか盛大に勘違いしてる気がするw
423 :
デフォルトの名無しさん
2016/08/28(日) 20:43:32.81 ID:lqCVK6M2
彼は拡張メソッドに夢をみすぎてるんだ
現実を知らないキッズには良くあることさ
拡張メソッドで多態()
424 :
デフォルトの名無しさん
2016/08/28(日) 20:56:44.18 ID:hQF+q+Zk
こういうサンプルで示せばいいのかな?
細かく書くと面倒なので擬似コードだけど、(拡張メソッドを通常メソッドと同様に呼び出す以外は)同じことが実際にできる
https://ideone.com/hJQfol


Main.exeではShapeクラスとRectクラスが定義されている。
これ単体ならすべてのShape継承クラスが拡張メソッドDrawを持ってる

Main.exe用のプラグイン、plugin.dllを他の人が後から作り、Main.exeのShapeを継承したTriangleクラスを実装している。
Main.exeはdllを動的に読み込み、インスタンスを作り、Hogeメソッドに渡している。

ここで、plugin.dllでは拡張メソッドDrawが定義されていない。そして、この拡張メソッドの定義を強制する手段が存在しない
425 :
デフォルトの名無しさん
2016/08/28(日) 21:08:44.28 ID:hQF+q+Zk
>君はパターンマッチングが一番良いと思ってるんだろ?
いや、状況次第。ラッパークラスを作るほうが良い場合も多いと思うよ。
そのラッパークラスのインスタンスを作る時にパターンマッチ構文があれば簡潔にかけるので非常にありがたい


あと、今気づいたけど、そもそも構造体は仮想関数テーブル持ってないから多様性をもたせようが無かった
>>394でもthisポインタって言ってるけど、構造体の場合は仕組み上コピーが渡る
426 :
デフォルトの名無しさん
2016/08/28(日) 21:37:38.11 ID:+mkoP4gZ
>>424
それが、「コンパイルには通るが拡張メソッドを呼ぶと失敗する」例だというのなら、
言いたいことは分かった。

ただ、それは失敗して当然というか、
「知らない図が書けない」だけであって、実装してない部分が動かないだけ。
丁寧にやるのなら、拡張メソッドがない場合に□を
出力して対応するしかないし、それだけでしかない。(文字化けのようなもの)
(C#に実装の有無を確認する方法があるかどうかは知らない。
JavaScriptでは問題なく出来る。
拡張メソッドが多態出来るのなら、親(Shape)に□を表示させるメソッドを実装しておく)

別にそれは正しく全てを実装する時に手間が増えるわけでもない。
dllが他言語から供給されたとしても関係ない。
そもそもそちらの言うとおりShapeが演算用クラスであった場合、
クラスを追加する側にこちら『だけ』で使っている拡張メソッドを実装してくれと言うのが無理。
拡張メソッドは使う側が全部管理しなければならないだけ。実装も。

実装を強制する方法はないが、その必要もない。
自前で実装済みかどうかを判定して対応するのみ。
(定義を確認する方法がないのなら困ったことになるが、
それでも最悪try-catchは出来ると思うが、駄目なのか?)
427 :
デフォルトの名無しさん
2016/08/28(日) 21:46:13.45 ID:+mkoP4gZ
>>425
> 構造体
これはShapeがクラスではなく構造体だった仮定か?
それは最初から間違いで、クラスにしてもらうしかない。

どのやり方がいいのかは合意をとる必要はないけど、
俺が思うには「拡張メソッドで多態」が出来れば全て満足で上手く行く。
現状の拡張メソッドの仕様では旨味が無く、使いどころがない。
正直C#でこの手の「残念仕様」を見るのは初めてで、少し驚きだ。
(C#の仕様はどれもこれも何を意図しているか大体分かるものばかりだった)
ただ、やる気だけの問題だと思うから、今後拡張される可能性はあると俺は思うけど。
428 :
デフォルトの名無しさん
2016/08/28(日) 21:52:14.06 ID:veN4TyYm
>>427
そんな自分で自分の足を打ち抜くような機能が入るわけないじゃんw
429 :
デフォルトの名無しさん
2016/08/28(日) 21:55:53.66 ID:+mkoP4gZ
追加
>>424
その場合、仮にdll側で拡張メソッドを実装してくれていたとしても、インポート出来ないだろ。
こちら側がコンパイル時に見えてないと駄目なんだからさ。
だから今の仕様は「全部自前で用意しろ」なんだよ。
俺もそれでいいと思うし。

拡張メソッドを実装したクラスをインポートするっていうことも出来る(ようになる)のかもしれんが。
430 :
デフォルトの名無しさん
2016/08/28(日) 22:01:29.02 ID:xWdxGs/J
これを15年前の世界から書き込んでるのだから、彼は凄いよ。
virtualも拡張メソッドも理解出来てなくて仕方ない。まともな動作環境すらない世界で仕様を理解しようと、間違ったことをワザと書いて、我々に答えさせてるんだから。
431 :
デフォルトの名無しさん
2016/08/28(日) 22:20:25.25 ID:23NihOTg
C#の拡張メソッドをJavaScriptのプロトタイプ拡張と同じ感覚で考えてんのかね
スクリプト言語やりすぎると頭おかしくなるってのは本当だったんだ
432 :
デフォルトの名無しさん
2016/08/28(日) 22:24:20.01 ID:ev9L5f83
javascriptでもプロトタイプ拡張は99.9%バッドプラクティスだけどな
気づくのに数年掛かった(prototype.jsが持て囃された期間を考えてみたまえ)程度にあいつらフロントエンジニア共は馬鹿だ
433 :
デフォルトの名無しさん
2016/08/28(日) 22:46:16.98 ID:hQF+q+Zk
>>426
それがC#の設計思考とずれてるんだよ。
できるならば静的に解決したい。コンパイルに通ったならメソッドが存在し、存在することを前提に最適化したい。
ただの静的メソッド呼び出しだったのに、動的に確認する分かなりコストが高くなる。数万の木構造にやるなら1msが命取り

あとは、それを実装すると名前解決が異常に複雑になり、今後の言語拡張の障害にもなるな

その程度で良いならRoslynを使ってVSのプラグインでshape.Draw()ってコードをパターンマッチングに展開するプラグインを作ればいいんじゃないかな。
434 :
デフォルトの名無しさん
2016/08/28(日) 23:08:26.53 ID:+mkoP4gZ
>>433
何について言っている?
「拡張メソッドの多態」についてなら、既に言ったようにローカルに多重継承させればいいだけ。
実装自体も無理はないし、動作速度も問題ないと思うよ。
各クラスのvtableをコピーすることにはなるけど、
オブジェクトを直接vtableに載せていることはないだろうし、
コピー領域は、sizeof(void*)*フィールド個数 Bytes でしかない。
もちろん他の実装も出来るだろうし、いずれにしても必要になればMSが検討すればいいだけ。

多分ここら辺の話が通じないのは、君がvtableの実装を理解出来ていないのだと思うよ。
それは>>414にあるURLを全部読めばいい。
C++やC#のコンパイル言語は、メソッドは動的に名前で解決するわけではないんだよ。
(なおJavaScriptは全面的に動的解決だが、それでもC#の1.5倍ほど遅いだけ。)

俺は「拡張メソッドの多態」は欲しいと思う。
君はこれについて「要らない」のか「欲しいけど出来ないという意見」なのかはっきりしないが。
435 :
デフォルトの名無しさん
2016/08/28(日) 23:14:10.11 ID:rlU+i3Q+
そんな極々ニッチな需要のためにMSが動くわけないだろ
そんなに自分のアイデアが優れてると思うなら実装して然るべき場所で評価してもらえよ
今やコンパイラもオープンな時代だから出来ないことはない
良い加減うっとおしいんだよ
攻撃的な口調で長文連投すんなハゲ
436 :
デフォルトの名無しさん
2016/08/29(月) 00:39:03.09 ID:0+IBopma
>>434
こちらのvtableの知識を疑う前に、staticがvtableにあると勘違いしていた理由を考えるとかC#の勉強するとかしたほうが良いかと

プラグイン等により拡張メソッドを持たないインスタンスが渡ることを考慮し、vtableの実行の前に存在判定が必要で結構コストになる
また、Javascriptが早いのはJITが鬼のように最適化してるからで、そこまで考えるとstaticメソッドのインライン展開が妨害されるとか、

質問としては、vtableのコピーでなんでフィールドの個数が出てくるの?
あと、別のファイルだと別の拡張メソッド呼び出しになるかもしれんが、どのタイミングでインスタンスのvftable書き換えるの?
その場合、拡張メソッドの呼び出しはすべてスレッドセーフじゃなくなる?

今のところメリットが0とは言わないが、メリット<<<実装の手間、影響
437 :
デフォルトの名無しさん
2016/08/29(月) 00:58:40.06 ID:bQrj623w
C#でアスペクト注入したい
RealProxyか実行時コンパイル以外に手段はある?
438 :
デフォルトの名無しさん
2016/08/29(月) 14:42:36.92 ID:iNmqLiUV
c#を主に使っていて時々php書くとphpが使いにくいてイライラするのですが、皆さんそういう事有りますか?
439 :
デフォルトの名無しさん
2016/08/29(月) 14:53:02.96 ID:fXL0TTLw
>>438
フツー
440 :
デフォルトの名無しさん
2016/08/29(月) 15:11:05.94 ID:yhjzEVuM
歯ブラシでプログラムを書こうとしたら辛いのは当たり前だろう
https://en.m.wikiquote.org/wiki/Rasmus_Lerdorf
>PHP is about as exciting as your toothbrush.
441 :
デフォルトの名無しさん
2016/08/29(月) 18:41:52.94 ID:IWCj2egw
ASP.NET CoreでWEBアプリを作っています
機械的に処理を行うためHTMLの代わりにJSONを返さなくてはいけません
この場合MVCで作るべきでしょうか(ViewでJSONを生成)
442 :
デフォルトの名無しさん
2016/08/29(月) 18:45:13.24 ID:zht9j9T7
>>441
なぜViewで?
443 :
デフォルトの名無しさん
2016/08/29(月) 18:52:19.01 ID:IWCj2egw
>>442
どのような設計が正しいのかを聞きたいです
簡単に言うとTwitterのUIは作らずにJSONを返すAPIだけをASP.NET Coreで作る感じです
444 :
デフォルトの名無しさん
2016/08/29(月) 18:54:32.44 ID:zht9j9T7
>>443
Web API(CoreではMVCと統合されたけど)を使いたいってこと?
445 :
デフォルトの名無しさん
2016/08/29(月) 18:57:50.47 ID:IWCj2egw
>>444
そうです
ASP.NETの無印はWEB APIがあるみたいですが、Coreだとないみたいなので…
446 :
デフォルトの名無しさん
2016/08/29(月) 19:04:08.33 ID:zht9j9T7
>>445
Coreではライブラリが統一されただけだから普通に使えるよ。

https://docs.asp.net/en/latest/tutorials/first-web-api.html
447 :
デフォルトの名無しさん
2016/08/29(月) 19:10:38.42 ID:IWCj2egw
>>446
ありがとうございます
WEB APIはCoreでも使えたんですね

もう一ついいですか?
ASP.NET無印を使ったことがなく、いきなりCoreから入るのですが、
まだCoreがリリースされてあまり経っていないらしく情報が少ないのですが、
無印の情報はCoreにもある程度は応用出来るのでしょうか?
448 :
デフォルトの名無しさん
2016/08/29(月) 19:35:09.64 ID:zht9j9T7
>>447
無印って、ASP.NET Web APIのことを言ってる?基本は一緒だけど、Coreが出た以上、特に今までのWeb APIはオワコン
Coreを使わなければならない理由があるの?
449 :
デフォルトの名無しさん
2016/08/29(月) 20:37:32.13 ID:IWCj2egw
>>448
Linux鯖を使いたいから
WinVPS高いし
450 :
デフォルトの名無しさん
2016/08/29(月) 21:18:16.62 ID:shRUR2oh
高いのは嫌だリスクは取りたくないってガキじゃあるまいし
451 :
デフォルトの名無しさん
2016/08/29(月) 21:19:28.87 ID:rWWvEZg8
>>450
ここは普通にガキが来る板だぞ
452 :
デフォルトの名無しさん
2016/08/29(月) 21:33:00.30 ID:oeiBIMAZ
ガキだろうが年寄りだろうがケチりたい人はケチりたいんじゃね
453 :
デフォルトの名無しさん
2016/08/29(月) 21:34:22.99 ID:IWCj2egw
>>450
ガキだから金がない
さくらVPSでも結構きついし
454 :
デフォルトの名無しさん
2016/08/29(月) 21:49:29.10 ID:1G08D0Wz
お金が無い分、努力でカバーだね。
情報少ないから、ぜひ先駆者となってくれ!
455 :
デフォルトの名無しさん
2016/08/29(月) 21:52:42.08 ID:IVf1OSSE
>>450
> 高いのは嫌だ

はわかるけど

> リスクは取りたくない

ってどこから出てきたんだ?
Linux 鯖で .Net なんてリスクだらけだと思うが
456 :
デフォルトの名無しさん
2016/08/29(月) 22:01:53.90 ID:HSXk2xhn
Node.jsとかでよくね?
ちょっとしたAPIにC#とか大袈裟すぎでしょ
457 :
デフォルトの名無しさん
2016/08/29(月) 22:14:41.24 ID:IWCj2egw
>>456
ちょっとしたじゃなくて結構大規模になる予定
あと動的型付けは苦手(TypeScriptはあるけどC#の方が好き)
458 :
デフォルトの名無しさん
2016/08/29(月) 22:55:39.71 ID:AyW9Pu98
>>457
Linuxには精通してるってことでいいんだよね?
459 :
デフォルトの名無しさん
2016/08/29(月) 23:00:29.13 ID:IWCj2egw
>>458
ラズパイで鯖建てする程度なら出来るけど
460 :
デフォルトの名無しさん
2016/08/30(火) 10:16:24.70 ID:8eGP8u09
まあコンソール使えりゃどうにかなるかな
461 :
デフォルトの名無しさん
2016/08/31(水) 22:36:07.93 ID:0fzmkTEU
C# 7、そしてその先へ: 非同期処理(前編) - Task-like
http://www.buildinsider.net/column/iwanaga-nobuyuki/009

C# 7、そしてその先へ: 非同期処理(後編)- 非同期シーケンス
http://www.buildinsider.net/column/iwanaga-nobuyuki/010
462 :
デフォルトの名無しさん
2016/08/31(水) 22:39:34.64 ID:97WvllZy
コピペマンって本人は親切のつもりなんだろうし、本人気づいてないだろうけど不気味だよw
463 :
デフォルトの名無しさん
2016/08/31(水) 23:35:57.85 ID:+hoACOJG
パフォーマンスをシビアに意識するのはもはやライブラリ作っている人やそういった
高速化を専門にしている人だけあって毎日コード書いてる人間としては書きやすさだけが気になる
464 :
デフォルトの名無しさん
2016/08/31(水) 23:46:34.06 ID:+hoACOJG
今後もまた無駄な名前空間がぼこぼこ増えていくんだろう
MSはnamespaceをごちゃごちゃさせ過ぎてる
すっきり数本の柱にしておけばよかったのに細分化させすぎだ
465 :
デフォルトの名無しさん
2016/08/31(水) 23:56:22.35 ID:lLnW0vHt
新しいおもちゃが手にはいると遊びたくなるものさ
466 :
デフォルトの名無しさん
2016/09/01(木) 00:11:33.35 ID:Xz8sejsg
Scalaの糞の山に比べたらこの程度可愛いもん
467 :
デフォルトの名無しさん
2016/09/01(木) 00:44:15.01 ID:YmetP/KJ
大きすぎるnamespaceよりマシ
468 :
デフォルトの名無しさん
2016/09/01(木) 04:01:29.40 ID:rDaq2Eci
毎日コード書ける仕事したい。
机上で数ヶ月会議して設計して、作って仕様変更とか無駄なことやめたい。
469 :
デフォルトの名無しさん
2016/09/02(金) 15:05:01.55 ID:oqbH3zDE
今 Microsoft Visual Studio Community 2015 だかってのをインストールした

C#は全く知らない。
この統合環境の使いかたもほぼ分からなくて困ってる。
CUI のhello worldだけは出力させてみた。


こんな俺に学習用のいいサイトよろしくお願いします。
470 :
デフォルトの名無しさん
2016/09/02(金) 15:13:59.98 ID:LbMFm82d
とりあえず ++C++; 未確認飛行 C でいいんじゃないでしょうか
471 :
デフォルトの名無しさん
2016/09/02(金) 15:29:48.83 ID:oqbH3zDE
ありがとう。ではそこで学習する事にします。


今とりあえず
int i = 10;
Console.WriteLine(i + " " + "hello_world");
これを実行させてみたのですが、
スクリプトのごとく数値が都合よく文字に変換されて実行されました。

数値と文字は暗黙の自動変換なのでしょうか?
472 :
デフォルトの名無しさん
2016/09/02(金) 15:41:30.76 ID:Pni+o0iv
+ 演算子 (C# リファレンス)
https://msdn.microsoft.com/ja-jp/library/k1a63xkz.aspx
473 :
デフォルトの名無しさん
2016/09/02(金) 15:53:07.39 ID:oqbH3zDE
ありがとう
474 :
デフォルトの名無しさん
2016/09/02(金) 18:32:47.06 ID:Q71J+JAr
Microsoft.Office.Interop.Excelのcomを使って、既存のグラフシートを編集しようと思うのですが、
下記のコードを実行すると、エラー0x8002000Bが出てアクセスできません。

Worksheet ws = wb.Sheets["graph1"];

既存のグラフシートにアクセスするにはどうしたらいいのですか?
475 :
デフォルトの名無しさん
2016/09/02(金) 18:41:51.61 ID:hbWVf6eK
>>474
そんなことやったことないんでよく知らんけど、ここ見る限りSheetsじゃなくてChartsの方
使わないとだめなんじゃないの?
https://msdn.microsoft.com/ja-jp/library/office/ff821062.aspx
476 :
デフォルトの名無しさん
2016/09/02(金) 19:22:01.67 ID:VaHoIWRz
IDE使えないって人に++c++進めるのはどうかと思うけどw
477 :
デフォルトの名無しさん
2016/09/02(金) 21:17:39.97 ID:oqbH3zDE
なんでボールから入るんだよ
478 :
デフォルトの名無しさん
2016/09/02(金) 21:17:56.50 ID:oqbH3zDE
ごめんスレ間違えた
479 :
デフォルトの名無しさん
2016/09/03(土) 01:22:42.31 ID:PSgZ0shn
いままでvbaで開発してて最近c#勉強してるんだけど
visual studioで開発するときvbaでいうモジュール単位(vb editor上でmoduleっていわれるやつ)に分ける方法教えてクレメンス

クラスとか作ればソリューションエクスプローラに自動的に追加されるっぽいけど
コードが縦に長くなって開発しづらい

たぶんvbeなんかよりもよっぽど開発しやすい方法があるんだろうけど
プログラミングの仕方というより開発の仕方みたいなのを解説してくれているhpとか本があったら教えてほしい

てかoopの考え方を理解出来てないのが問題かもしらん

スレ違いだったらごめんなさい
480 :
デフォルトの名無しさん
2016/09/03(土) 01:27:37.27 ID:Jo2eCVzY
>>474
結局質問だけしてトンズラか。どうせマルチくんなんだろうな。

>>479
君はVBAも良く分かってないと思うw
とりあえずC#にモジュールはない。
VB.NETにはあるけど普通はまず使わない。
481 :
デフォルトの名無しさん
2016/09/03(土) 01:33:50.12 ID:PSgZ0shn
>>480
いわゆるモジュールじゃねーっす
エクセルとかもってるならvbe開いてモジュール追加って出来るあれです
んで、開発の仕方みたいなのの情報しりませんか
482 :
デフォルトの名無しさん
2016/09/03(土) 02:08:46.56 ID:AuZUWRpv
>>481
OOP学んで適当にファイル分割するのが基本かな
あとは、クラスビューとか定義に移動とかいろんな機能があるから好みの使い方を見つけるしかなさそう

オープンソースとか読むと参考にはなる
こんなに細分化するかーとか、この書き方は初めて見たというのも時々あるので、人の好みがそれなりに強いかも
483 :
デフォルトの名無しさん
2016/09/03(土) 02:11:08.15 ID:FcIsU4jd
>>481
ソースファイルを追加したいなら
プロジェクトを右クリックして
追加 - 新しい項目
コード - クラス
で、名前を入れて出来上がり
484 :
デフォルトの名無しさん
2016/09/03(土) 02:21:21.74 ID:PSgZ0shn
>>482
あじゃっす
王道なしってことっすね

vbaでつくった1万行程度のプログラムをc#で作り直そうとしたら
にっちもさっちもいかなくて
(最初はbutton click event以下に超長いコードかいてたw)

c#サンプルコードでググったやつをいくつか見たんですけどどれも短めで
オープンソースっすか、とたんに難しくなりそうで敬遠してたんですけど、見てみます

>>483
コレダ!
あざーす!
485 :
デフォルトの名無しさん
2016/09/03(土) 02:50:32.40 ID:GFDCUR4+
>>483
全然関係ない俺だけどそれ知りたかったありがとう
統合環境超むずい
486 :
デフォルトの名無しさん
2016/09/03(土) 07:36:39.22 ID:FcIsU4jd
「新しい項目」って言うのがちょっと思い付きにくいかな
新しい項目って言うのを覚えておけば、右上の「クイック起動」に新しい項目って入れると
プロジェクト-新しい項目の追加...
って表示されるから覚えておくとなんかの役に立つかも
追加でも同じように表示されるけど、追加は他にも
ファイル-ソース管理に追加
とか似たような項目がいっぱい出てきてちょっと探しにくい
487 :
デフォルトの名無しさん
2016/09/03(土) 10:32:43.91 ID:08YRGffV
>>485
プログラミングはやめた方がいい。
言語のセンスなさすぎ。
488 :
デフォルトの名無しさん
2016/09/03(土) 12:15:30.20 ID:is8rsJHF
波カッコってひょっとして必要なかったんじゃないか
インデントが有ればブロックは表現できるし
波カッコを使うとタイプ量が増えるしネストするとスコープが逆にわかりにくい
C# 8.0ぐらいで良いから波カッコを使わないように仕様を変えて欲しい
489 :
デフォルトの名無しさん
2016/09/03(土) 12:18:06.98 ID:e1RDrry0
だったらC#やめてPython使ってろ
490 :
デフォルトの名無しさん
2016/09/03(土) 12:18:56.50 ID:vfo9HhT2
pythonが静的言語だったらな
491 :
デフォルトの名無しさん
2016/09/03(土) 12:23:53.71 ID:XJfcWEgm
>>488
変えられるわけ無いだろアホか
492 :
デフォルトの名無しさん
2016/09/03(土) 12:28:46.83 ID:is8rsJHF
後ろ波カッコのうっとおしさは異常
なんでこんなゴミみたいな記号のために丸々1行も使ってんだと怒りを覚える
493 :
デフォルトの名無しさん
2016/09/03(土) 12:32:05.43 ID:vfo9HhT2
ironPythonを静的言語に改造したようなのない?
ないなら作ろうぜ
494 :
デフォルトの名無しさん
2016/09/03(土) 12:49:16.86 ID:bNt+mNAy
後ろ波かっこぐらいでうっとおしいと言うのは甘い
XAML見たら発狂するぞ
495 :
デフォルトの名無しさん
2016/09/03(土) 12:49:41.16 ID:h2wll6jz
>>492
ブロックの終端を明示するためだろ。導師も言ってるじゃん、「暗示より明示」って。
496 :
デフォルトの名無しさん
2016/09/03(土) 12:53:38.71 ID:28oZslrG
作ろうぜって誰に向かって言ってんだ
勝手にテメェでウンコ排出してろボケ
497 :
デフォルトの名無しさん
2016/09/03(土) 13:10:16.03 ID:NvcWw3DB
>>492
お前が!存在に状態遷移すれば解決するよ
498 :
デフォルトの名無しさん
2016/09/03(土) 13:29:53.52 ID:vv4I0YMm
Pythonのフォーラムで定期的にインデントブロックの代わりに
ブレースブロックを採用して欲しいって要望が出てるくらいには、あれも好かれてないよ
実際にブレースブロックに改造している奴がいるくらいだ

結局は隣の芝が青く見える現象だと思われる
499 :
デフォルトの名無しさん
2016/09/03(土) 13:32:32.69 ID:is8rsJHF
要するにどっちでも良いわけだろ
だったらコンパイルオプションで選べるようにしろよ
500 :
デフォルトの名無しさん
2016/09/03(土) 13:33:39.23 ID:XJfcWEgm
>>499
お前が実装してプルリクしてみろよカス
501 :
デフォルトの名無しさん
2016/09/03(土) 13:36:43.12 ID:l/8ShBlw
ぶっちゃけC言語が嫌われるトップ理由が
{ } だと思う
502 :
デフォルトの名無しさん
2016/09/03(土) 13:42:35.19 ID:is8rsJHF
だよね
{}は利便性が悪いだけでなく見た目も美しくない
503 :
デフォルトの名無しさん
2016/09/03(土) 13:44:11.62 ID:HDnGX34n
ネタ投入のつもりなのか、それとも今時パスカルな人なのかな。
そんなにブレース嫌いならVB選べばいいよ。

どうせ出来ることはほとんど違わない。
ラムダ式とか死ぬほど冗長だけどw
504 :
デフォルトの名無しさん
2016/09/03(土) 13:52:01.54 ID:e++gk4lZ
後ろ波カッコっていうから
てっきり

if() { ←後置のことかと思ったら

} ←こっちのことか
505 :
デフォルトの名無しさん
2016/09/03(土) 14:36:21.94 ID:bNt+mNAy
beginとendを{と}に書き換えるプリプロセッサでも作れよ
506 :
デフォルトの名無しさん
2016/09/03(土) 15:17:16.22 ID:e++gk4lZ
そういえば大昔のC言語の本では
beginとendを#defineでカッコに置換するというネタが普通に書かれてたとか…?
507 :
デフォルトの名無しさん
2016/09/03(土) 15:24:50.13 ID:HDnGX34n
>>506
普通かどうか知らんけどこれだよね
http://www.pro.or.jp/~fuji/mybooks/cdiag/
508 :
デフォルトの名無しさん
2016/09/03(土) 15:39:03.09 ID:vfo9HhT2
インデント>=括弧>>>>>>>>>>>>>>begin,end
begin,endのメリットは全く分からない
509 :
デフォルトの名無しさん
2016/09/03(土) 15:40:48.38 ID:08YRGffV
>>508
他の言語との違いを出すための苦肉の策。
510 :
デフォルトの名無しさん
2016/09/03(土) 16:15:14.95 ID:is8rsJHF
>>508
目に優しい
511 :
デフォルトの名無しさん
2016/09/03(土) 16:21:08.95 ID:teO92MZf
{ }
を透明色にするエクステンションを作れば解決するだろうが!
512 :
デフォルトの名無しさん
2016/09/03(土) 16:44:05.68 ID:GPAGDQ3+
バグ死
513 :
デフォルトの名無しさん
2016/09/03(土) 18:58:56.20 ID:abnGTaRM
>>507
そうだよ
診断室とここのスレタイの相談室を掛けたんだよ
514 :
デフォルトの名無しさん
2016/09/03(土) 19:57:10.80 ID:i/vdkCcD
ASP.NET WebFormsってあるじゃん
入力値の検証コードを書く仕事をやらされてるんだけどさ
何回も何回も同じような(でも微妙に違う)コードを書かされる拷問みたいになってるんだけどこれうまいことDRYできないの?
クライアントサイドのイベントハンドラで検証
サーバーサイドのイベントハンドラやページメソッドで検証
入力モデルにバインドしてローカルサービで検証
といったように少なくとも1リクエストで3回はよく似たコードを書いてる
コントロールが多いエンドポイントだと死んでしまう
515 :
デフォルトの名無しさん
2016/09/03(土) 21:23:26.09 ID:NvN4PBVL
>>514
モデルクラスに入れてからまとめて検証すりゃいいでしょ
クライアントサイドはサーバー側でREST API用意しといてAJAXで呼べばいい
516 :
デフォルトの名無しさん
2016/09/04(日) 03:17:01.13 ID:Q23f0Xjy
>>514
WEBフォームだろ?
カスタムの検証コントロール作ればいいんじゃないかね
517 :
デフォルトの名無しさん
2016/09/04(日) 14:51:52.34 ID:0IhXUzhb
>>516
それは試したけど柔軟性がないから断念した
カスタム検証コントロールではまずクライアントサイドのカスタム検証ができない
それに検証前後に簡単に処理をフックする事ができない
やろうと思えばできない事もないけど自動生成されたコードにアクセスする必要があるからメンテナンスの不安がある
518 :
デフォルトの名無しさん
2016/09/04(日) 19:22:49.84 ID:NWup8pYR
>>517
全部サーバーサイドでやればいいんじゃないか?
519 :
デフォルトの名無しさん
2016/09/04(日) 20:26:43.89 ID:Q23f0Xjy
>>517
もしかして、CustomVaidatorの話かそれ?
祖じゃなくて、自分で検証するコントロール作れって話だぞ
クライアント用のスクリプトも全部自分で出力できるぞ

これで柔軟性がないってなら、WEBフォームじゃ無理ってことだ
520 :
デフォルトの名無しさん
2016/09/04(日) 20:57:02.22 ID:0IhXUzhb
>>519
CustomValidatorの事を言った
もしかしてCustomValidatorってみんな使ってないの?
521 :
デフォルトの名無しさん
2016/09/04(日) 21:18:42.69 ID:Q23f0Xjy
>>520
CustomVaidatorでもクライアントスクリプトでのカスタム検証ぐらいできるけどな
毎回似たようなコード書かないとダメだが
この手間と検証タイミングの問題だけクリアできるならCustomVaidatorでも充分だろ
522 :
デフォルトの名無しさん
2016/09/04(日) 21:41:36.27 ID:0IhXUzhb
>>521
CustomValidatorもうちょい調べた
クライアントサイドの検証は出来た
でも検証前後に処理をフックするってのがやっぱり出来ない
結局のところカスタムコントロールで検証もやってしまった方が良さそう
523 :
デフォルトの名無しさん
2016/09/10(土) 16:11:25.20 ID:Wm1HNmHU
ファイル選択ダイアログを使ったプログラムを組んでいます。

OpenFileDialog ofd = new OpenFileDialog();

.csv ファイルのみ選択可能な状態にしたいのですがこの指定では
エラーになってしまいます。どう修正すれば良いでしょうか?
ofd.Filter = "CSVファイル(*.csv)";
524 :
デフォルトの名無しさん
2016/09/10(土) 16:14:00.08 ID:/+pbEB3C
MSDNの解説読もう
525 :
デフォルトの名無しさん
2016/09/10(土) 16:14:42.14 ID:nYtOzCtO
openfiledialog 拡張子 制限
でぐぐれ
526 :
デフォルトの名無しさん
2016/09/10(土) 17:18:14.52 ID:Wm1HNmHU
>>525
サンクス

解決
527 :
デフォルトの名無しさん
2016/09/10(土) 17:40:43.95 ID:qbdJrNQP
っていうか、F1叩くだけでMSDNがすぐ見られるのに
なんでわざわざより手間をかけて2chで質問するのよw
そこが理解できんよw
528 :
デフォルトの名無しさん
2016/09/10(土) 17:47:35.88 ID:nYtOzCtO
そら無能だからだよ。そんなこともわからないのかよw
529 :
デフォルトの名無しさん
2016/09/12(月) 17:41:15.35 ID:tEgJE/3d
素人です
CommonSaveFileDialog で [ファイルの種類] を変えてもファイル名に反映されません
SaveFileDialog のように拡張子を自動で付加できるようにする方法を教えてください
530 :
デフォルトの名無しさん
2016/09/12(月) 17:43:59.26 ID:aOoYdSpX
初心者むけのスレがあるよ

ふらっと c#って名前
531 :
デフォルトの名無しさん
2016/09/12(月) 17:45:44.98 ID:6Vx7Y6GR
FileAsShellObject.ParsingName
532 :
529
2016/09/12(月) 18:17:48.59 ID:tEgJE/3d
>>530
ありがとうございます
今後利用します

>>531
ありがとうございます
しかしながらこちらを使っても結果が FileName と変わらないのです
ShowDialog の後に取得していますが当方の使い方が違ってます?
533 :
529
2016/09/12(月) 18:34:28.38 ID:tEgJE/3d
すみません解決しました
DefaultExtension を指定するとおkなようです
そうしてたつもりがちゃんと出来てませんでした
534 :
デフォルトの名無しさん
2016/09/15(木) 14:24:50.81 ID:NBzoNAq4
すみません。Moq について質問です。
インタフェースをMock化した時とか、Setupしていないメソッドやパラメータが呼ばれた時に例外を吐くように設定したいのです。
入り組んでいて、何が呼ばれるのか追いかけるのに疲れました。
例外を吐いてくれれば、Setupしなくちゃと分かるので、デフォルトで例外を吐くような機能があるんじゃないか?
と、ググろうとして・・・思いつきませんでした。

どうすれば良いでしょうか?


・・・とか書いていたら、自己解決してしまいました。
https://github.com/Moq/moq4/wiki/Quickstart#customizing-mock-behavior

var mock = new Mock<IFoo>(MockBehavior.Strict);
としろと。

ちなみに
var mock = new Mock<Foo>(MockBehavior.Strict);
とインスタンス化出来る実体があると、そいつのインスタンスを作って、Proxyとして動いてしまった・・・
インターフェース抽出してMock作る必要があるのか。


そして、このレスは某所に誤爆していたものを転載・・・
535 :
デフォルトの名無しさん
2016/09/15(木) 14:32:21.46 ID:QeXjnd/u
そういうつぶやきはTwitterがいいと思うぞ
536 :
デフォルトの名無しさん
2016/09/15(木) 14:53:11.09 ID:Spuf+iD1
アロエにでも聞いてもらえー
537 :
デフォルトの名無しさん
2016/09/15(木) 21:14:03.89 ID:gHnq4He4
Mockフレームワークは仕事を増やすだけ
538 :
デフォルトの名無しさん
2016/09/15(木) 21:57:08.07 ID:Cj/yMtkH
モックは自分に都合のいい脳内彼女を相手に恋愛の練習してるようなもんだからな
539 :
デフォルトの名無しさん
2016/09/15(木) 22:11:05.27 ID:18iMvBey
夢から覚めなきゃあそれで十分だあ
540 :
デフォルトの名無しさん
2016/09/15(木) 22:28:27.16 ID:xWhZtUbs
おじさんが子供の頃樫木モックってアニメがありました
541 :
デフォルトの名無しさん
2016/09/16(金) 07:26:46.50 ID:LunKPrNc
脳内彼女が正しい応答をすることをどうやって保証するんだろうな
(return thisを除く)メソッドの戻り値やgetterをあまり使わない「言いっぱなし」が基本の
ガチなOOPならインラインのモックは有効だけど、そうでないなら
普通にボトムアップでやるか、どうしてもモックが必要なところ(IOなど)はちゃんと正しく実装した再利用可能なクラスを作ったほうがいい
542 :
デフォルトの名無しさん
2016/09/17(土) 00:22:09.05 ID:cOwk44uY
ユニットテストは品質保障ではなく開発者のためのテストの意味合いが強い
だからモックが正しい動作をするという保障は必要ないんだよ
開発者が納得して開発の助けになればそれでいい
543 :
デフォルトの名無しさん
2016/09/24(土) 11:32:54.80 ID:oYgGfkv1
ロジックの奥の方でたまにしか使わないようなのを隅々までテストするには有効
544 :
デフォルトの名無しさん
2016/09/24(土) 14:00:54.96 ID:yvgHPK9s
C#のファイナライザって同時に複数のスレッドで走る事ってあるんですか?
またはアプリケーションのスレッドと同時に動く事はあったり?

ファイナライザでスレッドセーフ意識していないコードを書いても特に何も問題は起きていないようなのですが、たまたまでしょうか。

https://msdn.microsoft.com/ja-jp/library/ff647790.aspx

「このため、Microsoft は将来的に、CLR で複数のファイナライザ スレッドを実装することを選択するかもしれません。」
とありますが、これが書かれたのは2005年です。もう変わっていたりして?
545 :
デフォルトの名無しさん
2016/09/24(土) 16:29:11.82 ID:78bORDZY
ファイナライザは最後の手段だから、そんな複雑さを伴う処理は書かないのが無難。
546 :
デフォルトの名無しさん
2016/09/24(土) 16:49:31.44 ID:g/gfVTwZ
複数のスレッドからファイナライザを呼び出すような作りって、あまり良い作りとは思えないけどな。(ボソッ
547 :
デフォルトの名無しさん
2016/09/24(土) 18:16:20.97 ID:KT7brPF3
スレッドセーフかどうかと、再入可能かどうかをごっちゃにしてる気がする。(ボソッ
548 :
デフォルトの名無しさん
2016/09/24(土) 18:45:43.08 ID:K7zHMZhh
(ボソッ
↑何これ
549 :
デフォルトの名無しさん
2016/09/24(土) 19:38:48.75 ID:Ww4Eww29
プライドと承認欲求と予防線を混ぜて発酵させたもの
550 :
デフォルトの名無しさん
2016/09/24(土) 19:59:25.35 ID:hsY2X9yo
(^o^)ノ<つぶしあえー
551 :
デフォルトの名無しさん
2016/09/27(火) 00:41:50.01 ID:rJ2xXuAE
階層構造もいい具合に空気読んでマッピングしてくれるマッパーってないの?
552 :
デフォルトの名無しさん
2016/09/27(火) 03:04:59.08 ID:D+6ASUN2
string[] arr = { "aa", "bb", "cc" };
として、
var dic = new Dictionary<string, string[]>{
  { "1", arr },
  { "2", { "aa", "bb", "cc" } } // エラー
};
とすると二番目でエラーが出るのですが何故でしょうか?
553 :
デフォルトの名無しさん
2016/09/27(火) 03:19:47.71 ID:w5gpFchP
String[]がnewされてないから
554 :
デフォルトの名無しさん
2016/09/27(火) 03:22:44.52 ID:D+6ASUN2
>>553
でも一番目はエラーしないのですが。
なぜでしょうか?
555 :
デフォルトの名無しさん
2016/09/27(火) 03:26:44.53 ID:0EtDfixS
>>552
{ "2", new [] { "aa", "bb", "cc" } }

{ "aa", "bb", "cc" }だけじゃ、型推論で(stringの)配列か判断出来ない。
arrの方は宣言時に型を指定してる。
556 :
デフォルトの名無しさん
2016/09/27(火) 03:29:00.59 ID:D+6ASUN2
>>555
>{ "aa", "bb", "cc" }だけじゃ、型推論で(stringの)配列か判断出来ない。
でも最初に
new Dictionary<string, string[]>{
としているので、二番目の引数はstring[]だと推論出来るんじゃないですか?
557 :
デフォルトの名無しさん
2016/09/27(火) 03:42:17.76 ID:0EtDfixS
言われてみたらそうだね。
558 :
デフォルトの名無しさん
2016/09/27(火) 04:22:18.90 ID:9c0zm0tq
エラーメッセージ見て推論できないのは頭が悪い
559 :
デフォルトの名無しさん
2016/09/27(火) 04:36:36.79 ID:w5gpFchP
確認したら型推論関係なくただの文法エラーだった
560 :
デフォルトの名無しさん
2016/09/27(火) 04:55:56.67 ID:D+6ASUN2
>>559
エラーしない一行目のarrをそのまま置き換えたのが二行目なのに
なぜ文法エラーになるのでしょうか?
561 :
デフォルトの名無しさん
2016/09/27(火) 05:04:50.31 ID:w5gpFchP
エラーが出た部分をコンパイラが配列初期化子として認識していない模様
同じ文でも構文解釈の位置によって意味が変わることはままある
562 :
デフォルトの名無しさん
2016/09/27(火) 05:35:54.50 ID:jYmbv1HX
new string[] {"a", "b"}

{"a", "b"}
のように省略できるのはフィールドとローカル変数の宣言時だけ
563 :
デフォルトの名無しさん
2016/09/27(火) 08:16:29.35 ID:l7d7Fmom
今時new省略の配列初期化子なんか使わない方がいいよ
型推論が無かった頃の遺物で一貫性がない
564 :
デフォルトの名無しさん
2016/09/27(火) 09:35:34.37 ID:w5gpFchP
language specificationを改めて見返したら
配列初期化子のnewが省略できるって記載はないのな
前の版にはあったのかな
565 :
デフォルトの名無しさん
2016/09/27(火) 10:51:33.37 ID:l7d7Fmom
>>564
記載があるとしたら変数の宣言や初期化のところじゃない?
new省略の配列初期化子は最近のC#でいう初期化子とは別物で、正確には配列初期化子というより配列型の変数宣言の特別な形だと思う
566 :
デフォルトの名無しさん
2016/09/27(火) 22:01:53.19 ID:SnclXywq
Cから入ってテキスト何冊か終わらせてからC♯にきたけど、
Cよりも感覚的に理解できるように作られていると感じた。
だがやっぱりCと混同してしまう部分が多くて困るな
学習が進めば頭の中で区分できるようになるんだろうが

相談じゃないな すまん
567 :
デフォルトの名無しさん
2016/09/27(火) 22:33:12.99 ID:zETe1SmY
CもC#も大差ない
便利な構文やクラスが沢山あるってだけ
明確な違いはメタデータぐらいじゃないかな
568 :
デフォルトの名無しさん
2016/09/27(火) 22:42:28.47 ID:0EtDfixS
GCは?
569 :
デフォルトの名無しさん
2016/09/27(火) 23:15:25.90 ID:+YkJQBGH
*や[]や関数ポインタが絡んだときの宣言みたいな汚くて読みづらい文法がないだけ
C#の方が理解しやすいよね。

配列も文字列も普通に型だし。
570 :
デフォルトの名無しさん
2016/09/27(火) 23:44:37.52 ID:YTcGpOzN
>>567
大差ある
571 :
デフォルトの名無しさん
2016/09/27(火) 23:46:25.85 ID:tLj3yCec
文字列はchar配列らしいけど、配列は型じゃないの?
Cって配列型じゃないの?
572 :
デフォルトの名無しさん
2016/09/27(火) 23:48:59.35 ID:l7d7Fmom
Cに配列型なんか無いよ
連続領域の先頭を指すポインタを配列に見立てているだけ
573 :
デフォルトの名無しさん
2016/09/27(火) 23:50:01.43 ID:tLj3yCec
それC#でも同じじゃない?
C#でも
var arr=new int[n];
でarrに入るのは参照だし
574 :
デフォルトの名無しさん
2016/09/27(火) 23:51:25.88 ID:l0rgfbC+
文法とか変数とか型とかポインタはどうでもいいがイベントが楽だからC#からCに移ろうとは思わないな
575 :
デフォルトの名無しさん
2016/09/28(水) 00:16:59.13 ID:2rDNP5fm
>>570
ないよ
出来ることは変わらない
書くのが楽か面倒か
それだけ
576 :
デフォルトの名無しさん
2016/09/28(水) 00:55:28.97 ID:x7JpDQQH
>>575
それってc#もCOBOLも大差ないって言うのと同じことだよね
577 :
デフォルトの名無しさん
2016/09/28(水) 01:03:23.10 ID:CvBOyBja
大差ありすぎてワロタw
578 :
デフォルトの名無しさん
2016/09/28(水) 04:44:15.09 ID:y3I7X+UO
大差の定義によるな
579 :
デフォルトの名無しさん
2016/09/28(水) 05:07:27.92 ID:ksAc0l/t
ネイティブコードにコンパイルできるか否か
弱い静的型付けか強い静的型付けか
オブジェクト志向か否か
GCあるか否か

ぱっと思いついた違い
580 :
デフォルトの名無しさん
2016/09/28(水) 06:19:58.62 ID:2rDNP5fm
全部同じじゃんそれ
581 :
デフォルトの名無しさん
2016/09/28(水) 07:16:59.51 ID:6UKmmY9W
>>575
> 書くのが楽か面倒か

大差あるやん w
582 :
デフォルトの名無しさん
2016/09/28(水) 08:00:45.42 ID:Iarxs+Xo
>ネイティブコードにコンパイルできるか否か
これはまあ、言語じゃなくて環境の問題ではあるけどな

理屈の上では、C#からネイティブコードを吐き出すコンパイラを作る事も出来る
絶対やらないだろうが
583 :
デフォルトの名無しさん
2016/09/28(水) 08:02:41.33 ID:Iarxs+Xo
……と思ったけど
Microsoft .NET Native とかあったなそういや
584 :
デフォルトの名無しさん
2016/09/28(水) 08:31:46.55 ID:hdyJqyrv
とっくにUWPアプリはネイティブですよ。
585 :
デフォルトの名無しさん
2016/09/28(水) 08:34:31.32 ID:Ks5fZMDV
なにそれおいしいの?
586 :
デフォルトの名無しさん
2016/09/28(水) 09:05:27.32 ID:ksAc0l/t
型付けの強さ弱さを同じって言われて俺びっくりしちゃったよ
587 :
デフォルトの名無しさん
2016/09/28(水) 09:37:17.20 ID:nPlGLTXy
>>585
レイアウト変更のもたつきなどの、C#特有のもっさり感がないよ
588 :
デフォルトの名無しさん
2016/09/28(水) 09:47:06.51 ID:JharV+Ri
作ったUWPアプリ環境によってインストールできなくて挫折したな
589 :
デフォルトの名無しさん
2016/09/28(水) 11:10:40.15 ID:RDlboUCA
Cって静的言語だから型は同じじゃないの?
590 :
デフォルトの名無しさん
2016/09/28(水) 16:45:21.87 ID:wFbSwOZd
汎用デリゲートのEventHandlerを使用した場合のメリットについて教えてほしいのですが、これを使用するとデリゲート定義の1行を省けることを超えるメリットはあるのでしょうか?
591 :
デフォルトの名無しさん
2016/09/28(水) 17:43:08.72 ID:t2Y8uX7u
>>590
発想が逆立ちしてるよ。

普通は、標準で用意された方法を超えるメリットがないのであれば
あえて独自のデリゲートを使う理由はないと考えるんじゃないの?w

それって車輪の再発明そのものだよねw
592 :
デフォルトの名無しさん
2016/09/28(水) 18:34:02.96 ID:1e7C4OQD
いやまて、イベント以外のデリゲートに使おうとしてるのかもしれんぞw
593 :
デフォルトの名無しさん
2016/09/28(水) 18:55:03.29 ID:wFbSwOZd
そうか、標準のもので済めばそれを使うのが当然なのか
根本が間違ってた
ありがとう
594 :
デフォルトの名無しさん
2016/09/29(木) 15:45:21.13 ID:GKXbaAQ5
>>569
それを汚ないと感じる人と
美しいと感じる人もいるんじゃないか?
595 :
デフォルトの名無しさん
2016/09/29(木) 18:05:53.95 ID:42KzZhvK
>>594
void (*signal(int sig, void (*func)(int)))(int);

美しいかどうかは美的感覚の問題だから人それぞれとしか言えないが、
少なくとも俺は上みたいな宣言を見せられたとき、これが何を意味しているのか
瞬時には理解できない。

「汚い」っていうのはそういうことを表現したつもり。
596 :
デフォルトの名無しさん
2016/09/29(木) 19:40:25.50 ID:wDlER99I
http://kmaebashi.com/programmer/pointer.html
これを読んだうえでCのポインタの文法が美しいと感じる奴がいたら逆に凄い
597 :
デフォルトの名無しさん
2016/09/29(木) 19:54:22.23 ID:iqK/HxMj
コード見たときにそれが何を指してるのか分かりやすいのはCの方だな
598 :
デフォルトの名無しさん
2016/09/29(木) 20:14:20.56 ID:/kH+f7Ja
>>595
ああああああ

なつかしいいいいい
UNIXもしくはLinuxか何かでみたぞおおおおおお

もう絶対こんな仕事に戻りたくないぃいいいいいい
599 :
デフォルトの名無しさん
2016/09/29(木) 20:22:33.12 ID:1Mz/tgYS
コードの動作が分かりやすいのはC
コードの意図が分かりやすいのはC#
言語の差というより、コードをマシンへの命令と考えるかプログラマの意図を表現するものと考えるかという意識の違いが大きいと思う
do if (*src != ' ') *(dest++) = *src; while (*(src++));
Cはこういうの平気で書き散らす基地外が多い
600 :
デフォルトの名無しさん
2016/09/29(木) 20:29:29.53 ID:/kH+f7Ja
K&Rの時代は終わったんだよ
601 :
デフォルトの名無しさん
2016/09/29(木) 21:34:42.13 ID:IEWEZKBK
20年前にFM-TOWNS()でCから入ったが今の時代にガキだったらCだのC++だのは一切触らなかっただろうなーと思う
かといってphpやjavascriptから入るのはアレだしc#最高^^
602 :
デフォルトの名無しさん
2016/09/29(木) 21:37:33.67 ID:o/Z16MWz
>>599
いやそのコードはおかしいけどな。多分以下。

while (*src!=0) *dest++ = *src++;

それをキチガイというのは自由だが、Cならこれを読めない奴は馬鹿扱いだよ。

初心者は常に「自分の読めないコードは、コードが悪い」としか言わないのだけど、
実際はその初心者の技術レベルに問題がある場合の方が多い。
599はこれだね。
603 :
デフォルトの名無しさん
2016/09/29(木) 21:57:51.11 ID:iqK/HxMj
読めないのは馬鹿ってのは同感
そういうのを書き散らすのは基地外ってのも同感
604 :
デフォルトの名無しさん
2016/09/29(木) 22:01:24.13 ID:1Mz/tgYS
>>602
いや599はスペースを除去してるんだけどな
正直わざと分かりにくく書いたから602の技術レベルを疑うつもりはないけど、
分かり難さを証明してくれてどうもありがとう
605 :
デフォルトの名無しさん
2016/09/29(木) 22:02:54.74 ID:Js+ntQYt
>>602
完全にスレ違いだけど、そういう同じポインタを2回手繰ってるのって
コンパイラは最適化してくれるのかな。

っていうか
while ((*dest++ = *src++) != 0);
って書いても読みやすさは変わらないと思うんだけど
606 :
デフォルトの名無しさん
2016/09/29(木) 22:05:00.53 ID:Js+ntQYt
ああ、0コピーしたらダメな場合は使えないのかw
ボケてるな
607 :
デフォルトの名無しさん
2016/09/29(木) 22:37:37.49 ID:o/Z16MWz
>>604
ああよく見ればそうだな。てかスペース見えんかった。
俺はプログラミングは固定ピッチフォントでやる派なので。

つか脱線でさらにスレチだがC++の開祖がプロポーショナル派で、
「プログラミング言語C++」もそれで印刷されているのだが、読みにくくてかなわん。

>>605
俺は余り詳しくないのだが、その範囲で話をすると、
K&R第2版P129には、そういう場合は

while (*dst++ = *src++)

にしろと書いてあるわけだが、実際はこの書き方はwarinigが出る環境の方が多いと思う。
したがっておそらく最適化はやってもらえる(はず。volataileでない限り。)


>>595も本来はtypedefやマクロを使えばもっと綺麗に書けるし、多分それが普通。
悪い例を出しても言語間の比較にはならないよ。
どの言語でも糞な書き方は出来るから。(比較的C#はそうなりにくいのは認めるが)
608 :
デフォルトの名無しさん
2016/09/29(木) 22:39:05.84 ID:o/Z16MWz
>>607
すまんセミコロン抜けてた。

while (*dst++ = *src++);
609 :
デフォルトの名無しさん
2016/09/29(木) 23:01:59.93 ID:AR+VWIbJ
なんのスレなんだここ
610 :
デフォルトの名無しさん
2016/09/29(木) 23:05:32.42 ID:URePwP35
Swiftでも++は削除されたし、考え方次第なんだよなー
近代的な文法がないCではしょうがないんだろうが
611 :
デフォルトの名無しさん
2016/09/29(木) 23:40:01.94 ID:o/Z16MWz
>>610
マジ?と思って調べたら、どうやらそのようだ。つか、Pyshonも無いんかよ。
https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md

Cとは生まれた時期も目的も異なるからどちらがいいという問題ではないが、
Cで問題だった箇所を一つずつ潰すのも新しい言語のやるべき事だよ。
主張はそこに書いてある。同意するわけではないが、まあそういう見方もあるわなくらいには思う。

ただCは何だかんだで多分生き残る。
あれはほぼアセンブラで、限界までチューニングするにはあの記法が必要だから。
対してC#やSwiftやPythonは生産性/可読性重視だから、
おそらく次の新しい言語が出てきたら取って代わられる。

「近代的」っていうのはそういうこと。時間が経つにつれて「前近代的」になる。
これは近代的言語の宿命だね。
そしてCは「前近代的」でも生き残る価値があるから現存している。

ただ、++で問題を感じたことはないんだけどな。
そこの例に挙げられている
> foo(++a, a++)
をやる奴は死ねでいいけど、
これは引数の評価順を規定してないのが問題で、別問題。
612 :
デフォルトの名無しさん
2016/09/30(金) 00:10:14.41 ID:cU7plTv4
Pyshonて何だよ?と思ってggったら、ホントにあるのな。
613 :
デフォルトの名無しさん
2016/09/30(金) 00:22:32.29 ID:WN9yrU4I
Cがわかりにくいのって記号が物理的に見にくいだけだろ
概念的な難易度はC#と変わらん
614 :
デフォルトの名無しさん
2016/09/30(金) 00:51:09.49 ID:27JQ5kO2
Perl「特に見にくくなんて無いよ」
615 :
デフォルトの名無しさん
2016/09/30(金) 03:34:02.05 ID:gTc+8iAX
>>595
調子こいたラムダ式とかもだめだよな!
616 :
デフォルトの名無しさん
2016/09/30(金) 06:37:26.14 ID:4hxo3I+i
結局プログラマの能力の問題
現状だと調子こいたラムダ式書ける奴は比較的スキルが高いからコード綺麗だよ
617 :
デフォルトの名無しさん
2016/09/30(金) 06:55:45.86 ID:Y6l190wq
c#でウオッチ1には表示されるのですが、
ウオッチ2や3のウインドウにもウオッチさせる方法を教えてください
618 :
デフォルトの名無しさん
2016/09/30(金) 08:30:41.85 ID:2XfoFLHG
コードのキレイ汚いは感覚論だから議論しても仕方がない
でもラムダを使ったコードはコードの重複が少なく結合が弱いから誰が扱っても保守しやすいプログラムになるのは確かだね
619 :
デフォルトの名無しさん
2016/09/30(金) 09:34:42.41 ID:2XfoFLHG
何より言語やライブラリ、フレームワークがラムダを当たり前の存在として扱っている以上使わないという選択肢はない
キレイ汚いという個人的感情によるワガママは通じないのだ
620 :
デフォルトの名無しさん
2016/09/30(金) 09:50:48.57 ID:XrkqBYg2
○○を使ってたら汚いコードになるってことじゃないんだよな
そういうことがわかってないと汚いコードになる
621 :
デフォルトの名無しさん
2016/09/30(金) 10:10:00.28 ID:Ik8fs/0i
それより審美眼の足りない奴を蹴り出した方が効果的
622 :
デフォルトの名無しさん
2016/09/30(金) 20:45:54.67 ID:0SPCdJff
審美眼でコードを書くやつはプロジェクトから追い出したほうがいいって
20年前から言われてる
K&Rのコードはさんざん批判されてる
ここは20年前のスレか

保守性の高いだれでも理解しやすいコードを書ける奴が優秀
623 :
デフォルトの名無しさん
2016/09/30(金) 23:00:54.25 ID:bXY+Fxkm
× > 保守性の高いだれでも理解しやすいコードを書ける奴が優秀
○ 馬鹿な俺でも読めるコードを書ける奴が優秀なことにしたい

K&Rのコードが「汚い」という批判はないと思うが。あれはあれで美しい。
勘違いした馬鹿が闇雲にトリッキーなコードを書いたり、
(今まさに関数型()の奴らが同じ事をやっているが)
或いはタイプミスなのか意図的なのか分かりにくかったりするのが問題なだけ。
これらは色々warning等を出して対応されてきた。もちろん最初からSyntaxErrorならそれでよい。

そして「コードが汚い」ってのは今言っているようなせいぜい10数行の局所区画のことではなく、
もっと大きな上位区画での話だろ。意味不明なクラス構成とか。
というか、10行程度のコードなら多少汚くても読めるし、
正しく抽象化されて階層が分かれていれば、
そういうローレベルコード(何かのメソッド等)は一度読んで動くのが分かればそれでおしまいだろ。
問題はそれらを駆使するミドルレベルコードがグダグダな方だと思うし、
それを「コードが汚い」と表現するのだと思うが。
624 :
デフォルトの名無しさん
2016/09/30(金) 23:01:33.75 ID:bXY+Fxkm
というか多分お前らは「自分が読めるコードが綺麗なコード」とする初心者に近い奴が多いのだと思うが、
実際の所、腕のいい奴は「書ける範囲で綺麗なコード」にしているわけで、
結果的に綺麗なだけなコードならいくらでも綺麗にかけるし、
高速化が必要なら多少汚くなっても最適化を施していく。
だから「汚い」と批判するのはそれ以上の物を自分で記述できるときだけにした方がいい。

K&Rに関しては実行速度/リソースについて最適化を施されているわけだから、
それよりも少ないリソースで速く動くソースが書けないのなら、「汚い」とは言うべきではない。
それが読めないのはお前が馬鹿だから。
少なくともそれを書いた奴はお前よりも腕前は上なわけで、
お前でも読めるようなコードを彼等が書くことは可能なわけだし。

例えばソートとか。
APIとして呼ぶ分には中身がどうであれ正しく速く動いてくれればそれでよし。
それが非常に読みにくい物でも、正しく動く限り、速い方が選ばれる。
それを読みにくいだけの理由で「汚い」とするのはナンセンスでしょ。
K&Rのトリッキーなコードは本来はこういう区画にしか現れないものだよ。
そしてそれは「ソート」として分離されるから、その中身がどんなに汚くても、開発の障害にはならない。
「コードが汚い」ってのは、つまり「これじゃあ今後手を付けられません」って意味だろ。
ソートみたいな局所区画でこれがあてはまることはない。
(実際「汚い」=「読みにくい」のと、
「コードが汚い」との批判=「開発の障害になる」との意見は別物のはず)

問題は、例えば、「ラムダを使うべき場所でラムダを使ってない」とか、逆に、
「ラムダを使うべきでない場所でラムダを使っている」とか、だろ。
要するに簡単な方を使えばいいだけなのだけど、
意識高い奴は「○○の方がいい(キリッ」とか言って無理に使うからおかしな事になる。
625 :
デフォルトの名無しさん
2016/09/30(金) 23:05:31.58 ID:GrCnAQwz
ポエマーきもっ、まで読んだ。
626 :
デフォルトの名無しさん
2016/09/30(金) 23:08:03.45 ID:Fmt1sBQd
コードだけでなく2chレスも読みにくいわw
627 :
デフォルトの名無しさん
2016/09/30(金) 23:08:46.30 ID:IoizK4x5
もちろん昔と同じように考える分野もあるけど、多くの場面じゃ昔と今は考え方が違うのよ
628 :
デフォルトの名無しさん
2016/09/30(金) 23:10:25.66 ID:GrCnAQwz
っていうか、説明的な文章を簡潔かつ過不足なく書く能力と
可読的なコードを書く能力はおそらく無関係じゃないと思う

何が言いたいかはお察しくださいw
629 :
デフォルトの名無しさん
2016/09/30(金) 23:13:28.59 ID:EbLE8W48
・ソースが汚いとはクラス構成が変などの大きな区間の事であり10行程度なら問題ない
・多少汚くても速い方がいい
・新機能を無理に使うと汚くなるからやめろ
でおk?
630 :
デフォルトの名無しさん
2016/09/30(金) 23:15:30.37 ID:OobEUz+z
むしろこんなに書き込めるんだな
あれか?最新に出てくる画面に1レスだけで全部埋めたりできるのか?
631 :
デフォルトの名無しさん
2016/09/30(金) 23:28:51.36 ID:IoizK4x5
>>629
行数の問題じゃない。1行でも汚いのはあるし、変数名一つとっても汚らしいのがある
今は遅くても可読性、拡張性、保守性を重んじるケースの方が多い
新機能は汚いわけじゃない。互換性とかそれまで認知されてなかったトラブルを産む原因になるだけ
632 :
デフォルトの名無しさん
2016/09/30(金) 23:41:02.45 ID:bXY+Fxkm
>>629
・「ソースが汚い」と批判される場合は
全体的にナンセンスか必要のない箇所で最適化をしている場合。
必要な箇所での最適化で結果的に著しく可読性が落ちたとしても
「ソースが汚い」と批判されることはない。
・速さが必要ない箇所では最適化せずに、一番単純な記述にしろ。
・新機能は便利だから追加されたのだから、積極的に使えばいい。
ただし使えばいいって物ではない。
633 :
デフォルトの名無しさん
2016/09/30(金) 23:44:22.04 ID:Mpnnp+Nc
仕様上どうしても実行速度が必要な部分を除いては、可読性の高さは実行速度より優先されるべき
634 :
デフォルトの名無しさん
2016/09/30(金) 23:56:07.59 ID:bXY+Fxkm
>>633
同意。
なんか早すぎる最適化はうんたんってのがあるんだろ。

コードの9割以上は速度はどうでもいい箇所なので、可読性をとるべき。
糞どうでもいい箇所をこねくり回してワケワカメなコードにする奴はハゲろ。
(言っちゃあ悪いが関数型()な奴はこれをやっている気がものすごくする)

あと言語のポリシーにもよるでしょ。
C#はC程のチューニングをする為の言語じゃない。
それこそ、C#なら全箇所で(速度は全く気にせず)可読性重視というのもありだと思うよ。
そもそもどうしても速度が必要ならCでDLL書いた方が速いし早い。
635 :
デフォルトの名無しさん
2016/10/01(土) 01:11:38.55 ID:TCy40dPy
コードの綺麗さは実は定量化できる
わかりやすいので言えば重複するコードがどれぐらいあるかとかな
636 :
デフォルトの名無しさん
2016/10/01(土) 01:26:55.75 ID:5I4x+GEM
関数型は親の仇、まで読んだ。

いつの間にか老害になってた、ってのもよくある話。
637 :
デフォルトの名無しさん
2016/10/01(土) 02:28:35.54 ID:tNbhSEQ7
>>623,624の可読性は定量的に表すといくつですか?
638 :
デフォルトの名無しさん
2016/10/01(土) 02:48:45.62 ID:MIaIeT8n
3
639 :
デフォルトの名無しさん
2016/10/01(土) 04:34:25.08 ID:Cx/cD9Km
評価に価しない
640 :
デフォルトの名無しさん
2016/10/01(土) 07:03:52.26 ID:aUiPvlDm
要するにアンチパターン
641 :
デフォルトの名無しさん
2016/10/01(土) 13:30:51.56 ID:b8SZy0Th
>>623

コードに審美眼とかうるさい奴は死にかけのPerlに行けよ
死ぬ程美しいコードだらけだぞ
副作用だらけの可読性や保守性が全然ない糞みたいな世界にいけばいい
642 :
デフォルトの名無しさん
2016/10/01(土) 17:32:33.06 ID:YSehcX6B
>>615
調子こいたラムダ式ってどの程度のものを指していますか?具体例を教えて下さい。
643 :
デフォルトの名無しさん
2016/10/01(土) 17:44:54.07 ID:uFiZxscE
たぶん「調子こいた『ラムダ式』」では。
644 :
デフォルトの名無しさん
2016/10/01(土) 17:45:58.08 ID:j4WTV/sN
ラムダ式の中でも特に調子こいてる物、って事でなくて
ラムダ式自体が調子こいた代物だ、って事かい
645 :
デフォルトの名無しさん
2016/10/01(土) 17:49:57.84 ID:oe6ViUtA
匿名メソッドはOKなんですねよかった
646 :
デフォルトの名無しさん
2016/10/01(土) 17:53:16.74 ID:aSQFFfFE
>>644
ひでーww
647 :
デフォルトの名無しさん
2016/10/01(土) 18:08:55.65 ID:j4WTV/sN
俺の意見じゃなく、>>643を噛み砕いただけだからね
まあ俺も酷いと思うわw
648 :
デフォルトの名無しさん
2016/10/01(土) 18:13:22.35 ID:r6T55aIp
ラムダ式「今夜はザキンでシースーよ」
ということですね
649 :
デフォルトの名無しさん
2016/10/01(土) 18:27:04.12 ID:uFiZxscE
ザンギにソース?(北海道民感)

>>647
その言い方だと俺が酷いようにみえるんだけどw
650 :
デフォルトの名無しさん
2016/10/01(土) 18:27:22.17 ID:73eR6yvK
牛乳を買ってきて卵があったら6個買ってきてね

これで牛乳を6個買ってきた話のようだ。プログラマーってのはめんどくせーなw
651 :
デフォルトの名無しさん
2016/10/01(土) 18:36:06.66 ID:uFiZxscE
それは解釈の違いの問題じゃなく、
単なる勘違いというか記憶ミスの話じゃないのか
652 :
デフォルトの名無しさん
2016/10/01(土) 18:47:50.99 ID:MIaIeT8n
変なパーサー使ってるんだな
653 :
デフォルトの名無しさん
2016/10/01(土) 19:02:47.22 ID:hMWB8YVJ
最後の買ってはコンパイルエラーにしてほしいな
654 :
デフォルトの名無しさん
2016/10/01(土) 20:25:31.09 ID:YSehcX6B
ラムダ式使うと調子こいてるヤツと思われるのはit業界の常識ですか?
655 :
デフォルトの名無しさん
2016/10/01(土) 20:27:03.31 ID:R05VqS28
>>654
うんにゃ
656 :
デフォルトの名無しさん
2016/10/01(土) 20:34:55.43 ID:roKi/w2g
コードの流れに唐突にラムダ式入ってくると邪魔だなって思う
長い奴はメソッドにしてにラムダ式で呼べって思う
657 :
デフォルトの名無しさん
2016/10/01(土) 20:35:59.82 ID:rH9xy5Nb
>>654
イテレーター業界?
658 :
デフォルトの名無しさん
2016/10/01(土) 20:38:04.48 ID:roKi/w2g
メソッド書かないで引数内で追加できてよかったと思う人もいるんだろうか?
659 :
デフォルトの名無しさん
2016/10/01(土) 20:41:46.11 ID:rH9xy5Nb
ラムダ式なしでWhere()とかSelect()使うの苦痛だわw
660 :
デフォルトの名無しさん
2016/10/01(土) 20:44:48.07 ID:wmtSdepv
>>650
それとぃってrで見た
661 :
デフォルトの名無しさん
2016/10/01(土) 20:52:06.40 ID:roKi/w2g
>>659
そういうのは調子乗ってると思わないけどw
662 :
デフォルトの名無しさん
2016/10/01(土) 22:32:32.05 ID:uFiZxscE
普通にメソッド書いたほうが見通しスッキリするんじゃねー?
と思うコードはある、かな……
663 :
デフォルトの名無しさん
2016/10/02(日) 00:04:13.32 ID:ROqN57Sm
delegateの演算子オーバーロードは出来ない?

例えば
Func<string, int> f1 f2
な時に
f = f1 | f2;
stringの値によって、f1またはf2を呼び出すfをつくる
みたいな事がしたい。
664 :
デフォルトの名無しさん
2016/10/02(日) 00:31:44.31 ID:jkLbSgMw
デリゲートはクラスじゃないから無理でしょうね
c#は関数呼び出し演算子()のオーバーロードもできないからクラスで実装するのも無理
c++なら出来るんだがね
665 :
デフォルトの名無しさん
2016/10/02(日) 04:26:34.74 ID:jWIE31Om
トリッキーな脱出条件の再帰コードを見た事がある
見た目はスッキリしてるけどバグを誘発しそうで怖い
666 :
デフォルトの名無しさん
2016/10/02(日) 06:52:07.42 ID:2n6hXS15
>>664
そんなトリッキーなことするバカが出ないようにってこと
667 :
デフォルトの名無しさん
2016/10/02(日) 10:05:52.02 ID:jkLbSgMw
個人的には別にトリッキーだとは思わないけど
むしろ美しい
https://ideone.com/N9aycD
668 :
デフォルトの名無しさん
2016/10/02(日) 10:54:34.82 ID:eq6TYNRH
>>667
"個人的"だね、ほんと
669 :
デフォルトの名無しさん
2016/10/02(日) 11:55:26.61 ID:O3UtDhl/
個人的だねとの判断も明らかに個人的なものであるが、これいかに
670 :
デフォルトの名無しさん
2016/10/02(日) 12:01:52.13 ID:RfLsthU9
>>667
分かりやすくて良いと思う
この辺りをどう感じるかは文理学歴の差が大きいと思う
671 :
デフォルトの名無しさん
2016/10/02(日) 12:07:04.04 ID:aauDOAhV
>>667
それって記法上のメリットしかないだろ?
だってベタに書こうと思えば書けるし、大した手間でもない。
だからそういう糞ユーザーの「俺カッケー」を出来なくしてあるのがC#だよ。

inline f
f1(f2(3))
3*f2(3)
3*f1(3)+2*f2(3)

そのコードはテンプレート部(40行目以前)が完全に動くならそれでいい。
ただしそれが保証出来ないのなら、いちいち見ないといけなくなる。
つまり糞ユーザーの「俺カッケー」に付き合わされることになる。
そういうのが開発効率を落とすと判断し、C#は出来なくしてある。
そういうのも含めて全部出来るようにしているのがC++。

C#の判断も一理ある。だから賛同するならC#を使えばいい。
いやならC++を使えばいいだけ。

このケースに関しては、やっていることはOOPスレの10と同じ。
http://echo.2ch.net/test/read.cgi/tech/1467992113/10
便利なことをしているつもりが余計に手間を増やしている。
初心者はこの判断が付かないんだよ。だから1行/1文字でも減らそうとする。

なお俺はその記法について文句を言っているわけではない。
それがシステム側で「バグのない物」として提供されていれば、使えばいい。
ただ、オレオレ記法をしたいだけの為にバグがあるかもしれない物を出されたらウザイだけ。
672 :
デフォルトの名無しさん
2016/10/02(日) 12:25:34.26 ID:OGpfvvty
こういう流れを見るとやっぱ文理学歴の差って大きいんだなって実感する
673 :
デフォルトの名無しさん
2016/10/02(日) 12:42:14.69 ID:jkLbSgMw
オレオレ記法じゃなくて数学的な記法をプログラムに持ち込んだだけなんだけどね
後バグがあるならやめてほしいと言うけど特にc++規格に明示されてない文法を使ってるってわけでもないし
関数オブジェクトとか(この場合可変長テンプレートとか)を見慣れない人にはトリッキーに見えるだけだと思うな
674 :
デフォルトの名無しさん
2016/10/02(日) 12:52:17.12 ID:+f7TOXbf
分かりにくいというか曖昧すぎて理解のしようがない
関数の和や合成と言われても、引数適用や合成の仕方は無数に考えられる
全てがオレオレのフィーリングに基づいた暗黙脳内ルールじゃん
むしろ理系こそ拒否反応起こすわ
675 :
デフォルトの名無しさん
2016/10/02(日) 12:54:43.75 ID:I2UZY42b
そう言うことを頻繁にやるならアリだと思うが過去そう言うことをやったことない俺にはできてもできなくてもあまり変わらん
バグまで持ち出して反論してる >>671 はちょっと頭弱い子だと思う
676 :
デフォルトの名無しさん
2016/10/02(日) 12:57:57.60 ID:aauDOAhV
>>673
数学の合成関数は f(g(x)) だろ。アホなのか?
677 :
デフォルトの名無しさん
2016/10/02(日) 13:07:15.54 ID:aauDOAhV
>>673
なお俺はトリッキーだとは言ってない。
バグを誘発する糞コードを読まされる手間が増えるだけだからウザイと言っている。
その件に関してはベタで書いた方が「全体的には」楽だろ。それだけ。
初心者はこの「全体的」が分からないから局所的な最適化コードに異様にこだわるだけ。

それだけで済んでいればいいけど、通常はそれだけじゃ済まないんだよ。
そして泥沼化するから、C#では最初から禁止している。それだけ。
まあ妥当だと思うよ。
678 :
デフォルトの名無しさん
2016/10/02(日) 13:08:59.70 ID:FGg7v3h+
まあラムダがあれば簡単な関数合成する上で特に不便はないな
C++はラムダがない時代が長かったからオペレーターオーバーロードなどを駆使して表記の簡略化、統一化を考える必要があった
679 :
デフォルトの名無しさん
2016/10/02(日) 13:17:42.00 ID:+f7TOXbf
演算子オーバーロードの濫用の問題は、全く一般的でないオレオレルールが+などの非常に一般的な表現でコードに撒き散らされることだよ
少なくとも俺には f=f1+f2 と書かれても何のことかさっぱり分からん
うまいこと空気読んで共感してあげるという高度な文系的センスが求められる
680 :
デフォルトの名無しさん
2016/10/02(日) 13:34:10.10 ID:aauDOAhV
ちなみにC#からの見方に変えると、
C#の開発時には既にC++があったわけだから、
templateの有効性や演算子オーバーロードの利便性を知らなかったわけではない。
ただ、馬鹿が調子こいて余計に手間が増えることの方が多いと判断したから、落とした。それだけ。

「出来る」ことと「便利になる」は別なんだよ。だから結局の所プログラマ次第。
そして「自前クラス」まで禁止するとstaticおじさんになるというわけさ。
これについてはJava側からの視点で批判的な物が多いけど、
おかしなクラス構成ばかり見せられたら自前クラスも禁止したくなるだろ。
実際、OOPスレ10に対してなら
「お前がクラスを作ることは禁止、どうしても欲しければ相談しろ」というのも現実的な線だよ。

要するにメタプログラミング系は本来は熟練者しか使っちゃいけないのさ。
初心者が「template使える俺カッケー」をするからおかしな事になる。
それってtemplateを使うこと、或いは短く書くことが目的になってるだろ。
手間を減らすこと、コンパクトに書いて規模の限界を緩和することを目的にしろって事だよ。
(クラスも程度は軽いけど結果的に自前フレームワークを用意するという点でメタプログラミングと似ている)
681 :
デフォルトの名無しさん
2016/10/02(日) 13:39:28.09 ID:jkLbSgMw
関数の合成といえば(f◯g)(t)=f(g(t))だし
「線形結合できる関数」クラスの例で
関数の和といえば(f+g)(t)=f(t)+g(t)だし数学的にこれ以外ないでしょ
合成はc++に◯記号がないから|を代わりにしただけ

あとあのコードがまるで「普通」のコードよりもバグを誘発しやすいみたいな言い方してるけどなぜそう思うの?
単に見たことない書き方だからそう思ってるんじゃないの?

数学についても、プログラムについても単に知らない人が拒否反応を起こしたり分かりにくいといっているように感じるんだが
682 :
デフォルトの名無しさん
2016/10/02(日) 13:41:46.38 ID:aauDOAhV
>>681
てかお前数学知らないだろ?
○って何?ドットなら関数内積で、合成関数ではないぞ。
683 :
デフォルトの名無しさん
2016/10/02(日) 13:43:56.45 ID:aauDOAhV
あ、2chで表示できないのだろうからunicodeで頼むわ。
684 :
デフォルトの名無しさん
2016/10/02(日) 13:49:48.57 ID:jkLbSgMw
685 :
デフォルトの名無しさん
2016/10/02(日) 13:56:01.58 ID:Tg5OdweU
コードの細かい記述方法であれこれルール作りたがるとかチラ裏でやってほしいわ
他人から見たら全く役に立たない
686 :
デフォルトの名無しさん
2016/10/02(日) 14:03:39.03 ID:aauDOAhV
>>684
ああこちらでも確認した。そういう表記をすることもあるようだ。
俺は知らんが。

ただ、そういうのを | で代用するようなことをするから演算子オーバーロードは駄目なんだよ。
それが欲しければ、そのコードをそのまま使わないといけない。
そうじゃないと、お前のオレオレクソコードを全員が読まないといけなくなるだろ。

例えばJavaScriptなら、ソースコードはunicodeなのでそれが出来る。
function ○(func0, func1){}
だからその件に関する正しいやり方は、unicode版C++で○を演算子としてサポートすることだ。
ただ、f(g(x))と書けばいいだけのことを新しい演算子を定義するのは無駄だ。
だから現実的にはunicode版C++で○をマクロ等で合成関数に置換することだろう。
(unicode版C++があるかどうかは知らん)
687 :
デフォルトの名無しさん
2016/10/02(日) 14:04:19.38 ID:FGg7v3h+
>>680
cppからcsへの変遷の際に危険だが柔軟性の高い機能が取り除かれた理由は、調子こいたバカが増えるからではなく、基本的なスキルのないプログラマが使うことを前提にしたってだけだろう
上で出た関数合成の例だってまともに仕事してるcppプログラマならなんの苦もなくよめる
おや、数値型以外の型に+演算子が定義されているぞ
ああ、オーバーロードしたのね
まっ、文脈から関数合成で、よほどひねくれてなきゃ線形結合だろう
いちお、確認するか…仕様書は…ない
ならソースみよか…(10秒ほど定義を眺める)…うん、さっきの解釈で良いみたいだね
よし、じゃあ楽に見やすくなるならガンガン使おう
cppが出来るレベルではこれが普通の反応であって、読めないという泣き言はプロである以上通じない
csだと逆に、Linqとかあたらしいのわたしよくわからないので禁止!といったようにバカがわからないというだけで、自作の便利なライブラリどころか、標準的なライブラリすら使えなくなってしまう
世間的には同じプログラマとして分類されるけど生きる世界が違うんだよ
688 :
デフォルトの名無しさん
2016/10/02(日) 14:06:04.74 ID:ROqN57Sm
自己が見慣れないものを、一見汎用性のありそうな無知な屁理屈つけて拒否しるのって、老化の始まりなのかな。
自戒の意味も込めて。
689 :
デフォルトの名無しさん
2016/10/02(日) 14:09:00.42 ID:FGg7v3h+
>>686
さっきからちょっと気になってたんだが
関数を合成するのと関数の評価を続けて行うのは全く別の処理だぞ
どの記号を使うべきか、そもそもオバロすんなとかいう議論以前の話で間違ってる
690 :
デフォルトの名無しさん
2016/10/02(日) 14:20:35.82 ID:+f7TOXbf
>>687
そういう考えは規模が大きくなると破綻する
関数合成をする操作があっちゃいけないとは思わないが、定義を思い出すのに十分なラベルを付けるべき
1,2文字の記号と、離れた場所にある型宣言だけではあまりにもヒントが少なすぎるし、演算子は名前空間が小さすぎる
691 :
デフォルトの名無しさん
2016/10/02(日) 14:25:11.07 ID:aauDOAhV
>>687
なんかC++の奴らは「選民思想」を持っているようだけど、それは違うと思うんだよ。

そのコードを書いた時点で、バグがある可能性が残ってしまう。
だから見ないといけない。俺はこれが嫌なんだよ。
コード自体は「打ち間違いがない」という前提でなら10-30秒程度だよ。中身は何もやってないから。
だからそれが既に実績のあるライブラリとして提供されていて、その中身の確認ならまあいい。
ただしそれを自前で書かれたら、詳しく確認しなければならないし、全てに当てる検証も必要になる。
そして得られるメリットはちょっと短く書けるだけ。
これは明らかに手間が増えているだろ。

.NET公式で関数合成の演算子として提供されていれば、それを使うことに問題はない。
仮にバグがあったとしても公式側が修正してくれる。(中身の実装について見る必要がない)
自前で書いたら上記の通り手間が増えるだけ。だったらベタで書いた方がマシ。

基本的にC#は「馬鹿が使う」ではなく「ここら辺まででいいよね」という思想だとおもうし、
その判断自体も割と妥当だとは思う。ちょっと窮屈な点はあるけど、致し方なし。
なお俺はC#派ではなくかなりC寄りのC++派ね。(お前らがbetter-Cと言っている奴)

これとは別に、「馬鹿でも使える言語」として使っている奴もいるし、
そいつらが調子こいているのも事実だけど、それは別問題。
692 :
デフォルトの名無しさん
2016/10/02(日) 14:27:32.07 ID:FGg7v3h+
>>690
まあ別に俺も演算子を積極的に推奨するわけじゃないけどな
ちゃんとしたcppプログラマなら標準の型に対する演算子の挙動に準ずる動作で演算子を定義するのが良い習慣だってのが常識として知っているわけだし
693 :
デフォルトの名無しさん
2016/10/02(日) 14:28:49.54 ID:aauDOAhV
>>689
関数ポインタを返せばいいだけだろ。

いずれにしてもtemplateは静的展開なんだから、ベタに書けない処理はないだろ。
ベタに書くのがいいか、テンプレートを使うか、
これを検証まで含めた「手間」基準で判断しろというのが俺の意見。
694 :
デフォルトの名無しさん
2016/10/02(日) 14:40:47.92 ID:FGg7v3h+
>>691
依存先にバグがあるかも~とかそんなんでプログラマやっていけるのか?
演算子使おうが使わないが、やりたいことが関数合成だろうが何か別の処理だろうが、プログラミングするなら、関数やメソッドを定義してモジュール化するのは当たり前の事だろう
むしろ同じ処理をモジュール化しないで、同じようなコピペコードを大量生産するほうが圧倒的に悪じゃん?
この悪を突き詰めるとUIのイベントハンドラに全ての処理をぐっちゃぐちゃに詰め込むようなキングオブバカになるんだよ
そんなものは誰も望んでいない
処理の重複があればモジュール化するのが当たり前
モジュールにバグがあるのも当たり前でモジュールの保守をするのも仕事のうちだ
演算子がどうのこうのってレベルじゃねえぞ
695 :
デフォルトの名無しさん
2016/10/02(日) 14:42:08.34 ID:FGg7v3h+
>>693
レス番間違ってないか?
696 :
デフォルトの名無しさん
2016/10/02(日) 15:00:21.56 ID:aauDOAhV
>>694
お前がそう思うのならそれでいいじゃん。
俺は「手間」がかからない方を選ぶ。それだけ。

関数の線形結合なんて普通のプログラミング(例えばブラウザ等の製作)では不要だろ。
だから俺はそれにオーバーロードなんてしないし、必要ならベタに書く。
普通のプログラミングで、その線形結合って何回使うと思っているの?

余程数学的なことをするのであれば関数の線形結合も必要になるのかもしれないけど、
そういうところは既にライブラリなりフレームワークが用意してあり、
演算子も既にオーバーロード済みだったりすると思うよ。

とはいえ、俺とお前は特に何の関係もないわけで、別にお前がそうすることを止めはしない。
それをOSSとして公開してあれば、「馬鹿がいきがってるな」と思うだけ。
そういう俺に対してお前が「馬鹿だな」と思うのも自由だよ。
そういう意味ではいい時代になったね。
697 :
デフォルトの名無しさん
2016/10/02(日) 15:08:10.02 ID:aauDOAhV
>>695
間違ってない。
> 関数を合成する (>>689)
に対して「関数ポインタを返せばいいだけ」

俺が671で
> 関数の評価
つまり値を算出したのが気に入らなかったんだろ?

Cでも「関数ポインタを返す関数」というのは普通に定義出来る。
関数合成ってのは別に難しい話でも新しい話でもない。
698 :
デフォルトの名無しさん
2016/10/02(日) 15:25:03.83 ID:FGg7v3h+
>>696
なるほどそっちの認識では線形結合のみかつ再利用の機会も少ないという前提の話題だと思っているのね
関数合成や線形結合はあくまで一例であってもっと一般論的な話をしてるつもりなんだが>>694読んでわかんなかったかな?
699 :
デフォルトの名無しさん
2016/10/02(日) 15:30:13.53 ID:aauDOAhV
ああすまん、696はレス相手を勘違いしていた。
>>694向けに再度書き直す。

>>694
それは単にDRYなりOAOOだし、基本中の基本だろ。
今更何を言っているんだ?

俺は無駄なコードを書くなと言っているだけ。
使いもしない演算子オーバーロードのコードとかね。
700 :
デフォルトの名無しさん
2016/10/02(日) 15:36:24.07 ID:FGg7v3h+
>>697
わからなくなってきたな
君は関数合成をカスタム演算子を使う方法ではなくf(g(x))と表記出来ると言っている
これは関数合成ではなくg(x)を評価した結果を引数にしてfを評価しているだけであって関数を合成する処理ではないよと返した
さらにその返しとして関数ポインタを使えば良いというよくわからない返事が来たのでレス番間違ってないか?って聞いたの
関数ポインタを使ってf(g(x))の表記でfとgを合成するにはどう書けば良いんだろうね
当然だけど|を使った表記より実装がシンプルになってバグがなくなるんだよね君のポリシーからすると
701 :
デフォルトの名無しさん
2016/10/02(日) 15:41:08.17 ID:aAAtYBE2
>いちお、確認するか…仕様書は…ない
>ならソースみよか…(10秒ほど定義を眺める)…うん、さっきの解釈で良いみたいだね

ドキュメントがそろってない場合、実際にはオーバーロード関数の実体を見つけるだけでも
一苦労で、10秒どころじゃ済まなかったりするけどな。
初見のコードだと結局デバッガで追いかけるのが一番早かったということも。
702 :
デフォルトの名無しさん
2016/10/02(日) 15:46:00.43 ID:aauDOAhV
>>700
> 関数ポインタを使ってf(g(x))の表記でfとgを合成するにはどう書けば良いんだろうね
それが>>595だろ。
> 関数合成の例だってまともに仕事してるcppプログラマならなんの苦もなくよめる(>>687)
流に言えば、まともに仕事してるCプログラマなら何の苦もなく読める。

> 当然だけど|を使った表記より実装がシンプルになってバグがなくなるんだよね
はい。
上記の通り、君の定義の「まともなCプログラマ」なら一瞬で読めるし、
少なくとも | を使っている時点で他の人と組み合わせたらバグを誘発するからアウトだよ。
703 :
デフォルトの名無しさん
2016/10/02(日) 15:51:44.43 ID:FGg7v3h+
>>699
すまない
わかってるならいいんだ
君の書いた線形結合かつ再利用の機会の少ない場合に限定したレスを読んでこっちが勝手に一般的な話に拡大してしまっただけだから
線形結合だけできてもまあ確かにそんなに嬉しくはないよね
Boost.Lambdaみたいなライブラリの一部として組み込まれてるならともかくね
704 :
デフォルトの名無しさん
2016/10/02(日) 15:54:11.92 ID:aauDOAhV
>>701
君と俺は反対ではないけども、補足をすると、俺が思うに、
「直感的に見たとおりの演算子/メソッドじゃないとオーバーロードしてはいけない。」
いちいち確認する必要があるのなら、そこにベタで書いてあった方がすぐに辿れていい。
705 :
デフォルトの名無しさん
2016/10/02(日) 15:57:16.07 ID:wePFQlkp
捨て台詞吐くぐらいなら絡んでこなきゃいいのに...
706 :
デフォルトの名無しさん
2016/10/02(日) 15:57:23.23 ID:FGg7v3h+
>>702
それ合成してないじゃん
関数f,gを合成して名前はなんでも良いけどhを作ろうって話してんの
707 :
デフォルトの名無しさん
2016/10/02(日) 16:10:13.27 ID:aauDOAhV
>>703
いや先にIDを読み間違えたのはこちらの方だ。
これは俺が悪かった。

> Boost.Lambda
見てみたが、一覧表がないから使えるものかどうかはよく分からん。
ただ俺はこういうのを使うのは賛成、自前で用意するのは反対。理由は、

・バグがない。あったとしても向こうが勝手に直してくれる。
・「普通」の仕様になっているはず。オレオレ演算子アサインはない。

>>706
「まともなCプログラマ」ならそれも一瞬で書けるって事だよ。
ただし見た目は>>595的になる。それを「汚い」とするかはその人次第。
708 :
デフォルトの名無しさん
2016/10/02(日) 16:28:44.65 ID:FGg7v3h+
>>707
すまない
関数ポインタの件がよくわからないのだけどサンプルコードはないだろうか
typedef int (*p_func_t)(int);
とあったときに
p_func_t f = ...;
p_func_t g = ...;
int x;
p_func_t h = f(g(x));
と表記してfとgを合成できるような方法があるってことだよね?
709 :
デフォルトの名無しさん
2016/10/02(日) 16:53:20.94 ID:jkLbSgMw
俺は関数オブジェクトを使うのによい例を具体的なコードを示して挙げたつもりなわけだが
その例がクソだというなら同じ題材で「まともなCプログラマ」ならどう書くのか
プログラマらしく俺と同じようにideoneにでもコードをあげてほしいよね

いいかげんそうしないと利点欠点の議論ができない
そもそも彼の言っていることがプログラムで実現できるのかも分からないのが現状だしね
710 :
デフォルトの名無しさん
2016/10/02(日) 17:41:34.45 ID:ROqN57Sm
レガシーな話は別の場所で。
711 :
デフォルトの名無しさん
2016/10/02(日) 18:37:00.85 ID:4fupdPv1
そろそろc++スレへ
712 :
デフォルトの名無しさん
2016/10/02(日) 20:32:46.30 ID:ruQ48W5a
>>682
ちいさな中空の○のことだろ
数学でよ~く使う奴
713 :
デフォルトの名無しさん
2016/10/02(日) 21:54:50.86 ID:QFl4EKwL
f∘g
714 :
デフォルトの名無しさん
2016/10/03(月) 04:19:54.47 ID:uOsaIQNY
何時もfまるgって読んでるけど正式な読み方は何なの?
715 :
デフォルトの名無しさん
2016/10/03(月) 06:05:41.66 ID:70nww6OY
この手の話題に電話越し実験とかというのがあったと思う
自分の思っている事を電話越しに話すことを想定して、
相手に伝わらない記号や概念が思い当たったら使うなって話
716 :
デフォルトの名無しさん
2016/10/03(月) 07:58:56.85 ID:K13Pj3xV
717 :
デフォルトの名無しさん
2016/10/04(火) 10:32:58.48 ID:7zrfyEQB
みんなUIフォントを何にしてる?
メイリオがいいよね?メイリオがいいよね?
718 :
デフォルトの名無しさん
2016/10/04(火) 10:34:40.02 ID:reFXN9x4
理由がないかぎりデフォのまま
719 :
デフォルトの名無しさん
2016/10/04(火) 10:53:11.92 ID:6+Zayg+b
ふらっととマルチとか他人に共感してもらわないと不安になる病気か
720 :
デフォルトの名無しさん
2016/10/04(火) 10:58:30.13 ID:s22xkPru
901 名前:デフォルトの名無しさん (アウアウ Sa17-RPp1)[sage] 投稿日:2016/10/04(火) 10:32:30.59 ID:2uMugtE2a
みんなUIフォントを何にしてる?
メイリオがいいよね?メイリオがいいよね?
721 :
デフォルトの名無しさん
2016/10/05(水) 23:55:13.72 ID:+0VoUMKr
C#勉強始めたんですが、初心者がだいたいつまづくポイントってどこだと思いますか?
722 :
デフォルトの名無しさん
2016/10/06(木) 00:04:15.38 ID:7nh5q1fN
デリゲートかなあ
723 :
デフォルトの名無しさん
2016/10/06(木) 00:15:35.85 ID:4kR5N43K
プログラミング経験ないなら参照型と値型で必ず絶望する
経験あるならデリゲートかな
724 :
デフォルトの名無しさん
2016/10/06(木) 00:32:29.25 ID:zO3yIj3z
>>722-723
ありがとうございます
今まさにデリケートでハマってます。。
使い方?使いどころ?を共感できないとうやむやでしょうがないです
725 :
デフォルトの名無しさん
2016/10/06(木) 00:39:52.90 ID:rwN2Tml/
デリゲートとかめったに使わないコールバックでしか使ったことがないな
代入かと思っていたら参照だったで面倒なことになった事はある
726 :
デフォルトの名無しさん
2016/10/06(木) 00:45:11.41 ID:TGE1GIM6
今時は直接delegateで宣言するようなことはなくなったから
概念は知っておいて、ラムダ式と
Action<T>とかFunc<T>の実用例覚えとけばいいんじゃないですかね
727 :
デフォルトの名無しさん
2016/10/06(木) 00:49:47.22 ID:4V0JRI8n
GDI+の機能にかなり頼っていていろいろハマったw
>>726
他の人のソースを参考にしようとしてネットで調べているとdelegateは割と見かける
そのときに解釈するのにハマるかもw
728 :
デフォルトの名無しさん
2016/10/06(木) 01:27:48.67 ID:fMQ+lBRM
デリゲートとラムダを滅多に使わないって珍しいね
C#1.0とか2.0の現場なのかな
729 :
デフォルトの名無しさん
2016/10/06(木) 01:30:51.44 ID:4V0JRI8n
>>728
いやラムダは普通に使うだろうけどdelegateはむしろ古いソースに多いと思うんだけど
そもそもラムダを滅多に使わないってどのレス?
730 :
デフォルトの名無しさん
2016/10/06(木) 01:34:30.42 ID:NXx8nGJH
デリゲートもラムダもインタフェースも一切使わないでアプリ作ってる
参照型と値型はList<T>でハマった
あとDispose
731 :
デフォルトの名無しさん
2016/10/06(木) 02:31:28.02 ID:tWbYPS8o
デリゲートで思い出したけど、Delegateを取るメソッドにラムダ式を渡す時、
Actionとか適当なデリゲートにキャストする必要があるけど、これ()が増えて読みづらいんだけど
もうちょっと簡潔に書く方法何かないかね
732 :
デフォルトの名無しさん
2016/10/06(木) 06:42:51.70 ID:fMQ+lBRM
>>729
ラムダって多くはデリゲートとセットでは?
733 :
デフォルトの名無しさん
2016/10/06(木) 07:20:21.92 ID:n3wSSvrr
・匿名メソッド構文
delegate(int x){ return x * 2; }
・delegate typeの定義
delegate string IntToStringFunc(int i);
・定義済みdelegate
EventHandler,Action,Func,Predicate,...etc...

"delegate"キーワードは使わなくなったけど、delegateは使うね。
734 :
デフォルトの名無しさん
2016/10/06(木) 20:52:22.74 ID:/ETy8QFu
ラムダ式って拒絶反応が出るんだけどすんなり使えた?
735 :
デフォルトの名無しさん
2016/10/06(木) 20:53:36.20 ID:roCwyFi8
使えたよ
736 :
デフォルトの名無しさん
2016/10/06(木) 21:04:12.56 ID:JthKKgNo
アレルギーは病気だからお医者に行くといいよ
737 :
デフォルトの名無しさん
2016/10/06(木) 21:55:32.73 ID:Gk0vxqlO
>>734
FAQ過ぎる
738 :
デフォルトの名無しさん
2016/10/06(木) 23:09:44.94 ID:M7jvqMaX
C#はじめて触った時点でもうラムダ式あったからあって当然だった
739 :
デフォルトの名無しさん
2016/10/07(金) 00:40:13.77 ID:7KQTkYQu
俺もJava初めて触った時点でラムダあったし
5ヵ月間存在知らなかったけど
740 :
デフォルトの名無しさん
2016/10/07(金) 01:58:05.78 ID:zqRixoIp
リンクトゥーエスキューエルは?
741 :
デフォルトの名無しさん
2016/10/07(金) 08:14:27.52 ID:zPyY2V4X
拒否感というか、実際に使うまでは全然に覚えれんかったなあ
Cのポインタとかもそうだった
742 :
デフォルトの名無しさん
2016/10/07(金) 08:39:51.90 ID:m+Df9peK
逆になんで拒否反応起こすのか理解できない
知って即座に馴染んで初めのうちは便利すぎてちょっと調子乗って使いすぎちゃいましたってなるだろう
743 :
デフォルトの名無しさん
2016/10/07(金) 08:49:35.73 ID:nw13XKq1
同じカテゴリの処理の実装場所が散らかるからな。気持ちはわからないこともない
744 :
デフォルトの名無しさん
2016/10/07(金) 13:02:14.27 ID:gy3H7/nZ
別人で再生して浄化した。
745 :
デフォルトの名無しさん
2016/10/07(金) 21:00:51.15 ID:NycpsfVm
>>743
> 同じカテゴリの処理の実装場所が散らかるからな。
それは使いどころを間違えてるだけやん
746 :
デフォルトの名無しさん
2016/10/07(金) 21:05:49.22 ID:1Dl+MuXR
道具のせいにする人ってどこにでもいるよね
747 :
デフォルトの名無しさん
2016/10/07(金) 21:42:30.53 ID:rpvo0aMN
いるね
748 :
デフォルトの名無しさん
2016/10/07(金) 23:53:39.03 ID:1f6Aa5PW
そういう方はコボルに移ってもコボルのせいにしない?
749 :
デフォルトの名無しさん
2016/10/08(土) 00:27:37.64 ID:YZ0dkDui
極端な人ってどこにでもいるよね
750 :
デフォルトの名無しさん
2016/10/08(土) 10:59:27.20 ID:3B0HEkdw
>>742
実際にコードを書かない、コードを書けない、かつ不勉強な人がコードレビューでLINQその他に対して激しい拒否反応を起こしたのは見た事ある。
もちろん、その人にコードレビュー受けた人達は大被害ww

その人は自己が見慣れないコードは全部ケチをつけるタイプなので特殊例かもしれん。
751 :
デフォルトの名無しさん
2016/10/08(土) 17:25:08.15 ID:6UkbCfBv
そんなやつがレビューアーやってる事の方が問題なんだが
752 :
デフォルトの名無しさん
2016/10/08(土) 17:28:45.90 ID:siQv9+5e
直属の上司とか、1年上の先輩とか
機械的に決まるパターンだと悲しみが起こりそう
753 :
デフォルトの名無しさん
2016/10/08(土) 18:05:11.46 ID:160QOg/G
日本の文化と思って諦めるしかない
どうしても嫌なら会社はいくらでもある
754 :
デフォルトの名無しさん
2016/10/08(土) 20:07:07.86 ID:6x1/odTz
会社はいくらでもあるが、果たして…
755 :
デフォルトの名無しさん
2016/10/09(日) 03:24:54.85 ID:b4dakfPd
会社厨うざい
756 :
デフォルトの名無しさん
2016/10/13(木) 14:08:23.46 ID:iJXxjoio
Visual C# には iniファイル読み書きのライブラリはないの?
757 :
デフォルトの名無しさん
2016/10/13(木) 14:23:00.79 ID:x9JSnrTo
標準のはない
758 :
デフォルトの名無しさん
2016/10/13(木) 14:36:24.85 ID:U+TNkLbY
今時はJSONでも使っとけ
759 :
デフォルトの名無しさん
2016/10/13(木) 15:12:47.08 ID:iJXxjoio
>>757-758
ありがとう
なんとかする
760 :
デフォルトの名無しさん
2016/10/13(木) 21:52:42.89 ID:iJXxjoio
Visual C# で、フォーム上の適当なところでダブルクリックすると
ロード直前に実行される関数のひな形(Form1_Load)ができるけど
この関数を削除するにはどうしたらいいの?
761 :
デフォルトの名無しさん
2016/10/13(木) 21:55:43.87 ID:mO/7q7RS
逆に消してどうしたいの?
762 :
デフォルトの名無しさん
2016/10/13(木) 21:56:14.16 ID:NpjsDOUl
>>760
普通にエディタ上で消せばいい。あと表示→プロパティ→イベント(󾀄)からも消しとけ。
763 :
デフォルトの名無しさん
2016/10/13(木) 22:30:08.59 ID:Qz0gpqw/
>>760
直後なら(本当は直後でなくてもだけど)ctrl-Zで消せると思う
764 :
デフォルトの名無しさん
2016/10/14(金) 00:12:51.87 ID:ogHyy/3J
作ったままの中身空っぽならプロパティイベントから消したら同時に消えたと思う
765 :
デフォルトの名無しさん
2016/10/14(金) 01:38:37.30 ID:T/Zghmcy
コードから消そうとすると
エラーになるんだよね
最初ほんとうにイライラしたわ
766 :
デフォルトの名無しさん
2016/10/14(金) 01:48:21.30 ID:ZVLfa9Nj
>>765
ビルドエラーのこと?なったらなったで該当箇所教えてくれるから消せばよくね?
767 :
デフォルトの名無しさん
2016/10/14(金) 09:07:30.89 ID:5Y7KbdSJ
>>764
中身あっても消えるよ
これほんと余計なんだよな
768 :
デフォルトの名無しさん
2016/10/14(金) 13:40:56.00 ID:SyTitZMd
>>765
うちの姉はデザインとコードの切り替えで
CtlとAltと0押して、ShiftとF7で戻ってるぜ
769 :
デフォルトの名無しさん
2016/10/14(金) 16:29:58.71 ID:4Yb8Ckim
>>762
ありがとう助かりました
プロパンティからも消してエラーが出なくなった
770 :
デフォルトの名無しさん
2016/10/14(金) 17:46:35.81 ID:3zF/39NX
>>767
必要ならコメント入れておけば良いじゃん
771 :
デフォルトの名無しさん
2016/10/14(金) 21:38:58.11 ID:EyG+crJd
>>767
コントロールのID変えたら、紐付いてるイベントまで消えたりするもんな
772 :
デフォルトの名無しさん
2016/10/14(金) 23:55:39.11 ID:LsS2QSVW
イベントハンドラ消えて困ることってあるの?
せいぜい1~2行の移譲メソッドでしょ
773 :
デフォルトの名無しさん
2016/10/15(土) 00:26:35.41 ID:k9mTyD+7
>>772
ha?
774 :
デフォルトの名無しさん
2016/10/15(土) 02:30:14.73 ID:SiQ2B4iv
>>773
ん?
775 :
デフォルトの名無しさん
2016/10/15(土) 02:42:51.12 ID:JTDXk7lA
>>774
プニュ( ´∀`)σ)Д`)
776 :
デフォルトの名無しさん
2016/10/15(土) 13:47:32.69 ID:trxVi14T
あるフォームのボタンを押されたら、スレッドを作って
そのスレッドからフォーム内のラベルの読み書きをおこなう

というプログラムを書いているんだけど
スレッドを別クラスで書くにはどうしたらいいんでしょうか
スレッドを作るとき、そこにフォームのポインタを渡せばいい?
777 :
デフォルトの名無しさん
2016/10/15(土) 13:54:45.28 ID:P+QAjsnw
>>776
.Start(Object)のObjectにフォームを入れる。
もちろんThreadのParameterizedThreadStartは引数にObjectが必要。

スレッド終了方法にコツがいるから注意な
778 :
デフォルトの名無しさん
2016/10/15(土) 13:56:21.00 ID:P+QAjsnw
なお、Invokeで操作するだぞ
779 :
デフォルトの名無しさん
2016/10/15(土) 14:59:51.84 ID:k370RUkX
今時Threadを直接使うとか時代錯誤甚だしい
続けて処理をするなら、メインスレッドからTaskを開始→メインスレッド上でawait→結果受け取ったらラベル更新→次のTaskを開始→…
って感じの流れにするのが今風
780 :
デフォルトの名無しさん
2016/10/15(土) 15:13:08.29 ID:auQgHyKE
FW4.5以上必須だけど
781 :
デフォルトの名無しさん
2016/10/15(土) 15:16:20.18 ID:trxVi14T
>>777
Start前に別スレッド用のクラスのメンバーに渡しました
ヘタレですみません

>>780
古い機械で動かす用なので今風にはできません
ヘタレですみません
782 :
デフォルトの名無しさん
2016/10/15(土) 16:47:54.95 ID:P7MwN4Hv
>>779
意識高いねー
783 :
デフォルトの名無しさん
2016/10/15(土) 17:35:29.50 ID:pMgLYSqA
最近は当たり前のことを意識高いと揶揄する若者が増えたよね
784 :
デフォルトの名無しさん
2016/10/15(土) 17:50:47.61 ID:xaDriJeZ
ポーリングとかほぼ回しっぱなしの処理ならむしろ生スレッドでいいと思うけどね。
前も書いた気がするけど、デッドロックしやがるたちの悪い処理にも対応可能だし
785 :
デフォルトの名無しさん
2016/10/15(土) 18:44:32.46 ID:uHGHKnNI
C#はC++よりも、他人の書いたコードが分かりやすく、数年前のコードが読みやすい言語なのでしょうか?
786 :
デフォルトの名無しさん
2016/10/15(土) 18:47:09.72 ID:I3OeS+b+
結論から言うとそんなものは書いた人によります
787 :
デフォルトの名無しさん
2016/10/15(土) 19:01:46.62 ID:6v+uOgk1
少なくとも他人のC++の古い糞コードは読みたくない
C#は数年前でもあんま変わらんからそれほどでもない
788 :
デフォルトの名無しさん
2016/10/15(土) 19:41:54.19 ID:UDl7k1b2
古い機械って、XPなのかなw

LINQ Task等の登場前後でC#のコードもだいぶ変わってきてきてる気がする。
C#7.0以降でも、どんどん変わって行く気配。
789 :
デフォルトの名無しさん
2016/10/15(土) 19:50:54.93 ID:Gdu5DIb6
C#のformアプリで画面内にCADみたいな線を引っ張ったりするものって作ること可能?
790 :
デフォルトの名無しさん
2016/10/15(土) 20:14:30.17 ID:lUEMvsqs
C#から勉強したから
C++気持ち悪くてしょうがない
本のサンプルコードに多いから
仕方なく勉強してるけど
791 :
デフォルトの名無しさん
2016/10/15(土) 20:28:52.91 ID:Y5UYqbC9
>>789
CADみたいな、の意味がいまいちわからないが簡単な図形なら描ける
http://dobon.net/vb/dotnet/graphics/createimage.html
上のページのはコードで座標を決めてしまっているが、マウスドラッグで指定した位置に描くものとかは簡単にできる
792 :
デフォルトの名無しさん
2016/10/15(土) 20:38:05.23 ID:pX/A0T2U
>>791
サンガツ
白紙にエクセルのオートシェイプの機能とか文字を好きな位置に挿入する機能を持ったものかな
線のボタンを描画モード、文字ボタンを押せば文字モードみたいなの出来るかなーって
793 :
デフォルトの名無しさん
2016/10/15(土) 20:41:29.04 ID:Y5UYqbC9
>>792
>線のボタンを描画モード、文字ボタンを押せば文字モードみたいなの出来るかなーって
そこまでの標準のライブラリは無いので頑張って自分で作ろうw
文字の描画もGDI+でできるからUIの実装だけだ
794 :
デフォルトの名無しさん
2016/10/15(土) 20:50:25.38 ID:vyO0bokn
>>780
Microsoft.Bcl.Async使えば.NET Framework 4.0 でも使える
795 :
デフォルトの名無しさん
2016/10/15(土) 20:59:19.56 ID:vyO0bokn
>>784
Task作成時にLongRunningオプション指定すれば専用スレッドが作成されるので、ずっと動き続ける処理も対応可能
外から無理やり強制終了させるのはTaskじゃ出来ないけど、それは最後の手段な気が
796 :
デフォルトの名無しさん
2016/10/15(土) 21:01:52.12 ID:trxVi14T
ずっと裏で動いているスレッドが1つあって
そのために1つだけスレッドを作っているんだけど Threadじゃだめかな・・・

終了時、Invoke中にメイン死ぬと不正終了になるんだけど
こういうのもTaskとかだとなにもしなくても解決するのかな
797 :
デフォルトの名無しさん
2016/10/15(土) 21:04:09.39 ID:pX/A0T2U
>>793
作成可能なのかぁ
よっしゃ頑張って調べてみる
ありがとう
798 :
デフォルトの名無しさん
2016/10/15(土) 23:28:16.70 ID:f1QyDe2U
>>756
win32api 直たたきでやる
799 :
デフォルトの名無しさん
2016/10/16(日) 09:25:32.19 ID:N3K1drKB
別にDeprecated表示が出るわけでもないのに
いちいち人の顔色確認しないと使えないのかよって感じ
800 :
デフォルトの名無しさん
2016/10/16(日) 09:47:25.93 ID:FoYCot45
>>796
そもそもずっと動いてる必要があるのかっていう
スレッドが使われる大半のケースは非同期プログラミングが面倒だからで、
asyncのように継続を自然に記述できる十分優れたプログラミングモデルがあればそもそも必要ないことが多いよ
801 :
デフォルトの名無しさん
2016/10/16(日) 10:13:05.42 ID:JeZKc2qD
結局、待ち合わせ処理を上手く書けなければ、非同期処理はドツボルだけだからな
802 :
デフォルトの名無しさん
2016/10/16(日) 10:17:44.05 ID:6cPEMPfX
今はasync/awaitのせいでそれ意味あん?っての多いな
803 :
デフォルトの名無しさん
2016/10/16(日) 11:01:54.51 ID:jn8AI4NK
IProgress<T>も追加されたし、Control.Invoke()とかBackgroundWorkerとか全然使わなくなったなぁ
804 :
デフォルトの名無しさん
2016/10/16(日) 11:26:09.74 ID:LqkHCFhg
MSHTML?とかDOM?の話ってここでしても大丈夫?

id='hoge' なdivを探して、さらにその中に散らばっている class='piyo' なdivを
コレクションしたいんだけど、うまく書けない
805 :
デフォルトの名無しさん
2016/10/16(日) 11:27:43.38 ID:jbRBUkYK
$('hoge').children('.piyo')
806 :
デフォルトの名無しさん
2016/10/16(日) 16:08:56.29 ID:43exmUNo
MSHTMLはCOMコンポーネントスレだな
C#ではない
807 :
デフォルトの名無しさん
2016/10/16(日) 16:16:22.79 ID:6cPEMPfX
ここよりもどこの方が答え出やすいだろってんならわかるが、C#でやりたいってんだからここでいいだろ
変なとこで聞くとC++とかjsでの例が返ってきて面倒
808 :
デフォルトの名無しさん
2016/10/16(日) 17:18:36.54 ID:SvwLiUUm
一方このスレでは、使ってる人が居なくて回答がないってオチなんですけどね
ふふふ
809 :
デフォルトの名無しさん
2016/10/16(日) 17:25:57.62 ID:FB+xb9yt
逆にnugetで使えるMSHTML的なライブラリを教えてあげたらどうですか
810 :
デフォルトの名無しさん
2016/10/16(日) 20:17:19.13 ID:rLjB7sKS
>>804
上手く書けないってどういうこと?
classNameのことかもしれないなと思ったけど違うかな?


普通にdiv取ってクラス名をアトリビュート指定するとき'class'じゃダメ
'className'じゃないといけない
811 :
デフォルトの名無しさん
2016/10/16(日) 20:43:38.34 ID:bkFW5Wdb
俺もさっき?ってなった
812 :
デフォルトの名無しさん
2016/10/16(日) 20:44:43.60 ID:HptTw0AS
便利な定番ライブラリー教えてください
813 :
デフォルトの名無しさん
2016/10/16(日) 22:10:05.08 ID:rLjB7sKS
nugetにも野良にもHTMLライブラリはあまりいいものがない
XPath指定しないといけなかったり単純じゃない
814 :
デフォルトの名無しさん
2016/10/16(日) 22:13:37.85 ID:rLjB7sKS
jqueryみたいな使い勝手のものがいいのに全然そういうのは見当たらない
815 :
デフォルトの名無しさん
2016/10/16(日) 22:32:11.51 ID:dK/+e+o+
か余計なことせずそのまま実績のあるjquery使えばいいのでは
816 :
デフォルトの名無しさん
2016/10/16(日) 22:55:35.24 ID:Bi9cJ88q
>>812
定番かどうかは分からないけどHtmlAgilityPackはどう?
まぁ813が言っているようにXPath使わにゃならんから面倒だけど
817 :
デフォルトの名無しさん
2016/10/17(月) 00:41:57.54 ID:gL0kaGzi
mshtmlつかうなら
https://msdn.microsoft.com/en-us/library/cc288169(v=vs.85).aspx
queryselectorが使える
818 :
デフォルトの名無しさん
2016/10/17(月) 21:53:10.29 ID:vjQZXreA
HtmlAgilityPackかSGMLReaderあたりかなあ
819 :
デフォルトの名無しさん
2016/10/18(火) 16:42:09.62 ID:7mpjJA7j
今動作してるIEの一覧を取得するのにSHDocVw.ShellWindows()を使うけど
IEかただのエクスプローラかそれとも何かのコンポーネントかを判別するのって
どうしたらいいの?
820 :
デフォルトの名無しさん
2016/10/18(火) 18:13:12.16 ID:ewOaGiwG
そんなもの使うなとしか言えない
821 :
デフォルトの名無しさん
2016/10/18(火) 18:29:09.57 ID:mq8BnqKZ
IE6のときならenumwindowで判断して、hwndからihtmldocumentに変換してたな
822 :
デフォルトの名無しさん
2016/10/18(火) 19:15:18.50 ID:FlxOlnSe
>>820
無能だなー
823 :
デフォルトの名無しさん
2016/10/18(火) 20:46:41.52 ID:ewOaGiwG
>今動作してるIEの一覧を取得するのにSHDocVw.ShellWindows()を使う

なぜこんなものを使う?
824 :
デフォルトの名無しさん
2016/10/18(火) 20:52:19.50 ID:Gt7CC2vm
背後になんか面倒くさい理由を隠してるとしか思えんよな
825 :
デフォルトの名無しさん
2016/10/19(水) 12:11:35.27 ID:LBA1+3Md
>>823
こんなもの以外の方法があるならおしえて
ほかの楽な方法があるなら知りたいわ
826 :
デフォルトの名無しさん
2016/10/19(水) 17:19:08.15 ID:arYWyhLn
IEオートメーションじゃ実現できないのかな?
827 :
デフォルトの名無しさん
2016/10/19(水) 23:13:27.42 ID:LBA1+3Md
MSHTML.IHTMLElement を MSHTML.IHTMLDocument3 にキャストできるの?
828 :
デフォルトの名無しさん
2016/10/19(水) 23:33:28.27 ID:O7AcwVjM
documentプロパティから取れるんじゃないか?すくなくともihtmldocument2は取れる3は使ったことないから知らね
829 :
デフォルトの名無しさん
2016/10/20(木) 11:00:38.44 ID:m/6IB2Ib
ベクトル使いたいからWPFのチュートリアルみてるけど
もう自分で実装してForm使った方が早い気がした
830 :
デフォルトの名無しさん
2016/10/20(木) 11:21:11.77 ID:h44EP0Eo
標準のメッセージダイアログを継承して
おっきいダイアログ出せるようにできる?
831 :
デフォルトの名無しさん
2016/10/20(木) 11:52:28.07 ID:h1aMlyOK
>>830
継承してもstaticメソッドの実装はオーバーライドできないよね。

ゼロベースで作っても大した手間でもないよ。
俺はモーダレスかつタイマーで自動で消えるメッセージボックスを自作して使ってる
832 :
デフォルトの名無しさん
2016/10/20(木) 12:16:12.40 ID:h44EP0Eo
>>831
ありがとう。 自分で作った。
833 :
デフォルトの名無しさん
2016/10/20(木) 12:33:25.92 ID:hy7ZxWJM
なんでたまに継承できないクラスあるのかな?
834 :
デフォルトの名無しさん
2016/10/20(木) 12:33:46.23 ID:hy7ZxWJM
オーバーライドだった
835 :
デフォルトの名無しさん
2016/10/21(金) 22:58:40.56 ID:qlDwM755
gcnewってなに? 今でも使っているの?
836 :
デフォルトの名無しさん
2016/10/21(金) 23:06:00.00 ID:myg7EJ7B
>>835
c#にgcnewは無いよ。
C++/CLIでc#のnewに相当するのがgcnew。
マネージオブジェクトを割り当てるのに使う。
837 :
デフォルトの名無しさん
2016/10/22(土) 11:50:35.71 ID:uYEAFNJ9
>>836
ありがとう
何かの記事でごっちゃに見たみたいだな
838 :
デフォルトの名無しさん
2016/10/22(土) 15:25:07.68 ID:nST3ahFj
質問

LINQのクエリ/メソッド式って、どう使い分けるもんなん?
「こういう人はこう」でも「こういう状況ではこう」でもいい。
839 :
デフォルトの名無しさん
2016/10/22(土) 16:27:57.03 ID:Hz0V4lr8
とりあえずLINQ to Objectsの場合
基本的にクエリ式は忘れていいと思うよ
SelectManyが出てくるときだけ思い出すことはある
840 :
デフォルトの名無しさん
2016/10/22(土) 16:39:49.89 ID:nST3ahFj
ありがとう、あんまり気にしないことにする
841 :
デフォルトの名無しさん
2016/10/22(土) 17:43:18.97 ID:29Li8We/
>>829
君の言うベクトルって何?
画像系の話?
842 :
デフォルトの名無しさん
2016/10/22(土) 18:08:09.54 ID:O/1X83Cc
>>838
単純なクエリはメソッドの方が簡潔に書けるけど、複雑になると解読不能になるからクエリ式を使う
具体的にはネスト(SelectMany)やjoinやgroupbyを使う場合だな
クエリ式だとletでエイリアス作れるし
843 :
デフォルトの名無しさん
2016/10/22(土) 19:37:45.10 ID:jUJZAwsX
管理者権限が必要な処理の書き方とか全然知識がないんだけど、そういうの詳しく書いてある本ってあります?
844 :
デフォルトの名無しさん
2016/10/22(土) 23:36:47.33 ID:AdTl/Wc+
class 社員 { public string 名前; }
class 部署 { public List<社員> 社員リスト; }
class 会社 { public List<部署> 部署リスト; }
static void Main()
{
   var data = new List<string[]> {
      new string[]{ "会社A", "営業部", "社員1"},
      new string[]{ "会社A", "営業部", "社員2"},
      new string[]{ "会社A", "営業部", "社員3"},
      new string[]{ "会社A", "技術部", "社員4"},
      new string[]{ "会社A", "技術部", "社員5"},
      new string[]{ "会社A", "経理部", "社員6"},
   };
   var 会社A = new 会社();
   // ここで date を 会社A の中に代入したい
}
こういう単純なクラスとデータがある場合に、dataを会社Aに代入したいのですが、forループでやろうとすると例えば営業部の部署名が複数回出てくるので
上手く出来ませんでした。上級者の人のテクニックを教えて下さい。
本当は会社B、会社CもあるdataをList<会社>に入れたいのですが、まずは会社Aのみで。
あるいは、より良いクラス定義のしかたやデータの持ち方などありましたら教えてください。
845 :
デフォルトの名無しさん
2016/10/23(日) 00:22:31.27 ID:B5STCa/c
>>844
何がしたいのかよくわからんけど、そのコードだと
会社は会社名のプロパティを持ってないし部署も部署名のプロパティを持ってないから
"会社A"とか"営業部"とかいうデータは使われず捨てられちゃうと思うんだけど、そこはいいのかな?w
846 :
デフォルトの名無しさん
2016/10/23(日) 07:53:45.11 ID:OxwAMa74
>>844
Listの操作でいけるだろ
コンストラクターの引数で
847 :
デフォルトの名無しさん
2016/10/23(日) 09:52:13.25 ID:1pxdLQGB
部署クラスが部署名を持ってないってことは、その部署クラス(のインスタンス)をみても
どの部署かわからんってことだぞ

つまり、社員の部署が分かったとしても、その社員を
List中のどの部署インスタンスに設定してよいかわからんってことだ
848 :
デフォルトの名無しさん
2016/10/23(日) 10:49:08.80 ID:sEyHovA2
class 会社{会社CD 会社名}
class 部署{会社CD 部署CD 部署名}
class 社員{社員CD 会社CD 部署CD 社員名}
個人的にはこんなイメージ
849 :
デフォルトの名無しさん
2016/10/23(日) 10:57:06.97 ID:ZJ79iXt0
なんだそのCDって。
850 :
デフォルトの名無しさん
2016/10/23(日) 11:09:20.84 ID:+n3OHrjP
「コード」の略として使われてるのを、帳簿やら流通やら管理やらで結構広く使われてるけど
プログラミング界隈に絞ると余り見ない気がする
851 :
デフォルトの名無しさん
2016/10/23(日) 11:14:50.63 ID:hWrb1W5d
flagをflgにして1バイト削減するのとどちらがいい
852 :
デフォルトの名無しさん
2016/10/23(日) 11:18:19.73 ID:KJ+MRgkM
省略がどうしても必要にならない限り
無意味な省略はしない
853 :
デフォルトの名無しさん
2016/10/23(日) 11:29:06.27 ID:04VfEeFu
>>844
>営業部の部署名が複数回出てくるので
>上手く出来ませんでした
この部分の意味というかどうしたいかがわからん。"会社A"の要素の振り分けならContainsで確認するだけだが
854 :
デフォルトの名無しさん
2016/10/23(日) 11:39:54.27 ID:hJuf8zeH
データ突っ込んでDBみたいに扱いたいならDataSetでも良いんじゃないの
速度求めるならオススメできんけどさ
855 :
デフォルトの名無しさん
2016/10/23(日) 12:00:39.55 ID:0D6CiVY3
>>851
menuをmnu、userをusr、topをtpとか
何かの制御ボードのサンプルコードで見たけど
1バイト削ることに何の意味があるのか分からん
856 :
デフォルトの名無しさん
2016/10/23(日) 12:14:59.88 ID:631/ZmCa
バーコードの最後の数字がC/Dって呼ばれてたな確か
check digitだったと思うけど
857 :
デフォルトの名無しさん
2016/10/23(日) 12:15:35.19 ID:+n3OHrjP
大昔には削るメリットは結構あったらしい
変数名の長さに制限があるとか、エディタで扱いやすい長さだとか、そういうの。
858 :
デフォルトの名無しさん
2016/10/23(日) 12:18:54.25 ID:XCFJNrSh
>>844
Dictionaryを使えばいいよ

class 社員 { public string 名前 {get;set; }
class 部署 { public Dictionary<string,社員> 所属社員 {get;} = new Dictionary<string,社員>(); }
class 会社 { public Dictionary<string,部署> 所属部署{ get;} =new Dictionary<string,部署>(); }

var 会社情報 = Dictionary<string,会社>();
foreach(var d in data) {
if(!会社情報.ContaintsKey(d[0])) 会社情報[d[0]] = new 会社();
if(!会社情報[d[0]].所属部署ContaintsKey(d[1])) 会社情報[d[0]].所属部署[d[1]] = new 部署();
会社情報[d[0]].所属部署[d[1]].所属社員[d[2]] = new 社員() { 名前 = d[2] }
}
859 :
デフォルトの名無しさん
2016/10/23(日) 12:19:09.90 ID:sEyHovA2
未だに列名6バイトなクソDB使ってて
癖ついちゃってるんだすまない
860 :
デフォルトの名無しさん
2016/10/23(日) 12:24:08.02 ID:LLV8Wwru
ジャップランドでは今なお80文字x24行の端末で開発もオペレーションもするマシンがバリバリ現役で山ほど稼働しており、
PGという名のライン工により日夜大量の糞コードが生産され続けているのです
861 :
デフォルトの名無しさん
2016/10/23(日) 12:25:50.86 ID:XCFJNrSh
テーブル定義からDTO自動生成したら30文字以下の略式名称が沢山出てきてイラついた事ならよくある
どこの製品とは言わんが
862 :
デフォルトの名無しさん
2016/10/23(日) 12:29:06.93 ID:8nXGysoS
>>858
分かりずらすぎ
863 :
デフォルトの名無しさん
2016/10/23(日) 12:51:39.85 ID:XCFJNrSh
>>862
転職をお勧めするよ
864 :
デフォルトの名無しさん
2016/10/23(日) 13:03:17.86 ID:8nXGysoS
Dictionaryなんて使わない。
865 :
デフォルトの名無しさん
2016/10/23(日) 13:10:06.70 ID:Qt7KzQsX
今時はクラス名や変数名とかに日本語が使えるから分かりやすくていいよね
866 :
デフォルトの名無しさん
2016/10/23(日) 13:15:27.54 ID:PYj3VGyg
>>864
自分の使わないものを「わかりづらい」って批判するのはただの思考停止だな
867 :
デフォルトの名無しさん
2016/10/23(日) 13:16:08.35 ID:+n3OHrjP
>>865
あとはインテリセンスちゃんに頑張ってもらうだけ!
868 :
デフォルトの名無しさん
2016/10/23(日) 13:16:17.05 ID:qVlUr/o9
フォームのボタンとかラベルの名前の付け方
何か命名規則やコーディング規約とかある?
labelHogeとかlbl_hogeとかルールあるの?
869 :
デフォルトの名無しさん
2016/10/23(日) 13:17:43.18 ID:PYj3VGyg
>>868
そんなもの決まってないから
クラス名・変数名に迷ったら書き込むスレ。Part27
http://echo.2ch.net/test/read.cgi/tech/1476572490/
気になるのなら上のスレに行け
870 :
デフォルトの名無しさん
2016/10/23(日) 13:18:39.73 ID:YUghrMnK
会社の複数形…

会社達["会社A"].,["営業部"].["社員1"];

会社達.Select社員("会社A", "営業部", "社員1");
871 :
デフォルトの名無しさん
2016/10/23(日) 13:19:22.06 ID:YUghrMnK
間違って . いれっぱだった
872 :
デフォルトの名無しさん
2016/10/23(日) 13:24:40.71 ID:631/ZmCa
>>868
コントロール専用のルールはないけど、VB6みたいなハンガリアンはやめろってことにはなってたはず。
ただ実際はコントロールに限ってはハンガリアン使ってる人が多いと思う
873 :
デフォルトの名無しさん
2016/10/23(日) 13:43:56.51 ID:7RJgAwd4
アプリケーションハンガリアンは普通に使う
インテリセンスがグループ化してくれて便利やろ
874 :
デフォルトの名無しさん
2016/10/23(日) 13:48:58.15 ID:qVlUr/o9
>>869-873
ありがとう
とりあえずマイクロソフト推奨のルールは
ないってことやね
875 :
デフォルトの名無しさん
2016/10/23(日) 14:47:40.36 ID:KJ+MRgkM
.NET Frameworkの記法に合わせる事にしてる
http://msdn.microsoft.com/ja-jp/library/ms229002(v=vs.100).aspx
876 :
デフォルトの名無しさん
2016/10/23(日) 14:52:56.32 ID:Qt7KzQsX
分かりやすい日本語にしてる
877 :
デフォルトの名無しさん
2016/10/23(日) 15:22:39.08 ID:LLV8Wwru
>>873
人それぞれだけど、俺は全てのラベルをラベルとしてグループ化するより
例えば会社名のフィールドならラベルとテキストボックスをまとめて会社名としてグループ化したい派
コントロールの種類でグループ化することにあまりメリットを感じない
878 :
デフォルトの名無しさん
2016/10/24(月) 11:24:49.66 ID:l6YOm+ny
>>874
.NET前:MS「ハンガリアンを使え」
.NET後:MS「ハンガリアンを使うな」
https://msdn.microsoft.com/ja-jp/library/ms229045.aspx
879 :
デフォルトの名無しさん
2016/10/24(月) 11:33:54.68 ID:ex01Zy3v
>>878
それ翻訳がおかしいだけでしょ
ちゃんと翻訳されてる方を見ろよ
http://msdn.microsoft.com/ja-jp/library/ms229045(v=vs.100).aspx
880 :
デフォルトの名無しさん
2016/10/24(月) 11:56:19.29 ID:fiWgzVNs
規約と推奨をちゃんと切り分けて話してくれよ
質問者は最初に「規約」を聞いてきてその後に「MSの推奨」になっているけど話が全然別の物になるから
881 :
デフォルトの名無しさん
2016/10/24(月) 12:07:19.75 ID:A1JDcDJD
>>880
規約があれば規約を教えてほしい。
規約はないが推奨はある というなら推奨でもいい。
推奨もないなら 「俺はこうしてる」 でもいい。
882 :
デフォルトの名無しさん
2016/10/24(月) 12:16:05.65 ID:fiWgzVNs
>>881
推奨は>>878>>879でリンク貼ってもらっているだろ
そういったこと気にするのなら2chで聞くよりも適当に本何冊か買って書いてあるとおりにでもやればいい
職場なら職場のルールがあるし、趣味でやっているのならどうするかは個人の勝手なんだから
883 :
デフォルトの名無しさん
2016/10/24(月) 12:23:17.96 ID:csInVVUs
どうでもいいことで妙な絡み方する奴だねw
884 :
デフォルトの名無しさん
2016/10/24(月) 12:25:46.22 ID:TdMIMrel
あとMSの提示してる規則はあくまで不特定多数にAPIが参照される前提の「ライブラリ」に対してのみの提案
だから文中にもpublic/protectedに対するものしか出てこない
アプリ内の記述とか、ライブラリでもinternalやprivateなものは完全ノータッチ
885 :
デフォルトの名無しさん
2016/10/24(月) 16:07:18.44 ID:SvgB/4J1
>>878
これは見事な糞機械翻訳だな

原文: [X DO NOT] use Hungarian notation.
機械: [X のしないで] ハンガリアン記法を使用します。
直訳: [×するな] ハンガリアン記法の使用。
意訳: ハンガリアン記法を使用するな。
886 :
デフォルトの名無しさん
2016/10/24(月) 16:40:04.52 ID:qDj+nyPk
http://www.atmarkit.co.jp/fdotnet/dotnettips/151winshow/winshow.html

ここを参考に、オプションを指定して2個めを起動すると、起動中のアプリに独自メッセージを投げるようにしてみた。
ただ、アプリは複数のウィンドウを開いていて、探した Process オブジェクトの MainWindowHandle には
フォーカスがある (あった?) ウィンドウのハンドルが入ってるみたいで、目的のウィンドウじゃない場合がある。
全部のフォームの WndProc をオーバーライドするのも保守性がよくないし、どうしたらいいんでしょうか。
887 :
デフォルトの名無しさん
2016/10/24(月) 17:05:46.02 ID:f1Oob2xq
>>886
FindWindow使うんじゃあかんの?
888 :
デフォルトの名無しさん
2016/10/24(月) 17:10:36.84 ID:e0+jKQlJ
そのウィンドウの作りによるけど、親子関係を維持してるなら親をたどるとか
モードレスの場合は、、、どれがメインなのかを知る手段をお互いの約束事でみつける、かなあ
889 :
デフォルトの名無しさん
2016/10/24(月) 17:40:28.81 ID:TdMIMrel
PostMessageでいいならIMessageFilter実装してApplication.AddFilterすれば
ちょっと構造的にやるならHWND_BROADCASTで問い合わせてみるとか
890 :
デフォルトの名無しさん
2016/10/24(月) 17:41:57.18 ID:TdMIMrel
っていうかそんなんやるんだったらもうIPCチャネル使ったWCFでいいか…
891 :
デフォルトの名無しさん
2016/10/24(月) 20:50:12.21 ID:qDj+nyPk
ご意見ありがとうございます。
タスクバーから表示を消している場合は API を使って探すしかないようなんで、それを参考にしようとしたけど、
できれば極力 API を使わない方法がないかなーと思いまして。
IPC も検討したけど、WndProc をオーバーライドした抽象クラスを作って、そこから派生させるようにしました。
まあでも IPC 使ったほうがスマートでしょうね。
892 :
デフォルトの名無しさん
2016/10/27(木) 16:31:51.10 ID:NElj0+xs
整数型間のキャストについてちょっと質問

■ ビット幅大→ビット幅小
上位ビットの切り捨て

■ ビット幅小→ビット幅大
符号拡張後のビットイメージのコピー

■ 同じビット幅で符号の有無が違う型の間のキャスト
ビットイメージのコピー

こういう理解で合ってる?
893 :
デフォルトの名無しさん
2016/10/27(木) 17:49:24.66 ID:K4rqOI65
整数間って、符号有から符号有への変換しか考慮しないのか?
894 :
デフォルトの名無しさん
2016/10/27(木) 19:04:56.45 ID:Z8lrimsb
>>892
全然違う
はみ出るなら普通に例外飛んでくる
895 :
デフォルトの名無しさん
2016/10/27(木) 20:36:31.88 ID:rC8yedLe
>>894
C#はアンチェックキャストも使える
>>892で合ってる
896 :
デフォルトの名無しさん
2016/10/27(木) 20:41:37.27 ID:T6ck7IU9
質問書き込む間に試せば済むのにって思ったのは俺だけかな
897 :
デフォルトの名無しさん
2016/10/27(木) 20:59:04.81 ID:u3THH1jN
あまりにも自分に自信が持てないと、自分で試したことすら信用できなくなる
そうすると、百聞は一見に勝ってしまう
898 :
デフォルトの名無しさん
2016/10/27(木) 21:23:24.66 ID:5bnizB9y
uncheckedが前提ならそうかくだろ
キャストと言えば普通のキャストだろが
899 :
デフォルトの名無しさん
2016/10/27(木) 21:35:03.00 ID:PfRUD0fJ
>>895
ありがとう
900 :
デフォルトの名無しさん
2016/10/27(木) 22:05:16.44 ID:ILgHPkDG
>>898
カッカすんなよ
何が普通かは人によって違うんだよ
901 :
デフォルトの名無しさん
2016/10/27(木) 22:22:58.40 ID:pbaR/VeE
>>898
変数だとuncheckedがデフォルト設定だから、省略されてもおかしくない。
902 :
デフォルトの名無しさん
2016/10/28(金) 08:40:14.47 ID:AW+qEc2o
>>896
お前だけだよ。
903 :
デフォルトの名無しさん
2016/10/29(土) 19:08:46.81 ID:dXKRRVDP
C#erはサードパーティ製のORMやEntity Frameworkを禁止された時は何を使うんですか?
今いる現場では代わりにADO.NET & 型指定DataSet(デザイナーで作るアレです)を使っていますが生産性がいまいちなので他の方法を探しています
この方法の全てが気に入らない訳ではなくプロパティが全てパブリックになってしまう、DBNullとnullの変換が面倒、Nullable使用不可、邪魔なパブリックメソッドが沢山あるといったポイントが不評です
特にパブリックプロパティの問題はオブジェクトに集中するべき振る舞いがシステム全体に分散してしまうので深刻です
904 :
デフォルトの名無しさん
2016/10/29(土) 19:29:57.79 ID:ddj4bzvw
DAO手書きでいいよ
905 :
デフォルトの名無しさん
2016/10/29(土) 19:46:29.75 ID:wsj9Hrl0
>>903
禁止する理由?
906 :
デフォルトの名無しさん
2016/10/29(土) 19:46:57.95 ID:wsj9Hrl0
…は何

って打とうとした
907 :
デフォルトの名無しさん
2016/10/29(土) 20:03:24.68 ID:3O/hAOpu
DataSetって産廃を未だに使っているところあるんだな
908 :
デフォルトの名無しさん
2016/10/29(土) 20:57:46.79 ID:9ElojHns
EFを禁止する理由って一般的には何?
909 :
デフォルトの名無しさん
2016/10/29(土) 21:02:47.76 ID:ZloojbFD
>>906
会社の決まりとかだろ
910 :
デフォルトの名無しさん
2016/10/29(土) 21:11:45.43 ID:wsj9Hrl0
>>909
その理由を聞いてるんだろ
911 :
デフォルトの名無しさん
2016/10/29(土) 21:12:05.69 ID:nUOhPXQV
もし、速度の問題ならDapper使うべきだろうがね
912 :
デフォルトの名無しさん
2016/10/29(土) 21:21:04.07 ID:Xtl4N18Y
理由がなければ禁止されないと思ってるのが可愛い
913 :
デフォルトの名無しさん
2016/10/29(土) 21:31:13.29 ID:ZloojbFD
>>910
そんなもん聞いてどうなるもんでもないし
914 :
デフォルトの名無しさん
2016/10/29(土) 22:29:40.91 ID:3zUqMDSq
理解できずにトラブルが起きたときに思考停止する低能があまりに多いから
知らないところでメタ情報取得のためのSQL文を実行してるので
RDBMSのユーザーに本来不要な権限が必要になる場合があるから
915 :
デフォルトの名無しさん
2016/10/29(土) 22:50:05.69 ID:dNFy3BfA
>>913
思考停止おつ
916 :
デフォルトの名無しさん
2016/10/29(土) 23:40:38.36 ID:O0e58OxR
安い人足を使ってるのでついて来れない
917 :
デフォルトの名無しさん
2016/10/30(日) 03:55:02.62 ID:POLtarGN
>>916 これ
918 :
デフォルトの名無しさん
2016/10/30(日) 08:47:00.01 ID:2kQlDpFE
>>915
会社によって理由なんて様々だし
たいてい議論しても解決策なんて出ないし
そもそもここで議論すべき内容じゃないし
919 :
デフォルトの名無しさん
2016/10/30(日) 08:49:23.96 ID:m4OftK0R
理論武装すれば会社がライブラリの使用を認めてくれるかって言ったら、そんな事ねーしなあ
920 :
デフォルトの名無しさん
2016/10/30(日) 08:55:44.96 ID:qBBSmv5i
そらそうだ
変えられないことをあーだこーだ言っても時間の無駄
921 :
デフォルトの名無しさん
2016/10/30(日) 09:05:18.12 ID:bey9pkjT
小さい会社だと文句言うと変更するか検討始めるからな。基地外が一人いるだけで開発がすげー滞るww
922 :
デフォルトの名無しさん
2016/10/30(日) 09:18:38.59 ID:2kQlDpFE
>>919
会社の人が納得してくれても親会社からの通達でダメとかもあるし...
923 :
デフォルトの名無しさん
2016/10/30(日) 12:38:48.05 ID:vWAd+Msy
そんな会社やめちまえよお前ら
924 :
デフォルトの名無しさん
2016/10/30(日) 12:41:42.06 ID:CC/Nb3c5
スレ違いどころか板違い。マ板でやれ
925 :
デフォルトの名無しさん
2016/10/30(日) 22:32:58.24 ID:YeZOi3cQ
結局のところORMを自作するほかないということでしょうか
926 :
デフォルトの名無しさん
2016/10/30(日) 23:25:09.40 ID:asmRMmwq
君の質問に対しては、現場で許可されてる方法を使え、としか答えようがない
927 :
デフォルトの名無しさん
2016/10/31(月) 09:23:24.34 ID:lW2bcIPg
[GeneratedCodeAttribute( "Gardens Point Parser Generator", "1.5.2")]
この[]で宣言されるのは何を意味するのだろう。
自分で書くことはないが生成されたコードではよく見かける。いままでコメント
くらいの意識で眺めていたが、気になる。
928 :
デフォルトの名無しさん
2016/10/31(月) 09:36:11.24 ID:OqD2s4Cc
属性っていうメタデータ
シリアライズ用のデータとかネイティブAPI呼び出すとかDIとか
そういうのを書くときには使うことも出てくると思うぞ
929 :
デフォルトの名無しさん
2016/10/31(月) 09:40:21.62 ID:iFh8Iutn
C#で便利になったもんのひとつが属性だな。Cでも同じように使えたらよかったのに
930 :
デフォルトの名無しさん
2016/10/31(月) 10:34:23.11 ID:lW2bcIPg
そういう便利な機能があったとは。ありがとう
自分には無関係と思っていたが、例をみると

#ifの代わりに使えるね。
/// SHOW_INTERMEDIATE というシンボルが定義されているときのみ
/// 配列の内容をコンソールに表示する。

[Conditional("SHOW_INTERMEDIATE")]
static void IntermediateOutput(double[] array)
{
Output(array);
}
931 :
デフォルトの名無しさん
2016/10/31(月) 10:51:33.29 ID:lW2bcIPg
>929
しかし普通にはあまり使うケースはないんではない?
どう便利なのかいまいちよくわからない。 Cで使えると何が便利になる?
#ifの代わりくらいになるのはわかるが、、
932 :
デフォルトの名無しさん
2016/10/31(月) 10:57:51.43 ID:7o6spjkC
バージョンで処理を分けておいて
過去のバージョンの処理に戻したい場合は属性を変える
オープンソースだと後方互換性維持のためにそんな風にしてるね
933 :
デフォルトの名無しさん
2016/10/31(月) 11:01:23.63 ID:P3Gvvomo
プロパティシートで使うやつ?
934 :
デフォルトの名無しさん
2016/10/31(月) 20:59:34.23 ID:03zQ5mOK
属性はゴミ
そう思っていた時期が僕にもありました
935 :
デフォルトの名無しさん
2016/10/31(月) 22:23:39.25 ID:iWkg1iMh
属性をうまく使いこなせればプログラムがかなりスッキリ書けるんだけど
なかなかうまく型にはまらなくて何度も作り直してるわ
936 :
デフォルトの名無しさん
2016/10/31(月) 22:33:33.79 ID:PR8uOfdS
ちょっと凝ったことしようとしたら、DllImportAttributeとFlagsAttribute位は使うだろう。
937 :
デフォルトの名無しさん
2016/10/31(月) 22:52:52.13 ID:T+jfS1R6
あとはUnityとかもバンバン使うイメージ
938 :
デフォルトの名無しさん
2016/10/31(月) 23:16:26.73 ID:pApy3Eby
属性はSTAThreadとDllImportしか使った事ない
939 :
デフォルトの名無しさん
2016/10/31(月) 23:24:32.92 ID:utslClq8
DataAnotationは良いぞ
まあガチ業務だとちょっと物足りなくて結局は自作する羽目になるんだけど
940 :
デフォルトの名無しさん
2016/11/01(火) 08:32:19.42 ID:hFVadVBb
>>936
キャッ、それおまじないと思ってた。W
コピペしたコードの中にはよく混じってた。
941 :
デフォルトの名無しさん
2016/11/01(火) 08:42:26.93 ID:iAfLjhk9
JSONにバインドするクラスに属性使いまくりだね
942 :
デフォルトの名無しさん
2016/11/01(火) 09:27:22.11 ID:hFVadVBb
Unityってスクリプト言語みたいだね。これって属性なの? 面白そうだけど
どんな時に使う?
943 :
デフォルトの名無しさん
2016/11/01(火) 09:31:35.84 ID:D+IVr+nD
ちょっと意味わからない
944 :
デフォルトの名無しさん
2016/11/01(火) 11:54:25.84 ID:hFVadVBb
あっ、意味わかった。ごめん勘違いしていた。C#でUnity使うときの属性のことだね。
945 :
デフォルトの名無しさん
2016/11/01(火) 11:56:12.97 ID:hFVadVBb
>JSONにバインドするクラスに属性使いまくりだね

なんで使うの? そういう必要を感じたことないんだけど。どういう場面でつかうの?
946 :
デフォルトの名無しさん
2016/11/01(火) 12:18:29.71 ID:KGKMFPtk
>>945
天気予報データとかWeb Apiで返すデータにjson配信多いよね
947 :
デフォルトの名無しさん
2016/11/01(火) 13:51:57.28 ID:bjN+4M8I
そういう意味じゃないと思うが

シリアライズ/デシリアライズ対象外のフィールドを指定したり
JSONとC#のクラスフィールドで名前が一致しない場合にそれらをマッピングしたりする
948 :
デフォルトの名無しさん
2016/11/04(金) 15:22:24.22 ID:PH2+pS4C
VisualStudio2015起動中に出したらUnity生活終わるナリ・・・
あああ^~ああああああぁ^~~~!!!!起動遅せええええ!
ブリュブリュブリュブリュブリュゥゥゥウ!!!!ブッチッチブブッチブッチチ!!!
949 :
デフォルトの名無しさん
2016/11/04(金) 15:53:31.89 ID:kQ8VEtHk
怪文書過ぎる
950 :
デフォルトの名無しさん
2016/11/04(金) 16:26:14.38 ID:T8/2G1/9
>>946
天気予報に限らずapiが返すのはxmlかjsonだろ
951 :
デフォルトの名無しさん
2016/11/04(金) 16:54:25.27 ID:22qUZxEG
>>950
「とか」
952 :
デフォルトの名無しさん
2016/11/04(金) 16:58:09.06 ID:FRTndHrZ
天気はxmlの方が多いイメージだな
953 :
デフォルトの名無しさん
2016/11/04(金) 17:11:19.05 ID:fW1GVoX0
じぃさんとかばぁさんはとしくってるいめーじ
954 :
デフォルトの名無しさん
2016/11/04(金) 17:17:22.17 ID:pA+obtrY
そういうデータをcsvに変換するフィルタが大活躍します
955 :
デフォルトの名無しさん
2016/11/04(金) 17:54:23.34 ID:V0keAHui
気象庁配信のデータはXMLとFORTRAN時代さながらの固定テキストだった
956 :
デフォルトの名無しさん
2016/11/04(金) 17:59:21.35 ID:uJM5jI72
内部にコレクション持ってるなら固定テキストは向いてない
957 :
デフォルトの名無しさん
2016/11/04(金) 18:59:09.41 ID:yE+rsN5M
>>948
これはいけない
958 :
デフォルトの名無しさん
2016/11/04(金) 21:48:57.57 ID:eWOxJ5YA
コボルと非正規化データベースにどっぷり浸かって抜け出せないオジさんはCSVを愛している傾向が強い
959 :
デフォルトの名無しさん
2016/11/04(金) 21:52:44.37 ID:EoXigf7J
あるある
まあ環境だから仕方ない
960 :
デフォルトの名無しさん
2016/11/04(金) 23:50:28.01 ID:V0keAHui
職人としてCOBOL時代の技術に拘るなら潔く固定長レコードを使ってほしい
あれはあれで美しい一つの完成系だと思う
CSVは中途半端でオジさんの誇りが全く感じられない
961 :
デフォルトの名無しさん
2016/11/05(土) 00:02:53.11 ID:DUzD1Vkt
固定長は正義
40年近くプログラミングやってるが固定長にまさるものはない
962 :
デフォルトの名無しさん
2016/11/05(土) 01:05:40.91 ID:p62EnB4H
なーんでタブ区切りはやんないんだろーなー
トラブル減るのにいまいち認知度がない
963 :
デフォルトの名無しさん
2016/11/05(土) 01:49:06.12 ID:/yzRKBKB
CSVと違ってエクセルが直接はサポートしてないからじゃないの?
っていうかCSV使う動機ってエクセルへのエクスポートぐらいしかないと思うけど
964 :
デフォルトの名無しさん
2016/11/05(土) 04:44:51.30 ID:Mhx54Slb
科学技術系のソフトは割とCSV吐いたり要求したりが多い気がする
965 :
デフォルトの名無しさん
2016/11/05(土) 06:14:56.68 ID:9ROCL4OX
>>963
直接サポートが何を指しているのか分からないが
タブ区切りインポートは「テキストファイルのインポート」機能
エクスポートは「テキストファイル(タブ区切り)」で保存
両方とも標準でサポートされている
966 :
デフォルトの名無しさん
2016/11/05(土) 06:15:16.00 ID:Bnw8PuKo
Open XML SDK使ってXLSX直接読み書きすると捗るわ
967 :
デフォルトの名無しさん
2016/11/05(土) 06:50:20.50 ID:HDT4XNAt
>>965
恐らく「タブは印刷すると見えない」が問題なんだろうが
それこそこっち側からは理解不能だ
968 :
デフォルトの名無しさん
2016/11/05(土) 07:01:16.64 ID:Q0fi8pIF
Excel開いた状態からD&DでコピペするとTSVだよな確か
969 :
デフォルトの名無しさん
2016/11/05(土) 07:32:01.87 ID:6wNzhQFs
>>966
知らない間にオープンソースになってたんだな
ちょっと使ってみるかな
970 :
デフォルトの名無しさん
2016/11/05(土) 11:00:50.75 ID:p62EnB4H
生はつらくない?
ClosedXMLおすすめ
NPOIはバグ多い
971 :
デフォルトの名無しさん
2016/11/05(土) 11:01:17.28 ID:oE61kQsA
namespace Calculator
{
public abstract class ScanBase : AbstractScanner<ValueType,LexLocation> {
}
public class Parser: ShiftReduceParser<ValueType, LexLocation>
{
  static Parser() {
  }
  protected override void Initialize() {
  }
省略
  protected override string TerminalToString(int terminal)
  {
  }
         Parser() : base(null) { }
         public static void Calculate(string input)
         {
            Parser parser = new Parser();
            Scanner scanner = new Scanner();
            scanner.SetSource(input, 0);
            parser.Scanner = scanner;
            parser.Parse();
         }
}
}

         Parser() : base(null) { }
これは何をしてるのですか?
972 :
デフォルトの名無しさん
2016/11/05(土) 11:05:51.24 ID:vG38OUAL
>>971
うんこ食べてる
973 :
デフォルトの名無しさん
2016/11/05(土) 11:17:20.70 ID:N0pRKuvW
>>966
あれMSDNやそこらのサイトの例を鵜呑みにすると、複数フォント使っているセルは最初の単語しか取得出来ないんだよな
まあきっちり読めばいいだけなんだが
974 :
デフォルトの名無しさん
2016/11/05(土) 11:17:22.49 ID:93kgJ5Ii
>>965
分かれよw
それはTSVそサポートしてるんじゃないでしょ。
っていうか「テキストファイルのインポート」だって自分で書いてるじゃんw

>>969
プレーンテキストのデータはそうなってるだけでしょ。

そういやその逆の操作も可能だから、TSVでクリップボードにコピーして
スプレッドシートに貼り付け出来るようにしたソフトを昔作ったことがあったな
975 :
デフォルトの名無しさん
2016/11/05(土) 11:18:47.90 ID:u9ZZUUBm
>>971
そういうのは再帰下降パーサを手書きしてみればなんとなく分かるようになる
前知識なしでShift-Reduceは無謀
976 :
デフォルトの名無しさん
2016/11/05(土) 11:22:21.39 ID:oE61kQsA
ShiftReduceParserではなくて
  Parser() : base(null) { } ここね。
977 :
デフォルトの名無しさん
2016/11/05(土) 11:33:26.54 ID:6wNzhQFs
>>974
> それはTSVそサポートしてるんじゃないでしょ。
> っていうか「テキストファイルのインポート」だって自分で書いてるじゃんw
正直何を言ってるのかわけわからん w
まあその前にアンカーぐらいまともにつけられるようになれよ
って話だな
978 :
デフォルトの名無しさん
2016/11/05(土) 11:47:50.74 ID:0A6bFhuE
>>966
何が捗るのさ?
979 :
デフォルトの名無しさん
2016/11/05(土) 11:50:31.98 ID:93kgJ5Ii
>>977
>>962
その答えが恐らく>>963だろうと。
そういう話
980 :
デフォルトの名無しさん
2016/11/05(土) 11:51:10.92 ID:Bnw8PuKo
>>969
設定ファイルをExcelで書きたいからCSVでって言ってくる客は多いから、XLSXで提案すると喜ばれるよね
981 :
デフォルトの名無しさん
2016/11/05(土) 11:53:37.33 ID:2n9hgzl5
CSVと違ってTSVは標準の拡張子がないだけだろ
それを「エクセルはTSVサポートしてない」って・・・www
982 :
デフォルトの名無しさん
2016/11/05(土) 11:56:50.35 ID:Bnw8PuKo
>>973
まあ動きがおかしいと思ったらXLSXの生データを確認するのが手っ取り早いね
983 :
デフォルトの名無しさん
2016/11/05(土) 11:57:26.23 ID:PXYcOtjJ
Open XML SDKってどの程度のことが出来るの?
数式セル、条件付き書式、マクロ、暗号化、PDF変換、画像挿入は対応してる?
984 :
デフォルトの名無しさん
2016/11/05(土) 12:13:05.59 ID:Qh4Pk2xF
いまだに「CSV?カンマで区切りゃいいんだろ?」的な認識の奴が多くて辟易する
985 :
デフォルトの名無しさん
2016/11/05(土) 12:49:43.04 ID:oE61kQsA
カンマで区切るだけだと思うが、、、
理由もなしに辟易するのもなんだよな。

例えば
   Parser() : base(null) { }
これが何をいみするのかを調べるには、ある程度のキーワードがあれば検索できる。
baseはここでは特徴的なキーワードだからbaseで検索すればなにか手がかりが掴める
はずだ。
あるいはこの行をコメントアウトしてみるとか、トレースしてみるとかすると何か
手がかりがつかめるかもしれない。
986 :
デフォルトの名無しさん
2016/11/05(土) 12:54:27.64 ID:Bnw8PuKo
>>985
フィールドがダブルコーテーションで囲まれてることも考慮しないと
987 :
デフォルトの名無しさん
2016/11/05(土) 12:56:50.22 ID:pzDrzyW2
>>979
単体で直接読み書きできるのにサポートしてないってどう言うこと?
988 :
デフォルトの名無しさん
2016/11/05(土) 12:57:59.54 ID:pzDrzyW2
>>980
サーバー上で Excel ファイルを生成してダウンロードさせるとかの用途もあるしね
989 :
デフォルトの名無しさん
2016/11/05(土) 12:58:49.61 ID:Vdk40yXv
CSVならCsvHelperをNugetしてくれば解決さ
990 :
デフォルトの名無しさん
2016/11/05(土) 13:00:04.39 ID:pzDrzyW2
>>983
只で試せるんだから自分でやってみなよ
ここはそういう板ですよ
991 :
デフォルトの名無しさん
2016/11/05(土) 13:02:33.65 ID:pzDrzyW2
>>986
ダブルクォーテーションのエスケープはどうするとか、改行はどうするとか、やり出すとキリがないからなぁ
992 :
デフォルトの名無しさん
2016/11/05(土) 13:13:48.58 ID:93kgJ5Ii
>>987
上げ足取る気満々の奴に馬鹿正直に答える俺もどうかしてると思うが、
少なくとも読み込みに関してはサポートしているのは「任意のデリミタ区切りのテキストファイル」
であってTSVじゃない。

それに対してCSVはCSVとして直接扱える。

PCに必ずしも明るいとは限らない俺たちのエンドユーザーに対してどちらがよりフレンドリーか明らか。

っていうか、最初からそんなこと言われなくてもわかってるだろうにくっだらない。
993 :
デフォルトの名無しさん
2016/11/05(土) 13:43:13.40 ID:PXYcOtjJ
レポートファイルでもないのに内部保存形式意識させた時点で負けた気になる
設定変更はアプリ内でやりたい
994 :
デフォルトの名無しさん
2016/11/05(土) 14:02:37.48 ID:pzDrzyW2
>>992
プログラマーなら
> 「任意のデリミタ区切りのテキストファイル」
に TSV が含まれることに異議を唱える奴はそうそういないと思うけどねぇ
どっちが揚げ足とりなんだか w
995 :
デフォルトの名無しさん
2016/11/05(土) 14:18:37.61 ID:N0pRKuvW
DB入力にCSV指定されて軽くハマった覚えあるから出来る限りTSVにしているな
CSVは方言がキツイわ
996 :
デフォルトの名無しさん
2016/11/05(土) 15:21:23.46 ID:HDT4XNAt
いつものことながら、激しくどうでも良いことだなw
997 :
デフォルトの名無しさん
2016/11/05(土) 16:08:18.72 ID:oE61kQsA
push
998 :
デフォルトの名無しさん
2016/11/05(土) 16:08:54.81 ID:oE61kQsA
pop
999 :
デフォルトの名無しさん
2016/11/05(土) 16:09:17.15 ID:oE61kQsA
the
1000 :
デフォルトの名無しさん
2016/11/05(土) 16:11:24.95 ID:oE61kQsA
end
1001 :
1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 129日 11時間 32分 16秒
1002 :
1002
Over 1000 Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
353KB
レス数が1000を超えています。これ以上書き込みはできません。
★スマホ版★■掲示板に戻る■全部前100次100最新50
rm
lud20161215185736ca
このスレへの固定リンク: http://5chb.net/r/tech/1467142749/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net->画像>2枚 」を見た人も見ています:
PC相談室5月廃止・・・ISIZE崩壊へ
MFC相談室 mfc23d.dll [無断転載禁止]&#169;2ch.net (48)
Cygwin + MinGW + GCC 相談室 Part 3
Cygwin + MinGW + GCC 相談室 Part 8 (965)
荒らし相談室
C♯相談室 Part20
エイブル相談室
丸のベース相談室
C++相談室 part133
C++相談室 part143
台東区パンダの相談室
C++相談室 part137
C++相談室 part152
圧縮・復元 相談室
シーバスなんでも相談室39
シーバスなんでも相談室58
C++相談室 part144
C++相談室 part136
船乗りなんでも相談室・11
C++相談室 part149
C++相談室 part162
C++相談室 part153
C++相談室 part159
C#, C♯, C#相談室 Part93
C#, C♯, C#相談室 Part91
◎蟹座の子育て相談室◎
50代の恋愛よろず相談室
シーバスなんでも相談室36
C言語相談室(上級者専用)
シーバスなんでも相談室86
C++相談室 part130
シーバスなんでも相談室47
シーバスなんでも相談室79
C++相談室 part141
Dr林のこころと脳の相談室17
0からの、超初心者C++相談室
シーバス何でも相談室20
C#, C♯, C#相談室 Part75
★MNJ兄貴と弟の相談室★
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part90
元姫新地相談室【10山目】
シスター紅の悩み事相談室
C#, C♯, C#相談室 Part96
C#, C♯, C#相談室 Part97
【大衆演劇★なんでも相談室 2幕】
苔 コケ 初心者なんでも相談室-4回目
必ず誰かがなんたら相談室 Part.3
苔 コケ 初心者なんでも相談室-4回目
au by KDDIお客様相談室
中元日芽香のお悩み相談室~
0からの、超初心者C言語相談室
C#, C♯, C#相談室 Part94
苔 コケ 初心者なんでも相談室-2回目
【男飯】Rickの相談室【言霊】
[特設]サマータイム対応相談室
[特設]サマータイム対応相談室
ギコネコ先生の自作PC相談室その47
ギコネコ先生の自作PC相談室その43
夏休み穂乃果電話相談室に送りたい質問募集中
■一級建築士試験設計製図相談室 124室
初心者優先デジタル一眼質問・購入相談室 99
08070507787 ★ 真智宇 先生の悩み相談室
【初心者歓迎】デジタル一眼質問・購入相談室 167
初心者優先デジタル一眼質問・購入相談室 101
03:54:22 up 62 days, 4:53, 0 users, load average: 38.18, 16.23, 11.64

in 0.68989896774292 sec @0.68989896774292@0b7 on 061816