■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part92 (実質93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/
■次スレは>>970が建てる事
建てられない場合は他を指定する事。
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 15:36:53.26ID:S+KK7a41
2017/04/26(水) 21:36:27.67ID:mlRIWo89
>>60
> ちなみにイントラネット上であれば開いたソケットはアプリを閉じない限りクローズする必要はないでしょうか
当然だけどリッスンポートは待ち受けで開いたまま
コネクトする側は必要なくなったら閉じるのが普通
> ちなみにイントラネット上であれば開いたソケットはアプリを閉じない限りクローズする必要はないでしょうか
当然だけどリッスンポートは待ち受けで開いたまま
コネクトする側は必要なくなったら閉じるのが普通
2017/04/27(木) 00:21:44.79ID:GJNrvvrA
オブザーバー、発行・購読
中央管制塔ありのメディエイター
メッセージキュー
中央管制塔ありのメディエイター
メッセージキュー
64デフォルトの名無しさん
2017/04/27(木) 07:42:43.29ID:fVk5qOLv65デフォルトの名無しさん
2017/05/06(土) 00:24:40.77ID:LiC8gZ+P こっちか
2017/05/17(水) 20:59:26.88ID:Ug4uYIda
C#って言語とランタイムの性能はいいけどエコシステムが貧弱だな
2017/05/17(水) 21:02:34.01ID:rHqwwCfA
最近はNuGetもかなり充実したけどJavaにはさすがに到底敵わない
2017/05/17(水) 21:28:20.78ID:Lj2qZJuK
>>67
なんでNuGetとJava比べてんの?
なんでNuGetとJava比べてんの?
2017/05/17(水) 21:49:09.74ID:OvRO5BGY
>>67
これは恥ずかしい
これは恥ずかしい
7067
2017/05/17(水) 23:19:09.78ID:SKu/yZ4u なんで叩かれてるのか知らないけど、Mavenリポジトリと言えば満足?
2017/05/18(木) 00:04:10.18ID:JYcaMM6T
web系の自動化ツール充実度に嫉妬
2017/05/18(木) 03:52:39.26ID:nv0hNXKv
>>70
具体的に
具体的に
2017/05/18(木) 06:54:17.24ID:Zif2rhHO
>>71
Web系はやっつけだろうが早くリリースするのが至上命題だからテストを自動化しないとカオスになる
Web系はやっつけだろうが早くリリースするのが至上命題だからテストを自動化しないとカオスになる
2017/05/19(金) 23:40:22.50ID:K2XF16mV
クラスのメンバーの型を動的に変更するなどは可能ですか?
例えばMyClassのメンバーに
public string name { get; set; }
が有るとして、それを一時的に
public List<string> name { get; set; }
に変えるなど可能ですか?
例えばMyClassのメンバーに
public string name { get; set; }
が有るとして、それを一時的に
public List<string> name { get; set; }
に変えるなど可能ですか?
2017/05/20(土) 00:19:20.01ID:/WJez+wG
76デフォルトの名無しさん
2017/05/20(土) 00:28:41.92ID:lbI4YU5N public string|List<string> name { get; set; }
じゃ駄目?
じゃ駄目?
2017/05/20(土) 00:44:05.60ID:I6OViHCS
>>74
そのメンバーに色々な型のデータを突っ込みたいなら dynamic 型を調べるがよろし
そのメンバーに色々な型のデータを突っ込みたいなら dynamic 型を調べるがよろし
2017/05/20(土) 01:21:14.87ID:aMCzC0+r
2017/05/20(土) 02:50:37.33ID:/vBlyS11
え、なにそれは
2017/05/20(土) 03:36:45.84ID:XoWVmAv8
>>76
このテクニックなんか名前ついてるの?
このテクニックなんか名前ついてるの?
2017/05/20(土) 04:31:41.03ID:DT+L3BmX
アンカーの付け間違い
2017/05/20(土) 06:41:31.55ID:hBo0eJTZ
コンパイル通らねーよw意味不明
2017/05/20(土) 10:23:12.61ID:wDlYVPvY
素直にgenerics使え
2017/05/20(土) 11:05:10.16ID:NUOkmiRN
nameとnamesの区別がついてないクソPG
2017/05/20(土) 11:05:32.94ID:lbI4YU5N
あっTypeScriptと勘違いしてた
C#じゃ出来なかったわ
すまん
C#じゃ出来なかったわ
すまん
2017/05/20(土) 11:08:01.58ID:NUOkmiRN
いつどこからアクセスするかわからないプロパティの型を可変にする意味は何?
実際バグ出したいだけだろ?
実際バグ出したいだけだろ?
2017/05/20(土) 12:26:52.90ID:pKHKYg56
静的に型付けされてるメンバーを動的に変更することは出来ないに決まってるねw
逆に出来たら困る
なんか静的に型付けされているってことの意味が分からない人が時々いるよね
型Bと型Cの両方を受け入れるプロパティが欲しいならプロパティーの型を共通のベースクラスAにして、
プロパティの値はプログラマの責任で適切にキャストして使うしかない
あとはBとCの間で相互に暗黙変換できるようにするとか
逆に出来たら困る
なんか静的に型付けされているってことの意味が分からない人が時々いるよね
型Bと型Cの両方を受け入れるプロパティが欲しいならプロパティーの型を共通のベースクラスAにして、
プロパティの値はプログラマの責任で適切にキャストして使うしかない
あとはBとCの間で相互に暗黙変換できるようにするとか
2017/05/20(土) 12:28:59.33ID:Lw3rlvDI
初心者は制約があるより自由にかけるほうが良いと思う時期があるものさ
問題があった時にどこからでもさわれたほうが対処しやすいからフィールドは全部publicにしたほうがいいとかね
問題があった時にどこからでもさわれたほうが対処しやすいからフィールドは全部publicにしたほうがいいとかね
2017/05/20(土) 17:55:46.01ID:lhYW/664
ふらっとでやろう
90デフォルトの名無しさん
2017/05/20(土) 22:16:05.31ID:tNlWtPh8 class A
{
public int i;
public virtual void storeNumber(int arg){ i = arg; }
}
class B : A
{
public new int i;
public override void storeNumber(int arg) {
base.storeNumber(arg);
i = arg; }
}
A typeA = new B();
typeA.storeNumber(1);
System.Console.WriteLine(typeA.i); //1
B typeB = (B)typeA;
System.Console.WriteLine(typeB.i); //1
typeB.storeNumber(2);
System.Console.WriteLine(typeA.i); //2
System.Console.WriteLine(typeB.i); //2
new キーワードのメンバは変数の型で参照先が決まると書いてあったんですが
A型の変数から呼び出しても、オーバーライドしたクラスBのメソッドから代入すれば
new が付いてるint i でも値を代入できるということでいいんでしょうか?
{
public int i;
public virtual void storeNumber(int arg){ i = arg; }
}
class B : A
{
public new int i;
public override void storeNumber(int arg) {
base.storeNumber(arg);
i = arg; }
}
A typeA = new B();
typeA.storeNumber(1);
System.Console.WriteLine(typeA.i); //1
B typeB = (B)typeA;
System.Console.WriteLine(typeB.i); //1
typeB.storeNumber(2);
System.Console.WriteLine(typeA.i); //2
System.Console.WriteLine(typeB.i); //2
new キーワードのメンバは変数の型で参照先が決まると書いてあったんですが
A型の変数から呼び出しても、オーバーライドしたクラスBのメソッドから代入すれば
new が付いてるint i でも値を代入できるということでいいんでしょうか?
2017/05/20(土) 22:22:56.23ID:spqPzklw
いまいち言いたいことは分からんがそうだよ
92デフォルトの名無しさん
2017/05/20(土) 22:49:49.46ID:tNlWtPh82017/05/20(土) 23:36:54.63ID:PmwbqNDX
隠蔽した本人から隠蔽後のメンバーじゃなくて
隠蔽したはずのベースクラスのメンバーが見えるなら何のための隠蔽よww
まあでも、どうせ隠蔽なんてまず使わないw
俺が使ったのはたぶんWindows Formのコントロールをカスタマイズするときに
virtualになってないメンバーを苦し紛れになんちゃってオーバーライドする時ぐらいだ
隠蔽したはずのベースクラスのメンバーが見えるなら何のための隠蔽よww
まあでも、どうせ隠蔽なんてまず使わないw
俺が使ったのはたぶんWindows Formのコントロールをカスタマイズするときに
virtualになってないメンバーを苦し紛れになんちゃってオーバーライドする時ぐらいだ
2017/05/20(土) 23:56:17.91ID:/WJez+wG
隠蔽は後から他の奴が基底クラスに同一シグネチャのメンバを追加しやがったときに
派生クラスが壊れないようにするための仕様だよ
積極的に使うものではない
当時のMSは極度の互換性パラノイアに陥っていたため、C#はバージョニングに関しては異常に神経質設計されている
派生クラスが壊れないようにするための仕様だよ
積極的に使うものではない
当時のMSは極度の互換性パラノイアに陥っていたため、C#はバージョニングに関しては異常に神経質設計されている
2017/05/23(火) 12:03:34.57ID:+V9bC4xn
ヌル許容のdatetimeだとyear関数とか使えないんですか?
入力必須じゃない項目なので困っています。
入力必須じゃない項目なので困っています。
2017/05/23(火) 12:15:28.78ID:jI6oRZ6H
>>95
dt?.Year
dt?.Year
2017/05/23(火) 12:17:58.62ID:F7+6VHDt
ヌル許容のdatetimeってわからない。.NETのは構造体なのに
2017/05/23(火) 12:21:51.82ID:3W0XlzKr
大分前からヌルが基本的に無いintとかにヌル入れられるヌル許容型ってのがあるが。。。
int? x = 123;
int? y = null;
int? x = 123;
int? y = null;
2017/05/23(火) 13:22:43.56ID:edjbow2J
100デフォルトの名無しさん
2017/05/23(火) 14:04:03.15ID:A3vGR0ii stringですら?付けてstring?にしようという時代に
細かいことをごちゃごちゃと
細かいことをごちゃごちゃと
101デフォルトの名無しさん
2017/05/23(火) 17:45:15.21ID:PJIONmxy stringは参照型だから元からヌル許容してたのに、なぜヌル許容型をわざわざ?
浦島太郎で申し訳ないが説明頼む。
浦島太郎で申し訳ないが説明頼む。
102デフォルトの名無しさん
2017/05/23(火) 18:27:41.35ID:Ph34uzkO103デフォルトの名無しさん
2017/05/23(火) 18:33:56.97ID:LMlAaHk/ https://gist.github.com/olmobrutall/31d2abafe0b21b017d56
これだろ
string?じゃなくて、nullを許容しないstring!を導入したらどうか?という話
stringをstring!に変換しようとしたときにコンパイラがnullチェックを入れればいいだけだから悪くないアイデアだとと思う
これだろ
string?じゃなくて、nullを許容しないstring!を導入したらどうか?という話
stringをstring!に変換しようとしたときにコンパイラがnullチェックを入れればいいだけだから悪くないアイデアだとと思う
104デフォルトの名無しさん
2017/05/23(火) 18:49:06.30ID:UZ2qE6DF105デフォルトの名無しさん
2017/05/23(火) 18:52:36.71ID:yWN+qtCg106デフォルトの名無しさん
2017/05/23(火) 18:53:40.67ID:LMlAaHk/ >>104
そうじゃなくて逆にnon-nullableが欲しいというのが趣旨だよ
で102で紹介されてるstring?の案は「いっそ参照型もデフォルトでnull非許容にしようぜ」という超過激なトンデモ案
そうじゃなくて逆にnon-nullableが欲しいというのが趣旨だよ
で102で紹介されてるstring?の案は「いっそ参照型もデフォルトでnull非許容にしようぜ」という超過激なトンデモ案
107デフォルトの名無しさん
2017/05/23(火) 18:57:42.54ID:HT5KxiNP 是非そうすべきだ
108デフォルトの名無しさん
2017/05/23(火) 19:06:32.73ID:X2XHKUCb TypeScriptがそういう風に仕様変更されたけどさすがにC#には不可能でしょ
TypeScriptとは違って過去の資産があるし書捨てプロジェクトばかりじゃないんだから
やるならstring!しかないけど!だらけでソースが見苦しくなるのが難点だな
TypeScriptとは違って過去の資産があるし書捨てプロジェクトばかりじゃないんだから
やるならstring!しかないけど!だらけでソースが見苦しくなるのが難点だな
109デフォルトの名無しさん
2017/05/23(火) 19:11:34.18ID:J4QCEXrr110デフォルトの名無しさん
2017/05/23(火) 19:13:26.09ID:HT5KxiNP いつまでもVBを引きずって瞑想していたMicrosoftとは思えないな
ヘジたんは偉大だ
ヘジたんは偉大だ
111デフォルトの名無しさん
2017/05/23(火) 19:19:42.67ID:QProx2es112デフォルトの名無しさん
2017/05/23(火) 19:23:28.74ID:SHq3YOvL またnullの話w
null非許容が欲しいなんて問題の原因を取り違えているだけであって、
そんなもの導入してもnull例外が初期化忘れに置き換わるだけだっていう
簡単な事実が分からんアホが多すぎで呆れるよ
null非許容が欲しいなんて問題の原因を取り違えているだけであって、
そんなもの導入してもnull例外が初期化忘れに置き換わるだけだっていう
簡単な事実が分からんアホが多すぎで呆れるよ
113デフォルトの名無しさん
2017/05/23(火) 19:25:29.82ID:5hEoQuZK114デフォルトの名無しさん
2017/05/23(火) 19:27:51.33ID:5hEoQuZK >>112
そこまで単純化されたら大助かり。
そこまで単純化されたら大助かり。
115デフォルトの名無しさん
2017/05/23(火) 20:14:30.69ID:AM37HZZ1116デフォルトの名無しさん
2017/05/23(火) 20:31:14.27ID:HT5KxiNP またJavaに大きな差を付けてしまうな
あとはエコシステムも充実させてくれ
あとはエコシステムも充実させてくれ
117デフォルトの名無しさん
2017/05/23(火) 20:57:28.99ID:Swob9G4V >>112
null結合演算子も超嫌ってたしね〜君
null結合演算子も超嫌ってたしね〜君
118デフォルトの名無しさん
2017/05/23(火) 21:35:09.71ID:SHq3YOvL >>117
そっちは何も問題ない
そっちは何も問題ない
119デフォルトの名無しさん
2017/05/23(火) 21:48:39.96ID:VdgHftUV varの話してもいいですか?
120デフォルトの名無しさん
2017/05/23(火) 22:57:25.70ID:MQkBzlkR 命が惜しくないならどうぞ
121デフォルトの名無しさん
2017/05/24(水) 02:20:31.18ID:IRME+Rk/ TypeScriptとかSwiftとかKotlinの先例があるのにnull非許容の意味が理解できない>>112 みたいのが社会の進歩を妨げてるんだよなぁ
nullの代わりに空文字を入れることになるみたいな意味不明なことを言ってるやつもいたし、英語の議論が読めないにしても他の言語の例ぐらいは確認してからしゃべってほしい
nullの代わりに空文字を入れることになるみたいな意味不明なことを言ってるやつもいたし、英語の議論が読めないにしても他の言語の例ぐらいは確認してからしゃべってほしい
122デフォルトの名無しさん
2017/05/24(水) 02:27:23.98ID:k5coCCFX またしょうもないのが現れたな
意味も意図も理解できるが、意図した通りの機能は発揮しないと言ってるんだけど
だからその「先例」とやらで現に意図した通り間違って自分の足を撃たない機能を発揮してるのかと。
してやしねえよw
意味も意図も理解できるが、意図した通りの機能は発揮しないと言ってるんだけど
だからその「先例」とやらで現に意図した通り間違って自分の足を撃たない機能を発揮してるのかと。
してやしねえよw
123デフォルトの名無しさん
2017/05/24(水) 02:32:41.30ID:k5coCCFX 要するに、nullを許容することに起因する問題が存在するので
nullを許容しなければそれは解決するのだ、なんていうのはただの愚か者の錯覚であって、
そんなものは問題Aをより発見が困難な問題Bに置き換えることにしかならない
nullを許容しなければそれは解決するのだ、なんていうのはただの愚か者の錯覚であって、
そんなものは問題Aをより発見が困難な問題Bに置き換えることにしかならない
124デフォルトの名無しさん
2017/05/24(水) 03:32:06.26ID:5B8IqCyj nullが生まれた背景と現在のnullの問題点 ― null参照問題(前編)
http://www.buildinsider.net/column/iwanaga-nobuyuki/011
C#でのnull参照問題への取り組み ― null参照問題(後編)
http://www.buildinsider.net/column/iwanaga-nobuyuki/012
読もうな
http://www.buildinsider.net/column/iwanaga-nobuyuki/011
C#でのnull参照問題への取り組み ― null参照問題(後編)
http://www.buildinsider.net/column/iwanaga-nobuyuki/012
読もうな
125デフォルトの名無しさん
2017/05/24(水) 04:54:25.97ID:f/qUGphe nullpoを許容
126デフォルトの名無しさん
2017/05/24(水) 05:52:55.01ID:SWY45HoB ポインタじゃなくていいところでは(nullを許容しない)参照をつかう
C++では当たり前にやっていた事でその威力は皆が知っていた
C++から派生したC#やJavaがこれを捨て去った意味が逆にわからない
C#はあるべき姿に戻ろうとしているだけ
C++では当たり前にやっていた事でその威力は皆が知っていた
C++から派生したC#やJavaがこれを捨て去った意味が逆にわからない
C#はあるべき姿に戻ろうとしているだけ
127デフォルトの名無しさん
2017/05/24(水) 07:19:29.94ID:OFlbMgow >>122-123
レス古事記乙
レス古事記乙
128デフォルトの名無しさん
2017/05/24(水) 08:19:55.11ID:gnZYpDQN Int f(int x) ならxで例えば小数の事を考えなくて済む。
同じく f(hogeClass y) でyがnullの可能性を
考えなくて済むならそのほうが良いだろう。
そう思わないならプログラマーは
早々にやめたほうが良いと思うの。
nullチェック忘れてヌルポだすコードを
量産するバカが減るのは助かる。
同じく f(hogeClass y) でyがnullの可能性を
考えなくて済むならそのほうが良いだろう。
そう思わないならプログラマーは
早々にやめたほうが良いと思うの。
nullチェック忘れてヌルポだすコードを
量産するバカが減るのは助かる。
129デフォルトの名無しさん
2017/05/24(水) 08:56:56.79ID:2RBb7Y8v なんで馬鹿は馬鹿を説得しようとするんだろう?
馬鹿は馬鹿なんだから自分が馬鹿だなんて認める分けねえだろ
だからお前も馬鹿だと言うんだ
馬鹿は死ね
馬鹿は馬鹿なんだから自分が馬鹿だなんて認める分けねえだろ
だからお前も馬鹿だと言うんだ
馬鹿は死ね
130デフォルトの名無しさん
2017/05/24(水) 09:20:10.02ID:CWb9U0nP131デフォルトの名無しさん
2017/05/24(水) 09:38:54.50ID:dFpq1SmP ついでにundefinedも導入してほしい
132デフォルトの名無しさん
2017/05/24(水) 10:29:24.60ID:4XHCBZ7H ぬるぽ
133デフォルトの名無しさん
2017/05/24(水) 10:36:49.92ID:0w0qPph2 どうしてnull非許容型を導入するって話をnullの根絶なんて話に持っていこうとするんだろうね?
134デフォルトの名無しさん
2017/05/24(水) 10:46:19.73ID:xvW9RZ2K >>128
間違ってるよその発想
その発想って>>1254の記事にもあるけど、メソッドが引数にnullを受け入れる
確信もないのに意図してnullを渡すプログラマなんかいません。
nullを受け入れないメソッドにnullを渡してしまう事態が起こるのは、
バグによってプログラマの意図に反してそうなるからだよ。当たり前でしょ。
だからnull非許容型を導入したところで、「プログラマの意図の反して変数の能がnullであるバグ」が
「プログラマの意図に反して変数の値が不適切であるバグ」に置き換わるだけ。
そして後者は前者より発見が困難な分、悪性度はより高い。
こんな簡単なことが分からん奴ってアホだろほんっと。
間違ってるよその発想
その発想って>>1254の記事にもあるけど、メソッドが引数にnullを受け入れる
確信もないのに意図してnullを渡すプログラマなんかいません。
nullを受け入れないメソッドにnullを渡してしまう事態が起こるのは、
バグによってプログラマの意図に反してそうなるからだよ。当たり前でしょ。
だからnull非許容型を導入したところで、「プログラマの意図の反して変数の能がnullであるバグ」が
「プログラマの意図に反して変数の値が不適切であるバグ」に置き換わるだけ。
そして後者は前者より発見が困難な分、悪性度はより高い。
こんな簡単なことが分からん奴ってアホだろほんっと。
135デフォルトの名無しさん
2017/05/24(水) 11:09:16.07ID:PQqcAP89136デフォルトの名無しさん
2017/05/24(水) 11:32:23.53ID:fJwJIEtw 変数がnullである は 変数が不適切である に含まれる
変数が不適切なケースのうち変数がnullであるケースを言語仕様として排除できるって話じゃないの?
確かにこのnullのケースを排除しても他に不適切なケースがある設計なら完璧な対策ではないだろうけど有用なケースも認められるなら検討の価値はあるんじゃないかな?
変数が不適切なケースのうち変数がnullであるケースを言語仕様として排除できるって話じゃないの?
確かにこのnullのケースを排除しても他に不適切なケースがある設計なら完璧な対策ではないだろうけど有用なケースも認められるなら検討の価値はあるんじゃないかな?
137デフォルトの名無しさん
2017/05/24(水) 11:40:03.52ID:lmoDZ3Fc138デフォルトの名無しさん
2017/05/24(水) 12:07:37.15ID:xvW9RZ2K >>137
何を言ってるのか意味が分からんね
何を言ってるのか意味が分からんね
139デフォルトの名無しさん
2017/05/24(水) 12:11:17.02ID:QZczTL/V >>138
お前がな
お前がな
140デフォルトの名無しさん
2017/05/24(水) 12:23:14.46ID:Em+sDdPu 全部Object型でやってろってのと変わらんがな
141デフォルトの名無しさん
2017/05/24(水) 15:17:32.97ID:IRME+Rk/ >>134
ただの理解不足。具体的にTypeScriptとかのコードでその状況を示して見てよ。
多分、nullが入れられなくなるので初期値に別に値(stringならstring.Empty的なもの)を入れるもんだと思ってるんだろう。
それは間違った考え
・nullの考慮忘れ
・過剰なnullチェック
というのを防ぐのが目的
<従来>
void Hoge(string arg){ 〜 }
//listが要素を持っていなければfirstはnull
string first = list.FirstOrDefault();
//何らかの処理
//nullの考慮忘れ。実行時例外
Hoge(first);
<null非許容型>
//Hogeの引数はnull非許容
void Hoge(string! arg){ 〜 }
//ここは「何らかの処理」の都合でnull許容とする
string first = list.FirstOrDefault();
//何らかの処理
//nullの考慮忘れ。コンパイルエラー
Hoge(first);
ただの理解不足。具体的にTypeScriptとかのコードでその状況を示して見てよ。
多分、nullが入れられなくなるので初期値に別に値(stringならstring.Empty的なもの)を入れるもんだと思ってるんだろう。
それは間違った考え
・nullの考慮忘れ
・過剰なnullチェック
というのを防ぐのが目的
<従来>
void Hoge(string arg){ 〜 }
//listが要素を持っていなければfirstはnull
string first = list.FirstOrDefault();
//何らかの処理
//nullの考慮忘れ。実行時例外
Hoge(first);
<null非許容型>
//Hogeの引数はnull非許容
void Hoge(string! arg){ 〜 }
//ここは「何らかの処理」の都合でnull許容とする
string first = list.FirstOrDefault();
//何らかの処理
//nullの考慮忘れ。コンパイルエラー
Hoge(first);
142デフォルトの名無しさん
2017/05/24(水) 15:28:42.02ID:9Gf4SnqN 実行時例外でるならそれでいいじゃんw
143デフォルトの名無しさん
2017/05/24(水) 15:34:09.87ID:xvW9RZ2K >>141
具体的で素晴らしい
確かにその例で示されているような「nullの考慮忘れ」を防ぐ一定の効果は
期待できることは認める。
でもそれ、よく考えると机上の空論でしょ。
普通のプログラマならある変数やコレクションが仕様上nullを持ちうるかどうかは
常に気にしながらコーディングするので、そこに例示されている「nullの考慮忘れ」は
実際にはそんなにありがちな問題ではないと思う。
ありがちなのは、その例でいえばリストに値を入れる段階で
プログラマの意図に反してnullが混入する問題だよね。
具体的で素晴らしい
確かにその例で示されているような「nullの考慮忘れ」を防ぐ一定の効果は
期待できることは認める。
でもそれ、よく考えると机上の空論でしょ。
普通のプログラマならある変数やコレクションが仕様上nullを持ちうるかどうかは
常に気にしながらコーディングするので、そこに例示されている「nullの考慮忘れ」は
実際にはそんなにありがちな問題ではないと思う。
ありがちなのは、その例でいえばリストに値を入れる段階で
プログラマの意図に反してnullが混入する問題だよね。
144デフォルトの名無しさん
2017/05/24(水) 15:55:01.74ID:fJwJIEtw 実行されるまで気づかないならインタプリタと一緒じゃん
145デフォルトの名無しさん
2017/05/24(水) 16:07:24.68ID:IRME+Rk/ >>143
>ありがちな問題ではない
ありがちかどうかではなく、その機能を導入するメリットとデメリットの釣り合い。
エラーが未然に防げたり、記述が簡潔で見やすくなるならメリット。
文法が複雑になったり、別のバグの原因になったり、動作が遅くなったり、実装に手間がかかるならデメリット。
現状は「新バージョンではnull許容はstring?にしろよ」から「文法は変更せずフロー解析でどうにかしようぜ」までいろんなアイデアがある
個人的には、標準ライブラリの頭nullチェックをしてArgumentNullExceptionを出すようにしているところがいらなくなってライブラリ作者にはメリットがデカそうかなとはおもってる
null入れてArgumentNullExceptionがでるテストも書かなくて良くなる
>ありがちな問題ではない
ありがちかどうかではなく、その機能を導入するメリットとデメリットの釣り合い。
エラーが未然に防げたり、記述が簡潔で見やすくなるならメリット。
文法が複雑になったり、別のバグの原因になったり、動作が遅くなったり、実装に手間がかかるならデメリット。
現状は「新バージョンではnull許容はstring?にしろよ」から「文法は変更せずフロー解析でどうにかしようぜ」までいろんなアイデアがある
個人的には、標準ライブラリの頭nullチェックをしてArgumentNullExceptionを出すようにしているところがいらなくなってライブラリ作者にはメリットがデカそうかなとはおもってる
null入れてArgumentNullExceptionがでるテストも書かなくて良くなる
146デフォルトの名無しさん
2017/05/24(水) 16:22:43.45ID:IRME+Rk/ >>143
>リストに値を入れる段階でプログラマの意図に反してnullが混入する
nullを含まないリストならList<null非許容型>にすれば意図に反してnullが混入しうる状況ではエラーや警告にしてくれるようになる
List<null許容>から変えられないなら、取り出す時にnull非許容にすればその場でエラーが確認できる
フロー解析で検出が無理な状況も当然存在するけど、多分こんなことをするのかな
<現状>
string A(){
string a = Hoge();//Hogeの戻り値はnull
別の処理
return a;//意図せずnullを返してしまう
}
これだと、別の処理中にぬるぽになったり、戻り値がnullになるかも。
Hogeの戻り値が不適切なのに、別の処理中でエラーが起こるのでスタックトレースとかではバグが探しにくい。
<null非許容>
string! A(){
string! a = Hoge().ToNull非許容; //null非許容に変換
別の処理
return a;
}
これが以下のようにコンパイルで展開される
string A(){
string a = Hoge();
if( a == null)throw new Null非許容型変換例外();
別の処理
return a;
}
例外発生箇所が確定するので、バグの位置がすぐにわかる
この例だとnull比較のコストが入ってるけど、俺の知識が浅いだけなのでもっとうまいやり方も多分あると思う
>リストに値を入れる段階でプログラマの意図に反してnullが混入する
nullを含まないリストならList<null非許容型>にすれば意図に反してnullが混入しうる状況ではエラーや警告にしてくれるようになる
List<null許容>から変えられないなら、取り出す時にnull非許容にすればその場でエラーが確認できる
フロー解析で検出が無理な状況も当然存在するけど、多分こんなことをするのかな
<現状>
string A(){
string a = Hoge();//Hogeの戻り値はnull
別の処理
return a;//意図せずnullを返してしまう
}
これだと、別の処理中にぬるぽになったり、戻り値がnullになるかも。
Hogeの戻り値が不適切なのに、別の処理中でエラーが起こるのでスタックトレースとかではバグが探しにくい。
<null非許容>
string! A(){
string! a = Hoge().ToNull非許容; //null非許容に変換
別の処理
return a;
}
これが以下のようにコンパイルで展開される
string A(){
string a = Hoge();
if( a == null)throw new Null非許容型変換例外();
別の処理
return a;
}
例外発生箇所が確定するので、バグの位置がすぐにわかる
この例だとnull比較のコストが入ってるけど、俺の知識が浅いだけなのでもっとうまいやり方も多分あると思う
147デフォルトの名無しさん
2017/05/24(水) 17:14:59.24ID:rw+7fc+A そうだねーPHPから出てこないでね
148デフォルトの名無しさん
2017/05/24(水) 18:01:59.69ID:9Gf4SnqN null許容にするメリットを実感できないんだろうな
149デフォルトの名無しさん
2017/05/24(水) 19:54:58.94ID:wmLMN2ht 使えとは言ってないのにな
親でも殺されたか?
ゴミムシの親なんか区別がつかないだろうが
親でも殺されたか?
ゴミムシの親なんか区別がつかないだろうが
150デフォルトの名無しさん
2017/05/24(水) 23:36:34.45ID:a2/m6a7T151デフォルトの名無しさん
2017/05/25(木) 01:11:21.81ID:lqQtAs3j >>150
nullチェックはNull許容型からNull非許容型にする際の話
nullの可能性があるならタイプマッチとかで消すほうが素直だけど、kotlinとかでは例外を投げる変換を用意してるみたい
修正されてない古いライブラリとかだとnullにはならないけどnull許容型みたいのが存在せざるを得ないので、そういう機能もほしいということじゃないかな
nullチェックはNull許容型からNull非許容型にする際の話
nullの可能性があるならタイプマッチとかで消すほうが素直だけど、kotlinとかでは例外を投げる変換を用意してるみたい
修正されてない古いライブラリとかだとnullにはならないけどnull許容型みたいのが存在せざるを得ないので、そういう機能もほしいということじゃないかな
152デフォルトの名無しさん
2017/05/25(木) 03:16:43.36ID:ezJU1k3U 今のところ超過激なトンデモ案が優勢なのかな?
採用されたら仕事が捗りそうなので、とても期待しているww
採用されたら仕事が捗りそうなので、とても期待しているww
153デフォルトの名無しさん
2017/05/25(木) 03:37:28.50ID:XcDeaOpm null非許容型が追加されるならconstメソッドも
追加してほしいもんだ。
追加してほしいもんだ。
154デフォルトの名無しさん
2017/05/25(木) 03:38:41.10ID:K8EeLAYg いまだに2.0とか3.0やってる化石には全く関係のない話だから
足引っ張らないで欲しいわ
足引っ張らないで欲しいわ
155デフォルトの名無しさん
2017/05/25(木) 11:11:39.41ID:raX4nowj Linqすら使えない自分の職場の悪口は止めてくれないか
156デフォルトの名無しさん
2017/05/25(木) 11:17:54.20ID:TdXNYUaP 職場?お遊戯会の間違いだろ
157デフォルトの名無しさん
2017/05/25(木) 11:41:19.09ID:OZ9w4Yf7 ロック問題で、価値ないつまらんネタ書いている奴こっち来い
適当にあしらってやるよ
適当にあしらってやるよ
158デフォルトの名無しさん
2017/05/25(木) 11:44:07.67ID:raX4nowj >>157
向こうに行ってやれよw
向こうに行ってやれよw
159デフォルトの名無しさん
2017/05/25(木) 11:50:35.84ID:OZ9w4Yf7 最近は、こっちではnull非許容ネタやってるのか・・・
これ導入されたらガベージコレクタの性能落ちたりしないかな
4G越えのでかいツリー構造とか作っていると、参照つなぎ替えだけで色々やばいことが起こるんだよな
できるかぎり、用のないフィールドに参照ぶら下げたくないと最近しつこくnull入れてたりするんだが。
あと、event関係、弱参照で全部作り直さないとヤバないかな。
Taskとかと相性悪くて簡単にメモリーリーク起こすし、 WeakEventManagerでWPFは変態回避してただでさえコード変態状態だし。
VMごと作り直さないと色々噴き出しそうだ
これ導入されたらガベージコレクタの性能落ちたりしないかな
4G越えのでかいツリー構造とか作っていると、参照つなぎ替えだけで色々やばいことが起こるんだよな
できるかぎり、用のないフィールドに参照ぶら下げたくないと最近しつこくnull入れてたりするんだが。
あと、event関係、弱参照で全部作り直さないとヤバないかな。
Taskとかと相性悪くて簡単にメモリーリーク起こすし、 WeakEventManagerでWPFは変態回避してただでさえコード変態状態だし。
VMごと作り直さないと色々噴き出しそうだ
160デフォルトの名無しさん
2017/05/25(木) 11:51:39.74ID:OZ9w4Yf7 >>158
ここはキチガイの建てたゴミ箱、ちょうどいいんだよ。
ここはキチガイの建てたゴミ箱、ちょうどいいんだよ。
161デフォルトの名無しさん
2017/05/25(木) 12:35:35.78ID:KYr+IXo2 >>159
そんな場合はnull許容型を今迄通り使えばよろし
そんな場合はnull許容型を今迄通り使えばよろし
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本はドイツと違い反省せず」…中国外相、独外相に対日批判 台湾問題で理解求める [少考さん★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 【裁判】保育所に侵入…園児の下着盗んだ窃盗などの罪 41歳の男に有罪判決 岡山地裁 [nita★]
- 高市「日本版DOGEをつくる!無駄金削減するぞ!」自らの収支報告書すらまとも作れないコイツが削減できるものと言ったら? [472617201]
- 愛国者「大東亜戦争はアジア解放のための戦い」 [834922174]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑 [931948549]
- 1ドル156円、円安 [943688309]
- 日本人のおでん離れ。作る回数減った30.1%🍢 [256556981]
