16/08/03 18:41:13.99 rSz0AB29.net
wwww
そんなくだらないことで作者の手を煩わせるなよ
その手はここで聞くよりstackoverflowの方が早くて確実だと思うぞ
101:デフォルトの名無しさん
16/08/03 19:20:36.10 OMwBzZOo.net
まあ安っぽい煽りにのって見当はずれなレスつけるくらいなら2chやらない方がいいな
102:デフォルトの名無しさん
16/08/03 21:01:35.46 MkOQGcCX.net
decimal と dynamic の区別もつかない子なんだから
みんな優しくスルーしてあげようよ
103:デフォルトの名無しさん
16/08/03 21:15:10.43 LSSVX5ne.net
>>98
普通の長さの単語なのにねぇ。
104:デフォルトの名無しさん
16/08/03 21:30:26.93 o77xN4AH.net
decimal
default
delegate
do
double
descending
dynamic
105:デフォルトの名無しさん
16/08/03 21:34:28.09 vCrtu5C1.net
default
delegate
do
double
はよく使うから覚えてるけどdecimal、descending、dynamicは使ったことないから許して
106:デフォルトの名無しさん
16/08/03 21:35:21.21 vCrtu5C1.net
descendingってLINQのキーワードか
107:デフォルトの名無しさん
16/08/03 21:43:15.83 R02UCwO4.net
85だが、dynamicくんは良いとして、87の人がキレた理由がさっぱり分からん
本人でも他の人でも良いけど解説してもらえないでしょうか?
108:デフォルトの名無しさん
16/08/03 21:50:10.97 wuBisWbe.net
>>103
キレてるように見えないとおもうけどw
特に理由がないならdecimalのような高コストな型の使用は避けるのは当たり前だw
浮動小数の演算は誤差を生む可能性があるが、それは必用な精度を確保する手段がない
ことを意味してない。
109:デフォルトの名無しさん
16/08/03 21:50:37.36 DDCmgbTU.net
計算するときに丸め気にしないことなんてないから、doubleの必要性がなくなる
110:デフォルトの名無しさん
16/08/03 22:49:52.73 R02UCwO4.net
>>104
丸めが問題になる金融系だとdecimal使うのは常識だろ
decimalのコストが気になるほど速度にシビアでdobleの丸め誤差が気になる場面はめったにないな
金融の大規模な計算はDBにやらせるのが筋だし
111:デフォルトの名無しさん
16/08/03 23:06:36.38 wuBisWbe.net
だから誰も金融系の話なんかしてないでしょ。
何をいってんの。
「丸めが気になる数字にdouble使うのはどうかしている」なんて寝言を言ってる奴がいるから
そんなことはねえよ、そういう話だよ。
112:デフォルトの名無しさん
16/08/03 23:13:17.50 R02UCwO4.net
>>107
金融系除いて、decimal使えないほど速度にシビアで丸め誤差が気になる場面って一体何時起こりえるの?
113:デフォルトの名無しさん
16/08/03 23:20:57.08 +uSGRXQT.net
機械学習とかイメージングは演算誤差が大敵
かつ速度も要求される
114:デフォルトの名無しさん
16/08/03 23:25:25.51 +uSGRXQT.net
かといって高精度整数を扱うのにはコスト的に無理があった彼らは
べらぼうにサンプルを増やして誤差を均一化するか, 補完法を改良することでお茶を濁した
115:デフォルトの名無しさん
16/08/03 23:37:11.41 R02UCwO4.net
>>110
後、もう一つ大事な条件書き忘れていた
「C#で」
116:デフォルトの名無しさん
16/08/03 23:42:43.18 fJKhNvbj.net
>>109
「誤差」という言葉でひとくくりにしすぎ。
そういう一般的な数値処理は誤差が許容範囲以下であればいいんであって、丸め誤差の問題とは
やや性質が違う。そもそも処理の途中でいちいち丸めないし。
117:デフォルトの名無しさん
16/08/04 00:05:21.11 Vi80rqnk.net
>>108
何を言ってるのか意味がわからないけど、繰り返しになるが
必用もないのに高コストなdecimalを使う理由はないし、そんなプログラマもいません。
理屈を分かってないダメグラマは別にしてね。
118:デフォルトの名無しさん
16/08/04 00:09:13.58 5NqeNpQm.net
予想通り言いがかりでしたw
119:デフォルトの名無しさん
16/08/04 00:09:46.86 cADM294i.net
たとえ遅くても演算誤差でバグが発生しない方を俺は使うね
120:デフォルトの名無しさん
16/08/04 00:15:15.90 oWVthcOw.net
decimalとdoubleでそんなにコスト違うのかね
誤差とコストでどっちとるって話だが
まあそのコスト差すら気にするコストにシビアな環境なら気を付ければいいさ
そこまでシビアな環境でC#を使うこと自体の意義を問い詰めたいけどな
通常は多少のコストで誤差がなくなるなら、そっち選ぶと思うけど
121:デフォルトの名無しさん
16/08/04 00:17:30.28 5NqeNpQm.net
>>113
>必用もないのに高コストなdecimalを使う理由はないし
だから具体的にdoubleで問題が出る(=丸め誤差が問題になる)C#のジョブを書いてくれよ
想定なしなら言いがかりだよね
122:デフォルトの名無しさん
16/08/04 00:20:22.77 Vi80rqnk.net
当たり前だけどdecimal使ったって誤差を無くせるわけじゃないよw
doubleみたいに基数2の浮動小数であることに起因する誤差を無くせるだけ。
無理数が有限の情報量で表現できるわけないでしょw
123:デフォルトの名無しさん
16/08/04 00:23:01.22 Vi80rqnk.net
>>117
だから何を言ってるの?意味が分からん。
俺はdoubleにはその手の演算誤差があっても必用な精度を確保する手段はあるから
無暗にdecimalなんか使わずにdoubleを使うのが普通だと言ってるんだけど。
何が「だから」だよ。
124:デフォルトの名無しさん
16/08/04 00:24:34.98 5NqeNpQm.net
最初のレスから「丸め」と書いてあるのに今更何言ってるんだかw
125:デフォルトの名無しさん
16/08/04 00:27:02.95 Vi80rqnk.net
>>120
126: その「丸め」って言葉を恐らく君は誤用してるんだけどねw
127:デフォルトの名無しさん
16/08/04 00:27:22.12 oWVthcOw.net
0.1が正確に表現できない環境が普通なやつとは話が合わんな
128:デフォルトの名無しさん
16/08/04 00:27:46.10 5NqeNpQm.net
>>119
最初から「丸めが気になる数字にdouble使うのはどうかしているだろ」と言っているのに日本語判らないのかな?
気にならなければdouble使えばいいだけだろ
129:デフォルトの名無しさん
16/08/04 00:31:49.11 Vi80rqnk.net
>>123
じゃあ聞くけど、そもそも「丸めが気になる数字」ってどういう意味?
言葉通り受け取ると全然理解不能なんだけど
130:デフォルトの名無しさん
16/08/04 00:33:41.63 5NqeNpQm.net
>>121
浮動小数点は2進数表現だが、実際に使われている10進数を完全に表記できないから
誤差が生じるってこと以外の丸め誤差を書いてくれ
俺は何と勘違いしているんだ?
131:デフォルトの名無しさん
16/08/04 00:34:26.87 oWVthcOw.net
Vi80rqnkの主張は普通はdoubleで良いだろって主張なのは理解できるが
5NqeNpQmの主張は俺にもいまいちよくわからん
132:デフォルトの名無しさん
16/08/04 00:34:43.49 bt/hw+Ix.net
相談内容置いてきぼりの議論は、
このスレ使ってあげて。
ふらっと C#,C♯,C#(議論用)
スレリンク(tech板)
133:デフォルトの名無しさん
16/08/04 00:37:31.68 Vi80rqnk.net
>>125
何言ってるんだか意味がわかりません。
誰と戦ってるの?w
134:デフォルトの名無しさん
16/08/04 00:41:16.26 5NqeNpQm.net
>>128
細かいことが気になるならdecimalを使って、気にならないならdouble使えばいいってことだよ
decimalを目の敵にしているのか理由が分からん
そもそもアンタはdoubleで問題になる具体例を出せないじゃないか
135:デフォルトの名無しさん
16/08/04 00:46:58.32 Vi80rqnk.net
何でdoubleで問題ないからdouble使えって言ってる人間に
doubleで問題になる具体例を求めるんだよw
意味わかんないよw
136:デフォルトの名無しさん
16/08/04 00:51:13.09 5NqeNpQm.net
>>130
丸めが気になるならdouble駄目じゃんw
そういう時はdecimal使えよ
137:デフォルトの名無しさん
16/08/04 01:04:42.73 Vi80rqnk.net
だから「丸めが気になる」ってどういう意味?w
138:デフォルトの名無しさん
16/08/04 01:07:56.03 5NqeNpQm.net
>>132
>その発想がおかしいw
ってレスしておきながらいまさら・・・
139:デフォルトの名無しさん
16/08/04 01:09:13.13 Vi80rqnk.net
あのねえ、こんなの学部のプログラミングの最初の講義で習うような話だと思うけど、
URLリンク(ideone.com)
何も考えずにdoubleを使うと上のgrossの結果にあるように演算結果に誤差が
出ちゃうことがあるけど、ちゃんと誤差の性質を理解していれば、何度も言ってるように
必用な精度を得ることが出来るんですよ。
140:デフォルトの名無しさん
16/08/04 01:57:41.32 kCsBXGZ7.net
>>134
これって最後に Math.Round してるのは答えが 100000 になるって知ってるから?
それとも必要な精度の1つ下の位を Math.Round しておけばどんな計算でもOKなの?
141:デフォルトの名無しさん
16/08/04 02:15:13.20 Vi80rqnk.net
>>135
有効数字が小数的1桁の数字(delta)を何回加減算しても
結果の有効数字は小数的1桁
だから累積誤差が±0.05を超えない限り、小数点1桁で丸めた値は必ず
数学的に正しい値になる。
もちろん演算結果の桁数(指数表記した時の仮数部の桁数ね)があまりに大きい
(doubleの場合確か16桁ぐらいだと思ったけど)と正しい結果にはならないけどね。
142:デフォルトの名無しさん
16/08/04 07:07:58.69 1Q45SAfi.net
>>136
問題はRoundの結果に対する誤差の影響についての方だろ?
結果が100000.05付近になるとき、100000.1になるか100000.0になるかは
累積の丸め誤差に依存するよね
MSDNでも実際にそれが問題になっている例が示されてる
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
結局>>81が示してるようなコーナーケースがあるんだよ
143:デフォルトの名無しさん
16/08/04 08:22:56.73 sK75NDgM.net
現実には結果に±が付くような問題よりも0.051を0.05として四捨五入するような問題の方がずっと多いにもかかわらず、
情報系の教育って後者の分野を軽視
144:する傾向があるよね 学者さん達はCOBOLの悪夢で辟易してるんだろうけど、 >>134みたいなのを社会に送り続けている責任について真面目に考えるべき
145:デフォルトの名無しさん
16/08/04 09:30:43.38 hQiyrQkt.net
教科書ネタは伸びるな
146:デフォルトの名無しさん
16/08/04 10:09:13.73 /RaQ1xov.net
悪いけど>>81も>>137-138も何を言ってるのかさっぱり分からんな
何か盛大に勘違いしてることだけはよく分かるけどw
147:デフォルトの名無しさん
16/08/04 10:13:24.57 /RaQ1xov.net
まあ人づだけいっておけば、丸め処理には誤差があるぞって得意気に言ってるのかもしれないが、
それは丸め処理の誤差じゃなくて上にも何度も出てくる浮動小数の仕様に起因する誤差であって、
問題でも何でもない。
問題があるとすれば、そんな問題でもなんでもないもののせいで間違った答えを吐き出すような
コードを書いてしまう無能な、 sK75NDgMのような無能なプログラマの方だ。
148:デフォルトの名無しさん
16/08/04 16:48:07.32 wj+CJSh1.net
科学技術計算的には多少の誤差あっても
いいって習ってたから
なんか駄目なのか?って思ったけど
要は使い方とプログラミングの問題よな?
149:デフォルトの名無しさん
16/08/04 17:00:50.42 dpx64fng.net
>>142
というか全てに当てはまる基準なんかないんだから
用途もわからないのにこっちの方が正しいとか言う議論なんか無駄の極み
150:デフォルトの名無しさん
16/08/04 18:07:34.85 9MgkqNZw.net
バタフライ効果を起こさない程度にしとけよ
151:デフォルトの名無しさん
16/08/04 18:17:15.13 /RaQ1xov.net
>>143
絵に描いたような2chネラっぽいアホな意見でいいねそれw
152:デフォルトの名無しさん
16/08/04 18:21:20.99 /RaQ1xov.net
>>142
多くの用途で誤差があっても許容できるというより、誤差は制御できる
(誤差の影響を受けずに必用な精度を得る方法はちゃんとある)というのが正しい理解。
153:デフォルトの名無しさん
16/08/04 19:09:46.69 7IFnluUJ.net
>>146
制御したいのは誤差じゃなくて丸めの挙動な
知識を披露したいのはわかるが、話を逸らさないように
doubleの計算で結果が中間値に極めて近い値になるときの丸めの挙動が予測困難であることについて君は何も答えられてないよね
154:デフォルトの名無しさん
16/08/04 19:30:45.91 7IFnluUJ.net
数値計算の誤差の考え方には二種類あるんだよ
・誤差があるのは当然だから誤差は明示的に示すか不明確な桁は表示しない
・たとえ計算上の誤差が影響した桁だろうが、ある決まった桁まで数字を出さなければならない
後者は金融系が代表的だね
そして後者の場合、誤差範囲の中でなぜその数字になったか説明するための理由が必要だ
それには、丸めの挙動を制御することが非常に重要なんだよ
155:デフォルトの名無しさん
16/08/04 19:45:50.27 /RaQ1xov.net
>>147
相変わらず何を言ってるのかさっぱり分からない。
丸めの挙動に予測不能性があるとして、そんなものに結果が影響されるような
コードを書くのはただの馬鹿だ。
156:デフォルトの名無しさん
16/08/04 19:50:17.42 /RaQ1xov.net
そもそもdoubleの実装の都合上、別に丸めに限らずあらゆる演算に誤差
(お馬鹿さんの表現で言えば予測不可能性)が酒れらず、
にも拘わらずそれは制御可能であってまったく問題にならないと
実例を上げて言ってるのに馬鹿じゃなかろうか。
157:デフォルトの名無しさん
16/08/04 19:53:02.49 /RaQ1xov.net
お馬鹿さんに行っても分からないだろうけど、丸めの結果がどっちに転ぶか
予想できないような場面で丸めを実行するようなコードを書いてるとしたら
それはただのプログラマの頭の悪さに起因するバグだ。
158:デフォルトの名無しさん
16/08/04 19:58:40.44 7IFnluUJ.net
>>151
だからそれをdecimalで解決できるケースもあると言ってるんだけど、理解できないかな?
あんたの理屈だとdouble値が10進数の中間値をとるケースなんて想定すること自体が間違っているということになるよね?
俺もそれには同意するよ
159:デフォルトの名無しさん
16/08/04 19:59:53.58 u/EohbaA.net
予測不可能性なんてないからw
金計算するならdecimal使えばいいだけのこと
そのためにあるんだから
160:デフォルトの名無しさん
16/08/04 20:03:08.07 /RaQ1xov.net
>>152
桁の多い演算でdecimalでしか対処できない領域があるのは最初から当たり前。
当たり前だまったく何の必要性もない型をわざわざ用意するものか。
最初から言ってるように、ありえないのは>>85のような愚かな考えだ。
161:デフォルトの名無しさん
16/08/04 20:12:27.08 zUHRzBd8.net
NGでスッキリ
162:デフォルトの名無しさん
16/08/04 20:16:12.36 jAu1xEMv.net
doubleだろうがdecimalだろうが性質理解して使うのならどっちでもいいだろうに
つまんない事にこだわっているのを見るとコードを書かない人なのかなって思う
それとも学校や職場でそう教えられるのかね。趣味グラマには理解できない
163:デフォルトの名無しさん
16/08/04 20:20:11.12 u/EohbaA.net
物理の計算においてdoubleじゃ間に合わないケースがある極大な数×極小な数とかね
doubleまででしか使えない場合はなんとか工夫するわけだけどそれじゃ間に合わない場合がある
そういう場合のために4倍精度(128ビット)とか8倍精度(256ビット)の2進浮動小数点が使えるように
なってる環境がある
反して金計算ではよくは知らんが必要な制度はせいぜい20何桁程度だろ。
それも小数点以下は5桁もあれば十分という。。。
すべては適材適所なんだよ。
164:デフォルトの名無しさん
16/08/04 20:37:57.07 09bMzMPy.net
Π使うような場合は有理数計算するけどね
165:デフォルトの名無しさん
16/08/04 20:40:45.33 nf3Jdc8S.net
ゲーム作ってるけどdoubleの誤差で困った事なんか一回もないぞ
166:デフォルトの名無しさん
16/08/04 20:43:36.47 /RaQ1xov.net
>>157
>極大な数×極小な数とかね
浮動小数なんだからそれはないよw
doubleで対処できないのは大きな桁の有効数字(たとえば20桁とか)が要求されるケースだけ。
167:デフォルトの名無しさん
16/08/04 20:50:57.73 /RaQ1xov.net
しかしさあ、丸めの挙動の問題とかで
桁数の多い演算でもないのにdoubleでは対処できないケースがあるなら
後学のためにぜひideoneかどこかに実例で示して欲しいよ。
本当真面目に。
まあそんなのありえねえと思うけどさw
168:157
16/08/04 20:51:41.79 u/EohbaA.net
あれ、間違えた
間に合わなくなるのは
☓ 極大な数×極小な数
○ 極大な数+極小な数
のケースね。
そういうのを扱わななくちゃいけない場合はここにいる人の大多数にとって普通はないだろうけど場合によっては必要となる。
ブラックホールをシミュレートしなけりゃいけない時とか。。。
169:デフォルトの名無しさん
16/08/04 20:58:59.60 4Cs3sXx+.net
まだやってんのかよw
170:デフォルトの名無しさん
16/08/04 20:59:49.63 cADM294i.net
ここって浮動小数スレなの?
171:デフォルトの名無しさん
16/08/04 21:05:50.97 nf3Jdc8S.net
_ _ ''< _ _ _ _ _'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 ゛ �
172:@ __ノ i _‐゛ _ _ '''''' `´ _ _ _ "'''''' < '/ ノ __ ゛ ノ ノ ノ _> ‐ _ ''‐ _ _ _ _ _ _ _ _ _ _ _L_ノ ノ___ ノ _' _‐ _ ''‐ _ _ _ _ _ _ _ _ _ _/ '‐_/ '' _ ‐ ノ _ノ
173:デフォルトの名無しさん
16/08/04 21:06:28.51 nf3Jdc8S.net
∧∧ ミ ドスッ
( ) _____
/ つ 話題終了|
~( /  ̄|| ̄ ̄ ̄
∪∪ || ε3
゙゙~゙~
174:デフォルトの名無しさん
16/08/04 21:34:01.22 /AeganYA.net
相変わらずよくわかってないトーシロですけども
とりあえず
・二進法の都合上、小数点以下の実数は完全には
表すことが出来ない
・実数を表すのに浮動小数点数方式を
使うがあくまで擬似的な手段かつ
何処かしらで丸めるので
必ず誤差は発生する。
しかしプログラミング次第でその誤差は小さくできる。
・一切の誤差が許されないような環境、
つまり銀行などの金融関係では
decimalを使う
一般教養としてはこういう理解で
よござんすよね?
175:デフォルトの名無しさん
16/08/04 21:34:41.98 p5IuCpCb.net
>>148
> ・たとえ計算上の誤差が影響した桁だろうが、ある決まった桁まで数字を出さなければならない
そんな要件見たことないけど
ましてや金融で w
176:デフォルトの名無しさん
16/08/04 21:41:56.25 jAu1xEMv.net
まあ質問専用スレじゃないし気の済むまでやればw
177:デフォルトの名無しさん
16/08/04 21:47:00.53 nf3Jdc8S.net
だから適材適所って言ってんだろゴラァ
どちらか片方しか使えない呪いでもあるんですかね…
両方使えるなら両方使い分ければいいだろ
速度と精度を天秤に掛ける事も出来ないんですかね
178:デフォルトの名無しさん
16/08/04 22:02:22.78 /RaQ1xov.net
>>167
だからdecimal使ったって一切の誤差を無くせるわけじゃないってばw
無くせるのは基数が2の浮動小数であることに起因する誤差だけだと言ったでしょ
179:デフォルトの名無しさん
16/08/04 22:13:24.71 esG2QQER.net
本当に誤差を避けたいときはすべて整数型で処理して割り切れない除算もしない
馬鹿らしいけど実際に俺はやってる
180:デフォルトの名無しさん
16/08/04 22:19:48.10 xurP0kD8.net
そもそも物理の世界では有効桁ってのがあってだな
丸目誤差なんてハナから相手にしてないとか
181:デフォルトの名無しさん
16/08/04 22:32:15.88 nf3Jdc8S.net
>>171
一切の誤差が嫌なら分数・n方根etc型作れよ
javaと違って演算子の定義出来るから楽だろ
182:デフォルトの名無しさん
16/08/04 22:35:32.01 /RaQ1xov.net
>>174
作れよ、だってさ
命令口調の奴って例外なくアホだな。
183:デフォルトの名無しさん
16/08/04 22:38:49.19 pbDOEnve.net
decimalの価値は、表記と内部の値が完全一致することだが
説明してもどうせ無駄なんだろうな
184:デフォルトの名無しさん
16/08/04 22:40:49.97 nf3Jdc8S.net
>>175
作れ→命令
(~をしたいなら)作れよ→自分でやりたい事を実現するためには自分でするしかない
185:デフォルトの名無しさん
16/08/04 22:51:47.89 1Q45SAfi.net
誤差が嫌なら整数型でやればいいじゃんってのを実装したのが
まさにdecimalなんだが
186:デフォルトの名無しさん
16/08/04 23:00:21.90 u/EohbaA.net
decimalは10進浮動小数点だからな。普通の金計算の範囲では十分ってだけで誤差がなくなるわけじゃない
簡単な話、たとえば1/3は誤差なく表現できない
有理数型をサポートしてる体系があったり、C#でも自分で実装してもいいわけだけど
それでもpiを誤差なく表現できるわけではないし(笑)
全ては求められる精度によるんだよ
187:デフォルトの名無しさん
16/08/04 23:05:13.41 nf3Jdc8S.net
PIはPIとして定義するとかでいい
数学と同じ
188:デフォルトの名無しさん
16/08/04 23:10:14.23 nOpr2vNl.net
ここまでID赤いのは全部NGでおk
具体例もないから参考にもならない
189:デフォルトの名無しさん
16/08/04 23:12:39.70 vfnh4WuI.net
元々は>>69を誤差なく実行出来るのを保証したいのが出発点でないの
今となってはそれすら良く分からんが
190:デフォルトの名無しさん
16/08/04 23:15:17.05 nOpr2vNl.net
>>182
何が目的かわからな�
191:ッれば誤差をどこまで許容するかわからない そして元の質問者は既に納得して解決済み
192:デフォルトの名無しさん
16/08/04 23:18:19.93 uRE0pXxR.net
ちょっとした計算でなんとなくLispを使ってしまう俺としては、モダンな言語で
そろそろ有理数型が基本型として使えるのが当たり前になってほしいところ
193:デフォルトの名無しさん
16/08/04 23:31:08.16 pbDOEnve.net
世の中には1/3円は存在しないし、πmの定規も存在しない
decimalの解像度は十分な精度を持っているということだね
194:デフォルトの名無しさん
16/08/04 23:36:46.06 /RaQ1xov.net
>>185
ちょっと単細胞過ぎるよ
カネ勘定の世界でも普通に除算は使いますw
例えば按分ね
195:デフォルトの名無しさん
16/08/04 23:55:18.85 pbDOEnve.net
10円を3つに分ける場合3円、、3円,4円で分けるよな
1/3円など存在しない金額は使いみちがない
196:デフォルトの名無しさん
16/08/05 00:08:43.40 cEIuN7pH.net
技術的にはお互いに理解してるのに、相手が理解してないと思い込んで話してるせいでぐちゃぐちゃになってる
日本語力の低さがやばい
197:デフォルトの名無しさん
16/08/05 00:17:08.00 QZhqwH4E.net
>>187
そんな単純じゃないよ。
普通の商売でも小売り以外は銭以下の単位で単価を設定するのは当たり前。
金融ならなおさらだ。
何が言いたいかって言うと、金勘定ならとにかくdecimalを使っておけば安全だ、
などということはありえないということ。
198:デフォルトの名無しさん
16/08/05 00:24:08.31 rof2NfJh.net
プライドの安さも大したもんだろ
スーパー玉出よりひどい
ここまでバカやってりゃどっちか飽きるぞ普通は
普通じゃないのがコラボレーションするとこうなる
199:デフォルトの名無しさん
16/08/05 03:39:17.62 WxI1qvCL.net
よく知らないんだが、doubleだと0.1を10回足しても1にならないって聞いたんだけど
doubleで問題ないって人は、0.1を10回足して結果表示するコード書いてみてほしい
必要な桁数の精度は整数部2桁、小数部2桁で4桁もあればいいから
200:デフォルトの名無しさん
16/08/05 06:45:29.67 9GrcbVCu.net
>>191
URLリンク(ideone.com)
( ゚∀゚)アハハハ
201:デフォルトの名無しさん
16/08/05 06:47:06.05 Kzn0CH9Z.net
ちょっとした計算はそろばんを使ってしまう俺としては、23桁以上の足し算は苦手だ
202:デフォルトの名無しさん
16/08/05 07:12:01.39 U1grrEll.net
つ 算木
203:デフォルトの名無しさん
16/08/05 07:26:46.31 t4YicZGs.net
>>189
端数はシステムでどうするか指定できる(考慮している)のが普通なんじゃね
そこまで話を膨らませたらイチャモンに思えるわ
204:デフォルトの名無しさん
16/08/05 09:28:38.14 HSLNFCI0.net
>>189
会計は取引や決算の段階で全て円単位に矯正されて、総額と明細の差額は端数処理されて別勘定に振り替えられる
金融関係はdecimalで全く問題がないんだよ
205:デフォルトの名無しさん
16/08/05 11:34:33.31 ybsuHohg.net
>>191
そもそもそういう目的で使うならdouble使わないですしおすし
使い分ければいいって話してるのにそれが分からないの?
お前はゲーム作るのにもクッソ遅いdecimal使う気?
単細胞死ね
206:デフォルトの名無しさん
16/08/05 11:38:33.06 ybsuHohg.net
【C#】decimal VS double/float [無断転載禁止]?2ch.net
スレリンク(tech板)
まだやるなら移動
207:デフォルトの名無しさん
16/08/05 11:44:50.24 awNm9k8p.net
ウザいのは分かるが自重しろ
自分が使わないスレ立てるのは荒しと一緒だぞ
208:デフォルトの名無しさん
16/08/05 11:59:26.11 ybsuHohg.net
>>199
「どちらが優秀か」みたいな議論になってきてるやん
>>191みたいなのが問題ない時もあるのに
209:デフォルトの名無しさん
16/08/05 12:30:21.67 P4D3CPGd.net
>>197 「そういう目的」でもdoubleで十分なんですよ。>>134 あえてdecimalを使わなきゃならない場面なんて普通はまずない。 それから、必用もないのにdecimalを使うような人(要するに誤差の問題をよく理解してない人)が decimalを使っても意図したような誤差を含まない演算結果が得られないコードを 書く可能性が高い。
211:デフォルトの名無しさん
16/08/05 12:51:24.52 dWErFYHi.net
>>200
まず自分が移動しろ
212:デフォルトの名無しさん
16/08/05 12:59:22.80 WxI1qvCL.net
>>192,201
たしかに必要な精度が4桁で良いって前提なら問題ないように見えるけど
誤差は累積しないのか?
たとえば0.1を10回たして1.0を引く処理を1000万回ぐらい繰り返しても問題ないのか?
それともその場合はあえてdecimalを使わなきゃならない場面なのか?
213:デフォルトの名無しさん
16/08/05 13:35:00.84 P4D3CPGd.net
>>203
基本的な考え方は>>136に書いてあるよ。
214:デフォルトの名無しさん
16/08/05 13:45:52.92 bSGkK4bY.net
日本は戦闘機を一つ一つ職人による
手作業で寸分の狂いなくつくった
一方アメリカは公差に基づいて
大量生産した
それなりに動けばいいんだよ
215:デフォルトの名無しさん
16/08/05 15:56:50.82 WxI1qvCL.net
>>204
>>136は、累積誤差が必要な桁数を超えない限り問題ないって書いてあるだけだろ
聞きたいのは、ほとんどの状況でdoubleでOKだって言ってる人に
じゃあどういう状況がdouble不可なんだって事
誤差がどの程度累積するかなんて、正確に見積もれるのか?
doubleとdecimalでどんだけ速度差あるのかも良くわからん
基本、適材適所なのはその通りだけど
速度(とメモリ)に問題なければ基本decimalでOKって考え方の方が安全だと思うんだがな
216:デフォルトの名無しさん
16/08/05 16:12:11.71 ybsuHohg.net
移動しろ
217:デフォルトの名無しさん
16/08/05 16:18:39.34 YTOm0VxE.net
double不可は小数の離散値を扱う場合と情報落ちが問題になる場合だな
218:デフォルトの名無しさん
16/08/05 16:19:30.22 P4D3CPGd.net
>>206
何を熱くなってるのか知らないけど、見積もれるに決まってるでしょ。
まさか誤差はランダムな値だとでも思ってるの?
馬鹿じゃないの。
219:デフォルトの名無しさん
16/08/05 16:27:24.03 WxI1qvCL.net
>>209
1回の誤差は実行される式の値でわかるとしても
毎回同じ値の計算しかしないとでも?
何回実行されるかわからなくてもどれだけ累積するか見積もれると?
220:デフォルトの名無しさん
16/08/05 16:28:44.47 1+55aK49.net
doubleの情報落ち対策は、例えば1E6個の値の総和を求めるなら
1E3個ごとに分けて和を求めて得た1E3個の和の和を求める、なんてことをするね
単純に数式弄るだけじゃないので結構辛い
221:デフォルトの名無しさん
16/08/05 16:38:02.60 P4D3CPGd.net
>>210
一回の加減算でどの程度の誤差が発生しうるかは分かる(恐らく演算結果の
最上位桁の1の1e-15より小さい)のだから、どの程度の回数の演算まで「安全」かは
扱う数値の範囲と有効桁数から事前に計算できるでしょ。
222:デフォルトの名無しさん
16/08/05 16:49:27.59 WxI1qvCL.net
>>212
安全な回数を実行回数が超えるような場合でもdoubleでOKなの?その場合はdouble不可なの?
乗除でどの程度の誤差が発生するかも事前に計算できるの?
安全な回数がわかったとして、実行回数がそれを超えるかどうかはどう見積もるの?
基本doubleでOKだって言うのは、毎回その安全な回数と予測実行回数を算出してるの?
それとも体感上とか経験上とか、あるいは何の根拠も無く安全な回数を超えないと思ってるだけなの?
223:デフォルトの名無しさん
16/08/05 16:55:17.30 ybsuHohg.net
使い分けも出来ない低能どもはいい加減移動しろよキモすぎ死ね
224:デフォルトの名無しさん
16/08/05 17:23:54.01 P4D3CPGd.net
>>213
少しは自分の頭で考えてよw
累積誤差が「安全」なうち必用な位置で丸めを行えば
数学的に正しい答えが得られなくまで誤差が累積することを防げるでしょ?
乗除算(特に除算)の誤差についてはdoubleに固有の問題じゃない。
225:デフォルトの名無しさん
16/08/05 17:25:12.91 Fe92dXPj.net
226:夏真っ盛りだからな 真っ赤なのは頭の中茹であがってんだろう 設計段階で予測できそうにない誤差が出そうならdecimalでもdoubleでもなくint使っとけ
227:デフォルトの名無しさん
16/08/05 17:31:35.93 WxI1qvCL.net
>>215
だからその途中で丸める必要性の有無やタイミングを正確に把握できないのに
基本doubleでOKだってのにどういう根拠があるの?って聞いてるんだが
228:デフォルトの名無しさん
16/08/05 18:01:19.80 P4D3CPGd.net
>>217
正確に把握する必要なんてないの。
「安全」が確証できる間に丸めを行えば必用十分。
何を言ってるのかね。
229:デフォルトの名無しさん
16/08/05 18:03:05.39 P4D3CPGd.net
っていうか、今の大学のカリキュラムってこういう話やらないの?
230:デフォルトの名無しさん
16/08/05 18:07:37.18 ybsuHohg.net
俺がスレ建ててやったんだからいい加減移動して続きやれよ
231:デフォルトの名無しさん
16/08/05 18:09:32.64 ybsuHohg.net
ID:WxI1qvCLはもう一度勉強しなおせ
232:デフォルトの名無しさん
16/08/05 18:32:40.21 WxI1qvCL.net
正確に把握できないものの安全を確証できるのか
確かに俺には理解できんわ
つまり、基本dobleでOKってのは、安全を確証できるならdoubleでOkってことでいいのかね
どうやって安全を確証してるのかは俺にはわからんけど
233:デフォルトの名無しさん
16/08/05 18:43:00.59 ybsuHohg.net
>>222
スレリンク(tech板)
234:デフォルトの名無しさん
16/08/05 19:10:31.31 6fbUqWOr.net
>>219
10進小数を2進数で表現するときの誤差の問題って学校だとあまり真面目に扱わないからね
それが重要になるような分野だと昔は10進固定小数点を持つCOBOLが使われてたからあまり問題にならなかったんだろう
そしてC系がCOBOLの領域を奪った現代になって、正しい教育を受けてない君みたいな問題児が出てきてるわけだね
235:デフォルトの名無しさん
16/08/05 19:46:46.35 Fe92dXPj.net
問題児というか同じ理屈何度も書き込んでいる馬鹿にしか見えん
236:デフォルトの名無しさん
16/08/05 19:54:24.29 OKNkohy6.net
ずっと気になってたんだけど、必用じゃなくて必要だよね?
237:デフォルトの名無しさん
16/08/05 19:57:54.35 k8Mh0VZx.net
EventArgs e とかの 'e' って何の略でしょうか?
238:デフォルトの名無しさん
16/08/05 20:04:46.22 ybsuHohg.net
>>227
イベント
239:デフォルトの名無しさん
16/08/05 20:06:59.74 x6bLb0/N.net
e、e、e、気持ちe!
じゃないの(もうすぐお盆だね)
240:デフォルトの名無しさん
16/08/05 20:21:23.45 V0c90CvV.net
>>224
みっともない負け惜しみだな。
241:デフォルトの名無しさん
16/08/05 21:09:38.75 aiX4oSLp.net
お前らまだやってたのか
242:デフォルトの名無しさん
16/08/05 22:22:08.96 UfFmSPxx.net
ここで議論している人たちはスレ違いってことに気付いていないのかな
243:デフォルトの名無しさん
16/08/05 22:31:14.21 V0c90CvV.net
>>232
いつも思うけど、こういう寝言書く奴って自分は特別とでも思ってるのかね。
お前自身のやってることは何なんだ馬鹿。
244:デフォルトの名無しさん
16/08/06 00:13:37.40 WVtyz3N8.net
>>228
ありがとうございます
やっぱそうなんですね
245:デフォルトの名無しさん
16/08/06 04:32:43.48 0IB3Z6XQ.net
>>234
納得してるところ悪いけど違うと思うよw
型名(EventArgs)のイニシャルだと解釈するのが普通
246:デフォルトの名無しさん
16/08/06 07:39:21.33 WVtyz3N8.net
>>235
ありがとうございます
247:デフォルトの名無しさん
16/08/06 08:38:43.76 AMCUmI5q.net
例外処理で被るから無性に腹が立つよ
248:デフォルトの名無しさん
16/08/06 09:59:43.52 aFqyb+q8.net
例外はexで統一した
249:デフォルトの名無しさん
16/08/06 23:44:54.17 sc1eQQS3.net
統一したら被るんじゃない?
250:デフォルトの名無しさん
16/08/07 00:26:15.92 9x/mUqeF.net
>>239
FooException ex と BarException ex を同時に使う状況ってこと?
251:デフォルトの名無しさん
16/08/07 00:28:08.51 NgeF8SpO.net
ごくまれにcatchの中でtry-catchすることはあるがまあその時は柔軟に
252:デフォルトの名無しさん
16/08/07 00:31:45.60 e9qgeSIc.net
かぶったらex1とかex2でok
どうせスコープは短いだろうし適当な名前で問題なし
253:デフォルトの名無しさん
16/08/07 00:47:22.73 S/UbGMUU.net
>>240
いや、それはキャッチのスコープが違うから問題なかろうけど、>>241のケース
254:デフォルトの名無しさん
16/08/07 00:50:27.58 9x/mUqeF.net
catchの中でtry-catch…! そういうのもあるのか……!
255:デフォルトの名無しさん
16/08/07 09:23:00.24 mCHosifW.net
エラーのリカバリー処理でエラー発生リスクが有る場合かな?
色々見なおしたほうが良さそうな気もする
256:デフォルトの名無しさん
16/08/07 12:01:30.30 9x/mUqeF.net
for文のi j k みたいに e f g って続いてたら笑ったのに
257:デフォルトの名無しさん
16/08/08 06:26:49.16 4wAqez6C.net
>>245
普通にあるでしょそんなもん
そのへんをいい加減に作ると後片付けがうまくいかなくてフリーズする
よくあるゴミアプリが誕生する
258:デフォルトの名無しさん
16/08/08 19:52:54.53 0f2Bh+Sl.net
ねぇ、いつまで 場合によるだけの話を続ける気?
人格だの人の能力を言い出しては もうプログラムの話ではない。
マ板行け
259:デフォルトの名無しさん
16/08/08 20:50:56.99 bsQ3M/kD.net
>>247
やむを得ないこともあるけど、できるだけ避けるべきですね
エラー処理の中でエラーが起こるとデバッグに支障が出る場合もある
260:デフォルトの名無しさん
16/08/08 22:43:36.18 uowaRDGP.net
Visual Studio2015 について質問です。
VisualStudioにて複数ソースを開くと上部に複数タブが出てきます。
で、よくわからない内に選択したソースのタブが勝手に一番左に来るようになりました。
これが非常に面倒くさくて、選択したソースが一番左に来ないようにしたいのですが
どなたか解決方法ご存知ないでしょうか?
261:デフォルトの名無しさん
16/08/09 00:07:43.18 +GDJlmm9.net
>>250
タブがピン留めされてない?
262:デフォルトの名無しさん
16/08/09 00:29:21.39 PJVjRNSn.net
>>251さん
263:デフォルトの名無しさん
16/08/09 00:36:05.38 PJVjRNSn.net
途中投稿すいません。
>>251さん レスありがとうございます。
ピンなどの機能は使っていません。
全てのタブを閉じたり、Visual Studioを落としたりしても
直らないのです。
検索して同様の件を探そうにも、タブやソースを検索ワードに入れると
プログラムの製作方法ばかりで困ってます。
264:デフォルトの名無しさん
16/08/09 03:44:24.30 JQFwElds.net
文面見る限りでは俺もそうだけど…
これじゃ嫌なの?
てかさ、まず何に困ってるのか書かないと。
265:デフォルトの名無しさん
16/08/09 04:34:03.25 T9h0Wo+i.net
sssp://o.8ch.net/fbfe.png
266:デフォルトの名無しさん
16/08/09 17:26:16.40 PJVjRNSn.net
>>254さん >>255さん レスありがとうございます。
文面では状況が伝わりにくいと思い Gifで撮影致しました。
URLリンク(gyazo.com)
この様にタブの順番が変わってしまうのが非常に辛いのです。
自分はタブの位置 順番でソースを把握しているので複数開いている時
非常に煩雑になります。
>>255さん
頂いた画像の部分の項目や 他部分変更したのですが
自分の求めている部分の変化はありませんでした。
267:デフォルトの名無しさん
16/08/09 17:36:54.04 PJVjRNSn.net
大変申し訳無いです。自己解決致しました。
別に入れておりましたvisualstudioのプラグインによって
タブがソートされておりました。
これが何かのキッカケでオンになってしまっていたようです。
大変お騒がせ致しました。
お返事頂けた方々ありがとうございました!
268:デフォルトの名無しさん
16/08/09 19:14:43.91 10xMu+CU.net
ネタフリ
textboxから数値
269:取り出すのってどうしてる? いまだにTryParseとかやってる? それだけのためにプロパティをバインディングしたりしてる? 一時期stringに拡張メソッドつけて数値とっていたけどそれすらめんどくなってきた めんどいもっと楽させてほしい
270:デフォルトの名無しさん
16/08/09 19:25:41.64 mk3kxjVQ.net
VBでも使え
そして二度と帰ってくるな
271:デフォルトの名無しさん
16/08/09 19:41:20.86 /QPZwEhn.net
数値しか入れないのにTextBox使わない
272:デフォルトの名無しさん
16/08/09 19:54:32.32 Ulr7R0RZ.net
>>258
Windows Formの話だと思うけど、TextBox継承して数値入力専用のを作ればいいよ。
実際やってみると以外と大変だけどねw
こんなの本当は標準で用意して欲しいよね。
273:デフォルトの名無しさん
16/08/09 19:57:01.35 AJ2CLbue.net
>>259
VBじゃなくてVBScript勧めたほうがいいんじゃねw
>>260
ごもっともw
274:デフォルトの名無しさん
16/08/09 19:59:46.34 2xtWtUt/.net
>>258
一文字入力されたら数字とBS以外スルーするようにしとけよ
275:デフォルトの名無しさん
16/08/09 20:04:18.47 JS0TrNVx.net
T使って継承すればよろし
276:デフォルトの名無しさん
16/08/09 20:17:13.72 h+7CEzP0.net
いい加減
数値⇔文字列
の変換をするキャストメソッド追加しろよ
277:デフォルトの名無しさん
16/08/09 21:01:17.26 mk3kxjVQ.net
>>264
お前ふらっとの方でも似たような書き込みしてるけど何も理解できていないな
278:デフォルトの名無しさん
16/08/09 21:04:36.79 10xMu+CU.net
似たような感じでしょうもない変換メソッドとか毎回書かされるのはもうつまらん
c#はここから先に進まないのか?
279:デフォルトの名無しさん
16/08/09 21:06:08.84 h+7CEzP0.net
変換メソッド自動生成はもうAIの領域だな
280:デフォルトの名無しさん
16/08/09 21:53:33.39 rTlnm3J6.net
両端にスペース入りのカンマつき数字をコピペしてくる強者がいる
まずクリアするのがこれで
次が全角数字の人、その次が丸つき数字の人、その次が数字の途中か終りにマイナスを入れてくる人
281:デフォルトの名無しさん
16/08/09 22:36:34.91 Ulr7R0RZ.net
ペーストの処理は面倒だからコンテキストメニューを殺してペースト禁止するのが楽だねw
282:デフォルトの名無しさん
16/08/10 10:54:02.06 sZvpYadZ.net
そういえば**演算子と//演算子の追加予定ないの?
n乗とn乗根演算子欲しい
283:デフォルトの名無しさん
16/08/10 11:01:59.51 vUhFEZdN.net
>>271
//の方はコメントつけたソースが大変な事にw
284:デフォルトの名無しさん
16/08/10 11:14:15.16 sZvpYadZ.net
あっ…w
/*でもコメントだしな~
285:デフォルトの名無しさん
16/08/10 13:38:46.88 yH6Tmb7K.net
そこに気付くとはやはり天才か(棒)
286:デフォルトの名無しさん
16/08/11 18:47:30.48 Lr/mSCyz.net
string s1 = "10 ~ 20";
string s2 = "1-500";
string s3 = "-25 - -10";
string s4 = "0~1";
のように、FROM + 半角スペース(ありorなし) + -または~ + 半角スペース(ありorなし) + TO
というような範囲の含まれている文字列があります。
(FROMとTOの数字はマイナスや小数点あり)
FROMだけを取り出したいのですが、何かいい方法は無いでしょうか。
正規表現などを使うとできるんでしょうか?
287:デフォルトの名無しさん
16/08/11 18:50:37.65 PgxrnQsD.net
-?¥d+
288:デフォルトの名無しさん
16/08/11 20:02:01.76 gnwNFYm1.net
>>276
> 小数点あり
-?¥d+(¥.¥d+)?
289:デフォルトの名無しさん
16/08/11 20:59:51.07 Lr/mSCyz.net
ありがとう!
やってみる!
290:デフォルトの名無しさん
16/08/15 16:48:49.78 C0q0R5N5.net
スレッド違いかもしれないですが教えてください。
Google Analitics でトラフィックを確認
291:したところ ↓の様にIP+ポート番号でのアクセスがありました。 通常であれば、YahooやGoogleなどの検索エンジンからの流入だけになるハズが この様なアクセスがあり警戒しています。これは何か攻撃を受けているのでしょうか? 10.160.XXX.XXX:XXXXX
292:デフォルトの名無しさん
16/08/15 16:58:13.22 zs1ooRaK.net
帰れカス
293:デフォルトの名無しさん
16/08/15 22:44:50.60 C0q0R5N5.net
279
です。誰か教えてください。
>>280
のキチガイはスルーで
294:デフォルトの名無しさん
16/08/15 22:47:06.97 9j969OGV.net
ふらっとの粘着がこっちに移動してきたか
295:デフォルトの名無しさん
16/08/15 23:02:56.98 ga2FZEJa.net
>>281
C#とGoogle Analiticsにどんな関連性があるの?
さっさと帰れよ
296:デフォルトの名無しさん
16/08/15 23:19:34.56 C0q0R5N5.net
279
関連スレッドがあれば教えてください
そちらで質問します。
297:デフォルトの名無しさん
16/08/15 23:46:15.43 /I3SQKNS.net
>>284
死んでろ
ここも次の次はワッチョイだな
次は既に立ってるから
スレリンク(tech板)
298:デフォルトの名無しさん
16/08/16 13:51:24.11 vfH4bKhl.net
new byte[1024*1024*1024]で1GBのメモリ確保は出来るのに300*300の画像を読み込み、Clone(300*300*4*2=720000byte=0.7MB弱)をするとメモリエラーが発生します
何故でしょうか
299:デフォルトの名無しさん
16/08/16 14:50:00.40 o15hK2EL.net
クイズですか?
300:デフォルトの名無しさん
16/08/16 15:10:19.55 qGC1dEkn.net
プログラムは思った通りではなく作られた通りに動くから
301:デフォルトの名無しさん
16/08/16 17:06:36.47 KuBIRE+Q.net
System.DrawingというかGDI+は困ったらすぐOutOfMemory返してくる
302:デフォルトの名無しさん
16/08/16 18:11:02.75 imMBMuem.net
>>286
そもそもコピーされるわけでもないCloneを使うなと
>>289
そのせいで便利な機能あるのに変換とか下手に任せられないんだよな
303:デフォルトの名無しさん
16/08/18 14:05:26.86 e8NCsKv7.net
クイズワロタ
304:デフォルトの名無しさん
16/08/18 14:19:15.35 CKZSwyTz.net
indexオーバーフローみたいな感じのが原因みたいでした
何でオートオブメモリーが発生したのかは分かりませんが
305:デフォルトの名無しさん
16/08/18 14:34:24.97 tXC5KaDm.net
indexが悪かったからだろw
306:デフォルトの名無しさん
16/08/18 14:41:42.86 KZM7ssxd.net
indexエラーとout of memoryは状況が全然違うエラーだろ
どうせCloneの元を削除したとかその辺だろうな
307:デフォルトの名無しさん
16/08/18 14:50:17.82 CKZSwyTz.net
>>294
クローンで画像切り抜こうとしたら画像の範囲越えてた
308:デフォルトの名無しさん
16/08/18 14:50:47.64 CKZSwyTz.net
オートオブメモリーは行番号出ないからどこで発生したか分かりにくいし
309:デフォルトの名無しさん
16/08/18 14:54:22.77 MLAmiHPT.net
オートw
310:デフォルトの名無しさん
16/08/18 14:56:31.03 PpWXAaq4.net
このスレまじヤバ
311:デフォルトの名無しさん
16/08/18 15:03:18.90 CKZSwyTz.net
>>297
↑こいつ馬鹿すぎワロタwwwwwwwwwwwww
312:デフォルトの名無しさん
16/08/18 15:16:29.46 dOs+cdOj.net
顔真っ赤だぞ
313:デフォルトの名無しさん
16/08/18 15:34:56.78 r1qD6HKD.net
>>296
OutOfMemoryでエラー位置示されないことは稀にあるけど出ないのが普通みたいなこと書かれても困る
最初の質問の要点も違っているし、次からは初心者スレへどうぞ
314:デフォルトの名無しさん
16/08/18 16:32:11.96 Qi6POpo5.net
オートレストランってまだあるのかなあ。
315:デフォルトの名無しさん
16/08/18 16:46:38.64 iO4p2OMA.net
エラー位置出すのにメモリ確保伴うから省くんじゃないの
何かのライブラリで OOM 例外だけ予め構築済みのまま使い回すの見て感心したおぼえがある
316:デフォルトの名無しさん
16/08/18 17:55:49.08 RNZU/l3x.net
オートオブメモリが流行っているのか
317:デフォルトの名無しさん
16/08/18 18:32:39.29 KC0cWNIH.net
たぶんエラーはオートオブメモリじゃなくてオートオブランゲなんだろうな
318:デフォルトの名無しさん
16/08/18 18:54:33.61 q9ZhHGDc.net
ふらっとがワッチョイ付いたからこっちに移住してきたのかな
319:デフォルトの名無しさん
16/08/18 19:09:53.77 VT/uRpp6.net
つ URLリンク(www.automemory.co.jp)
320:デフォルトの名無しさん
16/08/18 19:17:24.52 sh92haT+.net
CTRL+ALT+E で例外設定出して、OutOfMemoryExceptionにチェック入れたら普通に止まるけど
それとは違うことなんだろうか?
321:デフォルトの名無しさん
16/08/18 19:24:39.04 zEQl8UVs.net
OutOfMemoryに限らずデバッガで該当する場所でなくエントリポイントが表示されたり
GDI+関連のエラーだと意図していない場所のRefresh()とかで止まることならある
try-catchを入れとけばそこで表示されるから済む話だが
322:デフォルトの名無しさん
16/08/18 19:33:28.84 CKZSwyTz.net
>>306
そう
前はふらっとにいたけどワッチョイ付いたら他の板での書き込みバレるからこっち来た
323:デフォルトの名無しさん
16/08/18 20:03:39.26 oJeK6Bjx.net
cppでアウトオブメモリー処理のために汎用メモリーを取っておくシステムを見たことあるがそこまでやるべきなのか
324:デフォルトの名無しさん
16/08/25 23:14:01.46 HsD7PkbO.net
What’s New in C# 7.0
URLリンク(blogs.msdn.microsoft.com)
325:デフォルトの名無しさん
16/08/25 23:42:36.74 MmwMpV4v.net
>>312
throw式以外は全部ボツだろうなこれ
ジャストアイデアとしても酷すぎ
326:デフォルトの名無しさん
16/08/25 23:57:25.92 Pgok0gcb.net
>>313
タプルとパターンマッチング
327:デフォルトの名無しさん
16/08/26 00:02:49.66 TYI3AeP1.net
>>314
なんだよ。かまわんよ、存分にそれらについて語ってくれよ…
328:デフォルトの名無しさん
16/08/26 00:04:14.57 cD5Ga51Z.net
>>312
tupleとdeconstructionは欲しいな
329:デフォルトの名無しさん
16/08/26 00:26:51.57 qEbjB0B4.net
C#7.0はいい感じだね
早く業務で使いたい
330:デフォルトの名無しさん
16/08/26 00:32:45.54 zWe+Xnw2.net
パターンマッチはdeconstructionと組み合わせられないとほとんど意味ない、
というかOCPを破るだけで有害
やるなら最初からやらないとこんな中途半端なもの出したら
コーディング規約で軒並み禁止されちゃうぞ
331:デフォルトの名無しさん
16/08/26 00:39:32.65 TYI3AeP1.net
プロパティ禁止とか最早ブラックあるあるネタだもんな…今更感はある
332:デフォルトの名無しさん
16/08/26 00:48:13.71 PgCAqldG.net
>>319
そもそもプロパティを知らないおっさんがいて驚いたわ
333:デフォルトの名無しさん
16/08/26 01:01:05.00 b/aYUiUZ.net
getX(),setX()書く人は、まれに良く紛れ込むね
334:デフォルトの名無しさん
16/08/26 01:13:44.01 ZXi/bCeq.net
.NET4.0とC#7の組み合わせって可能なのかなあ。
まだあと5年ぐらいはXPのPC無視できないよね。
335:デフォルトの名無しさん
16/08/26 01:18:27.62 PgCAqldG.net
>>322
4.0とかとっくにサポート切れやで
336:デフォルトの名無しさん
16/08/26 01:27:27.85 AjmVo6xU.net
>>321
それがうちのルールなう
337:デフォルトの名無しさん
16/08/26 01:29:19.51 MwmpSlTr.net
カワイソス
338:デフォルトの名無しさん
16/08/26 01:35:14.31 b/aYUiUZ.net
>>324
残念すぎる(�
339:LД`)
340:デフォルトの名無しさん
16/08/26 01:56:48.53 iK8FV/yi.net
>>322
ウチはWindows2000(.NET 2.0)も無視できない場合がある。
設備制御用のスタンドアローン機だが。
341:デフォルトの名無しさん
16/08/26 17:37:43.90 MxDOiAHv.net
よくわからないけどパターンマッチングってどういう局面で必要?
いままでのコーディングが大幅に減るとかいい面を教えてほしい
今のところ見にくいなあと感じる
342:デフォルトの名無しさん
16/08/26 18:46:17.17 zWe+Xnw2.net
>>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が特定の値の場合だけという条件指定も可能
今の貧弱な仕様だとお前の疑問の通りメリットはほとんどないのでまあ最終的には却下だろうな
343:デフォルトの名無しさん
16/08/26 20:21:13.42 6mUdfhCy.net
オブジェクト指向からswitch地獄に退化してないそれ?
関数型とかだとそれが普通なのかな
344:デフォルトの名無しさん
16/08/26 21:28:47.03 MxDOiAHv.net
必要に応じて使わないと退化だな
345:デフォルトの名無しさん
16/08/26 22:32:43.70 zWe+Xnw2.net
関数型はあくまで関数が主だからね
(本物の)パターンマッチは静的検査でパターンの網羅性を担保できるから、
やってることはインターフェースを実装してるのと同じようなもん
346:デフォルトの名無しさん
16/08/27 00:18:55.08 nVNQ8rj/.net
この場合は単純にGetAreaをabstract methodにして
各クラスでoverrideさせた方がよくないっすか?
347:デフォルトの名無しさん
16/08/27 00:20:04.19 1AQozIyW.net
if(x > y) (x, y) = (y, x);
348:デフォルトの名無しさん
16/08/27 00:38:01.47 gXVhUUHW.net
>>333
その方がいいと思う理由は?
>>333にとって関数型よりオブジェクト指向の方が馴染みがあるからそう感じるだけじゃない?
どっちがいいかじゃなくて考え方が違うんだよ
349:デフォルトの名無しさん
16/08/27 00:57:01.73 p93C1zWb.net
C#は関数型言語を目指すのか?
350:デフォルトの名無しさん
16/08/27 00:58:08.99 dfJ7JP1w.net
>>336
良いとこを取り入れようとしている
351:デフォルトの名無しさん
16/08/27 01:26:03.53 zYdR+KfD.net
マルチパラダイム言語なんだから、あるプログラミングパラダイムには大して効果的でない
(が、他のプログラミングパラダイムでは効果的な)機能が入ることもあるさ
352:デフォルトの名無しさん
16/08/27 01:43:46.91 p93C1zWb.net
まあたしかに今のC#はマルチパラダイムなんだろうけど
そもそもマルチパラダイムを意識して設計された言語なのだろうか
良いとこ取りしようって考え方はいいんだが
マルチパラダイムで複数のスタイルに対応しようとか、言語の複雑さが増すだけだと思うんだがなぁ
まあそのうち、オブジェクト指向でやりたい人はこれは不要(というか使うな)とかいう機能と
関数型でやりたい人はこの機能は使うなとかいう分類が出来ていくのだろうかね
だったら初めから言語分けろよと思うわけなんだが
353:デフォルトの名無しさん
16/08/27 08:01:26.33 uwQm2EgT.net
このままではVB6になってしまう
354:デフォルトの名無しさん
16/08/27 08:50:02.94 ZCfqwLYC.net
>>330
switchで分岐して分かりやすいと思う
355:デフォルトの名無しさん
16/08/27 08:50:57.27 ZCfqwLYC.net
>>333
switchがいい
356:デフォルトの名無しさん
16/08/27 08:59:36.29 xPu9ULSF.net
パターンマッチングは大変な事になりそう
ようするに型を調べて分岐の糖衣構文でしょ
バッドプラクティスの糖衣構文なんてよくないよ
357:デフォルトの名無しさん
16/08/27 09:04:35.71 SmFG8gRK.net
ク ク || プ //
ス ク ス | | │ //
/ ス | | ッ // ク ク ||. プ //
/ // ス ク ス _ | | │ //
/ ̄ ̄\ / ス ─ | | ッ //
/ _ノ .\ / //
| ( >)(<) ___
. | ⌒(__人__) ./ ⌒ ⌒\
| ` Y⌒l / (>) (<)\
. | . 人__ ヽ / ::::::⌒(__人__)⌒ \
ヽ }| | | ` Y⌒ l__ |
ヽ ノ、| | \ 人_ ヽ /
. /^l / / ,─l ヽ \
358:デフォルトの名無しさん
16/08/27 09:18:21.32 xncZCRpk.net
ポリモフィズム過負荷で歪なクラスを量産するよりはよい
359:デフォルトの名無しさん
16/08/27 09:56:58.93 gXVhUUHW.net
型で分岐するのがどうして問題かというと、
後で型を追加したときに分岐の箇所を自分で探して条件を追加しなきゃいけなくなるから。
ちゃんとした関数型だと、パターンマッチで分岐させるような型って
type Shape = Rectangle(double x, double y, double w, double h)
| Circle(double x, double y, double r);
みたいな感じでクローズしておくんだよ。
これでShapeがとりうる全ての型をコンパイラが認識できるから、
Shapeに型を新たに追加したら>>329がコンパイルエラーになってくれる。
イメージ的には 列挙体 + タプル に近いかな。OO言語の超強力なクラスとは全然異なるもの。
このように、パターンマッチは根が深いからにわか言語が中途半端に導入するとおかしなことになる。
360:デフォルトの名無しさん
16/08/27 10:14:58.12 xncZCRpk.net
データベースやXMLで不定形データ受け取って
パースした後の分岐に使うくらいかな
361:デフォルトの名無しさん
16/08/27 10:17:36.05 xPu9ULSF.net
>>346
モジュールの配布面倒くさそう
パターンをを追加したら参照元コード全部追記してねって全ユーザーに通知するの?
362:デフォルトの名無しさん
16/08/27 12:08:15.98 vp5ltHnS.net
>>346
しかしそれだと書く側にとってはOOPの方がいいが。
機能追加がクラス追加で対応できるとき、
OOP: 既存部分に一切手を入れる必要はない。
FP: 既存部分も書き直す必要がある。
普通はどう見ても退化だよ。
書き直す部分がSyntaxErrorで見つかるのは便利だけど、
OOPでもそのクラスの全メソッドを列挙するのは簡単なので、漏れる事もない。
OOPは実際の詳細なクラス毎の動作はその部分のコードからは読みとれない。
それがswitchの方がいいという人の意見なのだろうけど、
大概の場合は読みとれないのは低位記述のみであって、読みとる必要がないから問題ない。
>>329にしてもGetAreaメソッドの方がいいし、
本家の例にしてもExplainMyselfメソッドの方がいい。
本来はメソッドとしてくくれないswitch分岐に使えばいいのだろうけど、
本家にしてもそのいい例を探せなかったということじゃないか。
つまり要らない子。
363:デフォルトの名無しさん
16/08/27 18:13:53.32 gff3j1Ec.net
C#はjsのオブジェクトリテラルを導入すべきだ
C#の匿名型は書きにくいし見辛い
364:デフォルトの名無しさん
16/08/27 19:31:49.76 p93C1zWb.net
つまりパターンマッチはオブジェクト指向とはきわめて相性が悪いって事か
まあ、型チェックと代入が一発でできる機能だけなら便利に使える場面もあるだろうけど
365:デフォルトの名無しさん
16/08/27 19:54:25.56 0MFbcQeG.net
相性が悪いんじゃなくて使い分けだと思う
上ででたShapeでは各クラスが面積を出すメソッドを持っててもべつにいいだろうけど
GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい
その場合はどこか別
366:で限定的にこのパターンマッチを使えばいいのではないか?
367:デフォルトの名無しさん
16/08/27 19:54:53.32 vp5ltHnS.net
相性が悪いわけではなく、用途がないんだと思う。
型ありOOPの場合は、型判定+分岐を仮想関数で対応するのが基本思想である為、
そもそもの例がswitch文で型判定の時点で要らない子でしかない。
もうちょっとマシな例はなかったのかよ、とも思うが。
つかどっちかというと、
パターンマッチングが活躍している言語のソースを眺めた方が良いのではないか?
誰か知ってたら教えてプリーズ。
368:デフォルトの名無しさん
16/08/27 20:00:45.28 vp5ltHnS.net
あ、ただ、絞り込みは出来るようだから、それは役に立つか?
> case Rectangle s when (s.Length == s.Height):
> case Rectangle r:
もちろんメソッドでも出来るが、色々まどろっこしくなるのかも。
(俺はC#erではないので詳しくは分からない)
369:デフォルトの名無しさん
16/08/27 20:33:04.97 vp5ltHnS.net
>>352
> GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい
言っていることは分かるけども、それは思想によると思うよ。
OOP原理主義だとして、GUI側からの描画リクエスト対応もメソッドとして持たせた場合、
オブジェクトのメソッドは永遠に追加されていくことになるので、オブジェクトのソースが確定しない。
でも、OOPの基本理念、「動作しているコードには一切触れることなく機能追加可能」は実現出来る。
したがって、デグレードの危険が全くない。
機能の切り分けとしてはGUI側に持たせたいところだけど、
これだと追加Shape毎にGUI側もいちいち対応しないといけなくなる。
(動いているコードを修正する必要がある)
オブジェクトが肥大化するけども、
バグを出さない為の管理なら、オブジェクト側に持たせた方が楽だと思う。
他プログラムとオブジェクトを共用する気なら、
オレオレメソッドで肥大化したオブジェクトなんて要らないから、
GUI側に持たせることになる。
もしかして拡張メソッドってこのため?アレいまいちピンとこなかったんだが。
370:デフォルトの名無しさん
16/08/27 21:12:00.13 n0Zp8t3m.net
Shapeのコンテキストによるだろ
数学や物理の計算に使うモデルなら描画用メソッドなんて書いた時点で解雇されるし
描画モデルなら描画用メソッドがあってもいい
371:デフォルトの名無しさん
16/08/27 21:43:02.69 vp5ltHnS.net
だからそのための拡張メソッドじゃないの?
今回の例なら、GUI側で拡張メソッドを追加して対応する。
すると、既存コードに手を加えることもなく、描画部分もswitch文無しという、両取りが可能。
追加Shapeがあった時もGUI側の拡張メソッド部分に追加するだけ。管理もしやすい。
URLリンク(msdn.microsoft.com)
372:デフォルトの名無しさん
16/08/27 22:01:19.98 gXVhUUHW.net
>>357
それは詭弁だな
拡張メソッドは単に型ごとにGetAreaをオーバーロードしてるだけだ
オブジェクト指向というよりはむしろ関数型的なやり方
型switchや仮想メソッドは実行時型に応じた動的な多相を実現する手段で、拡張メソッドで代替できるものではないよ
373:デフォルトの名無しさん
16/08/27 22:23:19.62 E9zwljSJ.net
>>357
今の流れに拡張メソッド全く関係ないよね
374:デフォルトの名無しさん
16/08/27 22:23:59.95 vp5ltHnS.net
>>358
> 実行時型に応じた動的な多相
C#には無いだろこれ。
375:デフォルトの名無しさん
16/08/27 22:37:21.41 gXVhUUHW.net
>>360
?
普通にメソッドのオーバーライドによる多態のことだよ
376:デフォルトの名無しさん
16/08/27 22:42:35.41 vp5ltHnS.net
>>361
例えばJavaScriptでは動的に型を変更出来る。
だから実行時にswitchでやるのとコンパイル時に静的にリンクするのでは動作が異なってくる。
そういうのはC#にはないでしょ、って話。
だから話を戻すと、>>329のケースは通常のOOPの多態、
>>352のケースは拡張メソッドが一番良いと思う。
本家のも普通はOOPで対応する。
ただそれだと例にならないのでクエリがわざわざくっつけられているのだと思う。
377:デフォルトの名無しさん
16/08/27 22:43:28.66 yK/3tXKV.net
何の話を
378:してるのかなってちょっと上からレス読んでみたけど、 >>352の話ならShapeがDrawを持っても別に必ずしもおかしくないし、 持たせたくないならShapeで描画側が要求する描画に必要なデータを提供する 一連のメソッドやプロパティを定義しておけば済む話だよね。 描画側で型を見て分岐なんてどう贔屓目に見ても最悪のやり方にしか思えんね俺も。
379:デフォルトの名無しさん
16/08/27 23:01:52.80 gXVhUUHW.net
>>362
最初の4行は俺にはよく意味がわからないけどそれはまあいいとして、
>>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
Shapeの外部にメソッドを定義しつつ多態相当の動作をさせたい、そのうえ明示的な型判定はダメというんなら、
引数をdynamicにキャストして強引に動的ディスパッチさせるみたいなことが必要。
380:デフォルトの名無しさん
16/08/27 23:02:26.56 ygls7M0s.net
>>363
おかしいかおかしくないかは場合による
このShapeが幾何学計算ライブラリのShapeだったらDrawはおかしい
図形描画用のライブラリならDrawがあってもおかしくないしなくてもおかしくない
381:デフォルトの名無しさん
16/08/27 23:10:16.02 vp5ltHnS.net
>>364
> List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
出来るよ。というかそちららの認識が間違っていると思うが、
拡張メソッドはソース上では普通のメソッドと見た目は同じだよ。
382:デフォルトの名無しさん
16/08/27 23:15:37.10 ygls7M0s.net
>>366
ネタかマジかからかってるかわからないんだけど
383:デフォルトの名無しさん
16/08/27 23:18:51.07 gXVhUUHW.net
>>366
ほんとに?
URLリンク(ideone.com)
たまには自分の思い込みを疑ってみるのも大切だぞ
384:デフォルトの名無しさん
16/08/27 23:19:50.69 vp5ltHnS.net
>>364
>>367
いやこちらも意味不明なのだが。
逆に>>364の言う「メソッドでは対応出来るが拡張メソッドでは対応出来ない」ケースって出せるか?
385:デフォルトの名無しさん
16/08/27 23:28:42.22 vp5ltHnS.net
>>368
いやそれOOPじゃないと思うが、、、ただのオーバーロードだよね。
386:デフォルトの名無しさん
16/08/27 23:31:52.50 gXVhUUHW.net
>>370
だから俺は>>358からそう言ってるじゃん
拡張メソッドでは対応できないケースを示しただろ?
387:デフォルトの名無しさん
16/08/27 23:33:00.29 ygls7M0s.net
>>369
拡張メソッドにできない事、のシンプルな答えとして挙げるなら、インスタンスメソッドにはなれない、だな
それでもう終わりだろこの話
わからないなら入門書読み直してくれ
388:デフォルトの名無しさん
16/08/27 23:40:42.34 vp5ltHnS.net
>>371,372
まあ俺はC#erではないので拡張メソッドは使ったことがないし、
俺の理解が間違っている可能性もあるが、
MSDNの仕様書を見る限り、当たり前だがメソッドを拡張したように見せかけているのだと思うよ。
だからその場合は Rectangle と Circle に対して拡張メソッドを追加する。
これができないのならそちらの言うとおりだが、それだと拡張メソッドなんてゴミじゃん。
まあどのみち俺かそちらの仕様に対する勘違いだと思うので、この話はこれで終わりでいい。
389:デフォルトの名無しさん
16/08/27 23:48:05.17 vp5ltHnS.net
>>372
いや悪いがやっぱりそっちが間違ってるぞ。
拡張メソッドで普通にthisが取れてる。(引数の所に書く)
つかそうじゃないと意味無いだろ。
> public static int WordCount(this String str)
> {
> return str.Split(new char[] { ' ', '.', '?' },
> StringSplitOptions.RemoveEmptyEntries).Length;
> }
> URLリンク(msdn.microsoft.com)
390:デフォルトの名無しさん
16/08/28 00:08:50.44 s1SxoEZK.net
>>374
あんたにも分かるように説明してあげよう
拡張メソッドとは、HogeClass.func(x) を x.func() と書けるシンタックスシュガーである
そ れ だ け
391:デフォルトの名無しさん
16/08/28 00:15:50.55 zGC1w6Ia.net
>>365
だからそう言ってるでしょ。
392:デフォルトの名無しさん
16/08/28 00:17:10.42 +mkoP4gZ.net
>>375
それはオブジェクト指向がその意味でのシンタックスシュガーでしかないよ。
class構文が無かったCでも関数ポインタ+構造体で同じ事が出来たわけだし。
重要なのは拡張メソッドにthisが渡っていることだよ。
静的メソッド(クラスメソッド)にはthis使えないでしょ。
今回の例で言えば、宣言部分は以下になるということ。
ただしコンパイルが通るかどうかは知らんが。
通らないのなら君の言うとおり、通るのなら俺の言い分が正しいことになる。
public static void Draw(this Rectangle rect)
public static void Draw(this Circle circle)
393:デフォルトの名無しさん
16/08/28 00:19:39.62 UJTSRlJK.net
何で拡張メソッドってstaticクラスじゃないと定義出来ないんだ?
何か理由あるの?
別に制限はstaticメソッドだけでいいと思うけど
例えばString.IsNullOrEmpty(String)
もしstaticクラス以外に拡張メソッド定義出来たら
String.IsNullOrEmpty(this String)
みたいになって更に便利になると思うのに
394:デフォルトの名無しさん
16/08/28 00:21:24.05 hQF+q+Zk.net
そこのthisは単に拡張メソッドのマーク
通常のthisとは違う意味
拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
RectangleやCircleにキャストすることになる
そこで登場するのがパターンマッチングと
395:デフォルトの名無しさん
16/08/28 00:26:26.11 UJTSRlJK.net
今更変えるのは互換性的な問題で難しいだろうけど、
==演算子を等価演算子
===演算子を等値or不変インスタンスかつ等価演算子
にするべきだと思った
不変かは属性とかで定義して
Equalsメソッドとかいらねーだろ
==演算子と両方定義しろとかどうなってんだ
396:デフォルトの名無しさん
16/08/28 00:31:26.64 +mkoP4gZ.net
>>379
いや拡張メソッド内で自分自身のメンバを参照出来るよ。多分。
> 実際に、拡張メソッドは、それらが拡張している型のプライベート変数にはアクセスできません。
> URLリンク(msdn.microsoft.com)
普通に考えれば、わざわざプライベートは駄目って書いてある時点でpublicならいけるって事でしょ。
要するに外面的には Draw(circle) でしかないところを circle.Draw() と書けるだけでしかない。
その辻褄はコンパイラが合わせるけど、privateをpublicには出来ないのでこれは無理。
MSDNの説明には矛盾を感じないけど。
397:デフォルトの名無しさん
16/08/28 00:36:48.79 +mkoP4gZ.net
>>379
> 拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
バインディングはコンパイル時だし、多分普通に呼べると思うよ。
というか呼べないと拡張にならないから、文法が違ったとしても何らかの呼び方は必ずあるはず。
398:デフォルトの名無しさん
16/08/28 00:37:11.60 zGC1w6Ia.net
>>380
EquqlsというかIEquatableが不要とは思わないけど、
VBと同じように参照等価検査専用の演算子を用意して、==はオーバーロードしないと
使えないようにしてくれた方が分かりやすかったね。
399:デフォルトの名無しさん
16/08/28 00:43:30.59 hQF+q+Zk.net
>>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や共通言語仕様にも手を入れなければいけない問題になる
400:デフォルトの名無しさん
16/08/28 00:45:09.67 s1SxoEZK.net
>>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は拡張メソッドとして呼び出せないはずだけど、直感的には呼べた方が自然だと思わない?
それとか、拡張メソッドを含むクラスを別の名前空間のクラスが継承したらどうする?
401:デフォルトの名無しさん
16/08/28 00:59:15.28 hQF+q+Zk.net
>>382
拡張メソッドはコンパイラで解決しなきゃいけない
しかし、外部のDLLがShapeの子クラスを実装して、それを動的に読み込む可能性があるのでコンパイラでは解決不能
>オブジェクト指向がその意味でのシンタックスシュガーでしかないよ
そういうことを言ってるんじゃない
オブジェクト指向は共通言語仕様に書かれているのでILにその情報が残り、すべての言語が対応する
それに対しシンタックスシュガーはコンパイラの機能でILに完全には残らなかったり、属性をつけることで対応しているコンパイラのみが利用する
402:デフォルトの名無しさん
16/08/28 01:12:12.64 +mkoP4gZ.net
>>386
コンパイラ云々は俺は普通に出来ると思っているのだが、まあそれは置いておこう。
>>384
こちらを先にやろう。
> //できない
> //shape.Draw();
これって出来ないんだっけ?というかこちらは最近はJavaScript(型無し)でやっていて、
void hoge(var shape ) // var なので何でも入る
{
shape.Draw(); // 勝手に直近のvirtualが呼ばれる。
}
で普通にオーバーライドされたvirtualが呼べる(circle.drawなりrectangle.drawなり)から、
実際のC#での記述の仕方は知らない。
ただ、アップキャストしたらもう仮想関数は呼べません、ダウンキャストしてからにしてください、
だとOOPとしてはかなり無理があるから、自然なやり方がないわけ無いと思うけど。
だってその is 構文ってのも新しいんでしょ?
だったらそれがなかったこれまではOOPできませんでしたーってことになっちゃうじゃん。
403:デフォルトの名無しさん
16/08/28 01:32:13.31 hcj7YQtW.net
しつけえなあ
入門書ぐらい読んでからにしろよ
なんでど素人がそんな自信満々なんだよ
404:デフォルトの名無しさん
16/08/28 01:33:21.98 +mkoP4gZ.net
>>384
以下見る限り、virtual付けたら普通にOOPできるとしか読めないが。
てか当たり前だが。
引き数渡ししたら出来なくなるって事もないと思うけど。
> しかし、動的な型に基づいて呼び出されるメソッドを決定したい場合があります。
> (というより、ほとんどの場合、メソッド呼び出しは動的に決定した方が都合がいい。)
> 動的な型に基づいて呼び出されるメソッドを選びたい場合、
> 以下のように、 メソッドに virtual という修飾子を付けます。
> URLリンク(ufcpp.net)
その上にvirtual付けなかった場合も書いてあるから見比べれば分かると思うよ。
405:デフォルトの名無しさん
16/08/28 01:37:09.54 +mkoP4gZ.net
>>388
まあその通りだ。今は最新環境がないので試せない。
確かにこれ以上やっても意味無いので、後日最新環境で試せば良いだけだね。
「拡張メソッド」ってのに俺が夢を見すぎているのかもしれんし。
406:デフォルトの名無しさん
16/08/28 02:08:02.18 hQF+q+Zk.net
>>389
何度も行っているように、拡張メソッドではオーバーライドできない。
なぜなら拡張メソッドはただのC#限定のstaticメソッドのシンタックスシュガーに過ぎないから。
そのURLではどこにも拡張メソッドのことは書いてないでしょ
class Triangle : Shape{}
ってプラグインみたいに外部のDLLで宣言されて、それを動的に読み込んで、hogeに渡ってきたらどうするの?
外部のDLLのことなんてコンパイルの地点では知らないので存在しない拡張メソッドを呼べるはずがない。
夢を見すぎているんじゃなくて、ただ無知でC#とかCLIをよく理解してないだけだと思う
javascriptで言うならprototypeの存在も知らないでjavascriptはウンタラカンタラ言っている状態なので、基礎から学び直したほうがいい
407:デフォルトの名無しさん
16/08/28 08:45:51.40 UJTSRlJK.net
>>385
そういう事か…確かに面倒だな
それならnull可メソッド的な物を作ればいいんじゃない
public null void Hoge(){
//thisがnullの可能性あり
}
408:デフォルトの名無しさん
16/08/28 09:58:20.62 +mkoP4gZ.net
>>391
試したぞ。VS
409:Community2015はサインインしないと使えなかったから、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) }
410:デフォルトの名無しさん
16/08/28 09:59:05.95 +mkoP4gZ.net
(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 形式で全部書く---(γ)
のどれかになるが、俺ならαかβであって、γはないね。
411:デフォルトの名無しさん
16/08/28 10:08:01.32 acJIbkh4.net
スクリプトコーダーらしいパフォーマンス無視の考え嫌いじゃないよ
412:デフォルトの名無しさん
16/08/28 10:18:04.05 +mkoP4gZ.net
釣りか?
仮想関数とif/switch分岐でのコストはC++の連中が死ぬほど議論しているが、
結論はどっちもほぼ同じだよ。
だからαもβもγも動作速度は大して変わらないはずだけど。
しかしそもそもC#ってパフォーマンス重視出来る言語じゃないよね。
413:デフォルトの名無しさん
16/08/28 10:21:51.48 acJIbkh4.net
>>396
そこじゃない
414:デフォルトの名無しさん
16/08/28 10:24:49.86 +mkoP4gZ.net
じゃあどこだよ?
てかチャットじゃねーんだから意見があるのなら分かるように書けよ
415:デフォルトの名無しさん
16/08/28 10:26:20.15 acJIbkh4.net
>>398
それ君が言うんだ?
416:デフォルトの名無しさん
16/08/28 10:32:20.35 1sBWhH04.net
>>396
>C#ってパフォーマンス重視出来る言語じゃないよね
これ免罪符に糞コード生み出す奴多いから困る
417:デフォルトの名無しさん
16/08/28 10:34:33.21 acJIbkh4.net
入門書も読まないスクリプトコーダーはdynamicでも使ってろってこった
418:デフォルトの名無しさん
16/08/28 11:04:12.58 h1JFz9az.net
ウザイから質問者と回答者以外が3行以上書いたら死刑な
419:デフォルトの名無しさん
16/08/28 12:58:05.84 0rJ/vUpY.net
ひょっとして結局拡張メソッドからは型の外のスコープからアクセスできるメンバーにしか
アクセスできない、っていう糞当たり前の話を延々やってだけなの?
そんなのちょっと我慢して拡張メソッドの解説記事を5分も読んだら猿でも分かる話だろw
420:デフォルトの名無しさん
16/08/28 13:59:05.59 ZfPDxmLp.net
フロントエンドコーダーってろくな人材いないよな
421:デフォルトの名無しさん
16/08/28 14:35:00.94 hQF+q+Zk.net
>>394
実行時に解決するのは非常にコストが高い。
多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
>そもそもC#ってパフォーマンス重視出来る言語じゃないよね。
大きな勘違い。Roslynとかではパフォーマンスをかなり重視してる。
実行時はネイティブコードになるので書き方によってはC++と同等の速度が出る。
(ただし、C++は危険な操作を行ったりできるのでその分有利)
>staticクラスは継承出来ない
なぜなら、staticクラスは「インスタンス化、継承できない」という指定付きのクラスだから。なぜintは数値しか表せないのかみたいな意味不明な主張
>・Shapeクラスにメソッド追加---(α)
Shapeクラスが汎用的に使ったり、ライブラリとして公開するクラスならどうしようもない
WPF、WinForms、Xamarinなど、プラットフォームによって描画方法は全然異なるのでDrawメソッドを決められない
>・GUI側でShapeクラスを継承したクラスを作って対応---(β)
手間が掛かり過ぎるし、構造体やsealedクラスなら継承はできない。
クラス内にフィールドで保持してもいいが、Int32WrapperとかStringWrapper、加えて列挙体や関数、タプルなんかのラッパークラスができて複雑に。
状況によってはInt32WrapperWrapperみたいなものも爆誕
422:デフォルトの名無しさん
16/08/28 14:43:51.29 hQF+q+Zk.net
普通にココらへんのリンクで十分か
URLリンク(www.buildinsider.net)
>GUI側でShapeクラスを継承したクラスを作って対応
これは構文解析ライブラリは継承前のクラスを返してくるわけだから、無理があった
423:デフォルトの名無しさん
16/08/28 14:55:35.63 14dFRx50.net
拡張メソッドで話がだいぶ逸れたけどなに話してたんだっけ
424:デフォルトの名無しさん
16/08/28 14:56:21.93 QOlzH7cc.net
できない君か
425:デフォルトの名無しさん
16/08/28 15:27:24.87 +mkoP4gZ.net
>>405
先に了解事項を書いておく。
> >staticクラスは継承出来ない
> なぜなら、それが定義だから(意訳)
これは了解。こちらも調べている限り、どうやらそのようだと分かった。
staticクラスはシングルトンの糖衣かと思っていたが、わざわざ別物を用意しているね。
> 静的クラスはシールされるため、継承できません。
> URLリンク(msdn.microsoft.com)
> staticクラスとSingletonでは以下の違いがあります。
> URLリンク(takachan.hatenablog.com)
したがって、疑問は何故staticクラスにしか拡張メソッドを置けないか、になり、
つまり>>378と同じで、そちらの見解は>>385というのもいい。
ただ俺はこの回答に納得しているわけではないが、
結局これはどこまでやるかということだから。
426:デフォルトの名無しさん
16/08/28 15:30:05.25 +mkoP4gZ.net
次に今回の実装方式について、
(α)についてはその通り。
(β)については「継承」が出来ればそっちの方がいいが、無理なら「内包」でも問題ない。(β+)
コンストラクタでShapeを与えて内包したRectangleDraw、CircleDrawクラスを作り、
ShapeDrawクラスを継承する。
つまりラッパーオブジェクトを作成して同階層構成でXXXXDrawクラスを構成する。
これだと自前クラスなので何も問題なくOOPできるが、
コンストラクタ内では1回だけ is XXXX でswitchしなければならない。
それでも毎回記述が必要な(γ)よりマシ。
> クラス内にフィールドで保持してもいいが
後の文を読む限りこれはばらしてということだと思うが、
(β+)はばらさすにそのまま保持する。(フィールドとして Shape shapeを持つ)
そして各Drawメソッドからは this.shape.xxxxとしてアクセスする。
こうすれば、アクセサに関してもShapeの定義そのままであり、追加記述は必要ない。
これにより、外枠以外の本質的記述が(γ)に対して増えることはない。
これでどうだ?
最後に以下だが、
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
これはいろいろだいぶ違う気がするが、確認も時間がかかるし、後回しでいい。
427:デフォルトの名無しさん
16/08/28 15:40:18.87 xWdxGs/J.net
パターンマッチング推進派の巧妙なアンチ書き込みか!
428:デフォルトの名無しさん
16/08/28 15:50:02.41 +mkoP4gZ.net
>>406
リンク先読んだ。筆者の考え方とは同意する。
結果、俺は以下に該当するのでオブジェクト側に突っ込みたいと考える。
> 型だけを見た単純な分岐しかしない場合、
> 仮想関数を使う方が実行性能面でも保守しやすさの面でもいいだろう。
そちらは以下に該当すると考えてパターンマッチングというのも了解だ。
> 1つは、型の外に実装を書く方が好ましい場合だ。(中略)
> 特定の種類のアプリでしか使わないような機能を書く場所としては (型は)【追補】
> 不適切となる。
429:デフォルトの名無しさん
16/08/28 16:06:33.60 +mkoP4gZ.net
>>405
ちなみに以下について俺の疑問点を先に挙げておく。
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。
それが一番簡単だし。
(クラス自体がstaticではないのでコンパイル時にリンクは無理)
したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
・呼び出しに失敗って何?C#ならコンパイルが通っている限りあり得ないと思うが。
(C++みたいな<reinterpret_cast>とかは無しで)
・実行時に解決って言ったって、vtableの場合は解決済みのthisポインタを持っているわけであって、
何かを比較したりすることはない。間接呼び出しになるだけ。
コストはゼロではないが、リフレクションとかとは全く違う。
URL付きのツッコミは歓迎。
430:デフォルトの名無しさん
16/08/28 16:30:05.10 +mkoP4gZ.net
追記
俺の間違いが分かったので書いとく。
× > ・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。(>>413)
○ 置いてない。静的メソッドは直接呼び出し。
× > したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
○ 直接呼び出しする非virtualの方がvirtualよりは速い。
staticメソッドには言及されていないが、多分非virtualと同じ。
> メンバ関数
> URLリンク(www.microsoft.com)
他の下2件はどこを調べればいいか分からないのでツッコミ待ち。
よろしく。
431:デフォルトの名無しさん
16/08/28 18:36:26.78 hQF+q+Zk.net
>>410
>1回だけ is XXXX でswitchしなければならない
その時にパターンマッチング使えば楽だよねって話でしょ
毎回使うかどうかは好みや書き方次第かと
>呼び出しに失敗
拡張メソッドの実装を理解してる?
ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。
URLリンク(msdn.microsoft.com)
継承関係とは違って共通言語仕様に定められていない(はず)なので、全言語が対応していない
例えばShapeクラスとかをライブラリとして公開したとすると、他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
そうすると、存在しないメソッドは呼び出せないので失敗することになる
何なら、動的に新しい型自体を作成してメソッドに渡すことすらできる。
>実行時に解決
拡張メソッドはそもそもサポートしてない言語もあるし、全く独立したクラスなのでそもそも動的に解決するのが困難
やろうとすればたぶん共通言語仕様とかの変更が必要で影響ばかりでかくて利点が皆無
432:デフォルトの名無しさん
16/08/28 19:17:00.51 +mkoP4gZ.net
>>415
いや>>352に対する君の主張は「毎回べた書き」だろ。すり替えるなよ。
それはさておき、通常はクエリメソッドを用意しておいてそれで対応だ。
例えば Shape.type で 'rectangle' や 'circle' が取れるとか。
だからパターンマッチング自体の記述は要らんよ。(見た目は同様ではあるが)
というかそれが絶対に必要ならこれまでどうしようもなかったことになっちゃうだろ。
> ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。(中略)
> そうすると、存在しないメソッドは呼び出せないので失敗することになる
だから何?コンパイラが通らないだけだろ。
話がずれているか?
上記話のすり替えをしてくる奴だから信用はしていないが。
>>405を見る限りこちらは「一般」の仮想関数だと認識して回答した。(>>413,414)
そちらは
・「拡張メソッド」の動的解決はコストが高くて、仮想関数になりえなくて、呼び出しに失敗する
ことを言っていたか?
それなら「一般メソッド」について記述した>>413,414については見解の相違なしということでいいな。
> 他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
当たり前。というか静的にリンクするんだから、namespaceに名前がない時点でコンパイルが通らないだけ。
使う気なら自前で定義なりusingしなければならないし、無ければ使えない。
多態する気なら、例えば多重継承として実装すればいいだけ。特別なコストはかからない。
実装方式は>>414のリンクに記述してあるとおり。
拡張メソッドを多重継承として実装出来ない理由があるか?
> 利点が皆無
どこがだよ?やけくそになってないか?
拡張メソッドが多態出来ればメリットがあるのは見たら分かるだろ。
今多態出来ていないのは何か理由があるか手を抜いているか(今後対応するか)だよ。
433:デフォルトの名無しさん
16/08/28 19:49:44.91 hQF+q+Zk.net
>>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を立てると良い
434:デフォルトの名無しさん
16/08/28 20:04:28.22 hQF+q+Zk.net
>Shape.type で 'rectangle' や 'circle' が取れるとか。
ちなみに、これは一番危険
標準ライブラリにあるShapeクラスをA社とB社が継承し、AライブラリとBライブラリを作ったとする。
そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
そこで使うのが「型」なわけだ。
現在でも出来てるけど、コンパイラ制作とかだと頻繁に出てくるよね~、なら、パターンマッチング導入しよう!という流れかと。
ちなみに、ShapeDrawクラス見たいのにも問題はあって、例えば構文解析した要素が10000を超える巨大な木構造があるとする。
それをGUI側ですべてNodeDrawみたいなクラスにラップするとその変換にかかる時間とメモリが馬�
435:ュにならなくなってくる さらに、ライブラリの木構造が変更されると、GUI側ではすべて構築しなおし 手間を防ぐためにキャッシュしたり差分のみを変更して・・・という状況になる場合もある
436:デフォルトの名無しさん
16/08/28 20:23:46.58 5A6j7Ufp.net
なんでこんな荒ぶってんのこいつ
とりあえず落ち着いて猫でもわかるC#でも読みなって
437:デフォルトの名無しさん
16/08/28 20:23:47.93 +mkoP4gZ.net
>>417
こちらの認識は、ID:gXVhUUHW = ID:hQF+q+Zk だ。
違っていたのならすまんかった。
> クエリメソッド
クラスの中に複数種が入ることがある場合、(多態される場合)
一般的に「何が入っているか」は分かるようになっている。だからそれを使う。
C#の文法による解決は必要ない。(というかそうじゃないと動的型を取れない言語で使えない)
> あと、「他言語は対応していない」の部分を完全に無視してるみたいだけど、そこも要点なんですが
これについては関係ないとしか思えない。
拡張メソッドを自動的にエクスポート出来ると思っているのならそれが間違いだろ。
namespaceの中に拡張メソッドが見えていないと使えないのだから、
使う側が全部管理しないといけない。
同じ拡張メソッドを他でも使いたければ、その拡張メソッドを格納したクラスを使う側がusingしないといけない。
現在の実装はあくまで「コンパイラがstaticクラスのstaticメソッドに対しての関数呼び出し」に変更するだけ。
それがコンパイル時に出来なければコンパイルが通らない。他言語はどこに関係あるんだ?
> 全く独立したクラスのstaticメソッドをどうやって多重継承するの?
多重継承は全く独立したクラスを継承することですが?
当然これをやる時はvirtualにする(今現在のC#の制限事項をはがす)のだが、ついて来れているか?
元々「継承出来ないクラス」(stat;icクラス)にしか拡張メソッドを置けないのが問題であって、
拡張メソッドをシングルトンに置ければ何も問題なくなる。
そしてそれが実現出来ない技術的障害はない、というのが俺の主張。
この辺を最初から知っていて傍観してるのが>>378だろ。
> ほぼ拡張メソッドじゃなくてさっき君が言ったShapeDrawクラスを使うべき案件
いやそっちの意見は何なんだよ?
君はパターンマッチングが一番良いと思ってるんだろ?
俺は、「拡張メソッドで多態」(α)(β)(β+)の順で検討する。
ただ第一候補が今は駄目なことを知らなかったから迷走したが。
438:デフォルトの名無しさん
16/08/28 20:32:09.16 +mkoP4gZ.net
>>418
> そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
それは最初からポインタの型が違うから区別出来るだろ。
> ちなみに、、、、以降(ry
それがないように、本来は「直接クラスを拡張」(α)するなり「継承」(β)するべきだろ。
やむなく内包(β+)なりパターンマッチング(γ)になった場合は変更の影響は受けるのは当たり前。
ただ、(β+)よりも(γ)の方が記述の変更量は多いよ。
その辺はMSDNにもそのまま書いてある。
> 拡張メソッドは、一般的に、必要な場合に限り注意して実装することをお勧めします。
> クライアント コードで既存の型を拡張する必要がある場合、
> 可能であれば既存の型から派生した新しい型を作成することで行ってください。
> 詳細については、「継承 (C# プログラミング ガイド)」を参照してください。
> 拡張メソッドを使用して、変更できないソース コードのある型を拡張する場合、
> 型の実装の変更により拡張メソッドが破損するというリスクを負うことになります。
> URLリンク(msdn.microsoft.com)