C#, C♯, C#相談室 P ..
[2ch|▼Menu]
88:デフォルトの名無しさん
16/11/09 04:07:40.94 pYqjQFAT.net
ファンクションキーのイベント発生に見れるセンスのなさ
こんな書き方はどんだけ糞か? ネーミングのセンスがまるでない。
PreviewKeyDown="Window_PreviewKeyDown"
これがセンスのいいなまえ
FunctionKey = "KeyDown"
もしくは
KeyDown="FunctionKey"
KeyDown="F1"
など

89:デフォルトの名無しさん
16/11/09 04:26:59.85 pYqjQFAT.net
プロパティ値の継承に見る手抜き
 プロパティ値が割り当てられていない子要素がある場合、プロパティ値の設定がある
最も近い親要素の値を割り当てる。W 
まあこういう問題が発生するのも、手抜きが手抜きを生むことの良い例だ。ボタンコン
トロールひとつを表すのに手近な要素をかき集めて作りあげるという手抜きをしたこと
で、イベントがうまく取れないという問題が発生した。そこでイベントルーティング
という新たな手抜き概念を導出してしかもプロパティ継承という誤魔化しまでしなくて
はならなくなった。
 トンネル、バブル、ダイレクト イベント一つにこんだけ複雑なことをする羽目にな
ったのも、最初に行ったわずかな手抜きが原因なのだ。

90:デフォルトの名無しさん
16/11/09 04:29:27.99 9orsc4MQ.net
>>86
>>87
業務で使う場合はViewとViewModelをきっちり分けるよ
なのでバインディング式は下記のように
<TextBox Text={Binding ResultMessage} />
シンプルになる。
View内の他の要素の値をバインドするなんて
滅多にないから(デバッグ時くらい?)、{Binding ElementName=slider1, Path=Value}
みたいな冗長な書き方はいいと思う。
装飾系も普通はResourceDictionaryにまとめる。TextBoxタグ内にゴテゴテ書いたりしない
<Window.Resources>
 <ResourceDictionary>
  <Style TargetType="TextBox">
   <Setter Property="VerticalContentAlignment" Value="Center" />
   <Setter Property="HorizontalAlignment" Value="Left" />
   <Setter Property="Foreground" Value="{StaticResource GlobalForeground}" />
  </Style>
 </ResourceDictionary>
</Window.Resources>
キー押下時のイベント発生もViewはCommandをViewModelに発行するだけだね
<Window.InputBindings>
 <KeyBinding Gesture="Ctrl+T" Command="{Binding MenuOpenCommand}" />
</Window.InputBindings>
イベント発生時の処理内容をxaml.csに記述したりはしない

91:デフォルトの名無しさん
16/11/09 04:36:52.64 pYqjQFAT.net
データバインディングに見る手抜き
「WPF のデータバインディングはこれだけで 1 冊の本が書けるほど面倒です。」という
関係者。たったこれだけで関係者が本を書いて10年は食える飯のタネになる。W
WPFにおけるデータバインディングの重要性と可能性はこの限りにおいては非常に成功
している。テーマとしては食いつきがいい。「これさえマスターすれば、あとは
データを流し込むだけで自動的に表示してくれる」
魅力的なのだ。
食いつきがよくて、複雑怪奇な場合には関係者は情報を小出しにすればかなり長期に
わたってよい飯の種になる。

92:デフォルトの名無しさん
16/11/09 04:37:26.02 pYqjQFAT.net
さあ寝よう。おやすみ

93:デフォルトの名無しさん
16/11/09 07:27:40.65 ccPtaul1.net
>>91
そこら辺が問題だと思うのなら、全て解決したUWPに移行したら良いんじゃないのかな?
x:Bindで事前バインディングで厳密に型チェックヤるし、イベントバインディングも出来るからな
つか、アンタの言い分はイソップ童話の酸っぱいブドウそのものです

94:デフォルトの名無しさん
16/11/09 07:54:15.04 TlbuxVnv.net
個人的にUWPに偏見を抱いている理由はOneNoteが糞なせい
OneNoteの糞さはUWP無関係だと思うが、自分の観測範囲にUWPの実用サンプルがそれしかないので
どうしても印象が引っ張られる

95:デフォルトの名無しさん
16/11/09 09:17:12.31 KnEUpDo2.net
XAMLに親を……

96:デフォルトの名無しさん
16/11/09 09:17:36.57 SotHgA9V.net
>>87
KeyDownってイベントは別にあるぞ
>>88
もはや言いがかりのレベルだな

97:デフォルトの名無しさん
16/11/09 12:09:48.16 pYqjQFAT.net
>89
どんな糞言語でも本質をよく見極めてセンス良く使う人はいるものだよ。
しかしそこに到達するまでにどんだけ時間がかかるというのだ。俺なんかわけわからん
から右往左往するばかりだよ。
せめてBlendをまともに作ってくれれば、それなりにUIの問題は解決するのにな。
Blendも糞だろ。W 最近のは使ってないからわからんが、、、

98:デフォルトの名無しさん
16/11/09 12:10:37.11 pYqjQFAT.net
>そこら辺が問題だと思うのなら、全て解決したUWPに移行したら良いんじゃないのかな?
>x:Bindで事前バインディングで厳密に型チェックヤるし、イベントバインディングも出来るからな
今度はUWPかよ。小出しにするなー。つまりWPFは糞だったと認めるんだな。W

99:デフォルトの名無しさん
16/11/09 12:12:21.25 C35LXred.net
UWPは互換性取るために使えない機能が多すぎてFormやWPFと比較する気にもなれない

100:デフォルトの名無しさん
16/11/09 13:18:01.59 imHVERPt.net
で?。W

101:デフォルトの名無しさん
16/11/09 13:24:22.96 13V/HCY3.net
またストアアプリみたいにいつ梯子外されるかわからないUWPに手を出す人は
よっぽどお勉強好きなんだろうなw
仕事ならしょうがないけど自分の時間使って勉強する気にはなれんわ

102:デフォルトの名無しさん
16/11/09 13:44:46.30 U6OuotlL.net
WPFに手だしちゃった人ならいけるでしょ

103:デフォルトの名無しさん
16/11/09 16:05:04.67 L45XBX69.net
>>87
コードビハインドにイベント書くことはおすすめされないし、そもそもPreviewKeyDownってFunctionキーのイベントを受け取るためのイベントじゃないぞ?
WinFormsにも同じ名前のイベントあったじゃん
WPF以前の根本的な能力がかけてるんじゃね?

104:デフォルトの名無しさん
16/11/09 19:12:41.31 UPD5ANvk.net
UWPって多重起動できるんですか?

105:デフォルトの名無しさん
16/11/09 19:23:20.90 c1gJ8Ir2.net
Windows10のPCは買ったけど、予備にした古いPCで動かす事を考えたらUWPは使いたくないな
まだ動く7とXPのPCがあるからな

106:デフォルトの名無しさん
16/11/09 20:02:19.12 xK7OwzcU.net
WPFやってないんだが、そもそもXAMLは人間が見る必要のあるものなのか?
VSのデザイナやBlendがダメすぎるのか?
フォームでさえ、.Designerの中身なんてほぼ見る事ないのに
人間が生のXAML見たり編集したりしないとダメならそら普及しないなと思うが

107:デフォルトの名無しさん
16/11/09 20:09:14.52 y+VOBp5j.net
XAMLはなにもかもXML(?)で記述できるようにしようとして失敗してる感じ
レイアウトだけにしとけばいいのに

108:デフォルトの名無しさん
16/11/09 20:09:22.06 knOh/4SR.net
データバインディングが遅いとかいって大量データをなんの工夫もなく描画する画面を引き合いに出す人ってたまにいるけどあれって悪意があってやってるの?

109:デフォルトの名無しさん
16/11/09 21:24:36.59 WmFTPhhE.net
普通、設定ファイルを、人が直接いじったりしない
Godot(ゴドー)などのゲームエンジンでは、IDEの右側にある、
インスペクタービューで、プロパティなど設定する
オブジェクト同士の衝突判定・イベント通知なども、同じ

110:デフォルトの名無しさん
16/11/09 21:25:12.33 TlbuxVnv.net
どこぞのフレームワークで「人間にXMLを書かせるなんて虐待です」って書いてるのがあったけど
ほんとその通り

111:デフォルトの名無しさん
16/11/09 23:41:49.58 7n7DDFeG.net
つうかここってC#+Windowsフォームしかやってないやつばかりなの?
XAMLはそもそもWPFだけのもんじゃないんだが。
Silverlightにも使われていたしUWPにも使われてる。
そしてC#だけじゃなくVBにも使われてる。
つまり、言語や


112:Nラスライブラリなどから分離できるものは分離しようっつーのがXAMLでしょ。 C#/VBとXAMLの関係はJavaScriptとHTMLの関係と似てる。 XAMLを批判してる奴ってほんとにXAMLを理解してんの?



113:デフォルトの名無しさん
16/11/10 00:11:40.20 TlbdJV8L.net
1日で挫折したのにここまで批判できる >>48 はすごい人

114:デフォルトの名無しさん
16/11/10 00:22:28.24 4pFcdHJl.net
JavaScriptとHTMLではなくJavaScriptとJSONの方が近いな
XAMLはただのシリアライズフォーマットの1つでしかない
WPFと関係ない普通のオブジェクトもXAMLにシリアライズできる
そんでXAMLはJSONと違って型とアセンブリの情報を持つ
UIデザインを宣言する手段として考えると書きにくいXAML形式よりシンプルでインテリセンスもよく働くC#コードの方が優れているのは確かだろう
しかしそうではなく可視性と可搬性のある普遍的なシリアライズフォーマットとして考えるとXAMLがXMLを採用したのは自然な帰結と言える
可視性のためにはテキストでなければならない
可搬性と普遍性では対抗馬としてJSONがあるがJSONはシンプルすぎて表現力がちょっと物足りない
となるとXMLは妥当な選択と言っていい
新しい時代に乗り遅れてXMLにしたわけでもないし虐待目的でXMLにしたわけでもない
XAMLの目的に合致するフォーマットではXMLがベストだったというだけの話なんだ

115:デフォルトの名無しさん
16/11/10 00:29:57.49 ApowNrKS.net
wpf使うならelectronでいいや感ある

116:デフォルトの名無しさん
16/11/10 01:16:39.44 Co+DcSGG.net
AndroidStudio使っててもXMLは出来るだけいじりたくないw

117:デフォルトの名無しさん
16/11/10 01:52:09.10 aHkFnxeg.net
>102
ん?
それは考え方に矛盾があるだろ。UIを切り離すのが目的


118:ネら、切り口がシンプルで 綺麗なほうがいい。 例えばスクロールバーと連動して値を表示する場合なんてUI内でまとめて片づけて しまったほうがいい。 ほしいの値だけで、処理側からしたらくだらないイベントなんて見えないほうがいい。 そっちでまとめてやってほしい。



119:デフォルトの名無しさん
16/11/10 01:52:28.80 aHkFnxeg.net
>XAMLを批判してる奴ってほんとにXAMLを理解してんの?
理解できないなから文句を言ってるんだよ。機械が簡単に理解できるからって
人間にそれを押しつけるのは間違い。
XAMLってのは単なるテキスト文書じゃない。プログラム全体から複雑なUIを切り離して
表現するという目的がある。複雑なUIは手打ちで入力するようなものじゃない。
UI={動作、表現、パラメータ、、、、}+窓口
プログラム=>窓口
UIの窓口さんにいえば{、、、}なかはわからなくても大体処理できる。そういう関係
なわけよ。窓口が美人でテキパキしてないとダメだろ。
時々あるんだが、大企業の開発部に電話してるのに田舎のおばちゃんみたいなのが
窓口で
「はあ、田中さんは今日はおらんよ、どっかに出張するからって鞄を下げて出て行った
よ」
みたいな感じな。
XAMLの美人の窓口さんはどこ? ねえ

120:デフォルトの名無しさん
16/11/10 02:08:02.40 CCFq8Qep.net
>>111
批判って言うより、ほとんどいちゃもんだけどな。

121:デフォルトの名無しさん
16/11/10 02:16:50.13 lTw5QLQW.net
長文マンは無駄に下手な比喩ばっか使って文意がわかりづらいな

122:デフォルトの名無しさん
16/11/10 02:20:15.15 aHkFnxeg.net
じゃあ具体的に書いたろか
textBox1.Text = "Hello, World!"
これでいいのに
public class Data
{
public string TextHelloWorld
{
get { return "Hello, World!"; }
}
}
example.xaml
<TextBox Text="{Binding Path=TextHelloWorld}" />
これだもんな。W
XAMLがデータを取りに行ってくれる。一見便利だが、いちいち細かい指示を出して
説明してやらんと分からんやつだから、教えるほうが手間。自分でHello!!て
書いたほうがなんぼかまし。
あれだ、パラダイムシフトだなんだって言ってるが、シフトダウンだよな。

123:デフォルトの名無しさん
16/11/10 02:26:27.64 wdbpo9Rt.net
それXAML側でName="textBox1"と定義してやれば、this.textBox1.Text = "Hello, World!"で済むだろ

124:デフォルトの名無しさん
16/11/10 02:30:19.81 YdauEkQ9.net
WPFとFormを同じXAMLから生成出来ればもっと使い道もあるんだけどな

125:デフォルトの名無しさん
16/11/10 02:31:25.72 aHkFnxeg.net
比喩だとわからんか?
窓口ってのは会社の顔だよ。XAMLの顔はというとBindingだ。ここが窓ぐち。
こいつが田舎もんだから、、、、W

126:デフォルトの名無しさん
16/11/10 02:33:21.09 4pFcdHJl.net
>>122
でもそれってXAML関係ないじゃん
なんでさっきXAMLディスってたの?

127:デフォルトの名無しさん
16/11/10 02:33:22.15 wdbpo9Rt.net
わざとミスしてレスが欲しいのか自分の主張を通したいのかどっちなのよ

128:デフォルトの名無しさん
16/11/10 02:55:22.89 bu4ikKWV.net
>>119
ぇ、それだけじゃXAMLは取りに行かないよ。
Dataクラスからの通知機構は無いの?

129:デフォルトの名無しさん
16/11/10 03:08:35.71 zCCtWAZL.net
>>115,116
?例が適当すぎて言いたいことがわからん
スクロールバーと連動して値を表示するのはバインディングで済むからUIのイベントなんて使わないだろ
UIを切り離すんじゃなくて、VとVMを切り離すのが目的

130:デフォルトの名無しさん
16/11/10 03:17:22.84 zCCtWAZL.net
>>119
バインディングする意味のないソースを出されても
さっき言ったスクロールバーとその値を表示するテキストボックスの例を見ればいいんじゃない?
バインディングを使わないとイベントを利用してそれぞれの値を相互に書き換える必要があって面倒とかそういうの

131:デフォルトの名無しさん
16/11/10 06:37:59.52 B4277xpo.net
XAMLを批判したいけどちゃんと理解してないから筋の通った批判ができない悲しさ

132:デフォルトの名無しさん
16/11/10 07:36:13.26 o8sMendu.net
>>126
例えばGridSplitter付きのパネルの開閉をアニメ付きでヤるとしたら、xamlじゃとても書けないけど
VMにやらせる仕事じゃないって場合とか、BringToViewなんかもViewで完結させるべき仕事だね
ビヘイビアやトリガーアクション使ってもいいけど無理やり突っ込むこともない

133:デフォルトの名無しさん
16/11/10 07:51:19.71 aHkFnxeg.net
<TextBox Name="Text1" Height="23" Width="70" Margin="5"
HorizontalAlignment="Left" VerticalAlignment="Top"
Text="Button" />
<Button Name="btn1" Content="{Binding Text1.Text}" Height="23" Width="70"
Margin="5,35,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"
Click="Button_Click"/>
ちっともBindingせんがーーー。W
エラーもでんし。

134:デフォルトの名無しさん
16/11/10 07:53:05.39 aHkFnxeg.net
>128
このバインドの書き方のどこが筋が通ってないんや?

135:デフォルトの名無しさん
16/11/10 08:11:55.57 aHkFnxeg.net
this.DataContext =this;
 そうだこれがぬけてると検索場所が特定できんのだ。
私は私ですから私を検索してくだされ。
えっ、これでもやっぱりだめ。

136:デフォルトの名無しさん
16/11/10 08:24:57.67 o8sMendu.net
彼の言うXamlの欠点とやらは、マークアップ言語ならどれでも持っているもので
xamlはhtmlと比べたら格段に進歩した代物だ
まあこんなケチを付けているんだから
htmlなんて触ったことない化石プログラマーなんだろうね

137:デフォルトの名無しさん
16/11/10 08:57:47.72 aHkFnxeg.net
マークアップの欠点とBindingの欠点と、、、と幾つかの欠点を併せ持っているという
ところが味噌。

138:デフォルトの名無しさん
16/11/10 09:16:40.69 o8sMendu.net
可読性を問題にしていたはずが、ロジックとマークアップが混在するhtmlを批判せずに
それを解決する方法のBindingにケチをつける
化石の末期だなw

139:デフォルトの名無しさん
16/11/10 09:43:37.91 aHkFnxeg.net
<Window.Resources>
<SolidColorBrush x:Key="MyBrush" Color="Blue"/>
</Window.Resources>
ボタンのインスタンスIDはNameでリソースの場合hx:Keyかよ。笑かすな。W

140:デフォルトの名無しさん
16/11/10 10:15:41.71 aHkFnxeg.net
物事を識別するには名前が肝心である。名前は適切で少ない方がいい。
大本の識別機構の混乱
XAMLコード中でIDictionaryインターフェイスを実装する要素に子要素を追加する際には
x:Key 属性の指定が必須
 ただし、Styleクラス(System.Windows名前空間)のように、クラスにDictionaryKeyPropertyAttributeを付与して、(x:Key 属性の)代替となるプロパティ(Styleクラスの場合はTargetTypeプロパティ)を設定しているクラスの場合には、x:Key属性 を省略可能。
Styleクラスでは、x:Key 属性の代替としてTargetTypeプロパティを利用している。
高々リソースに名前振るだけで、、、ぷっ。

141:デフォルトの名無しさん
16/11/10 10:16:51.48 aHkFnxeg.net
>135
無批判に受け入れるのはよくない。「飼いならされて、食用にされる家畜」だよ。
In the world's broad field of battle,
In the bivouac of Life,
Be not like dumb, driven cattle !
Be a hero in the strife !

142:デフォルトの名無しさん
16/11/10 10:29:24.03 aHkFnxeg.net
@ITデータバインディングを理解する。
URLリンク(www.atmarkit.co.jp)
1ページ何を言ってるのか全然わからん。突っ込みどころが多すぎて、突っ込む気にもならん。
それとも誤字脱字が多いのかな?なんか説明が間違ってるだろ。論理がつながっていない。
うちのばあちゃんにでもわかるように説明してみろや。
{Binding X} という書き方は


143:、{Binding Path=X} と同じ意味である。 藁、「同じ意味である」って、そんなら最初から一つに絞っておけよ。 {Binding Path=X} いらんだろ。 BindingにPath以外のプロパティはないんだろ!! 最初からBindingでいいだろ パスもプロパティもいらんわ。



144:デフォルトの名無しさん
16/11/10 10:43:36.65 aHkFnxeg.net
 外部リソースを取り込むには、<ResourceDictionary>要素にSource属性を付ける
<Window.Resources>
<ResourceDictionary Source="Styles.xaml"/>
</Window.Resources>
includeにしろよな。常識だろ。

145:デフォルトの名無しさん
16/11/10 11:38:19.49 ElAt+S/3.net
質問です
フォームにプロパティグリッドがあります
プロパティグリッドの中でCtrl+Zを押したときに
普通はプロパティグリッドが持っているアンドゥが呼ばれますが
これをフォームの独自のアンドゥ・メソッドを呼び出すようにしたいのですが、
どうすればいいですか?

146:デフォルトの名無しさん
16/11/10 12:03:59.07 dRW/oH8h.net
>>141
思いつくのは、IMessageFilterを使ってWM_KEYDOWNでCtrl+Z拾ってやることかな
入力中のコントロールをControl.FromHandleで取れたら幸い

147:デフォルトの名無しさん
16/11/10 12:19:50.11 CCFq8Qep.net
>>139
Pathは省略可能ってだけで、他にもプロパティあるし。
自分で張ったリンク先の2ページ目にも書いてあるだろ。

148:デフォルトの名無しさん
16/11/10 12:41:10.63 lWSBQV9X.net
>>116
理解できない自分の頭を呪いな

149:デフォルトの名無しさん
16/11/10 12:59:35.96 otGHoxmh.net
>>142
.NET1.1の頃からそんなのあったのか
まったく知らなかったw
しかし、IMessageFilterっていうかApplication.AddMessageFilterって結構恐ろしい仕組みだなw
NativeWindowの方が安全な気がするんだけど

150:デフォルトの名無しさん
16/11/10 13:07:51.76 ElAt+S/3.net
>>142
IMessageFilterでCtrl+Z拾ってできました
ありがとうございます

151:デフォルトの名無しさん
16/11/10 14:50:01.95 zCCtWAZL.net
>>139
結局、言われた指摘には何も返せず自分が理解できないのに適当に騒いでるだけじゃん
C言語とかやったら配列があればポインタいらないじゃん!とか騒いでそう
省略可能な記述についても、html5とかの仕様を見たらhtmlとかbodyとかのタグいらないじゃん!とか叫びそう
URLリンク(qiita.com)

152:デフォルトの名無しさん
16/11/10 15:34:39.47 aHkFnxeg.net
グダグダ言わずに、本質はどういうことかを捉えてどう説明できるかが問題やな。
Bindingの本質はというと要するにXamlのText="{Binding pName}" が意味するのは
var bind = new Binding("pName") { Source = per };
  text1.SetBinding(TextBox.TextProperty, bind);
この二つの処理やないか。こいつを省略形で書いてるだけのことやろ。
チュートリアルでちゃんとこう言うように書けよな。そしたら3秒でわかるのに。
原辰。

153:デフォルトの名無しさん
16/11/10 15:45:02.09 aHkFnxeg.net
>143
1pが意味不明なので2pは見てなかった。
しかもインテリセンスが糞やからPath以外のプロパティがあるのかないのかわからん。
あくまでも
「BindingのプロパティはPath以外に無い」という前提、仮説の下でケチつけてる
わけであって、それはチャンと明記している。W
一遍にりかいするんは難しい。
OneWay ソースからターゲットへの一方通行の同期になります。
TwoWay ソースとターゲットの双方向の同期になります。
OneWayToSource ターゲットからソースへの一方通行の同期になります。
OneTime ソースからターゲットへ初回の一度だけ同期されます。
モードがあるじゃないか。ならインテリセンス効かせろや。

154:デフォルトの名無しさん
16/11/10 15:59:51.17 aHkFnxeg.net
しかしBinding部分は顔だし肝なのにここを
 正確に説明できん
 プロパティのインテリセンスも出せん
とか、要するに自分の頭で考えたものじゃなくて、アッチコッチから借りてきた借り物をくっつけ
て作り上げてるからだろ。ほんとうのところが正確に把握できてないんだよな。

155:デフォルトの名無しさん
16/11/10 16:05:52.04 aHkFnxeg.net
内容が変更したときにはどうすんの?
 INotifyPropertyChangedインターフェースを実装
 DependencyPropertyにしてしまう (インスタンスを生成したスレッドのみに限定される)
二つの方法がある。
PropertyChanged(this, new PropertyChangedEventArgs("pName”));
プロパティの変更でこれをやってやればいい。
なんやねん。結局イベント処理は書かなだめやないか? どんだけのメリットがあるか。W

156:デフォルトの名無しさん
16/11/10 16:10:01.34 ApowNrKS.net
ラムダ君
LINQ君
XAML君←new

157:デフォルトの名無しさん
16/11/10 16:33:44.59 aHkFnxeg.net
結局普及しないのは、関係者がちゃんと理解できていないのではないかな。
WEBを見たら、いろいろと説明が書いてるがどれも分りにくい。
C#でもVBでも1日も触っていたら、そこそこ使えるようになる。うろ覚えでも
プログラムはできる。
 WPFは説明が中途半端なので肝の部分がはっきりしない。
バインディングするんならイベントもちゃんとバインディングしないとだめだわ。
バインディングを間違っていても反応なしだしな。W エラーすらチェックできてない。
中途半端。

158:デフォルトの名無しさん
16/11/10 17:47:19.45 riiUw9jl.net
>>152 命名のXAML君は、staticおじさんと同じ加齢臭がする

159:デフォルトの名無しさん
16/11/10 17:49:55.89 ApowNrKS.net
ラムダとLINQも新しいことを拒絶するstaticおじさんだろうな

160:デフォルトの名無しさん
16/11/10 19:15:21.25 pqjjw4yY.net
ラムダとLINQの時は使うなとか言っているやつがいたからな
拒絶するのは勝手だがいちいち布教しようとするのはウザイ

161:デフォルトの名無しさん
16/11/10 19:22:39.57 CGPJd07S.net
IEでニコ生みたいなストリーミング動画を見る際に、動画データがメモリーに展開する前にデータをリアルタイムでキャプチャするにはどうしたらいいでしょうか?

162:デフォルトの名無しさん
16/11/10 19:23:04.26 ApowNrKS.net
C#のLINQは名前が他の言語と違うから一瞬迷う

163:157
16/11/10 19:31:03.19 CGPJd07S.net
すみません分かりづらかったです。
IEで動画見ながら、IEがダウンロードしてるデータがストリーミング動画かどうかを判断して、動画ならIEの画面に表示される前に手を加えたいんです。

164:デフォルトの名無しさん
16/11/10 19:36:34.41 hirKpSKv.net
ストリーミング中の動画に手を加えられるだけの技能があるのがすごい

165:デフォルトの名無しさん
16/11/10 20:17:59.57 13nZCkn2.net
使う価値があると思えば使えばいい
自分が使うのは無理だ参りましたと思ったら使わなければいい
ただどちらを選択したかは別に他人に伝えなくていい

166:デフォルトの名無しさん
16/11/10 22:17:57.52 c1KzPo7d.net
>>159
現実的な内容じゃない
基本的に無理
プロキシ―作っても動画をいじれる技量が君にあるとは思えない

167:デフォルトの名無しさん
16/11/10 23:07:13.32 pEVMYV3p.net
IEに、そういうプラグインがあるのか、探してみれば?
IEは、オープンソース(OSS)じゃないから、改造するのは難しい。
OSSは、Firefox, Chromium, Safari
Atom, Visual Studio Code, Electron は、Chromiumを使っている

168:デフォルトの名無しさん
16/11/11 03:04:38.37 +gNs9Nbk.net
>>153
君はWPFどころかC#もよく理解できてないみたいだから、C#入門書からスタートするのがおすすめ

169:デフォルトの名無しさん
16/11/11 04:07:56.66 KgVthd+h.net
>157
ストリーミングをやるコンポーネントはあるだろ。そのデータ取り込み部分を
バッファリングして中を加工すればいいだけだろ。W
画像認識をするのかな?

170:デフォルトの名無しさん
16/11/11 07:05:40.26 KgVthd+h.net
MVVMのICommandの使い方
ICommandを実装する理由はなんだ?
 URLリンク(www.atmarkit.co.jp)
これは読んでいくとよくまとまっているが、これだけでは難しすぎて
何を言ってるんかわからん。まるでMS。
そもそもICommandってなーに?
1. 処理の実行可否を状態として持つ、また状態の変更を通知
2. XAMLからメソッドの呼び出しはコードビハインドしか利用できないが、ICommandはバインドが利用でき別クラス(ViewModel)の処理を呼び出すことができる
中身は
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}

171:デフォルトの名無しさん
16/11/11 07:07:03.74 zUQAdwQM.net
イベントを再定義したかった人生だった(Command辞世の句)

172:デフォルトの名無しさん
16/11/11 07:08:21.41 KgVthd+h.net
いい例がある。これならわかる。これを逃してしてしまうと永久にわからないというほどの
優れた例を提示しておく。
優れた例
XAML
<TextBox Text="{Binding Name}"/>
<Button Content="実行" Command="{Binding ExecuteCommand}"/>
<Label Content="{Binding Result}"/>
ViewModel
  public DelegateCommand ExecuteCommand { get; }
public MainWindowViewModel(){
ExecuteCommand = new DelegateCommand(() => Result = "登録OK", CanExecute);
}
private bool CanExecute(){
return !string.IsNullOrWhiteSpace(Name);
}
private string _name;
public string Name{
get { return _name; }
set { if (OnPropertyChanged(ref _name, value)) ExecuteCommand.RaiseCanExecuteChanged();}
}

173:デフォルトの名無しさん
16/11/11 07:09:49.57 KgVthd+h.net
肝:DelegateCommandをプロパティとして公開
  コンストラクタの中でインスタンス化
() => Result = "登録OK"
これはなんやねん? このアクションの書き方がわからんなーという人。
ラムダ式、、、初めて聞いた?

174:デフォルトの名無しさん
16/11/11 07:13:06.18 KgVthd+h.net
>君はWPFどころかC#もよく理解できてないみたいだから、C#入門書からスタートするのがおすすめ
C#の方が難しいわ。まあでも何とか動かせる。WPFもBindingだけわかったので何とか
使えるレベルにはなったな。
問題はMVVMパターンだな。
MVVMじゃなくてM-VM-VかV-VM-Mでないとだめだよな。VVMMの方がいいと思う。

175:デフォルトの名無しさん
16/11/11 07:23:51.87 KgVthd+h.net
WPF攻略方法
1.Bindingの理解
2.「優れた例」でVVMM(またはMVVM)を理解する こっちはまあボチボチでもOK
MSの文書は酷いがIT−PROの文書は体裁としてはよくまとまってはいるが説明が難しい。
 第一に例が悪い。
 第二に例にセンスがない。
 第三に例の説明が下手。
単純化したシンプルな例で示さないと「俺はこんなにすごいんだぞ」みたいな
複雑な例では分からん。

176:デフォルトの名無しさん
16/11/11 08:31:34.35 KgVthd+h.net
MVVMのVMってわざわざ苦労してクラスをつくる必要あるんか?
コードビハインドをVMにしたらいいんではないか? VとのIFはここで全部やった
らいいと思うがな。
なんか必要性がいまいちわからんなー。

177:デフォルトの名無しさん
16/11/11 08:51:31.09 qDFZLZyC.net
>>172
必要性が何なのかちゃんと調べたのかい?

178:デフォルトの名無しさん
16/11/11 09:40:30.93 yIFyhkZ0.net
DIコンテナを導入すると、VMとMの2層構造のありがたみが実感できるんだけどな

179:デフォルトの名無しさん
16/11/11 09:43:11.94 M2uBl8fv.net
>>169
ラムダ式は、Java, JS, Rubyなど、たいていの言語にある
例えば、独自の方法で、ソートしたい場合、先に比較関数を定義してから、
その関数を引数として、sort()に渡す
比較関数{ ここで定義する };
sort(比較関数);
ところが、先に定義するのは面倒だから、sort()の引数の所で、
匿名(無名)関数として定義して、そのまま引数として渡せれば、簡単。
それの糖衣構文で、関数宣言も無くしたのが、ラムダ式
JSで書くと、
var a = ["Hydrogen", "Helium", "Lithium", "Beryl-lium"];
匿名関数・ラムダ式
var a2 = a.map(function(s){ return s.length });
var a3 = a.map( s => s.length );

180:デフォルトの名無しさん
16/11/11 13:38:45.67 KgVthd+h.net
ラムダ式なんて高級なもが巷にあふれているとは初めてしった。めったに
使わないかな。
 右も左もわからないのにアンドロイドアプリ(簡単なんだが、、)を作る
羽目になってしまった。しかしXamalinダウンロードしてみたらXamlに似ていて
驚いたわ。W
 WPFを勉強したかいがあった。これからバリバリつくってみる。

181:デフォルトの名無しさん
16/11/11 18:30:50.13 ciOc6C5W.net
リスト操作系関数を一度使ってしまうともう戻れなくなる
例えば、List<string>をList<object>に変換したい時、
var hoge=list.map(x=>(object)x);
だけで良い。foreachとかで書くより楽で読みやすい

182:デフォルトの名無しさん
16/11/11 18:55:28.67 +ZeaIXfw.net
名前を付けるのも馬鹿らしい単純な操作を表現するには
やっぱりラムダ式が便利だと感じる

183:デフォルトの名無しさん
16/11/11 18:56:03.62 qDFZLZyC.net
>>176
Xamlに似てる?勘違いしてんぞお前

184:デフォルトの名無しさん
16/11/11 18:57:11.76 0OJ17qIg.net
>>177
List<T>.ComvertAll<TOutput>(Converter<T,TOutput>)ではダメなんか?

185:デフォルトの名無しさん
16/11/11 19:20:11.62 KgVthd+h.net
>179
Xamlそのものだわ。C++もC#のFormもXmalinUIもあって、3種類の開発環境がある。
まともに動けば凄いよ。W
でもサンプルを動かしたまではすんなりいったんだが署名ができないとか、文字ばけ
するとかどうも先が思いやられるのでxamalin
やめてAndroid Studioにしようかと迷ってる。こっちはJavaだけど、、

186:デフォルトの名無しさん
16/11/11 19:58:04.56 JZCe9Y2P.net
ラムダ厨うぜー

187:デフォルトの名無しさん
16/11/11 20:14:46.10 tUVkv4AT.net
おはようラムダ君

188:デフォルトの名無しさん
16/11/11 20:20:02.48 TqB+9XQ4.net
ランバダなら知ってる

189:デフォルトの名無しさん
16/11/11 20:27:50.64 nfVHRfzR.net
>>181
c#初心者スレがあるからそっちにいった方がいい
いい加減うっとおしい

190:デフォルトの名無しさん
16/11/11 20:46:50.11 KgVthd+h.net
アッ、もうC#は卒業したんでこないよ。次はJAVAだ

191:デフォルトの名無しさん
16/11/11 20:49:06.76 nfVHRfzR.net
それは良かった

192:デフォルトの名無しさん
16/11/11 21:09:36.24 TOO7Y3Ld.net
ε-(´∀`*)ホッ

193:デフォルトの名無しさん
16/11/11 22:25:05.87 +gNs9Nbk.net
>>181
XamarinはC#に相当慣れ親しんでるか、androidもiOSもそこそこやってる人がまとめて開発したいって場面以外ではまだおすすめできる状態じゃないかな
まだ情報も少ないし、ラムダ式とかイベントとかの基本を自力で調べられない人には特に厳しいと思う

194:デフォルトの名無しさん
16/11/12 20:58:13.68 RWma0It4.net
古いWindowsマシンでAndoroid開発しようとすると
まずエミュレータが動かない
WindowsPhoneが頑張ってくれてたら
引き続きVisualStudioで開発できたのに
どうしてここまで差を付けられたのか
MSってエリート揃いじゃないのかな?

195:デフォルトの名無しさん
16/11/12 21:30:04.79 cIUa0gZx.net
古いマシンで開発するやつの事なんかMSが面倒見る義理ねえよ

196:デフォルトの名無しさん
16/11/12 23:10:09.55 l9OhshgV.net
Win10で露骨にレガシーおじさん切り捨てに来たし
流石の聖人マイクロソフトもお荷物を抱えきれなくなってきたんだろうね

197:デフォルトの名無しさん
16/11/13 02:11:36.78 PRCnkR8c.net
xamlが嫌いなら、全部コードで書けば良いのに。
Bindingが理解出来ないのなら、全部コードビハインドで書けば良いのに。

198:デフォルトの名無しさん
16/11/13 02:55:57.86 +xp6lf8w.net
WPFって学習コストが高い(少なくとも俺にとっては)から
苦労して覚えたものを擁護したくなる気持ちはわからんでもないけど、
10年経ってもほとんど普及してないのにはやっぱりそれなりに理由があると思う。
パフォーマンスの問題は目をつぶるとしても、個人的には可読的じゃないのが大きいと思うんだよね。
書いてるときはいいんだけど、自分が書いたものであっても後から見るとどこで何をやってるのか
ぱっと見て分からないし見当がつかない。
MVVM(正直これはあんまり理解してないんで誤解してるかもしれんが)にしてもそうだけど、
理念的に綺麗なのはわかるけど何か「これじゃない」感が強いというか、美しい理想の実現のための
コストが大きすぎるというか...

199:デフォルトの名無しさん
16/11/13 09:01:19.59 sNDrzqcx.net
>194
綺麗なコードをみてみたら素晴らしさが一発でわかるとおもぞ。直感的にすぐに
わかる。わからないようなのではだめだな。
だれか194のためにだせるかな?

200:デフォルトの名無しさん
16/11/13 09:45:56.53 lb7gRuG3.net
>>194
同意。結局世の中に求められてるのは
大ヒットしたVB6レベルなんじゃないかねえ
SOAPがはやらなかったのも一緒。

201:デフォルトの名無しさん
16/11/13 10:23:03.20 67al7/78.net
VB6っぽくも書けるんだけどね。
ポトペタも出来るし。

202:デフォルトの名無しさん
16/11/13 10:23:37.75 sNDrzqcx.net
んーーーーんと考え込むよりもサクサクと作ったほうが手数は多くても生産性が
上がる。と考える人が殆どだから?

203:デフォルトの名無しさん
16/11/13 10:50:51.74 lO2MkZMm.net
html知っていればxamlの可読性にケチを付けること無いと思うんだが
今時html触ったことない人なんだろうか?

204:デフォルトの名無しさん
16/11/13 11:12:37.23 ZjdX2IN8.net
>>198
んーーーーんと考え込むよりもサクサクと作れるような案件ばかりだからだろ

205:デフォルトの名無しさん
16/11/13 11:39:53.10 IKKUDTFw.net
>>194
そんな擁護とか色眼鏡で見ないでも、単純に学習コストが高いのが一番のネックだろう。

206:デフォルトの名無しさん
16/11/13 11:52:49.11 fBLfWj6L.net
どこで何をやってるかわからない、ってのが不思議だな
振るまいを独立にモデリングした上で、UIのどことモデルのどこを対応付けるか、を明確化するのがMVVMであり、バインディングの利点じゃん?
従来のフォーム・イベントゴリ押し的なやり方だとこれが曖昧化してしまうから、どこで何をやってるかがわからなくなる
MVVMでわけわからなくなる人はなにか根本的に間違ったことやってるんじゃないかな?

207:デフォルトの名無しさん
16/11/13 12:15:54.37 IKKUDTFw.net
>>202
慣れてないだけだと思う
>>194
MVVMは高コストって主張も分かる。
単純な案件にはオーバースペックだし、Formsでも十分。

208:デフォルトの名無しさん
16/11/13 14:15:44.38 67al7/78.net
こうして人は老いて逝くのかな。

209:デフォルトの名無しさん
16/11/13 15:30:42.14 zWTpia8y.net
「フロントエンド界隈」が、声だけでかくて市場としては滅茶苦茶小さいのにに似てる

210:デフォルトの名無しさん
16/11/13 19:32:23.00 wHFHc9ra.net
フロントエンドプロセッサ

211:デフォルトの名無しさん
16/11/13 19:51:43.67 6IaE8voh.net
MVVMはOOPと相性悪いよな
間違った変更は拒絶して例外を投げるのが基本のOOP
間違った変更を一時的に受け入れて(そのかわりエラーを状態の一部として持つ)コミット時に不変条件を満たせば良いMVVM
Formsなら例外をキャッチしてメッセージを出して入力を戻すだけでいいからOOP的に正しいモデルをそのまま再利用できる
要するにビューがドメインモデルについてよく知らなくてもビジネスルール的に正しい状態に保つことができる
MVVMだとビュー及びビューモデルがビジネスルール的に正しいか正しくないかということを知っていなければならない
それはビューやビューモデルではなくドメインモデルが管理すべき情報でしょ

212:デフォルトの名無しさん
16/11/13 22:40:30.15 67al7/78.net
レイヤーが違うと思うけど。
難しいから全部フラットで良いよ。

213:デフォルトの名無しさん
16/11/14 17:11:40.86 iSq4NCna.net
var dic1 = new Dictionary<string, string>() { { "key", "value" } };
var dic2 = new Dictionary<string, string> { { "key", "value" } };
どちらでも動くようなのですが、カッコは付けるほうが良いですか?

214:デフォルトの名無しさん
16/11/14 19:10:02.84 xSfNgSMs.net
>>209
お好きな方で。
今なら
{["key"] = "value"}
の方が解りやすいかも。

215:デフォルトの名無しさん
16/11/14 22:10:40.45 p26anzny.net
テキストボックスの入力欄A, B, Cがある
A, Bは自由入力欄、CはA * Bを出力する読み取り専用(A, Bが変化したら即座に再計算される)
A, Bに数値と解釈できない文字列(decimalに変換できない文字列)が入力された場合、即座にERRVALという文字列に置き換える
Cが計算不能な場合、ERRVALという文字列に置き換える
このような画面をWPFで作成したいのですがViewModelとxamlはどのように書けばいいでしょうか?

216:デフォルトの名無しさん
16/11/14 22:57:37.38 2SylIT9P.net
それだけ決まっててむしろどこに悩んでるのさ

217:デフォルトの名無しさん
16/11/14 23:09:54.35 p26anzny.net
>>212
他のプログラマがどう書くか参考にしたいです

218:デフォルトの名無しさん
16/11/15 00:54:17.56 gSjda41/.net
>>199
htmlにはCSSがあるから見た目は外に出せる

219:デフォルトの名無しさん
16/11/15 07:18:35.80 wcWx6QZb.net
>>213
ならまず自分がどう書いたかを晒せよ

220:デフォルトの名無しさん
16/11/15 07:47:41.89 AaicVHah.net
キー入力ミスったら最初から入力しなおしな典型的な糞ソフト仕様だな

221:デフォルトの名無しさん
16/11/15 08:30:57.20 9/yxKzNn.net
>>213
ReactivePropertyのサンプルならググれば見つかるから参考にすりゃいいよ

222:デフォルトの名無しさん
16/11/15 10:37:08.44 9/yxKzNn.net
>>214
xamlを腐しているやつは、xamlを全然知らないんだな

223:デフォルトの名無しさん
16/11/15 11:29:28.89 f/VYzzwV.net
XAMLをよく知っているやつがちゃんとした説明してるの見たことない

224:デフォルトの名無しさん
16/11/15 12:05:59.99 Sy8HLWAK.net
>>219
残念なやつ

225:デフォルトの名無しさん
16/11/15 12:12:58.11 f/VYzzwV.net
というように人格否定しかできない

226:デフォルトの名無しさん
16/11/15 12:39:21.59 Sy8HLWAK.net
>>221
顔真っ赤www

227:デフォルトの名無しさん
16/11/15 14:14:09.51 EsNZ5iro.net
と、知ったかは発狂するのであった

228:デフォルトの名無しさん
16/11/15 17:55:17.20 idS/rHgA.net
CSSはxml形式じゃないから良い
必要なところで必要な形を使うのが良い

229:デフォルトの名無しさん
16/11/15 18:43:22.99 IxpYJQnb.net
全然使われてないのは書店(Amazonでもいいけど)に行くとあからさまにラインナップがしょぼいからすぐ分かる
mizchiと取り巻きの声だけやたらデカいReactみたいなもんだ

230:デフォルトの名無しさん
16/11/15 22:31:04.10 YqUWOmsB.net
>>214
style等は外に出せるぞ。

231:デフォルトの名無しさん
16/11/16 10:35:34.62 hL8zHUS9.net
中はやめてー

232:デフォルトの名無しさん
16/11/18 23:01:26.36 +QqWh5ch.net
変数aがnullならbもnullにして、
aがnullでないならaを用いてmyfuncの計算結果をbに入れたいのですが、
var b = (a == null) ? null: myfunc(a);
こんなふうにしたのですが、もっとスッキリ書けそうな気がするのですが、
思い付きません。
もっとスッキリ書けますか?

233:デフォルトの名無しさん
16/11/18 23:08:28.42 2P9KWEZx.net
myfuncの戻り値を考え直せとしかwwwwwwwwwwww

234:デフォルトの名無しさん
16/11/19 01:56:09.52 eBIxsLr/.net
>>228
var b = a?.myfunc(a);

235:デフォルトの名無しさん
16/11/19 01:57:55.29 eBIxsLr/.net
とおもったらmyfuncはaのメソッドじゃないのね
230は間違い。忘れてくだされ

236:デフォルトの名無しさん
16/11/19 03:57:45.25 gmVZjmNi.net
myfunc(null)がnullを返すようにすれば
b = myfunc(a)で済むんだがなぁ
まあきっとそうではない何かをする関数なんだろうな
おれならaやbがnullである事に特別な意味があったり、myfuncを呼ばない事に特別な意味があるなら
ちゃんとif文書くけどな

237:デフォルトの名無しさん
16/11/19 10:29:56.40 0bgRfGhz.net
>>229
string myfunc(string a){
 if(a==null)
  return null;
を追加したらスッキリしました!

238:デフォルトの名無しさん
16/11/19 11:12:00.41 6I7N2mEo.net
aってstringだったのか…
余計なことを言いたくなるなあ…

239:デフォルトの名無しさん
16/11/19 11:15:09.05 ZfUdGYAZ.net
スッキリワロタ
どうしてもならジェネリックの拡張メソッドを作っとく手もあったね。

240:デフォルトの名無しさん
16/11/19 17:50:29.26 t3MBfDke.net
nullを返す関数を作ると後々災いの元

241:デフォルトの名無しさん
16/11/19 17:52:57.62 E8arxXAw.net
かと言ってstringで""を返す関数を作っても後々災いの元

242:デフォルトの名無しさん
16/11/19 17:55:21.80 VKIYWaqI.net
>>236
またその話か
それはないよ。

243:デフォルトの名無しさん
16/11/19 23:03:49.26 0bgRfGhz.net
>>236
なんで?

244:デフォルトの名無しさん
16/11/20 00:13:29.86 BknfpFpO.net
暫く使ってみたがWPFというかMVVMはやっぱり良くないな
暫定的にとはいえ不正な状態のオブジェクトを受け入れるってのが致命的にコードを汚くする
カプセル化で状態を保護するのが基本のオブジェクト指向に喧嘩売ってるとしか思えない

245:デフォルトの名無しさん
16/11/20 00:26:32.91 K2ib4r+U.net
>>239
その関数使う使う時に一々nullチェックするの面倒。
それを忘れない保証もどこにもないし。

246:デフォルトの名無しさん
16/11/20 00:30:59.63 ckE9xegj.net
>>241
何という頭の悪さ。
nullを禁止したらnullを返すことで表現していたことを
もっと面倒な別の方法で呼び出し側に伝達する必要が生じるんだけど。
何でこんな簡単なことが分からないのかね。

247:デフォルトの名無しさん
16/11/20 01:00:26.85 KPo4Qlq+.net
FindFirstみたいなメソッドでマッチしない場合にnullじゃないオブジェクトを
返されたとしてもどのみちチェックする必要が出てくる

248:デフォルトの名無しさん
16/11/20 01:09:39.51 X8MMRSH3.net
null返す関数禁止じゃなくてnull代入禁止型にしてくれ

249:デフォルトの名無しさん
16/11/20 01:27:12.98 K2ib4r+U.net
>>242
勉強不足

250:デフォルトの名無しさん
16/11/20 01:38:16.74 K2ib4r+U.net
>>244
C#7.0か8.0に期待。

251:デフォルトの名無しさん
16/11/20 02:13:42.33 ckE9xegj.net
期待するだけ無駄。
馬鹿じゃなきゃちょっと考えればわかるはずだが、
必ず既定値で初期化されるようにするにしろ初期化なしの変数宣言ができないようにするにしろ、
nullを許容することの弊害とは別のより大きい弊害や利便性の低下を生むだけ。
だいたい、nullを許容することの弊害なんて大半はそれを主張してる奴が勘違いしてるだけだ

252:デフォルトの名無しさん
16/11/20 02:22:5


253:9.08 ID:9PtzIqGH.net



254:デフォルトの名無しさん
16/11/20 02:25:15.52 ckE9xegj.net
年齢の問題じゃないね。
馬鹿かそうでないか、それだけの問題

255:デフォルトの名無しさん
16/11/20 05:58:45.20 2ye3zmI2.net
>>244
nullを返す関数や変数にnullを代入する処理をよく使うのですが、
それで混乱した経験も無いのですが、なぜ、
 nullを返す関数
 変数にnullを代入
に反対する人がいるのでしょうか?

256:デフォルトの名無しさん
16/11/20 07:22:58.86 pCJ1qvOZ.net
>>250
>>241と同じ

257:デフォルトの名無しさん
16/11/20 08:05:54.92 2ye3zmI2.net
>>251
>その関数使う使う時に一々nullチェックするの面倒。
>それを忘れない保証もどこにもないし。
この意味が分からないのですが、関数を使うときにnullチェックする
と言うのは何ですか?
関数がnullを返す場合もあるように自分でそうしているわけだから
何も問題ないと思いますが。

258:デフォルトの名無しさん
16/11/20 08:15:43.24 pCJ1qvOZ.net
>>252
理解できない奴には理解できないからもう気にするな。null禁止にしても同じ問題起きるしw

259:デフォルトの名無しさん
16/11/20 08:27:09.27 2ye3zmI2.net
>>253
気になるんです。
教えてください。

260:デフォルトの名無しさん
16/11/20 08:32:27.43 w/pS54nD.net
そもそもこれは戻り値がstring限定の話じゃないの?
普通のオブジェクトでnull禁止はありえないからね

261:デフォルトの名無しさん
16/11/20 08:43:15.40 pCJ1qvOZ.net
>>255
(nullでなく()デフォルト値を入れた空のオブジェクトを返すって考え方もあるからオブジェクトでも同じだよ
そもそも1つの戻り値で関数失敗成功情報まで返そうとするのが間違い

262:デフォルトの名無しさん
16/11/20 08:47:01.08 3blV6AGf.net
値型は null にならないのでそれで用は足る。面倒なのは、Stringだかが。昔のBASIC の文字列型のように実装した値型を用意すれば解決。

263:デフォルトの名無しさん
16/11/20 09:29:50.43 2ye3zmI2.net
>>257
>面倒なのは、String
C#で文字列を扱っていてnullの扱いで面倒だと感じた経験が
一度もないのですが、Stringでnullがなぜ面倒なのですか?

264:デフォルトの名無しさん
16/11/20 09:42:15.04 BknfpFpO.net
nullは情報を捨ててしまうから可読性が低くなる
エラー許容型を作ってそれを使うのが定石
Errorable<string> s = func();
if(s.HasNoError) WriteLine(s.Value);
else WriteLine(s.ErrorMessage);
if(s.NotFound) ...
if(s.AuthError) ...
if(s.FormatError) ...
...

265:デフォルトの名無しさん
16/11/20 09:59:28.46 Y223jndk.net
>>259
> その関数使う使う時に一々nullチェックするの面倒。
> それを忘れない保証もどこにもないし。
全然改善されてないだろ w
てか、その例なら素直に例外使えよ

266:デフォルトの名無しさん
16/11/20 10:11:47.90 GbOcvoRT.net
IsNullアンチパターンみたいだね

267:デフォルトの名無しさん
16/11/20 10:12:24.08 wbF3tHCA.net
>>260
チェックなしでValueにアクセスしたら例外を投げる
Errorableという名前が見えることによってチェックを忘れるということを回避できる
チェックがめんどくさいという怠惰さには手の施しようがないがnullやエラーコードと違ってチェック方法が統一化できる点も優れている

268:デフォルトの名無しさん
16/11/20 10:27:40.57 9PtzIqGH.net
もう一歩踏み込んで、Maybe。
Valueプロパティは、もちろん無し。

269:デフォルトの名無しさん
16/11/20 10:30:00.58 X8MMRSH3.net
宗教としてC#にアイデンティティを代替している連中(貧乏人ほどオリンピックが好きなのと同じ)なのに
仕様を否定したって聞き入れる訳ないじゃん
ヘジにアントニー・ホーアの言葉をどう考えるか聞いた奴がいるが
なんて答えたか知らないんだろうし
(あるいは、C#に間違いがあってはならないから目をつぶっているか、そもそも英語は読めないか)

270:デフォルトの名無しさん
16/11/20 10:30:10.23 9PtzIqGH.net
>>250
ぼっちで書いてる時は、好きにする宜し。

271:デフォルトの名無しさん
16/11/20 10:35:26.28 2ye3zmI2.net
文字列の場合にはNullも "" も同じだと思えばいいよね

272:デフォルトの名無しさん
16/11/20 10:37:02.45 NgPgW0rj.net
参照型とnull許容型は別の概念にするべきだったと言ってるし
現在、null非許容型を破壊的にならないように言語仕様を変えよう(追加しよう)としている。
将来を全て見通せる人は、いないと言う事だよ。

273:デフォルトの名無しさん
16/11/20 10:38:09.66 Y223jndk.net
>>262
> チェックなしでValueにアクセスしたら例外を投げる
ならはじめから例外でいいだろ
> Errorableという名前が見えることによってチェックを忘れるということを回避できる
マジで言ってるの?
チェックする箇所には変数名しか見えないんだが...
まあ IDE でいちいち型を確認すればいいんだろうけど、エラーチェック忘れるような奴はそう言う型の確認も忘れるわけで...
> チェックがめんどくさいという怠惰さには手の施しようがないがnullやエラーコードと違ってチェック方法が統一化できる点も優れている
たぶん思い付きで書いてるんだろうけど例えば Errorable<string> の
> if(s.AuthError) ...
って何を返すの?
自作のクラスで新しいエラー状態をチェックしたい時はどうするの?
いちいち Errorable を派生させたりしたらチェック方法が統一できないしどうするつもり?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

317日前に更新/272 KB
担当:undef