X



ふらっと C#,C♯,C#(初心者用) Part149
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワキゲー MMca-Gz4g)
垢版 |
2020/12/16(水) 11:29:35.35ID:TSvQ057dM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0008デフォルトの名無しさん (ワッチョイ d190-P4DR)
垢版 |
2020/12/23(水) 09:31:05.35ID:zdm41kCZ0
まず、エンコードってもっと具体的に何のエンコードがはっきりしてくれんと
gzipやdeflat圧縮するcontent-encodingなのか、
chunked転送するcontent-transfer-encodingなのか、
はたまた、文字列送信したくて、その文字列のエンコードなのか..
まぁ、どのみちどれもできそうな気がするが
0009デフォルトの名無しさん (ワッチョイ 5310-iuc3)
垢版 |
2020/12/28(月) 20:57:23.90ID:iJ3wi52z0
すみません 教えてください
CPUの使用率を知るために、

Windows.System.Diagnostics 空間の
SystemCpuUsage class が使えると思うのですが、

SyatemCpuUsage cpuUsage;
result = cpuUsage.GetReport();
とやると、 実行時に systemCpuUsage がnull でした
と怒られ、
SyatemCpuUsage cpuUsage = new SystemCpuUsage();
result = cpuUsage.GetReport();

とすると
SyatemCpuUsage cpuUsageには、引数0を指定するコンストラクターは含まれていません
と怒られます。

Cpuの使用時間を知りたいのですがどのようにすればよいのでしょうか?
0012デフォルトの名無しさん (ワッチョイ aebb-AofU)
垢版 |
2021/01/03(日) 06:53:07.36ID:s7zZ6b100
var x = SomeClass.Create();
if( x?.BooleanProperty ){...}

の上手な書き方ってありますか?
↑はbool?とboolの違いで怒られます

if( x?.BooleanProperty == true ){...}

とかってスマートじゃない気がするんですが
0015デフォルトの名無しさん (ワッチョイ 06de-Czn+)
垢版 |
2021/01/03(日) 11:46:24.42ID:Cv28EBZ70
nullとfalse=NGの値が同じだから辛うじて動いてるだけの処理なのか

よくあるOK=0でそれ以外がエラーの処理でやっちゃうとおかしくなるから
そういうの書くのやめたほうがいーんじゃない?的な
0019デフォルトの名無しさん (ワッチョイ eda7-Czn+)
垢版 |
2021/01/03(日) 15:11:01.48ID:TwYJ75OS0
初心者は正しく誘導してやらないとな
間違いなくしなくていい省略をして
言語の機能に飛びついてウンコードを作ろうとしていたのを未然に防いだ

初心者スレはこうでなければ
0033デフォルトの名無しさん (ワッチョイ 4201-Nu5h)
垢版 |
2021/01/03(日) 20:07:34.43ID:QdF5iATA0
今までタイプミスしたことないからこれからもしないと言うのは単なるアホ
ただ昔のコンパイラでは警告でなかったから一定の意味は「あった」けど、未だに言ってるのは単なる老害
0036デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/03(日) 22:08:58.55ID:adFNNdCNa
タイプミスてw
普通の人は画面見ながらコーディングするんだけどw
ひょっとすると==と打つつもりで=と打ったことはあるかもしれないが
それを見逃したことなど一度もない。

そもそもタイプミスは-キーのみで発生するわけではないので
理由になるはずがない。

申し訳ないけどこれ、昔も今も「羹に懲りてなますを吹く」以外の何物でもないよ。
そもそも「==の左辺に変数を書かない」などというルールを条件づけしたところで
その条件反射は間違って=を打ったところで発動しないのでは?w

っていうか同じ努力で「等価検査をしたい時は==」を条件づけられるだろうw
0037デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/03(日) 22:15:19.58ID:adFNNdCNa
こういう糞作法に疑問を感じない人はあれかね
+と打つつもりで*って打っちゃうかもしれないから
-+*/使わずにマクロでadd とかsubtractとか定義して使えって言われたら
納得して従うんかねwwwwwww
0042デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/03(日) 22:58:13.35ID:VROyTreA0
等価演算子が == 以外の言語を使った事ないなら間違えないのかも
0043デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/03(日) 23:04:49.04ID:adFNNdCNa
VBA触った後にC系のコード書くとつい....ないってw

くどいようだけど、どっちにしろ条件づけ(条件反射)なので、
同じ条件づけなら直接的な方がいいに決まってるでしょ
0045デフォルトの名無しさん (アウアウイー Sab1-hZl1)
垢版 |
2021/01/03(日) 23:12:43.97ID:fsLjg3fja
まあエディタ環境もLintも貧弱だった2000年位までならヨーダ記法の採用にも一理はあるかもしれないけど
現代的な環境でC#を書くなら論外だわな
>>38みたいなことを言い出す奴は間違いなく老害かただの難癖野郎なのでプロジェクトに迎え入れちゃいけないし
万一抱えなきゃいけなくなったとしても若手に影響を及ぼすような仕事を与えてはならない
0049デフォルトの名無しさん (ワッチョイ 4201-Nu5h)
垢版 |
2021/01/04(月) 00:07:02.17ID:Nz2iXOdN0
>>45
> >>38みたいなことを言い出す奴は間違いなく老害かただの難癖野郎なのでプロジェクトに迎え入れちゃいけないし
お前はもう少し文章をちゃんと読む癖をつけたほうがいい
仕様書を勝手な解釈でバグ作り込むタイプだと思うぞw
0050デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/04(月) 01:00:14.94ID:jzK8VmUQa
日本人は精神論根性論に走りやすいし、そうでなくても
ヒューマンエラーをシステマチックに回避しようという発想自体は悪くない。

ただ、その方法論が有効かどうか評価せずに飛びつくのは愚か。
日本は精神論者も多いけど、こういう教条主義者も負けないぐらい多い。
==の左辺に〜なんて全然有効じゃない。
0051デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/04(月) 01:14:52.17ID:jzK8VmUQa
それを言っちゃあおしまいよな話だけど、
真面目な話==と=を間違えるような人は本質的にプログラミング向いてないんだよw

間違うかそんなの。
ズブの素人でも1週間もコード書いてれば「等価検査は==」って条件づけされるってw
if(までタイプした時点で条件反射が発動するでしょ
0052デフォルトの名無しさん (ワッチョイ eda7-Czn+)
垢版 |
2021/01/04(月) 01:33:02.28ID:3rgEqS6K0
まあ、でも定数値を左辺に書くことはメリットしかないからな
やれと言われればやることではある

ただ、規約にしてしまって
ソース中のやってない箇所を1つ1つチェックまでして直す価値はないと思う
あくまでなるべくそう書いた方がいいかな?レベル
0053デフォルトの名無しさん (ワッチョイ eda7-Czn+)
垢版 |
2021/01/04(月) 01:45:03.22ID:3rgEqS6K0
いくらメリットしかないって言っても規約に昇華されて
チェックまでさせようとする奴がいるとそいつが邪魔

定数値を左辺に書くよりそいつを排除することに力を入れたほうがいい

他にもやることはたくさんある
グローバル変数なくしたり、無意味なメンバ変数削除して引数にしたりと

優先順位が遥かに高いものが他にたくさんあるという前提は忘れてはならない
0054デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/04(月) 02:08:37.49ID:+AkCQ/yL0
>>51
一時間おきにVBとC#のコーディングやってみなはれ
VBでIf文の条件式をカッコでくくってエラーに悩むとか絶対あるから
0056デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/04(月) 02:20:12.44ID:+AkCQ/yL0
>>55
一般的には稀なのかもしれんがそういうのもある
単純に == と = を間違える奴はプログラミング不向きとか言ってるバカに試してみて欲しい
0059デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/04(月) 02:41:41.41ID:BeeF0dCGa
2000年代に入った頃から過剰コンプライアンスが問題視されるようになった
(でも改善はされないのが日本という国だけどw)が、あれとよく似てるね。

入院患者の取り違えが起こっては大変と、毎日何度も何度も氏名生年月日を確認する。
携帯キャリアのサポートに携帯で電話してるのに「お客様のお電話番号を〜」
本当に意味あるのかそれw

欧米人は絶対にこんなことしないだろう。

ルールを忘れるからとルールを忘れても問題を起こさないためのルールを覚える。
ここに矛盾を感じない人は論理的思考能力に欠陥がある。
プログラマに向いてないよw
0064デフォルトの名無しさん (ワッチョイ 4201-Nu5h)
垢版 |
2021/01/04(月) 10:27:40.46ID:Nz2iXOdN0
>>54
> VBでIf文の条件式をカッコでくくってエラーに悩む
それエラーにならないよ
単に ( ) で囲った式になるだけだから
言うなら逆に「Cでif文の条件式をカッコでくくらずにエラーに悩む」だろうね

と言うように人は必ず間違いを犯すものだとと思ったほうがいい
あとタイプミスの多寡とプログラマーとしての能力はあまり関係ない
優れたキーパンチャーは必ずしも優れたプログラマーとは限らない
0066デフォルトの名無しさん (ワッチョイ aebb-mlD+)
垢版 |
2021/01/05(火) 15:53:00.06ID:G7CPq1YD0
ユニットテストを身につけたいのですが、公式ドキュメントにあるxUnit、NUnit、MSTestのどれが主流なのですか?
https://docs.microsoft.com/ja-jp/dotnet/core/testing/
0067デフォルトの名無しさん (ワンミングク MM92-IPp8)
垢版 |
2021/01/05(火) 17:05:19.12ID:VE6Qai0fM
>>66
どれもそれなりに使われているから何とも言えない
というかそもそもドットネットドカタはテスト書かないのが主流なので差が出ないと言うべきか
まあ仕事ならどうせ現場に合わせるんだし、大した違いはないからどれでも好きなの覚えたらいい
個人的にはxUnitが好き
0070デフォルトの名無しさん (アウアウウー Saa5-Jh9r)
垢版 |
2021/01/06(水) 16:14:14.32ID:A2mjs7EYa
Cにはboolがないから
CのifはただのJZ(jump if zero)、つまり()の中の式の値がゼロかどうか見てるだけ
条件演算子の値は条件不成立時に0になる。1 == 2という式の値は0
a = 1という式の値は1
0073デフォルトの名無しさん (ラクッペペ MM26-9Wmm)
垢版 |
2021/01/07(木) 16:37:13.71ID:JVCs6nJOM
messageboxみたいにダラダラ長い関数は左辺に結果書くほうが見やすいだろ
0077デフォルトの名無しさん (ワッチョイ 4124-h+tR)
垢版 |
2021/01/07(木) 20:35:27.74ID:CkbUzopy0
System.Text.Jsonって非パブリックフィールド含められないの?
公式にはJsonInclude属性付ければできるみたいな事書かれてるけどprivateフィールドに付けたらクラッシュする
publicフィールドならちゃんと動作するが
0078デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
垢版 |
2021/01/07(木) 21:39:53.62ID:VY2mjM+70
> 公式にはJsonInclude属性付ければできるみたいな事書かれてるけど
ちなみにどこで?
docsのJsonIncludeAttributeには
> Non-public properties are not supported.
って書かれてるけど
というかフィールドの方は触れられてもないのな
0080デフォルトの名無しさん (アウアウウー Saa5-Jh9r)
垢版 |
2021/01/07(木) 21:56:03.70ID:UQK7kjjpa
https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields
https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-immutability?pivots=dotnet-5-0#non-public-property-accessors

この二つの合わせ技で行けるんじゃないの?
まったく使ったことないから違ったらごめんよ
0082デフォルトの名無しさん (ワッチョイ 7f40-Cbw0)
垢版 |
2021/01/13(水) 19:53:35.47ID:KSPkdcXv0
C#の実行ファイルはexeなの?
linuxで実行する場合もexeファイルを起動するの?
0084デフォルトの名無しさん (ワッチョイ ffbb-4hqK)
垢版 |
2021/01/14(木) 13:03:09.94ID:xE5npB3D0
.Net 5 SDKのみしか入れていない環境では、ビルドターゲットが.Net core 3.1になっているソリューションをビルドできないんですか?
今までのバージョンもこうでしたっけ・・・・?
0087デフォルトの名無しさん (ワッチョイ 06da-DOe6)
垢版 |
2021/01/15(金) 03:46:56.47ID:rphYVuJL0
booleanを返す関数があったとします。
例外発生時はfalseを返すものとして、
try-catchでの戻り値の返し方って

■パターンA
try{
 ・・・
 return true;
}catch{
 return false;
}

■パターンB
try{
 ・・・
}catch{
 return false;
}
return true;

パターンAorBのどちらが主流とういうか分かりやすいでしょうか
0089デフォルトの名無しさん (ワッチョイ e101-JESV)
垢版 |
2021/01/15(金) 10:12:22.19ID:nDhdSCTd0
try抜けたあとにも処理を書く場合とかエラー発生時はアーリーリターンって考え方だとBのがいいと思う
0090デフォルトの名無しさん (ワッチョイ b9ce-PPGg)
垢版 |
2021/01/15(金) 23:06:32.97ID:jMoWrUgc0
WPFでdatagridを使った帳票アプリを作っていますがとても困っています
助けてください

やりたいこと
タッチ操作によるピンチイン、ピンチアウトをcanvasに追加したい
現在の状態(scrollviewer→canvas→datagrid)

問題点
この状態で canvasを拡大縮小する場合、Onmanipulation系のイベントを発生させたいが、scrollviewerやdatagrid上では、pannmodeがONだとスクロール以外のタッチ操作が効かない
(よくわかりませんが、この2つには最初からOnmanipulation系のイベントが実装されていて、e.handled=trueしてしまっているかららしい)ため拡大縮小機能を実装できない

現在
Microsoftの標準ライブラリのコードが載っているページからscrollviewerとdatagridのソースコードを見つけたため、
それぞれカスタムコントロールを作っているが、エラーが出て実装できない

教えて欲しいこと
標準ライブラリのソースコード(とtemplate)を使ってイチからカスタムコントロールを作りたいためやり方を教えてください
というかサンプルを貰えると嬉しいです

拙い文章で申し訳ないですがお願いします
0091デフォルトの名無しさん (ワンミングク MM52-3xrD)
垢版 |
2021/01/16(土) 11:21:07.86ID:ua+hsB73M
見せたくない英数字の情報を外部ファイルで使いたいです。
テキストで作った情報を加工して外部ファイルにし、アプリではそれを読み取って使います。
英数字だと、バイナリでファイルに書き出しても中身見えますよね?
どうすれば簡単にできますか?
0092デフォルトの名無しさん (アウアウウー Sa05-SZF4)
垢版 |
2021/01/16(土) 11:35:26.62ID:2pvo7lqfa
>>91
バイナリで書き出すってどういうことを想定してる?英数字の文字コードをバイナリで書き込んだらそれは単なるテキストファイルだよ。
文字コードを簡単な暗号化アルゴリズムで暗号化してから書き出して読み出すときに復号化すればいいのでは?
0094デフォルトの名無しさん (ワッチョイ cda7-sQHG)
垢版 |
2021/01/16(土) 15:46:32.13ID:5ippMHnD0
WPFってなんでも好きに作れなかったっけ?

カスタムもクソもお前が並べてコントロールデスって主張すればそれがその時点からそんなような?
スクロールバーとパネルにグリッド表示されたもん表示できれば完成でええのんか?この場合
0095デフォルトの名無しさん (ワッチョイ b9ce-PPGg)
垢版 |
2021/01/16(土) 16:36:35.17ID:PIj+e88F0
カスタム云々は手段であって目的ではないです
カスタム云々言ってるのは標準ライブラリのコントロールをちょっとだけ修正したものを使いたいため、1個の手段かなと思って書きました
最終的な目的は>>93のdatagridをタッチ操作手間ズームできる機能です

て言うか WPFスレもあったのでこっちクローズして向こうで聞いた方が良さげですかね
0096デフォルトの名無しさん (ワッチョイ 8d33-p24c)
垢版 |
2021/01/16(土) 16:55:45.03ID:a2u42RC60
ビルドして動かしてみたけど、もうできてるんじゃないの?
DataGridが拡大・縮小されたけど。
0097デフォルトの名無しさん (ワッチョイ a963-+aKM)
垢版 |
2021/01/16(土) 16:56:09.84ID:XBV3y9Xq0
>>91
用途が不明だけどテキストを暗号化するようなライブラリでも使って保存しちゃえば?
多少隠そうとしてもアプリが復号化したタイミングのメモリ覗かれたらバレちゃうけどね
0103デフォルトの名無しさん (アウアウウー Sa05-7ucn)
垢版 |
2021/01/16(土) 20:59:23.29ID:nXAeK8tya
WPFでタッチパネルによるズームや回転、Windows8が出たばっかりのころに
MSのサンプルをベースにして実験したけど、なんか落とし穴はあった気がしたけど
そんな難しくなかったような気が。

で当時ブックマークしておいたサンプルを見ようと思ったらもう消されちゃって残ってないのな。
MSって昔からほんとこういういらんことするよね。
0105デフォルトの名無しさん (ワッチョイ 6eb5-AzpH)
垢版 |
2021/01/16(土) 23:41:12.28ID:LXHuhEJj0
>>90
自分はWPFは書いてるけど、タッチパネルのコードなんて書いたことないんで分からない
でも、以下の回答をコピペしたら何かのヒントになるかな?

How to enable both scrolling and zooming using pinch in WPF?
(意訳)どうしたらタッチ操作のスクロールと縮小拡大がWPFで出来ますか?
https://stackoverflow.com/questions/57659485/how-to-enable-both-scrolling-and-zooming-using-pinch-in-wpf

質問者が自分で答えてる
XAMLとMainのコードビハインドがあるから、試せまるよね?
ちなみに、カスタムコントロールは不要だから消した、とのこと
0107デフォルトの名無しさん (ワッチョイ b9ce-PPGg)
垢版 |
2021/01/17(日) 21:28:32.39ID:XpuuOM7d0
>>90です
>>105のページを実装してかなり理想に近い形になりました
ただ問題として
・datagridのscrollviewer.panningmodeがNoneじゃないと拡大ができない
・C#側で指が2本になったらNoneにするようにするとうまく動作しない(1本目or2本目の指の変化量が取得できない?
3本目の指を使ってピンチインアウトは可能)
というところが残ってしまいました

manipulationdeltaのイベントをtouchmoveにするか、ダブルタップでズームモードとスクロールモードを切り替えるという形で妥協しようかなと思います
ありがとうございました
0108デフォルトの名無しさん (アウアウウー Sa05-tDXg)
垢版 |
2021/01/18(月) 09:58:45.73ID:xiibmO3Sa
親が同じMdiフォーム同士で値参照を行いたいのですがpublic変数やメソッドを設定しても参照することが出来ずに困っています。
初回呼び出し時は参照できるのでいいのですが、1度開いた後だと呼び出せない状況です。
なにか解決方法はないでしょうか。
0110デフォルトの名無しさん (ワッチョイ fe7c-vYIt)
垢版 |
2021/01/18(月) 10:54:28.68ID:G8032nPp0
教科書的には
共有したい値を持てるプロパティを持つクラスAを作る
親フォームはAのインスタンスを保持し、各Mdi子フォーム作成時にAのインスタンスを渡す
Mdi子フォームはAのインスタンス保持し、必要に応じて値を取得設定する
0112デフォルトの名無しさん (ワッチョイ 8d33-LWlj)
垢版 |
2021/01/18(月) 12:30:16.88ID:HexibSYs0
値が入っていないとかならありえるけど、
呼び出せなくなる状況がわからん。
初回と開いた後で呼び出すのに違うメソッド使ってて、キャスト間違ったりしてない?
0113デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/18(月) 14:29:21.82ID:0wiZZ/Q+a
>>108
率直に言って何を言ってるのかさっぱり分からんよw

プログラミング初心者なのは誰も責めないけど
説明能力欠如はNG。

能力以前に他人に理解してもらおうという努力と推敲の跡が全く感じられない。
それじゃ誰にも助けてもらえないよ。
0114デフォルトの名無しさん (ワッチョイ a124-iKK5)
垢版 |
2021/01/18(月) 14:59:06.70ID:IRtYp4a70
WPFでドラッグ&ドロップ終了時に鳴るイベントって無いの?
!AllowDropな領域やウインドウ外でドロップすると何も捕捉できなくて困ってる
MouseLeftUpも捕捉できないし
0116デフォルトの名無しさん (ワッチョイ a124-iKK5)
垢版 |
2021/01/18(月) 15:20:09.22ID:IRtYp4a70
>>115
綺麗さっぱり解決した、マジでありがとう
DoDragDropはドラック開始時に即結果返してくるもんだと勘違いしてて戻り値なんて全く気に留めてなかった
ドラッグ操作中はずっとDoDragDrop関数の中だったのか
0121デフォルトの名無しさん (ワッチョイ 2d61-Uc4C)
垢版 |
2021/01/19(火) 07:12:57.93ID:Cn/4ZVdb0
変数宣言はとりあえずvarにしといて後でなおす。
0124デフォルトの名無しさん (ワッチョイ 46de-sQHG)
垢版 |
2021/01/19(火) 08:50:15.53ID:56Cm9vi30
ってか書いた奴は自明( ・ิω・ิ)とか思っててもそうじゃないことが結構あるし
他のツールで検索したときやコメントになってる箇所はそれじゃヒットしないじゃんってなって
やるんかやらないんかで言ったらvarではなくちゃんと書いたほうがいいコードだと思う
0129デフォルトの名無しさん (ワッチョイ 46de-sQHG)
垢版 |
2021/01/19(火) 10:51:07.00ID:2Vn7p2si0
>>128
パッと見わかんないじゃん
パッと見

動かして見ないとわかりにくい系のコード最近できるだけ排除してんだよね俺

インターフェースも使うのやめた
switch caseで分岐のが綺麗で仕様もハッキリする
0130デフォルトの名無しさん (スップ Sd82-+aKM)
垢版 |
2021/01/19(火) 11:04:28.30ID:4FOEklDdd
つうかIDEにvarと型を一括置換してくれる機能あるんだから自分が読むときゃ好きな方に変換すれば良い

個人的には型がわかんなきゃ処理の流れが追いづらいのはvar以外に理由があると思うけど(命名が糞とか)
型がわかんなきゃいけない場面がそもそもレアケース
0133デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 12:27:28.26ID:PDD2cmkqa
「型が自明ならvar使え」が正しいことは自明なので、
論点は自明じゃなくて自明にすることが難しいケースがあるかどうかだね。

ないことはないね。
もちろんそういうケースだってインテリセンスで型は分かるけど
明示的に型を書いてくれた方がありがたいこともある。
0139デフォルトの名無しさん (ワッチョイ 0201-oqTY)
垢版 |
2021/01/19(火) 15:07:54.28ID:1DREI3uP0
>>133
> 論点は自明じゃなくて自明にすることが難しいケースがあるかどうかだね。
そうじゃないでしょ
var a = f();
って書くだけでf()の型を知らない限り自明じゃないけど論点は>>130が言うように型を知る必要がどれだけあるかどうかだと思うよ
個人的にはレアケースとまでは言わないけどそんなに多くないし必要な時でもIDEですぐにわかるから問題ないレベルだと思ってる
0141デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 15:33:59.98ID:+oCiGxYna
>>139
「型が自明」って言うのは右辺の式を見ただけでその型が分かるって意味だよね?

君は右辺がメソッドなら型は自明じゃないと言いたげに聞こえるけどそんなことはない。
むしろそんなケースは少ない。

では型が自明じゃないケースというのは、

(1) メソッドの命名が不適切
(2) 返り値の型が過度に抽象的だったりその問題領域でたまにしか使われない型だったりした場合

(1)は改名で改善できるけど(2)はどうやっても不可避な場合がある。
0144デフォルトの名無しさん (ワッチョイ 0201-oqTY)
垢版 |
2021/01/19(火) 15:51:48.14ID:1DREI3uP0
>>141
> 君は右辺がメソッドなら型は自明じゃないと言いたげに聞こえるけどそんなことはない。
なら>>139のaの方を書いてよ

> むしろそんなケースは少ない。
根拠があるならどうぞ、ないなら君個人の経験だよね

> (1) メソッドの命名が不適切
ヒント情報ではあるけど確実じゃないよね

> (2) 返り値の型が過度に抽象的だったりその問題領域でたまにしか使われない型だったりした場合
それはたまにしか使われないから読み手が型を覚えてないってこと?
論点がちょっと違うように思う
0145デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 16:02:16.12ID:+oCiGxYna
>>144
例えば.NETのライブラリのクラスのメソッドを見てみ。
メソッド名から戻り値の型が推測できないミスリーディグなのももちろんあるが、それは少数派。
大半はメソッド名から戻り値の型は推測できる。

ユーザーコードのメソッドも基本的はそうであるべきだしまともな人が書いたコードはそうなってる。
君、本当にプログラマ?
0146デフォルトの名無しさん (スップ Sd82-+aKM)
垢版 |
2021/01/19(火) 16:03:51.01ID:4FOEklDdd
全然意味が違う
コンパイラはvarだろうが型名だろうが完全に同じ動きをする
コンパイル時の挙動も生成結果も全く同じ
ただの文字の置き換えに過ぎない
0147デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 16:09:05.78ID:+oCiGxYna
まあ、こんな話はどうでもいい。

「論点は自明じゃなくて自明にすることが難しいケースがあるかどうか」なのは間違ってないし、
自明にできないケースが存在することも明らかに自明だ
0151デフォルトの名無しさん (ワッチョイ 0201-oqTY)
垢版 |
2021/01/19(火) 18:45:05.43ID:1DREI3uP0
>>145
そうあるべきとか言われてもねぇw
意識高い人はSystem.Collection.Generic.ListのRemove()とRemoveAll()の戻り値の型をきちんと把握してるんだろうね、俺には無理だわ

>>147
> 「論点は自明じゃなくて自明にすることが難しいケースがあるかどうか」なのは間違ってないし、
それは君の論点ね
俺としてはどうでもいい
0154デフォルトの名無しさん (ワッチョイ 6e7b-z29d)
垢版 |
2021/01/19(火) 19:43:10.02ID:84DXcEkC0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。

これ無視してどうしても雑談やくだらない議論ここでしなきゃならんの?
普通の人は117からこの書き込みまで全部あぼーんした方がいい
0157デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 21:58:18.64ID:T1q1SgZya
さすがにメソッドの戻り値の型が自明じゃないが普通とか思ってる人とは
議論にならないよね。

っていうかこういう話が通じない人、自分より下ならいいけど
上司にいるとほんとつらいw
0160デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 22:30:46.82ID:T1q1SgZya
>>158
これ前も書いたけど、君がやってるそれがまさに「マウントを取る」
行為なんだけど自覚があるかな?w
間違いなくないよね。

これも前に書いたが、1っか月で150しかレスが付かない過疎スレで
何を目くじら立ててるわけ?
誰が困るの?誰も困らないよね?

単に人にケチをつけてマウント取りたいという卑しい動機で言ってるだけだろアホかほんと
0162デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 22:35:11.09ID:T1q1SgZya
>>161
そういうのを牽強付会と言います。
0170デフォルトの名無しさん (ワッチョイ 025d-m6e0)
垢版 |
2021/01/20(水) 10:05:59.48ID:zLzflGmk0
スレが伸びててよろしい
0174デフォルトの名無しさん (ワッチョイ 91da-f4x2)
垢版 |
2021/01/20(水) 15:44:09.47ID:U6+k13Z80
null許容型関連の質問ですが、nullを許容しない型のデフォルト値はどういうものが適切なのでしょうか?

例えば、あるデータオブジェクトを指すクラスフィールドにコンストラクタ以降で設定する場合など
0178デフォルトの名無しさん (ワッチョイ 4201-73fV)
垢版 |
2021/01/20(水) 18:16:09.58ID:5gwvq16z0
>>174
null許容/非許容と関係なく設定したい値の定義域の中に
そのクラスを使う時のデフォルト値として採用できるものがあるかどうかを考えるしかない

例えば「色」を設定するとして、指定がなければ何色をデフォルトにするのがいいかはケースバイケース
当たり前のこと過ぎるから本当に聞きたいことは違ってそうだけど
0180デフォルトの名無しさん (ワッチョイ 9177-cvKJ)
垢版 |
2021/01/20(水) 18:54:07.33ID:LBcPIMoJ0
>>174

nullを許容しない型だから、値型の話だよね。

例示されいているオブジェクトを格納する型は
参照型だから関係ないよね。

値型でクラスフィールドにするものだと、
インスタンス数を記録するフィールドとかだけど、
このときは明白に初期値は0になるよね。

初期値が思いつかないフィールドなんかは、
ロジックを見直して使わないようにするのがいいと思う。
クラスフィールドならクラス内グローバル変数みたいなものだから。
0183180 (ワッチョイ 49d4-cvKJ)
垢版 |
2021/01/21(木) 09:28:06.79ID:AO+4cZ7Y0
すいません、ロートルなのでどこが知識不足なのかわかりません。
教えていただけませんか?
0184180 (ワッチョイ 49d4-9+hf)
垢版 |
2021/01/21(木) 09:42:10.43ID:AO+4cZ7Y0
すいません、ググりもしないで回答した愚か者でした。
余計なことを書いたことをお詫びします。
0189デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/21(木) 21:44:45.19ID:ggYpilOfa
>>186
フォームが崩れるって具体的にどういうこと?
0191デフォルトの名無しさん (ブーイモ MMf6-Uc4C)
垢版 |
2021/01/21(木) 22:11:43.69ID:svbwtY+WM
右足ちゃうか?
0195デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/22(金) 00:53:56.18ID:LbFG10xGa
>>194
むしろアホにしか起こせない現象だから俺には理解できないんだろうねw

賭けてもいい。
この無礼な馬鹿が自動スケーリングの仕組みを
ろくに理解せつに作り込んだバグと質問者の問題は恐らく異なる。
0196デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/22(金) 01:04:05.40ID:LbFG10xGa
コードは意図した通りではなく書かれた通りにしか動かない。

文章も自分が何を伝えたいと意図したかではなく
文面に書かれていることだけが他人に伝わる。

後者を軽視する奴は100%プログラマとしても無能だ。
ポエムじゃないんだから読み手に想像力で補完してもらうことを期待するのは間違ってる
0197デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/22(金) 01:13:27.19ID:hRbCIOLy0
>>195
説明なんか不要だろ
フォームにテキストボックスとボタンでも貼って倍率変えて実行するだけで
もうリソースエディタ?で配置した画面とは似ても似つかない画面が見えるんだから
これがわからないヤツなんてそもそもwinform触ったことすらねーだろそいつ
間違いなく質問者が聞きたいのはお前にじゃねーよw

何で知らないのにクビ突っ込んでくるのか?w
0201デフォルトの名無しさん (スップ Sd7f-n48n)
垢版 |
2021/01/22(金) 14:19:12.75ID:fukKKC/8d
wpfの唯一と言っていほどのメリットが画面scaleへの対応
winformが根強く残っていてもこの手の問題へのヘルプが今まで山のように発生している
そういった背景を知っていればあの文章だけで十分に何が問題かは予測できる上に珍しい事例でもなんでも無い
それなのに自身の無知をさらけ出し、挙げ句の果に質問者の文章が稚拙であるかのような言い訳をするのはプログラマとして無能と言えるのではないだろうか?
0203デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/22(金) 14:31:48.32ID:36C6iaEea
>>201
本気でそう思うならくだらないこと書いてないで質問者に代わって問題の詳細を
きちんと書いてくれ。

しかし馬鹿な奴だ。
何で>>197が沈黙してるのか想像力が働かないのか。

自動スケーリングはちゃんと理解してないとトラブルの元なのは確か。
しかしちゃんと理解して使えばそんな難しい話ではないし、
「フォームが崩れる」などというあいまいな表現で問題を特定できるほど
単純な話でもない。
0205デフォルトの名無しさん (ワンミングク MM3f-FIml)
垢版 |
2021/01/22(金) 18:37:43.30ID:aSTD1Cv1M
>>151
>>>145
>そうあるべきとか言われてもねぇw
>意識高い人はSystem.Collection.Generic.ListのRemove()とRemoveAll()の戻り値の型をきちんと把握してるんだろうね、俺には無理だわ
だからそれが少数派って言ってんじゃないの?
全部把握しなければいけないみたいに言ってないよね
0206デフォルトの名無しさん (エアペラ SD6b-I5Z6)
垢版 |
2021/01/22(金) 18:56:51.05ID:TU/Hr8MED
初心者 分からないので>>1のテンプレ読んで質問する
中級者 答えられる範囲で回答
上級者様 気持ち良くなるのが目的なのでスレ違いも厭わない
答えられない事も知ったかぶりして馬鹿にしたりトートロジーで誤魔化す
上級者 テンプレ>>1を理解しているので無駄な議論はせず的確に回答
0208デフォルトの名無しさん (ワッチョイ 475f-8PYP)
垢版 |
2021/01/22(金) 19:13:26.61ID:BHdCo4AB0
まだWinFormsやってるやついるのか
0216デフォルトの名無しさん (ワッチョイ 7fb5-MWrm)
垢版 |
2021/01/22(金) 22:25:31.06ID:1SSc6UOJ0
>>213
サンクスコ
知らなかった
「やっと」そんなのが出るのか、待ってたぜ
XAMLじゃなくてもC#コードビハインドだけでもUI描けるようだな
(WPFでも出来るけどな)

WPF使ってるけど、バインディングが本当にクソだわ
今までいろんなプログラミングしてきたけど、
ここまで行き詰まったことはなかった
今回こそは俺が非力ってことは認めるわ

それにしても、UWPが完全にスルーされてるのが笑えるw
0217デフォルトの名無しさん (ワッチョイ 8701-V1vN)
垢版 |
2021/01/22(金) 23:18:39.28ID:OGZfgpwn0
どうせ流行らずに勉強しても無駄になるんだろ!騙されないぞ!
0218デフォルトの名無しさん (オッペケ Sr7b-ENbf)
垢版 |
2021/01/22(金) 23:44:20.14ID:q6hHO30kr
>>216
理想を追い求めて
糞になったパターンだね。

wpfは普通にMVVMでなくても書けるよ。
大半のライブラリーはMVVM使ってないしね。
WPFのメリットはいろいろ間口が広いってことだよ。
0221デフォルトの名無しさん (ワッチョイ 7fb5-MWrm)
垢版 |
2021/01/23(土) 00:39:31.93ID:MyEcyelN0
>>218
MVVMってあれだけいろいろゴタゴタやって、恩恵は少ないよな(と俺は感じる)。
周りの人には受けが良くて褒められるけど、俺本人はギリギリでやってる、実は。

一つのクラスの内容を表示する時には何の問題も無い。
だが、二つのクラスの内容を表示しようとした途端に
それらをまとめるクラス作ったりせんといかんだろ?
毎回クソ面倒臭い。
あと、PropertyChangedとかNotifyとか、面倒臭い。
一応できるが俺の性に合ってない。
0223デフォルトの名無しさん (ワッチョイ 8701-V1vN)
垢版 |
2021/01/23(土) 01:13:07.19ID:9AM+ezO50
ってことはBlazorの時代がくるですか!?
0224デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/23(土) 01:46:14.57ID:oQsbCK+Ka
>>205
たぶん言っても無駄。
その人の目的は「他人に食って掛かる」ことなのは一目瞭然だから。
本人は自覚してないと思うけどね。

とにかく他人が言ってることを否定することだけを目的としているから
全体として何が言いたいのかさっぱり分からない。
0227デフォルトの名無しさん (ワッチョイ 874f-b71I)
垢版 |
2021/01/23(土) 10:01:09.88ID:hIt2ZLZ60
>>222
electronもまだまだデスクトップを置き換えられるところまでいってないと思うが
どういう環境のことを言っている?
それともOffice365のようにデスクトップアプリの代わりにWebベースで置き換えることを言っている?
0232デフォルトの名無しさん (ワンミングク MM3f-+HhN)
垢版 |
2021/01/23(土) 11:26:24.50ID:+GqnBbRoM
今時完全にスタンドアロンなアプリなんて絶滅危惧種でしょ
そもそもそれ言い出したらWinRTから始まりWinUI含め近年迷走を続けているWindowsのモダンUIって、
どうせ今時のネイティブアプリなんてバックエンドのWebサービスに対する薄い皮にすぎないんだからシンプルな必要最低限の機能があればいいよね、
という思想が根底にあるのだし
0234デフォルトの名無しさん (ワッチョイ 874f-b71I)
垢版 |
2021/01/23(土) 12:06:47.52ID:hIt2ZLZ60
>>228
じゃあやっぱりelectronのことを言っているのか。
デスクトップアプリをこれから開発しようという時にFormsやWPFと同列に
electronが選択肢に挙がる?

前にやったことがあるけど、クロスプラットフォームにしたいとかどうしても
使いたいjsフレームワークがあるとかの理由でもなけりゃ、面倒くさすぎて
今のままじゃわざわざ使いたいとは思わなかったが。
0237デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/23(土) 13:38:17.35ID:A5DB0QkA0
>>234
electron選択肢に上がるけどな。
C#アプリでも、もうすぐWebView2が出るから楽しみに待ってるぞ。
なんだかんだでだんだんリッチなUIが求められるようになってるし、ブラウザコンポーネントでやるのは合理的だと思ってる。
枯れてきて安定もしてるし充分速いしな。

最近UIをブラウザで作ること多いけどなかなか便利よ。
embedIOでサーバ起こして、Process.startで開くとかやったり。
Xamarinに持ってったときも一切変更せずにAndroid側でWebView貼り付けて終わりにできたし。
0246デフォルトの名無しさん (ワッチョイ 7fb5-MWrm)
垢版 |
2021/01/23(土) 16:50:48.24ID:MyEcyelN0
>>225
そうそう、一つだけどんな場面でも使えるかっちりした方法を用意してくれればいいのに、
〇〇の場合は方法1、△△の場合は方法2、みたいに場合分けがあるから分かりにくい

>>235
大賛成
WinFormの弱点を多少改善した版が欲しい
0248デフォルトの名無しさん (ワッチョイ 874f-b71I)
垢版 |
2021/01/23(土) 17:08:24.40ID:hIt2ZLZ60
周りの部署や付き合いのある外注はみんな「ふつーWPF」って感じなんだが、
2chでだけいまだにこんなにFormsにこだわってる人を見かけるのがすごく不思議な感覚。
0250デフォルトの名無しさん (ワッチョイ 7fb5-MWrm)
垢版 |
2021/01/23(土) 17:30:28.90ID:MyEcyelN0
>>247
わざとやってるのかもね
MS社員が今年の目標として「新規に○○の機能を実装する!」とか掲げて、
クソ機能を実装して今年のノルマ達成、とかね
俺らからしたら大きなお世話なんだけどな
XAMLが絡むGUIの部分はそんな気がする

C#の言語仕様自体は良い具合に他言語の良いとこ取りしてて結構好きなんだけどな
0251デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/23(土) 17:54:40.45ID:LhKkB5Axa
MSも子供の遊びじゃないんだからそんな幼稚な動機があるはずがないw

Silverlightは別物としてもWPF, Metro UI, UWPがコケた理由は単純に人、時間、金の投入量をケチって
周到さが足りなかったからだと思うよ。

Win32を作った時ぐらい気合を入れてたらもう少しマシなものが出来てたはず。

.NETやC#にも多少そういうところがあったよね。
頑張ればC#3(VS2008)を最初のバージョンにすることも出来たんじゃないか

どうでもいいけど「スレの趣旨と違う話をするな!」って人が現れないのは
きっとその人も話題に参加してるからだろうねw
言っても無駄だと思うけどそういうご都合主義を反省して欲しいよね
0253デフォルトの名無しさん (ワッチョイ 874f-b71I)
垢版 |
2021/01/23(土) 18:06:49.31ID:hIt2ZLZ60
>>249
その「レガシー」ってどういう意味で言ってるんだろうか。
今デスクトップアプリ開発するのにWPFに替わるものが他にあるということかねぇ。
上で誰かが言っていたElectronもうちの周りじゃあ1プロジェクトくらいしか採用していないが。
0254デフォルトの名無しさん (ワッチョイ 5f01-Wxou)
垢版 |
2021/01/23(土) 18:12:08.90ID:4VL29Q1J0
>>246,250
> 〇〇の場合は方法1、△△の場合は方法2、みたいに場合分けがあるから分かりにくい
違う、〇〇は方法1でもできるし方法2でもできる、△△は方法3と方法4でできる
って言うのがまずいって思ってる
具体的には個人的にはWPFはデータ・バインディングとコマンドでやるべきだと思うけど、WinFormからの移行のためかボタンに名前付けてコードから参照するとかコードのイベントハンドラをxamlで指定するとかもできる
できるのはいいんだけどWeb上の解説も両方が説明されてたり下手すると混在して使用されてたりしてわかりにくくなってるような気がする
0255デフォルトの名無しさん (ワッチョイ a733-Vkx9)
垢版 |
2021/01/23(土) 18:46:38.00ID:NjLwKFuQ0
>>254
その割には外部フレームワークを入れないといろいろ不便なのがね..。
例えばBindableBase程度のものはMSで準備して欲しかった。
ViewModelは通常このクラスをベースにして...という基本的なスタンスだったらもっと分かりやすかったと思う。
0261デフォルトの名無しさん (ワッチョイ 7fb5-MWrm)
垢版 |
2021/01/23(土) 22:17:01.87ID:MyEcyelN0
>>254
いや、あるでしょ
例えば、CLRプロパティと依存関係プロパティはどう?

それと、

>〇〇は方法1でもできるし方法2でもできる、△△は方法3と方法4でできる
>って言うのがまずいって思ってる

それって、
△△は方法1と方法2じゃ出来ないんだよな?
〇〇は方法3と方法4じゃ出来ないんだよな?
俺はそれがまずいと思ってる

〇〇が方法1でも方法2でも最終的に可能になるなら別に構わないんじゃないか?何が問題?
逆に、〇〇を解決しようと思って方法3で始めたが、後々になって方法1か方法2でしか出来ないことが判明した方が痛い
0265デフォルトの名無しさん (ワッチョイ 5f01-Wxou)
垢版 |
2021/01/23(土) 23:30:17.78ID:4VL29Q1J0
>>261
> 〇〇が方法1でも方法2でも最終的に可能になるなら別に構わないんじゃないか?何が問題?
うん、問題ないと思うならそれはそれでいいと思うよ

>>263
何を言いたいのかさっぱりわからんけど、個別の不具合の話じゃないなら説明してみて
0267デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/24(日) 00:29:30.39ID:H0Ke+o4H0
>>265
あったまわりぃなお前
データバインディングしてる変数に間違ったデータが入るようにしちゃって大丈夫か?

開始日と終了日に2000年1月1日が入ってるときに
開始日に2021年を入力したとき最大期間に反応してエラー出すだろ?
ここでエラーを出さなかったらバインドしてるGUIがおかしくなる
したらどうやって開始日と終了日に2021年を設定するんだよ
0268デフォルトの名無しさん (ワッチョイ a733-Vkx9)
垢版 |
2021/01/24(日) 02:30:17.53ID:W8Ofgakl0
>>267
InotifyDataErrorInfoなどを使う場合、実装方法にもよるけど、間違った値や無効な値を保持する設計もおかしくないと思う。保持はするがエラーが発生しているという状態で、そのエラー内容を素直にViewが表示する設計。
逆にViewModelには正しい値しか保持しないとした場合、一時的にViewとViewModelで不整合が生じている状態になりますが、皆さんどのようにされてますか?
0270デフォルトの名無しさん (ワッチョイ 5f01-Wxou)
垢版 |
2021/01/24(日) 08:34:20.11ID:G9QcBvFS0
>>267
想像以上にレベルが低かったw
なんでvalidateの仕組みがないと思った?
https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2010/june/msdn-magazine-input-validation-enforcing-complex-business-data-rules-with-wpf
まあ、validateは色々なやり方あるし相互依存とかむっちゃ面倒になったりするからWPFも結構難しくて>>267あたりだと理解できないかもな
0274デフォルトの名無しさん (スププ Sd7f-QXKr)
垢版 |
2021/01/24(日) 09:20:23.60ID:EJajcfhwd
わざと新しい難解な方法を作ってるって発想はすげえな。
新しい方法使ってみたらわかるけど、なるほど、一部の課題は解決したな、みたいな感じになるだろうに。
0275デフォルトの名無しさん (スププ Sd7f-QXKr)
垢版 |
2021/01/24(日) 09:22:49.58ID:EJajcfhwd
ViewModelはModelではないんだから、別にエラーが入ろうが何でも良いだろ。
ViewModelからModelにするときにまとめてValidationしてるけど。
そうじゃないとそれこそ依存項目のチェックが出来んじゃん。

ViewModelとしてModelを使おうとするから変な話になるんじゃないの?
0276デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/24(日) 09:33:19.71ID:H0Ke+o4H0
>>274
でもさ1つの値でうまくいってても他と絡みだすとそれじゃうまくいかんのよ
開始日と終了日は一例ね
ベース値と複数の差分値で表現してるものもうまく行かない
将来的になにかの値と関連する可能性があるならこの仕組みは入れないほうがいいかも?

データバインドっていう複数の値が連動するときにこそ役に立つ仕組みと思いきや実は鬼門とかいうおマヌケなお話(笑)
0278デフォルトの名無しさん (ワッチョイ 5f90-Woof)
垢版 |
2021/01/24(日) 11:20:17.45ID:+fPfkl180
>データバインディングしてる変数に間違ったデータが入るようにしちゃって大丈夫か?
大丈夫だろ
ビューモデルはあくまでビューの状態を表すんだから、ビュー(UI)の方で一時的に開始日と終了日が
ずれてもOKで別途最終確定ボタンみたいなUIを作るなら、
開始日と終了日の関係がずれた値(状態)になってもそれは

ビューモデル的には正しい値だぞ
モデル的には間違った値だけど

ちゃんと区別しよう
0279デフォルトの名無しさん (ワッチョイ 275f-rvE3)
垢版 |
2021/01/24(日) 11:25:48.71ID:wSlEv8S70
>>251
>WPF, Metro UI, UWPがコケた理由は単純に人、時間、金の投入量をケチって周到さが足りなかったからだと思うよ

いや
センスが無いだけだよ
どれだけリソース有っても創れない
あいつらの限界
0280デフォルトの名無しさん (ワッチョイ 5f90-Woof)
垢版 |
2021/01/24(日) 11:33:52.77ID:+fPfkl180
ビューモデルはあくまでビューの状態を表すように設計するんだぞ

最終的なモデルの状態に不整合があったらまずいが、

ビューモデルはあくまでもビューの状態を表すんだから、一時的に不整合を許すUIを
設計するなら、ビューモデルもそういう状態になるだけだし
ビューモデルからしたら別に間違った状態じゃない

だから、
>逆にViewModelには正しい値しか保持しないとした場合、一時的にViewとViewModelで不整合が生じている状態になりますが、皆さんどのようにされてますか?
とか、前提がおかしいやろ。ビューの状態を表すようにViewModelつくるのに不整合を生じるようにつくるとか意味がわからん
0282デフォルトの名無しさん (ワッチョイ 5f90-Woof)
垢版 |
2021/01/24(日) 12:13:40.42ID:+fPfkl180
ビューモデルに他にもテストしやすいとか利点あるだろ?
つか、数学じゃないから誰がもが納得する100%の
答えなんてないから君がそう思うならそう思えばいいと思う
0284デフォルトの名無しさん (ワッチョイ 7fbb-NoAX)
垢版 |
2021/01/24(日) 12:28:41.42ID:Mt48K89t0
MVVMがどうのって、今話題のMVUの話題絡みで出てきたのかと思いきや・・・・・なんも関係なかったぜ
0285デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 13:48:48.78ID:3jwmj/rb0
>>276
うまく行かないか?
全部の値でやればいいだろ。
終了日と開始日、どっちにエラーメッセージ出す気なんだ?
俺は両方だと思ってるが。

>>281
要るだろ。
試験するときにUI生成しなくてもモックModelとのUnitTest通せるし楽じゃん。
0287デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 14:40:58.72ID:3jwmj/rb0
>>286
エアプというか…普段使ってるから自信を持って出来ると言えるんだけど。
別にWPFだけではなくて、他のプラットフォームでもViewModel使ってるぞ。
自分に出来ないからといって、みんな出来ないのに出来るってフカしてると思い込むのは良くないんじゃないか?
複数の値が連動するときにこそ役立ってると思うんだが。違うのか?
鬼門だと一切思わん。
将来的に何か他の値と関連する可能性があるなら尚更じゃん。

なんでViewModelでエラーを表示してる状態が不整合なのか俺には全然わからん。
0289デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 15:02:34.21ID:3jwmj/rb0
>>288
普通に入力可能にして、エラーメッセージの表示条件が、開始日>終了日であること。
保存チェックはエラーメッセージが一切表示されていない事。Modelには一切波及せずViewModelで完結する。
仮保存のみOK。仮保存はViewModelのうちシリアライズしてはいけない項目を殺して保存。

入力中に一時的に入れ替わるなんてよくある事なんだから、いちいち選択不可にしてたらユーザビリティ悪すぎでしょ。
開始日がデフォルトで今日〜空白の時に、一昨日から昨日までの値を入れるのに、いちいち開始日から入力させんの?アホらしいじゃん。
入れ替わった時点でエラーメッセージに「開始日と終了日が入れ替わっています」と出しておけば一発でしょ。ついでに保存ボタンのEnabledも変えとくと親切だな。

エラーメッセージも、保存ボタンのEnabledも、両方ともプロパティにバインドしとけば、値を変えるだけで制御も変わる。便利よね。
0291デフォルトの名無しさん (ワッチョイ bfda-p6MY)
垢版 |
2021/01/24(日) 15:04:38.53ID:F+2F2LGq0
>>289
それがVMの役割だよなぁ
VMはViewの値をバインドしてるんだから、どんな値だろうと関係ない。
VMにバインドされた値が範囲外なら赤枠などで注意を促し、保存ボタンを押せなくする。
モデルに渡すときに仕様の範囲内であればいい
0300デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 15:12:28.56ID:3jwmj/rb0
>>298
チェックしてるじゃん。
プロパティが変わるたびにチェックされるよ。
された結果エラーメッセージが確定して、エラーメッセージが確定したら保存ボタンのEnabledが確定するでしょ。
個別のバリデーションは好きにやれば良い。同様にエラーメッセージを吐いとけば、エラーが一つでもあれば保存ボタンがDisabledになるんだから問題無い。
0304デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 15:20:53.63ID:3jwmj/rb0
>>303
開始日の横、終了日の横に、エラーメッセージを表示するラベルを置いてバインディング、
必要ならエラー項目は赤地なんかにしてもいい。
HasErrorもあるし、IDataErrorInfoもあるだろ。
好きなクラス作っても構わん。
0316デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 15:37:14.85ID:3jwmj/rb0
>>313
ViewModelが「エラーを表示している」ってのは正常系。
Modelの開始日終了日は一時的にも逆転することは無い。
なぜならViewModelが「エラーを表示している」状態からは、Modelは生成されない。

Modelにエラー出たままは許容しない。
ViewModelにエラーが出てるのは正常系。許容も何もない。
0317デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 15:38:28.95ID:3jwmj/rb0
>>315
そのレンジのグラフを表示するなら「描画できません」一択だろ。
業務アプリなら、画面入力しようとしたら一旦グラフ消すだろうし。
そうしないと、入力中のスクショ送られてきて混乱することになるぞ。
0321デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 16:05:06.18ID:3jwmj/rb0
一応言っとくが、びっくり返すのも直接Visibleを変えるんじゃなくて、Visibleにエラーが有るか無いかから算出されるプロパティをバインディングすれば良いからな。
0323デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 16:18:07.86ID:3jwmj/rb0
ViewModel使う事によって余波が減ってると思うが。

他の値は他の値でバリデーションかけたら良いだろ。
保存されるも何も、Modelとしてされないよ。一部がおかしいデータは全体として必ずおかしいだろ。
ViewModelとしては一時保存したければするかもしれんが、Modelにはならん。
その別のデータとやらが開始日と終了日に挟まれているべき日付、なんかだったらそもそもの定義が揺らいでくるじゃん。
全部Leaveするときにチェックするの?コントロール順とか、入力バリデーションに引っかかる順番ごとにテストする?組み合わせ爆発するし、ダイアログが出るかどうかなんてテスト、自動化しづらくて仕方ないじゃん。

明らかに、ViewModelとして帳尻が合ってるかをチェックする方が確実だし効率的でしょ。

だから許容も何もない。
0325デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 16:53:34.11ID:3jwmj/rb0
エラー値をViewModelとして表示するし、一時保存もするだろう。
Modelは保存しない(できない)から問題無い。
エラーも含めてUndo、Redoできて何かおかしいか?

未入力   2020/12/31
2021/01/02 2020/12/31
2021/01/02 2021/02/21
全部Undoすれば良いじゃん。
俺がよく使うのは、Undoはコントロールレベルに留めて、「入力破棄」とか「再読込」ってボタンを用意する事だけど。
変更はViewModelに留まってるから、普通に破棄してModelから再読み込みしてViewModel再構成したら終わる。

開始日終了日は確定してないけど一部だけ変更されたデータなんかを保存するつもりなの?
0326デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 17:00:54.66ID:3jwmj/rb0
ViewModelにエラーを表示している状態を保存してなんの問題があるんだろう。
実データとは全く関係ないデータなんだが。
そのあと修正して確定させないとModelに落ちないなら問題なくね?
いっつもそうして「仮保存」やってるんだけど。
番号取っとかないとダメとかはまた別のやり方するけどさ。
0329デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/24(日) 18:03:41.68ID:zEWhRUHAa
何を争ってるのかいまいちよく分からないけどずいぶん盛り上がってるね。

さすがに誰かタオル投げた方がいいレベルのような気がするけど
こういう時はなぜかだんまりなのねw
0331デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/24(日) 18:18:42.23ID:H0Ke+o4H0
>>329
実はみんな開始日終了日のデータバインドの解決方法が知りたかったけど
エラー値許容でがっかり回答だったと思う
エラー値許容は他の箇所での対処に追われるからできればやりたくないだろ
0332デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 18:19:27.82ID:3jwmj/rb0
>>328
一つのModelに開始日終了日とその別の値が入ってるなら保存するべきじゃないし、保存しないと思うぞ。
開始日終了日に関わるんじゃなくて、その画面上に表示されてるデータが確定できるデータじゃないでしょ。
正しい値でもなんでもない。

あのさあ。結局データバインディング使ってどう解決したら良いか知らないから、データバインディング使わないほうがお前の場合良いって事にしかならんでしょ。
エアプそのものじゃん。
0333デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 18:20:37.83ID:3jwmj/rb0
>>331
そのエラー値のデータは、確定されない、永続化されないから対応に追われることは無いよ。
だからViewModelに閉じ込めるんであって。
ViewModelとModelを区別できて無いじゃん。
何聞いてんの?
0335デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/24(日) 18:25:54.36ID:H0Ke+o4H0
いや、だったらデータバインドいらねーじゃん
だってそれ普通にダイアログ出してOKボタンでチェック&保存してんのと変わらんもん

なんかいい方法を知ってる神が舞い降りるのをみんな待っているのさ(笑)

俺はデータバインド使うのやめたけどw
0336デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 18:38:06.15ID:3jwmj/rb0
>>335
UI層変わったらどうすんの?
WPFからUWPやXamarinなんかに移植するとき、全部コントロール貼り直して、コントロールへの値のSet,Get全部やり変えて、全部テストすんの?
新しいUIフレームワーク出たら?

アホでしょ、常識的に考えて。
0337デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 18:39:44.53ID:3jwmj/rb0
テストするときにモックのUI差し替えて自動テスト出来るんだけど。

最終的には結合試験するだろうけど、その前の段階でも画面ポチポチしながら決定表みてテストしてくの?

工数の無駄遣いでしょ。
0341デフォルトの名無しさん (テテンテンテン MM8f-3C30)
垢版 |
2021/01/24(日) 18:50:33.38ID:g03tv9KOM
横からだけど
いままでMVVMの意義が理解できてなかったのがID:3jwmj/rb0の説明で開眼したかもしれない

WPFスレで聞くべきかもしれないけど、
View=ViewModelの保持値を表示する&入力値が変わったりボタンが押されたらViewModelの当該プロパティやメソッドを呼び出すだけの存在
 (決してビジネスロジックやバリデーションをView自体に持たせてはいけない)
ViewModel=画面上のいろんなTextBoxやLabelのTextだったりButtonのEnabledだったりを一元的に保持することだけを担う存在
 (エラー入力値なんかもあるがままに保持すべきであり、
  ViewModelでバリデーションチェックを行ったうえでバリデーションNGとかの結果もエラー表示項目の値としてセットすべきである)
Model:極論してしまえばView/ViewModel以外のビジネスロジック的な処理すべて
(UIに依存しない処理は全部Modelで書く)
っていう理解でおおむねあってる?

なんとなくだけど、上記の考え方なのだとしたら
そもそも ID:H0Ke+o4H0 の人はMVVMでなかったとしてもMVVMでいうModelとそれ以外の処理もごちゃ混ぜで書いてそうな印象
0342デフォルトの名無しさん (ワッチョイ a7a7-Bv92)
垢版 |
2021/01/24(日) 18:59:46.81ID:H0Ke+o4H0
>>341
開始日と終了日エラーでたままじゃグラフの表示範囲も決まらんかもしれんのによくやるわ

ビジネスロジック入れないでグラフの表示範囲計算できると思ってるのかよ
夢見んな
んでエラー値許容のまま放置できちゃったらエラー箇所ユーザにわかるのかよ的な
visualstudioだって一発ビルドしないとエラー箇所わからん

ボクはうまくいってないと思います
0343デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/24(日) 19:01:12.31ID:zEWhRUHAa
やっぱり何の話をしてるのかよく分からんけど
UI上の値がモデルに今反映されているのかどうかはっきりしないUIはイラッとくるね。

UI上の値がモデルに反映されていない状態を許すなら>>335が言ってるように
ダイアログ出してくれる方がフレンドリーだと思う。

許さないならUI上の値も常に不整合を許すべきではないと思う。
数直線上の閉区間(a≦x≦b)を入力するUIがあったとして、
ユーザーによるaの入力が確定した時a>bになっちゃってたらb = aに変わるべき。
0344デフォルトの名無しさん (ワッチョイ 874f-b71I)
垢版 |
2021/01/24(日) 19:05:57.47ID:1wsdfsyQ0
WinFormsのコントロールは内部状態を抱え込んでたんでテストが面倒くさかったのを
VMで外出しにした、というくらいに理解しておけばいいと思う。

バインデングいらないの人はFormsじゃあどうしてたんだろうか。
0345デフォルトの名無しさん (テテンテンテン MM8f-3C30)
垢版 |
2021/01/24(日) 19:09:39.64ID:g03tv9KOM
??
グラフ表示に必要な項目が入力エラーなら「日付が間違ってるのでグラフが表示できません」ってテキストで表示するだけだと思うんだけど

ていうか>>342のいう「グラフ作成」がbmpみたいな画像生成を指すのであれば
その処理はたぶんModelで持つのが正しい気がするし、
View/Modelが密接不可分に結合するような処理であれば
わざわざViewとModelの分離を意図してる(で合ってるよね?)MVVMにしないほうがいいのは当たり前の話だと思う
0346デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 19:57:04.13ID:3jwmj/rb0
>>341
値にしなくてもプロパティとして表現すると読み書きの方向がはっきりするし良いよ。特にEnabledとかは。

>>342
表示範囲が決まってないのに、グラフが表示できるわけないんだから、「現在描画できません」って表示するのは正でしょ。
ビジネスロジックに通したとしても、それをModelとして保存するかどうかは別問題。

エラー値許容って考え方がおかしい。
エラー箇所がわかるようにバインドするのであって、
各変数がバインドできてるかはモックViewModelを使ったUIテスト、
各種バリデーションがきちんと発生するからモックUIを使ったViewModelテストで、疎に担保するべきもの。
コンパイルエラーとかそういう次元ではなくてUnitTestぐらい通すだろ、普通。
責任範囲がまぜこぜじゃん。

>>343
業務アプリで、画面表示中の項目と、入力項目が不一致になるのは禁忌に近いんじゃないかな。
スクリーンショットからトラブルシュートするのがほぼ不能になる。

>>345
そのグラフ作成、Modelではなくて、切り出しておくべきでは?
結局のところ、一定範囲のデータを与えられて、グラフを描画するって関数なりコントロールになって然るべきだと思うよ。
内部的にbmpを生成しようが、画面に描画する以上。
そうしといたら、グラフコントロールを差し替えたい時に気楽に差し替えられる。
0348デフォルトの名無しさん (テテンテンテン MM8f-3C30)
垢版 |
2021/01/24(日) 20:57:17.36ID:nmX/+8uTM
>>346にある「プロパティ」って他言語でいうComputed Property(ごめんC#で何て言うか分からない)のことでいいのかな
であれば(and>>344の理解で良いなら)MVVM完全に理解した
ただしく適用すればソースコードの見通しがめちゃくちゃよくなるだろうと思いました
といっても普段の開発がWinFormsかASPNETCoreばっかりなんで活かせる機会なんて来ないんだけどさ

グラフ作成はViewやViewModelに押し込むくらいならModelに置いてくれと思ったけど
別に切り出せるならそのほうがもっと良いのはごもっともです
層分けって大事だよねー・・・と普段メンテしてるようなソースを思い起こしながらため息をついてみたり
0350デフォルトの名無しさん (テテンテンテン MM8f-3C30)
垢版 |
2021/01/24(日) 21:27:56.19ID:nmX/+8uTM
プロパティと聞いて「自動プロパティ」のほうがまっさきに思い浮かんじゃって
「自動プロパティじゃないほうのプロパティ」の呼び方が分からなかったんだけど・・・
何て呼ぶのが一般的なのかな
0351デフォルトの名無しさん (ワッチョイ a733-Vkx9)
垢版 |
2021/01/24(日) 22:00:13.52ID:W8Ofgakl0
>>341
あってます。
ViewModelは具体的なUIを持たないViewだと思えば良いです。
なのでVisible等のViewに関するロジックはここが持ちます。

ViewはViewModelをそのまま具体的なUIで表現するだけです。
0352デフォルトの名無しさん (ワッチョイ 87ad-QXKr)
垢版 |
2021/01/24(日) 22:02:48.96ID:3jwmj/rb0
プロパティ、そりゃどれもプロパティだな、言葉足らず申し訳ない。
Computed Propertyググった。
そう、これの事。値を持たず他のプロパティの内容から算出されるプロパティ。
0358デフォルトの名無しさん (テテンテンテン MM8f-jQT1)
垢版 |
2021/01/28(木) 12:09:38.85ID:ud5nmCvYM
Enumerable.OrderBy メソッドを呼び出す際に、
引数に送るデリゲート(Func<TSource,TKey>)を動的に指定したい。

具体的には、
List<Person> people = new List<Person>(basePeople.orderby(person => person.名前))
といった並べ替え処理を、Personクラスの各プロパティについて行いたい。
(年齢、整理番号、生年月日など)

現在はそれぞれのプロパティ(20以上)について上記メソッドを作成して
やりたいことは実現していますが、全くスマートじゃないです。

propertyinfoクラスを使って何かできないかと思ったんですが、
デリゲートの中に組み込むような使い方が全く思いつきませんでした。

どなたか分かる方教えて下さい。
0363デフォルトの名無しさん (オッペケ Sr7b-bv8J)
垢版 |
2021/01/28(木) 15:13:49.91ID:VSUe7hwUr
同一PC上でのアプリ同士の連動のさせかたを教えてください

フォームアプリケーションA.Bを作り、
Aが単独でも動くメインアプリ、Bは拡張機能付きリモコン、という風にしたいんですが、
Aのサブフォームではなく、別のexeファイルからBを起動したいです
そのうえで、同時起動中にBを操作することでAのtextboxを変更したり、Aを動かすためのメソッドをBのソースに書いてボタンイベントで呼び出し、等できると最高なんですが、
これはそもそも可能なことなのか、検索ワードすらわからず詰まってます
可能であればできるだけシンプルな方法を教えてください、
現在、C#、windowsformでAの途中まで制作中です
0367デフォルトの名無しさん (アウアウエー Sa1f-rvE3)
垢版 |
2021/01/28(木) 16:33:51.84ID:lJ0XEYQza
>>361
こんなのとか。
ただの思い付きなので動作するか確認してないし欲しいものと違ったらごめんね。

class DynamicComparer<T>:IComparer<T>
{
  public string PropertyToCompare { get; set; }

  public DynamicComparer(string propertyToCompare)
  {
    this.PropertyToCompare = propertyToCompare;
  }

  int IComparer<T>.Compare(T x, T y)
  {
    var t = typeof(T);
    var p = t.GetProperty(PropertyToCompare, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
    var xp = p.GetValue(x);
    var yp = p.GetValue(y);
    return System.Collections.Comparer.Default.Compare(xp, yp);
  }
}
0376デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 09:44:26.84ID:RldRqHno0
入門書には、クラスの設定系のメンバーは、公開する必要が無ければprivateにせよ、
みたいなことがよく書かれています。

ですが、例えば自作クラス ClassA, ClassBがあるとして、
ClassA
{
 public int IntVal { get; private set; }
 public ClassB BVal { get; private set; }
}

IntValはいいとして、BValに関しては、getプロパティでBValへの参照を取得できてしまいます。
その参照を通してBValにある設定メソッドを呼べば、BValの内容を外部から変更し放題です。

これを防ぐ方法として
1. ClassBを不変にする(ClassB内には、コンストラクタ以外に設定方法を用意しない)
2. ClassBのクローンを返す
3. ClassB内の取得系メソッドのみを集めたインターフェースを返す
4. ClassBを値型(構造体)にする
一応、以上のようなことを思いつくのですが、ここで質問です。

この問題(メンバがクラス型の場合に、セッターを単にprivateにしてもカプセル化できない)について、
皆さんはどう対処してますか?

単に「カプセル化したければこんなテクニックもあるよ」というのを紹介してほしいのではありません。
皆さんが(使い捨てでない)プログラムを書く際に、実際に、どういう考え方で、どう対処しているのか、
あるいは特に対処していないのか、を知りたいです。

よろしくお願いします。
0377デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 09:50:34.81ID:RldRqHno0
ちなみに、お前自身はどう対処するんだ?と聞かれるかもしれませんが、
C#の経験が乏しいこともあって、どうすればいいのか正直よくわからないです。
(だからみんなのやり方を参考にしたい)

C++なら、公開したい相手だけをfriendにするとか、constなポインタを返すとかするのですが。
0380デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 10:29:08.15ID:RldRqHno0
例えばint型は自由に値を設定できます(その必要があります)が、
ClassAにとっては、int型の内部データであるIntValを、ClassAの外から
変更されたくない(値の参照はしたい)ため、setのみをprivateにしています。

同様のことをClassBでもやりたいと考えているのですが・・・。
そもそもそういう考え方自体がおかしいのかな?
0382デフォルトの名無しさん (ワッチョイ 79a7-YX0t)
垢版 |
2021/01/31(日) 10:57:10.85ID:8OVECKvh0
>>380
まず前提だけど
publicやprivateで改修時の設計を制限しようと思ってるの?
正直、こんなもんお飾りだし
いざ自分がやりたい機能の邪魔になったら問答無用でpublicにする
俺だったら

まあちょっとしたメモアピールぐらいに思っておけばいいんじゃない?

会社として公開するライブラリやdllのクラスだったらそもそもクラスを丸ごと渡すような仕組みにしちゃ駄目だろ
やるにしてもアクセス用のクラス挟んでって長ったらしい設計になることは致し方ない
0383デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 10:59:20.78ID:RldRqHno0
イミュータブルというのは、>>376の方法1のことですよね?

たしかに、.Netに標準で用意されているクラスの多くは、インスタンスを一度作成したら、
内容を変更できないようになっている気がします

内容の一部を変更したいとき(例えばFontのサイズだけを変更したいとか)は面倒ですが・・・
0384デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 11:07:26.15ID:RldRqHno0
>>382
たしかに、あくまでメモ程度に考えて、気にしなければいいのかもしれません

以前、C++で、引数をポインタで渡す際、引数の中身を関数内で変更されたくないので
引数をconstポインタ型にしてたのに、関数の中でconstをキャストで外すように関数内を
書き換えられてしまっていたことがあります

気にしたらきりがないですね
0385デフォルトの名無しさん (アウアウエー Sa52-fG0K)
垢版 |
2021/01/31(日) 11:14:00.48ID:Xb450EhAa
>>383
1のことでいいよ

イミュータブルの内容を少し変えたオブジェクトがほしいけどコード書くのめんどくさい問題は昔からあった
昔は言語サポートがなかったのでコード生成で対処していた
新しいC#ではwith構文が追加されたのでこの問題は解決済み
0388デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 13:37:12.02ID:RldRqHno0
レコード型とwithについてざっとですがWebで調べてみました。
これらの機能を実際に使うかどうかはともかくとして、イミュータブルにすべきという
指針が得られたのはとても参考になりました。
ありがとうございました。
0389デフォルトの名無しさん (ワッチョイ 79de-YX0t)
垢版 |
2021/01/31(日) 14:24:54.16ID:pXICYBtJ0
俺はコードの仕組みまでいじってやるほどの問題ではないと思う
ちょっとした仕様の変更でprivateをpublicにしなければならないときクソ邪魔過ぎて作ったやつ呪うレベル
0390デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 15:52:52.73ID:QuI6Fit80
C#で作ったアプリケーションをVS2019でビルドしました。

実行ファイルが作成されたbin>releaseのフォルダに、実行ファイルがあると正常に実行できるのですが、
他のフォルダにコピーすると実行できない(ダブルクリックしても反応しない)
状態です。

なぜなんでしょう?
0392デフォルトの名無しさん (ワッチョイ 66bb-RNyz)
垢版 |
2021/01/31(日) 16:02:29.10ID:RldRqHno0
>>389
既存のコードを書き直すことは、実際にはたぶんやらないと思います(手間のわりに得られる効果は少なそうなので)。

ただ、自分がプログラミングしてると、>>376に書いたような状況にしばしば出くわすので、
他の人はどうしてるのかな?と思い、今後の参考に質問させてもらいました。

・そういう状況になるような設計がそもそも悪いのか?
・他の人はそういう状況にならないように設計してるのか?
・不便を感じているのか?いないのか?
・不便を感じているなら、どう対処してるのか?
等を知りたかったのです。
0394デフォルトの名無しさん (ワントンキン MM7a-ovjX)
垢版 |
2021/01/31(日) 16:36:30.32ID:TH60xXxXM
>>392
そういう状況になるような設計がそもそも悪い、に一票
他のクラスAの内臓を引き摺り出さないといけないような処理があるなら、それはA自身に持たせるべき
Tell, Don't Ask でググるといい
0396デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 17:16:51.45ID:QuI6Fit80
ちょっとやっかいなことになったなぁ・・・
現在tobiiのアイトラッカーは使っていないので、
tobii抜きでビルドしたいのですが、どこで設定しているのかわからないので取り除けません
sdkのアンインストールツールなんてものもなさそうだし・・・
0397デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 17:19:17.00ID:QuI6Fit80
開発したオブジェクトをtobiiを使っていない旧バージョンのプログラムにコピーしたらうまく行かないかと思ったんですが、
プロジェクト間でオブジェクトのコピーができない・・・
0398デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 17:57:24.91ID:QuI6Fit80
プロジェクトをまたいでフォームをコピーしようとすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されるのですが、何が悪いのでしょうか?
0399デフォルトの名無しさん (アウアウエー Sa52-fG0K)
垢版 |
2021/01/31(日) 18:13:15.24ID:Xb450EhAa
>>392
根本的な設計は問題ないよ
例えば注文と注文明細のようにオブジェクトが別のオブジェクトを含むという構造はよくあることだ
それ自体にはなんの問題もない

では何が問題かというとそれは注文明細をミュータブルにしてしまったこと
注文明細をミュータブルにしてしまうと
注文と注文明細の間にあったはずの不変条件を簡単に壊すことができてしまう
0400デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 18:57:41.42ID:QuI6Fit80
C#というかVSではソリューションをまたいでフォームをコピーするとかは不可能なんでしょうか?
またいでコピーすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されコピーできないのですが、これが出来ないとフォームを別アプリとかで再利用できないですよね
コピーできないはずがないだろうと思って調べているのですがやり方が分からい・・・
0402デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/01/31(日) 20:20:00.00ID:QuI6Fit80
>>401
ありがとうございます
知りませんでした・・・

ファイルコピーしたらプロジェク内に表示されましたが、
SDK導入前のプロジェクトにSDK導入後開発したフォームを移植してもうまく動かないですね
SDKを一度導入すると取り除くのは不可能なのか・・・
全く使わないDLLファイルが大量にあるってなんか気持ち悪いですが、我慢するしかないのかな・・・
0415デフォルトの名無しさん (ワッチョイ 79a7-YX0t)
垢版 |
2021/01/31(日) 23:14:50.67ID:8OVECKvh0
ループでMax出しながらカウントも行けると思うんやけど
速度的にもわかりやすさ的にも
絶対こっちのが上やんか?
それに対する反省はないん?
けったいな方法使って性能も悪いなんてなんや最高にダッサイなぁ?
0416デフォルトの名無しさん (アウアウエー Sa52-qCTK)
垢版 |
2021/01/31(日) 23:36:34.74ID:tsmk7oeqa
>>414
これ言ってる本人は語るに落ちてるって気付いてないんだろうねw

KISSの原則とか青臭いこと言いたくないけど、
ダメな人は自分が自己確証を目的にしてる自覚がないからダメなんだな

前にも書いたけどこの業界にはイキってる連中が群がってる技術は
絶対に衰退する法則があるけどそれも上記が理由の一つだねw
0422デフォルトの名無しさん (スププ Sd0a-t37P)
垢版 |
2021/02/01(月) 08:16:36.29ID:iKAM042Ld
ループでMax出しながらカウントはListに限って言えばまあ許容範囲内だけど、
IEnumerableに対する処理としては微妙じゃない?
全件かならず読み込む必要があるのと、裏がDBならクエリになって集計だけ行われるのではパフォーマンス差出ると思うが。
そのへん、バックエンドがどう、だからコードはこう、って考えるよりも、Linqで処理して弾力をもたせるってのは有りだと思うけど。
けったいな方法だとは思わん
0425デフォルトの名無しさん (アウアウエー Sa52-fG0K)
垢版 |
2021/02/01(月) 08:59:56.25ID:YMWDOp3Pa
>>422
DBうんぬんはIQueryableなので関係ない
IEnumerableになってる時点で最も効率がいいのは1回スキャン
ソースが小さいListなら効率は気にしなくていい
ファイル読み込みとかだと無視できないので汎用化したいなら1回スキャンで済むようにするのがLinqのマナー
0431デフォルトの名無しさん (ワッチョイ 6610-IZeX)
垢版 |
2021/02/02(火) 20:45:05.39ID:uZjppo1+0
すみません 教えてください
using Windows.System.Diagnostics;

SystemCpuUsageReport.UserTime
SystemCpuUsageReport.KernelTime
SystemCpuUsageReport.IdleTime
は それぞれ
ユーザーがCPUを使用していた時間(The amount of CPU user time consumed by the system.)
カーネルがCPUを使用していた時間(The amount of CPU kernel time consumed by the system.)
CPUがアイドルであった時間(The amount of time the CPU was idle.)
となっているのですが、 それぞれ、なにを表しているのでしょうか?
タイマー関数で、1秒ごとに、idoletime+Kernaltime+Usertime の差分をを求めても、
14秒から15秒になってしまうので、単純にな数字ではないと思うのですが、どのような理論で
この数字が出ているのかが皆目わかりません

よろしくお願いいたします。
0433デフォルトの名無しさん (ワッチョイ 3933-merL)
垢版 |
2021/02/03(水) 00:26:51.19ID:v8/308I10
publicなプロパティにはxmlコメントを付けると思いますが、
バッキングフィールドってどこに記入してますか?
クラスの先頭付近に書いても、
自動実装プロパティはコード上ではバッキングフィールドは無いし、
納まりが悪いです。

private string _name; //←これどこに書きますか?

/// <summary>名前</summary>
public string Name {
get => _name;
set => _name = value.ToUpper();
}

/// <summary>年齢</summary>
public int Age { get; set; }
0434デフォルトの名無しさん (アウアウエー Sa52-qCTK)
垢版 |
2021/02/03(水) 01:43:39.37ID:1I0faZoba
>>433
質問の趣旨は要するにただ「バッキングフィールドをどこに書くべきか?」それだけ?

自分はスニペットのテンプレのままなのでプロパティー本体の直前に書くけど
そんなの別にどこでもお好みでいいと思うよ。
うるさいがこう書けと言うならおとなしくそれにしたがっておけばいいと思う。
0437デフォルトの名無しさん (ワッチョイ 6aad-xXvC)
垢版 |
2021/02/03(水) 08:24:12.18ID:qNul9lFK0
久しぶりに触ってんだけど
vs2019でフォームにクラスファイルを追加するときは
右側のプロジェクトウィンドウみたいなところで右クリックして追加ないとダメなんだっけ?
メニューバーのだとただのクラスファイルを作るだけ?
0441デフォルトの名無しさん (ワッチョイ 8d66-B8+7)
垢版 |
2021/02/03(水) 09:03:06.99ID:9jfq2zZC0
書きたくないんじゃなくて書く必要がある場合にどこに書くのか?だろ
勝手に質問変えないで
自動実装プロパティでは不都合があるため自前でバッキングフィールドを用意する、は大前提
0443デフォルトの名無しさん (ワッチョイ b67c-IZeX)
垢版 |
2021/02/03(水) 09:10:29.51ID:drzEfAtQ0
>>437
「フォームにクラスファイルを追加する」が意味わからん プロジェクトにファイルを追加する?
「メニューバーの」が具体的にどれを指してるのか分からん
「ただのクラスファイルを作るだけ」がやりたいこととどう異なっているのか分からん
0445358 (テテンテンテン MM3e-cLcr)
垢版 |
2021/02/03(水) 14:11:05.34ID:QuhKbcfMM
>>359
調べてみましたが、サンプルコードを見ても良く分かりませんでした。
あとで勉強してみます。

>>367
これでも出来そうでした。アドバイスありがとう。


結果報告ですが、ExpressionTreeを使って動的にラムダ式を生成することで解決しました。
完成したコードは以下の通り。

void DynamicOrderBy(string propName){
//引数の文字列に対応するプロパティを返すラムダ式の生成
Func<Person, string> keyFunc = GetDynamicPropertyExpression(propName).Compile();

//動的に生成したラムダ式を使ってOrderBy
var sortedPeople = people.OrderBy(keyFunc)
}

static Expression<Func<KoyouPerson, string>> GetDynamicPropertyExpression(string columnName){
var type = typeof(KoyouPerson);
var property = type.GetProperty(columnName);
var parameter = Expression.Parameter(type, "p");

//p.{columnName}
var propertyAccess = Expression.MakeMemberAccess(parameter, property);

//p => p.{columnName} というラムダ式を格納した式ツリーを返す
return Expression.Lambda<Func<KoyouPerson, string>>(propertyAccess, parameter);
}
0449デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/02/03(水) 17:10:24.98ID:PTI/2U/t0
Form上のテキストボックスにファイルのパスを記入してもらって、

このパスにあるファイルをpythonで起動したいのですが

var pass = this.passSetting.Text;
System.Diagnostics.Process.Start("python.exe", @pass);

では何も起動しません。
多分
@pass
ではパスを示せてないんだと思うんですが、どうすればテキストボックスから取得したパスをProcess,Startの引数にできるんでしょう?
0450デフォルトの名無しさん (ワッチョイ 662f-unxX)
垢版 |
2021/02/03(水) 17:33:43.76ID:PTI/2U/t0
System.Diagnostics.Process.Start("python.exe", @"""L:\AAAAAA\USN_analyzer\time_series_analysis26.py""");

だとpythonのファイルを実行できるんですが、

var pass = "L:\AAAAAA\USN_analyzer\time_series_analysis26.py"
System.Diagnostics.Process.Start("python.exe", @pass);

みたいに変数で実行ファイルのパスを渡すことってできないのでしょうか?
0451デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
垢版 |
2021/02/03(水) 17:42:11.05ID:q3Uucr840
>>450
その2つだとpython.exeに渡す引数がquoteされてるかどうかの違い出るからうまく行くほうに合わせたら?

var pass = @"""L:¥AAAAAA¥USN_analyzer¥time_series_analysis26.py""";
System.Diagnostics.Process.Start("python.exe", pass);

ちなみにpassじゃなくてpath
0454デフォルトの名無しさん (ワッチョイ 6aad-RNyz)
垢版 |
2021/02/04(木) 03:54:16.03ID:8ASdjdRY0
エクセルの表みたいな
一行に複数の列(項目が並んでる 二次元の配列って
ArrayListじゃだめなんだっけ?

独自のプロプロパティをもったクラスつくってそれを列に放り込むんだったっけ?
0456デフォルトの名無しさん (ラクッペペ MM3e-mj3q)
垢版 |
2021/02/04(木) 08:09:30.76ID:+vIUF0nDM
通じない
フィールド、プロパティ、メンバ
それぞれに言語上の意味がある
0458デフォルトの名無しさん (ワッチョイ c594-unxX)
垢版 |
2021/02/04(木) 09:37:28.17ID:5uFosyLe0
WebRequestでウェブページを取得しているのですが、POSTに必要なFormDataがうまく取得できません
普通なら対象ページのHTMLを見れば取得できるのですが、対象ページの”実行”ボタンを押した時にjavascriptでPOSTに必要な情報を
生成しているようで、この値を取得できないのです。
何か方法がありましたら教えてください
0461デフォルトの名無しさん (ワッチョイ a59b-qCTK)
垢版 |
2021/02/04(木) 11:24:29.52ID:ZzRKCYY/0
selenium
0463デフォルトの名無しさん (ワッチョイ c594-unxX)
垢版 |
2021/02/04(木) 15:45:09.59ID:5uFosyLe0
>>461
seleniumってwebBrowserと同じようなものですか?
webBrowserなら操作できるのですが、画面遷移が鬱陶しいので、できればwebRequestで済ませようと思ったのです。

>>462
他でよく見るようなPOST情報しか流れていませんです。
ただhtmlではブランクになっているFormDataがjavascriptによってブランクではない値に修正されています。
javascriptの中身はこんな感じで、クリックと同時にsidの値を書き換えてそれをPOSTしています。
document.forms["form1"].sid.value = xxxxxxx
0465デフォルトの名無しさん (ワッチョイ a52c-czmT)
垢版 |
2021/02/04(木) 18:17:04.90ID:SyfdH0Mz0
public class Test
{
public int data { get; set; }
}
Test b = new Test()

bをウオッチすると、dataが、「@data」となるのですが、なぜですかね?
0468デフォルトの名無しさん (ワッチョイ 1794-56gX)
垢版 |
2021/02/05(金) 19:26:01.79ID:8Pa/tTU+0
C#でヤフーのメールサーバーからメールを送信できなくなってしまいました。
これまでのやり方はdobon.netにあるようなごくごく単純な方法です。
おそらく↓のせいだと思うのですが、ポート番号と通信方法を変更しても、固まってしまい送信ができません。
どなたか送信ができている方がいたらやり方を教えてください。

【2021年1月19日より】メールソフトで「Yahooメール」の送受信が出来ない!?Outlook・Windows Liveメール設定変更方法 | 大阪狭山びこ
https://osayama.com/security/36346

書き直したプログラムは次のとおりです。

//SmtpClientオブジェクトを作成する
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーを指定する
sc.Host = "smtp.mail.yahoo.co.jp";
//ポート番号を指定する(既定値は25) SSL使用時は587→465
sc.Port = 465;
sc.Credentials = new NetworkCredential("hoge", "fuga");
//SSLを使用する
sc.EnableSsl = true;
//SMTPサーバーに送信する設定にする(既定はNetwork)
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//メールを送信する
sc.Send(senderMail, recipientMail, subject, body);
0472デフォルトの名無しさん (ワッチョイ 1794-56gX)
垢版 |
2021/02/05(金) 22:02:49.43ID:8Pa/tTU+0
>>470
ありがとうございます。
単純にポート番号と通信方法変えるだけじゃダメだったんですね。
SMTPSで検索してみたらMailKit使えと出てきたのでやってみたらできました。
ありがとうございました。
0473デフォルトの名無しさん (ワッチョイ 9fb6-blKv)
垢版 |
2021/02/06(土) 03:01:00.29ID:Yx7joU3b0
質問させてください。
c#でgoogle drive api を使ったWindowsアプリケーションを作ろうと思っているのですが、
ビルド後に出来た配布ファイルは実行ファイルはもちろんの事、NuGetで追加したDLL群や、
取得したJSONファイルも含めて配布すればいいのでしょうか?
0476デフォルトの名無しさん (ワッチョイ ff84-56gX)
垢版 |
2021/02/06(土) 11:41:20.20ID:MqA6OGOW0
>>473
必要なファイル郡は何らかの形で入手できるようにしなければいけないので、
最低限の情報としてこのDLLとかこのJSON使ってますって情報をユーザに
与えてあげないと動かしようがないけど、配布ファイルに含めるか各自で
ダウンロードさせるかはアプリの作成者が決めること

ただし、アプリに含めて配布する場合には、自分の作ったもの以外は
再配布可能なものなのか、各々のDllとかのライセンスを確認しないとダメだよ

ものによって勝手に配布しちゃダメとか、配布にはこれを使えとか、コンパイル
済みのものは配布不可とか色々あるので
0478デフォルトの名無しさん (テテンテンテン MM8f-MALB)
垢版 |
2021/02/06(土) 17:55:40.49ID:UYR2I7R3M
Unityでゲーム作りに挑戦しているのですが、自作クラスItemをリストにした

List<Item> itemList = new List<Item>();

があって、
クラスItemはint itemIDを持っています。

itemListをitemID順にソートするにはどうしたら良いのでしょうか?

itemList.Sort();

で出来ると思っていたのですが、よく考えたら出来る訳ありませんでした・・・。
Sort()のカッコ内にitemIDを指定したり出来るのでしょうか?
取り敢えず並び替え出来れば良いので一番かんたんな方法をどなたか教えて下さい。
よろしくお願いします。。
0480デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/06(土) 18:24:06.35ID:bSeS6eqZa
>>478
ItemにIComparable<Item>を実装するか、
SortのオーバーロードのうちComparison<T>かIComparer<T>を引数にとるバージョンを使う。
あるいは>>358

ちょっとぐらいドキュメントを読んだ方がよいと思うよ。
コミュニティーに質問を投げるのはその上で疑問が解消しなかった後で遅くないでしょ
0481デフォルトの名無しさん (テテンテンテン MM8f-MALB)
垢版 |
2021/02/06(土) 18:44:12.48ID:UYR2I7R3M
>>480
一応自分で調べてはいるのでドキュメントも見るのですが、大体意味がわかりません。。

なぜ意味がわからないかというと例に
<T>などと書いてありますが、Tって何?<>の意味は?という所がわからない為です。
一度自分に近い実用例を見ないとメソッドの存在を知っても書き方がわからないのです。

>>479さんもありがとうございます。
もう少し頑張ってみます。
0483デフォルトの名無しさん (テテンテンテン MM8f-MALB)
垢版 |
2021/02/06(土) 18:59:51.25ID:UYR2I7R3M
>>482
サンプルなどで使って覚えたので。。
意味を理解しているというよりも、リストの書き方はこうって覚えています。
しかも私が言ってるのは<T>だけに限ったじゃありません。(わからないくせに偉そうですみません)

<T>に限って言えばClass名を入れるって事ですか?
0485デフォルトの名無しさん (ワッチョイ 9f52-xUEw)
垢版 |
2021/02/06(土) 19:24:51.67ID:xuEfQm7n0
>>483
そのレベルでは自分のやりたいことのサンプルだけ真似しようとしても分からないことだらけで前に進まないと思うぞ
面倒がらずにC#の入門書とかで体系的に最低限の基礎は固めなよ
0490デフォルトの名無しさん (ブーイモ MMcf-YUDs)
垢版 |
2021/02/06(土) 21:00:57.90ID:xFqAsQE9M
最低限の基礎知識の勉強は必要だよね
そうしないと検索してもここで聞いても理解できない
「やりたいこと優先」という気持ちは分かるけど

>>487みたいに変なこと教える人もいるから…
0493デフォルトの名無しさん (ワッチョイ 9f01-pSMo)
垢版 |
2021/02/06(土) 22:25:38.73ID:zn5WrP4C0
>>492
ああ、確かにPersonでName="a"は手を抜きすぎだな、"Taro"とか"田中"とかの方がいいね
その"a"とラムダ式のaは関係ない
それを示すために
> ※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい
って書いたんだけどね
0494デフォルトの名無しさん (ワッチョイ bf62-MEK4)
垢版 |
2021/02/06(土) 22:27:37.15ID:AyWHBNPF0
>>492
以下のメソッドの同じ意味
一々メソッドを定義するの面倒だし、型とか一々書くのが面倒で省略しまくったのがラムダ式と思うとイメージしやすい
int Hoge(Item a, Item b)
{
return a.itemID - b.itemID;
}
0497デフォルトの名無しさん (エムゾネ FFbf-6HDI)
垢版 |
2021/02/07(日) 18:04:33.39ID:4v/nAOdwF
個々の人たちは若い女性には優しい
0498デフォルトの名無しさん (ワッチョイ bfbb-5e/0)
垢版 |
2021/02/07(日) 20:57:57.25ID:knu7zqoU0
ラムダ式はちゃんと練習したいな、なんか練習問題集みたいなのないのかな?
特にキャプチャーの概念が自分の感覚と狂う狂う
0500デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/07(日) 21:21:56.15ID:pmm7svGna
真面目な話、ラムダ式はそこまで奥は深くない気がする。
決していきがって言ってないつもり。

キャプチャーに関してはC#5.0での破壊的変更が逆に落とし穴になってるような
気がしないでもないけど、他に直感を裏切るような落とし穴があるわけでもないし
https://ufcpp.net/study/csharp/ap_ver5.html#foreach

川俣さんの記事が割とよく書けてると思うしあれ読めば十分じゃないのかな
0507デフォルトの名無しさん (ワッチョイ 7fdf-XSVS)
垢版 |
2021/02/08(月) 01:06:18.03ID:hRlo1f3e0
c#でUSBカメラから録画・録音処理をするライブラリでいいのないですかね?
Accordを使ってみたところ、録画は上手くいったけど録音が上手く動かないしもうリポジトリもアーカイブされてるので乗り換え先を探しています。
0508デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 01:25:17.22ID:EESpGXM5a
デリゲートを理解してればラムダ式自体を覚えるのは何の苦もないと思うけど
確かにデリゲート的な概念って、プログラミング自体初心者だったりお上品な言語しか
やったことない人だと理解しづらいよねたぶん。
それはそうだと思うわ。
0509デフォルトの名無しさん (ワッチョイ 9f7c-KtkR)
垢版 |
2021/02/08(月) 01:52:41.04ID:YmxwiogA0
ラムダ式がメリットというより
引数として無名関数を指定出来るのがメリットという点を理解すれば良いだけかと
例えばよくあるソートだけど、大抵は2つの比較対象のオブジェクトがラムダ式の引数になるけど、ソート側からしたらそれをどう評価したらいいか分からないから、ラムダ式で評価する関数を戻り値として指定して、ソート側でそれを実行している訳で
この辺の説明でピンとこない人は中々理解できないかも知れない
0512デフォルトの名無しさん (ワッチョイ 37de-Wae7)
垢版 |
2021/02/08(月) 10:12:50.26ID:asopwXX20
メソッドを記述するのが面倒なだけってのはお前の都合じゃん

あの処理だけどさって同じ開発者同士で話すときに
名前がないのが超超超超超超超超強烈なデメリットしかない
0513デフォルトの名無しさん (ベーイモ MM4f-K+IG)
垢版 |
2021/02/08(月) 10:42:42.96ID:XTCsW3fgM
ラムダはその場かぎりのちっこい処理にだけ使うものだぞ
命名しておくべきような内容・ボリュームの処理をわざわざ無名のラムダにしておきながらなに言ってんだか
不便にしてるのはお前自身だろ
0514デフォルトの名無しさん (ワッチョイ 37a7-Wae7)
垢版 |
2021/02/08(月) 11:03:59.10ID:gKVPdjPN0
僕たまに一行だけのメソッドも作るんでその感覚よくわかりません

あと他でも同じ処理が必要になったときにラムダで書いたから5箇所同じことやってますとか言ったやつは死刑でつ
0516デフォルトの名無しさん (ワッチョイ 9f01-OQuQ)
垢版 |
2021/02/08(月) 12:05:27.80ID:TxCBSk9L0
>>512
高階関数に渡す処理なので
「ここのWhereの指定だけどさ…」とか
「ここのGroupByに渡してるラムダの書き方だけどさ…」で問題なく話が通じる

話が通じないようなところにラムダを書いてるなら使い方のほうが間違ってるかも
0517デフォルトの名無しさん (ベーイモ MM4f-K+IG)
垢版 |
2021/02/08(月) 12:07:08.93ID:QaH3FId2M
513はわからないんじゃなくて分かろうとするつもりが全く無いだけでしょ
その場限りじゃないことが明白なら1行の処理でも
メソッドにするのは当たり前

というか513はメソッドのラムダ表記すら難癖つけて全面禁止しそうだな
0520デフォルトの名無しさん (ワッチョイ 9f01-OQuQ)
垢版 |
2021/02/08(月) 12:16:19.29ID:TxCBSk9L0
Linqを使いやすくするためには高階関数を楽に使えるする必要があって
そのために導入されたのが無名関数とその表現形式であるラムダ式

Whereに渡す処理を必ず別の箇所で名前を付けて定義しなきゃいけないようだと面倒だし命名負荷が高い
0523デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 12:53:18.46ID:nKGEYTSta
こういう話は抽象論より具体例挙げた方が早いね

例えば>>358に出てくるOrderByが引数に取るセレクターを
実際に自分でラムダ式とメソッドの両方で書いてみれば
ラムダ式の意義なんて自ずから分かるよね

理論的根拠はその後で考えればいい
端的に言えば、アホのな初心者がやる「なんでもグローバル変数(フィールド)」がダメなのと同じ理由よ
0524デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 12:57:17.45ID:nKGEYTSta
>>522
というより、ローカル変数を禁止してすべてフィールドで書こうとしたらどうなるか、と言った方がたぶん通じると思う。
0525デフォルトの名無しさん (スッップ Sdbf-p9Hx)
垢版 |
2021/02/08(月) 13:02:05.07ID:GsV6CYPPd
ここでどんなにラムダ式を否定しようと
大多数の業界人はそうは思わないからわざわざ作られたし普通に使われてるんだよ
マイノリティなの自覚したほうが良い
0526デフォルトの名無しさん (ワッチョイ 37a7-Wae7)
垢版 |
2021/02/08(月) 13:05:23.07ID:gKVPdjPN0
ラムダ式なんて書こうとした瞬間に明らかに特殊なことしようとしてんだからメソッドにしろよw
すくなくとももう一回その処理必要になった時点でメソッドにしたほうがいいだろ?
違うか?

検索一つとってもお前と別のやつは異なるラムダ式で同じことをやるかもしれなくて
そしてそれを見つけるのは異常に困難であると予想できる
0528デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 13:13:24.77ID:nKGEYTSta
>>526
違うよ。
メソッドというのは「意味のあるある程度まとまった処理にその処理を表す名前をつけたもの」だ。

あまりに単純でアドホックな処理を無理にメソッドにしようとすると、

(1) 命名に困る(処理が単純すぎて他と区別できるような適切な名前がつけられない)
(2) メソッドの数が無意味に増えることで見通しが悪くなる

という問題が起こる。
だから、>>524をやったら起こるのと同じ問題を回避するためだよ
0529デフォルトの名無しさん (ワッチョイ 37a7-Wae7)
垢版 |
2021/02/08(月) 13:17:25.53ID:gKVPdjPN0
>>528
え?じゃあ、同じことやってるのにラムダ式1、ラムダ式2、ラムダ式じゃない方法1、ラムダ式じゃない方法2みたいなコードがソース中に散布されちゃうけど
何か防止する方法あるの?
検索一つとっても起きちゃうよね?
0530デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 13:21:46.31ID:nKGEYTSta
>>529
馬鹿の一つ覚えはよくない。
もちろんケースバイケースで再利用を意識してメソッドにした方がよいケースもある。

今の論点は「ラムダ式に存在意義はあるのか?」ではないの?
誰も「デリゲート引数には必ずラムダ式を渡すべき」などとは言ってないでしょ
0535デフォルトの名無しさん (ワッチョイ 9f7c-56gX)
垢版 |
2021/02/08(月) 14:17:19.77ID:YmxwiogA0
同じようなものをコピペするのが嫌だったら
普通にメソッド定義して、それをthis.methodみたいに指定も出来る
var q = new List<int>();
q.Add(10);
q.Add(2);
q.Add(5);
q.Sort(this.method);
foreach(var r in q){Console.WriteLine(r.ToString());}
このthis.methodが
private int method(int x,int y)
{
return x - y;
}
にしても動く
C#ならこれらの条件式を別のクラスでstaticでおいていても、別のクラス.methodみたいな指定で動く
まぁ、何度も同じような式を使うなら別のクラスに集めておくというのも無くは無いけどね
0536デフォルトの名無しさん (エムゾネ FFbf-6HDI)
垢版 |
2021/02/08(月) 14:30:19.75ID:5JxS4RLeF
>>507
NAudio
OpenCV.NET
0537デフォルトの名無しさん (ワッチョイ 7fdf-XSVS)
垢版 |
2021/02/08(月) 15:07:36.60ID:hRlo1f3e0
>>536
opencvの画像処理とNAudioの音声処理って同期できるんでしょうか?
画像フレームイベントと音声フレームイベントでそれぞれ同じファイルに対して書き込んでいくイメージが浮かびましたが
0540デフォルトの名無しさん (ワッチョイ 57e5-/W+d)
垢版 |
2021/02/08(月) 20:35:50.80ID:Pr1Hp8QQ0
λ式つかうとき、なんとなく不安なので()で囲みたくなる

()で囲むなら{return }ぐらい書いても対して変わらないような気がしてくる
0541デフォルトの名無しさん (ワッチョイ d78d-H0CZ)
垢版 |
2021/02/08(月) 20:45:30.47ID:7ndpGKbk0
一番優先すべきは自分が(グループが)理解しやすいかどうかだからいいんじゃない?
三項演算式も単純な物以外は使わない方がいいと思うし
()で囲むなら囲むで全部囲むと統一すべきとは思うけど
0544デフォルトの名無しさん (ワッチョイ 57da-ynvf)
垢版 |
2021/02/09(火) 02:08:46.17ID:W+QSEYkH0
c#はコードの記述量を減らす仕様の追加は多いよね
書き方も奇妙でなく今までの記述と整合性はあるし悪くない

でも増えた仕様を知らないとソースは読めないし覚える事が多くなって初心者が戸惑う事はないのかな
0552デフォルトの名無しさん (ワッチョイ 9f52-xUEw)
垢版 |
2021/02/09(火) 09:54:22.07ID:Ad7Y09LZ0
>>550,551
確かに初心者はラムダ式や演算子なんて用語は最初は知らないだろうけど、学習の過程で当然学ぶべき事柄でもあると思うよ。
だから、やりたいことだけググって断片的な知識を積み重ねるだけでは不十分で、最低一冊は入門書とかで基本的な用語や概念について一通りは理解できないまでも聞いたことはあるというくらいにはなっていくべきだと思う。
0554デフォルトの名無しさん (ワッチョイ 9f63-ideP)
垢版 |
2021/02/09(火) 12:10:30.66ID:5WPpwWTv0
他言語経験者が入門書をバーっと一通り見るなんて1日ありゃできるんだし、それすらやらずに演算子という単語も知らないんだから調べようがない!とかどんだけ甘えたいのとしか思えない
はじめてのプログラミングでC#やってますってのならなおさら入門書ちゃんと見ようねってだけでは
0555デフォルトの名無しさん (ワッチョイ d724-/hxM)
垢版 |
2021/02/09(火) 12:30:07.39ID:MQ4HPmPO0
ところで質問なんだけど、Jpegバイナリのポインタ、もしくはSpan<T>からBitmap作る事って標準ライブラリで可能?
byte[]にせずStreamでラップもせずに出来る方法があれば教えてもらいたい
0557デフォルトの名無しさん (ワッチョイ d724-/hxM)
垢版 |
2021/02/09(火) 12:52:26.96ID:MQ4HPmPO0
>>556
別に大した理由じゃないから実際現状はImage.FromStreamにUnmanagedMemoryStream渡してやってるけど
瞬間的に大量のjpegを変換するから標準でSpan<byte>かbyte*で渡せる関数があるならそれに越したことはないなと
0562デフォルトの名無しさん (ラクッペペ MM8f-/W+d)
垢版 |
2021/02/10(水) 17:27:33.39ID:Eg7RIeNgM
frameworkはwin10を続ける限りサポートしなくちゃいけないけど
coreは3年間だけで済む

まったくかんたんだ
0563デフォルトの名無しさん (ワッチョイ 9f7c-JWMU)
垢版 |
2021/02/10(水) 18:43:48.14ID:WeU5fM2j0
.NETなんて辞めればいいのにと思うけどねぇ
.NET Coreの事は全然詳しく無いけどGUIアプリ作るなら結局はWPFと殆ど同じぽいし
こんなの流行る訳無いよなぁ
WinFormsぐらいの気軽さが無いとちょっとしたアプリを作る気にもなれないw
もうそういうのも何でも感でもwebみたいな事になりつつあるけど
0570デフォルトの名無しさん (ワッチョイ 9701-BN1l)
垢版 |
2021/02/11(木) 06:45:22.54ID:k5l1P+DH0
XAMLがXMLでないならそうだろうな。
以下世に出たときの売り文句や

EXtensible Application Markup Language (XAML) is a XML based markup language developed by Microsoft. It is used in several Microsoft technologies like Windows Presentation Foundation (WPF), Silverlight, WinRT, Universal Windows Platform, etc. to define the User Interface for applications.
0571デフォルトの名無しさん (ワッチョイ ffb5-UcqE)
垢版 |
2021/02/11(木) 07:54:59.98ID:z8KyJUiV0
それでも「XAML=XML」じゃないだろ

じゃ、なにか?XMLで書けばデザインできるのか?

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="testxsl.xsl"?>
<おこづかい帳>
 <支出>
  <内容>
   <日付>1月20日</日付>
   <交通費>780</交通費>
   <食費>980</食費>
   <嗜好品>250</嗜好品>
  </内容>
  <内容>
   <日付>1月21日</日付>
   <交通費>950</交通費>
   <食費>1200</食費>
   <嗜好品>300</嗜好品>
  </内容>
  <内容>
   <日付>1月22日</日付>
   <交通費>500</交通費>
   <食費>1500</食費>
   <嗜好品>250</嗜好品>
  </内容>
 </支出>
</おこづかい帳>

・・・一体、どんなデザインになるんだろな、これ?
0577デフォルトの名無しさん (ワッチョイ bf42-JWMU)
垢版 |
2021/02/11(木) 09:58:06.70ID:w5wYX4n30
htmlを触れる程度の知識があればxamlでアニメーションをやらないレベルまでなら簡単に扱えるはずなのにな
webアプリを使える設定の人が何故そこまでxamlを拒否するのか理解に苦しむ
0579デフォルトの名無しさん (ワッチョイ b702-kbB0)
垢版 |
2021/02/11(木) 10:04:15.26ID:zlnnHWka0
このまえ興味本位で「WinFormsぐらいの気軽」なソフトを WPF で作ってみたけど、別にタイヘンってことはなかったような。
まあ環境が違うから覚えることはあったけど。・・・もう忘れたけど。w
0586デフォルトの名無しさん (ワッチョイ bf42-JWMU)
垢版 |
2021/02/11(木) 11:22:49.45ID:w5wYX4n30
Formsもそのまま使えば楽ちんだけど、ちょっと凝ったことやってオーナードローに手を出すと途端に面倒になる

>>584
WinUIになるとvmにイベントハンドラを書けるから、そこらへんは解消されるんだけどね
0588デフォルトの名無しさん (アウアウエー Sadf-blKv)
垢版 |
2021/02/11(木) 12:46:25.44ID:c/k7g2fva
WPF(XAML)固有の問題なのか宣言型に一般的な問題なのか判断するだけの
経験がないのでアレだけど、WPFの一番嫌なとことは
自分が書いたコードでも後から見たとき何をどうやって実現してるか、
理解するのに時間が掛かり過ぎること。これが他人の書いたコードならなおさら。

なんちゃらフレームワークでMVVMなんてやってるとこの傾向にさらに拍車がかかる。
こんなもの推進してる奴はメンテを考慮する必要性がなく他人のコードを読むことも
やらない人種なんじゃないか?というのが偽らざる感想。

ちょっと上のラムダ式批判とかはスタティックおじさん級の無理解か勘違いだろうけど、
誕生から15年とか経過してここまで普及しないXAML系はやっぱり根本的にどこか問題があるとは思うね。
0593デフォルトの名無しさん (ワッチョイ d74f-QgsX)
垢版 |
2021/02/11(木) 17:04:29.55ID:zGBoORUF0
その辺の印象はやっぱりxml自体に馴染みがあるかどうかで違うんだろうな。
自分は独自文法よりxmlの方がよっぽどありがたいが。

あと現実問題として、サードパーティのコンポーネントを追加するなら名前の
衝突をを考慮しないとならないが、xmlなら名前空間が規格に含まれているので
こういった用途に適している。
0594デフォルトの名無しさん (ワッチョイ 9701-vsPm)
垢版 |
2021/02/11(木) 17:34:42.76ID:89K1HM4Z0
>>592
Blendを作る為に必要だった機能だからね。
使わなきゃ意味...

>>593
XAMLとその上に構築された
MVVMライブライリがゴッチャになってるね。

XAMLのタグはC#で簡単に作れる事に
気づけてない人の割合は99%ぐらいなのかな?
0608デフォルトの名無しさん (ワッチョイ b702-kbB0)
垢版 |
2021/02/11(木) 23:42:04.25ID:zlnnHWka0
>>596
自分で書かなきゃならないコード量ってそんなに違ったっけ?
このまえ「WinFormsぐらいの気軽」なソフトを WPF で作った時は自分で書いた量はそんなに違わなかったような。
0610デフォルトの名無しさん (ワッチョイ 9354-cU8Z)
垢版 |
2021/02/12(金) 02:33:39.65ID:8skgNT+D0
非同期の勉強してるんですが、
1つの処理を非同期にしたら、それを呼び出すメソッドも、更にそのメソッドを呼び出すメソッドも非同期に・・・・
って感じになってしまうんですが、ピンポイントで非同期にして上手い設計にするコツを教えてください。
0614デフォルトの名無しさん (ワッチョイ 9ebb-9N8P)
垢版 |
2021/02/12(金) 04:35:12.34ID:0YHTI9ak0
でもこう間違ったのはよく理解できる
結構な数の入門書やブログに、こういった間違った記述があるんだよな
0615610 (ワッチョイ 9354-cU8Z)
垢版 |
2021/02/12(金) 04:43:36.86ID:NIOdbtDV0
ありがとうございます。ググってみました。

非同期処理の結果を受け取るために、Result ばっかり使用していたのですが、デッドロックするという情報を見て脳死してました。

・戻り値が欲しい場合は呼び出し元の同期メソッドで、GetAwaiter(false).GetResult();
・非同期メソッド内で処理完結させたい場合は、GetAwaiter(false).OnCompleted();
・同期メソッド内で非同期処理を完結させたい場合は、Task.Run();
をすればとりあえず大丈夫そう?という感じみたいなので、これをベースに考えてみます。

今勉強で作ってるのが WinForms アプリですが、多くの処理の起点が戻り値 void のイベントハンドラで、
GetAwaiter(false) にすれば、空いてるスレッド使うことでデッドロックのリスクも下がる(なくなる?)みたいなので、試行錯誤してみます。
0616デフォルトの名無しさん (ワッチョイ c232-oFCC)
垢版 |
2021/02/12(金) 05:48:58.46ID:jWNhPSPe0
>>615
それはResult云々というより変な場所でawaitしてるとじゃないの?
Awaiterは直接扱う物じゃないしConfigureAwaitの間違いだと思うけど
基本的にはUIスレッドで待つ・結果を得るならTaskをawaitするだけ
ライブラリ作るとか、妙な組み方しなければ意識する必要はないはず

元スレッドを解放したい場所(多くの場合UIスレッド)でawaitを使う
非同期処理ならば結果を取り出して返すのではなくTaskを丸ごと返す
勿論それが絶対ではないが、大抵の場合はそれで済むんじゃないかな
あとはProgress<T>とかContinueWithとかTaskExtensions.Unwrapとか
0617デフォルトの名無しさん (ワッチョイ 1f24-mR93)
垢版 |
2021/02/12(金) 09:14:15.17ID:Sw85Yz/U0
>>600
WinFormsは要素を大量生成するとバカ重くなるという現代GUIには向かない根本的欠陥がある
WinFormsもといWin32はコントロール一つ一つがCreateWindowで生成されるウインドウだからな

その点WPFはWindowクラス以外は基本「ただの絵」であるため大量生成してもそこまで重くならない
が、WPFは抽象化に抽象化を重ねまくったせいで初期の時点でかなり重いという元も子もない産物だが
0618デフォルトの名無しさん (ワッチョイ 1663-CPJR)
垢版 |
2021/02/12(金) 09:30:08.77ID:1LnGwNFm0
WPFは無かった扱いにしてパフォーマンスも記述も洗練された奴を作り直してくんねえかな
悪くなかったとしても15年前のアーキテクチャだ
バージョン2が出てもいいだろう
0620デフォルトの名無しさん (エムゾネ FF32-olyV)
垢版 |
2021/02/12(金) 13:13:53.93ID:x9NfpsA7F
yield
0630デフォルトの名無しさん (ワッチョイ 1201-EsoH)
垢版 |
2021/02/14(日) 00:44:18.09ID:D24G58JB0
>>624
ホントそう思うしMSも下手にWinFormsと同じようにイベントハンドラー書けるようにするもんだから>>625みたいに上位互換とか勘違いする奴が出てくる
別物としてMVVM守んねーと書けないからちゃんと勉強しろ、できねー奴は切り捨てる!
ぐらいすればいいのに
0636デフォルトの名無しさん (ワッチョイ 527c-OxJ8)
垢版 |
2021/02/14(日) 01:01:03.63ID:Vd2M5/i80
WinFormsと同じコントロールを用意しているなら上位互換だけど
WPFはコントロールの数は減っているし、同じ名前ですらないし
ちょっとしたツール作るだけならWPFで作る理由が全然無いな

世に売るようなものでデザインとかスケーリングとか考慮するなら
WPFでもアリだろうけど、今はelectronとかで作ったほうがmacにも対応出来るし
WPFはもう過去のものという感じがするわ
0638デフォルトの名無しさん (アウアウエー Saaa-pCKf)
垢版 |
2021/02/14(日) 01:32:57.20ID:a94i0UVza
前も書いたかもしれんけどデータ数が多い折れ線グラフなんか実装しようとすると
行き詰るんだよねWPFは。これでWPFが嫌いになった。

あと、これは勉強不足で勘違いしてるかもしれないけどGDI+みたいに印刷と画面を
透過的に扱えない。
0642デフォルトの名無しさん (ワッチョイ a701-pCKf)
垢版 |
2021/02/14(日) 02:02:16.26ID:wyKYn9A/0
>>641
無いです。
外向きにMVVM対応させて内部実装は普通の実装です。
まあ最短高速な実装です。

昔クラスが1000以上あるでかいグラフコントロールを改修したときも、
内部はMVVMじゃなく普通の実装でしたし、
それ以外の関連コントール(とある会社のWFPコントールスイート製品)
もそんな感じでした。
0649デフォルトの名無しさん (ワッチョイ 1f24-mR93)
垢版 |
2021/02/14(日) 11:00:50.44ID:zLYzvO1s0
>>643
作ろうと思えば作れるだけマシ
WPFはちょっと頑張れば最新ゲームのUIかのようなトリッキーなものも普通に作れるからな
WinFormsで同様の事をしようとするとOnPaintオーバーライドするなりしてGDIやDirect2Dで自力描画しないといけない(描画のみならずマウスの感知動作なども自力計算)
実際俺は自力描画でWinForms版マテリアルデザインとか昔作ってたけど
0650デフォルトの名無しさん (アウウィフ FFc3-olyV)
垢版 |
2021/02/14(日) 11:35:44.81ID:PGTjJwEIF
+1
0651デフォルトの名無しさん (ワッチョイ 16b5-duN9)
垢版 |
2021/02/14(日) 13:02:54.63ID:QrfVAGKh0
>>649
俺もWPFでそれなりのことをやってるが、
そもそも業務アプリにはそんな「トリッキー」な機能は要らん
他の人も言ってるが、WinFormsで充分
…という話がまだ理解できないのか?
0655デフォルトの名無しさん (ワッチョイ 1f24-mR93)
垢版 |
2021/02/14(日) 13:25:35.27ID:zLYzvO1s0
>>651
別に俺はWinForms要らないとも言ってないしWPFマンセーする気はない
小規模アプリであれば「WinFormsで十分」は同意だけど、中規模以上だと何だかんだでMVVMのが生産性高いしカスタム要素が必要になる率も高いから「WPFで十分」も同様に言えるんだけどな
まぁ俺はそもそもqt派だからもう全然まともにデスクトップ開発でC#使ってないが
0656デフォルトの名無しさん (ブーイモ MM0e-UZ9t)
垢版 |
2021/02/14(日) 13:35:12.11ID:N/o0G9JEM
トリッキーな機能は要らないからプレゼンテーションはフレームワークにおまかせして
人間はモデルの実装に集中しようぜ
それができるのがMVVM、MVUだよって話だろ
WinFormsだと一番省力したいプレゼンテーションで疲弊するじゃん
0659デフォルトの名無しさん (ワッチョイ 1e42-DrOF)
垢版 |
2021/02/14(日) 14:14:37.91ID:/ikZE8v50
MVVMは単なるXamlの付属品じゃなくて、Prism.Unityを中心としたページ遷移型のアプリケーション構築
EventAggregatorによる疎結合のイベント通知、DIコンテナによるモジュールの管理なども有る
勿論web系でも使われている技術だけど、Formsではあまり使わない技術だね
ここらへんを一度使っちまうとFormsには戻りたくなくなる
0661デフォルトの名無しさん (ワッチョイ ef93-VJu3)
垢版 |
2021/02/14(日) 14:43:14.04ID:UC+EmpeR0
冗談のつもりだったのにホントに日本語理解できてないのか?

ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463

移動できない奴は、バカなのでぼくの主張は間違ってますって言ってるのと一緒だと気付けよ
0663デフォルトの名無しさん (アウアウエー Saaa-pCKf)
垢版 |
2021/02/14(日) 17:40:25.04ID:qsBeAXJea
何度も言うけどこんな過疎スレでなんで一生懸命「交通整理」してるのか、
その自分の動機の卑しさを自覚できない奴が一番バカっぽいと思うよw

誰かのため?みんなのため?
絶対違うよねそれ。
いやこれマジで大丈夫か。
0664デフォルトの名無しさん (ワッチョイ d602-w1GE)
垢版 |
2021/02/14(日) 19:57:36.92ID:xK5MF7GG0
>>616
615じゃないけど質問です
>基本的にはUIスレッドで待つ・結果を得るならTaskをawaitするだけ
wpfで結果を得てプロパティを変更しイベントが発生する場合
Dispatcher.BeginInvokeは必要ですか ?
0667デフォルトの名無しさん (ワッチョイ 162c-FDiY)
垢版 |
2021/02/14(日) 20:53:10.91ID:K2VDjDyL0
Ruby on Rails で、控えめなJS フレームワークの、Stimulu を使えば良い

規約で、HTML のdata-controller 属性で、JSファイル名・コントローラーが決まるので、
そこにイベント処理を書くだけ

DOM・コントローラーは、多対多

1つのDOMは、複数のコントローラーで処理できる。
HTML内で、同じコントローラーを複数定義できる
0669デフォルトの名無しさん (ワッチョイ c232-oFCC)
垢版 |
2021/02/14(日) 21:22:32.21ID:EcQCs95s0
>>664
そのレスはTask使ってるのに一々同期的に取り出してそうに見えて
固まらせたくない箇所を非同期にすれば良い的な意味合いで質問と噛み合うかどうか

そのプロパティを変更するのがUIコントロールでスレッドが異なれば必要…なんだけど
TaskをConfigureAwait(false)してなければawaitは待機元スレッドに帰ってくるよ

BeginInvokeはTaskベースで使うかな?別スレッドから実行させるならProgress<T>とか
4.5未満としてもSynchronizationContext.PostやTaskSchedulerを指定してContinueWithかな
0670デフォルトの名無しさん (ワッチョイ d2ad-DrOF)
垢版 |
2021/02/15(月) 08:14:10.72ID:rMuvZP7r0
surfaceやipadなどで使えるクロスプラットフォームの、ペイントアプリを作ってみたいのですが、
C#が採用されているペイントソフトや3DCGソフトで有名なのってありますか?
0675664 (ワッチョイ d602-w1GE)
垢版 |
2021/02/15(月) 15:06:53.89ID:Hxbo2jbM0
>>668,669
質問が下手ですみません。質問を変えます

private async void Button_Click(object sender, RoutedEventArgs e)
{
Button.IsEnabled = false;
await Task.Delay(2000);
Button.IsEnabled = true; // *1
}
タスクが完了したときにUIスレッドが作業中だったとします。
そうすると、UIスレッドは作業を中断して *1を呼びますよね。
この解釈で正しいですか ?

だとすると、Buttonに対して
Button.IsEnabled += Button_IsEnabled がある場合、
UIスレッドが作業中だとUIスレッドは混乱するのではないかと思っています。

混乱を解消するには、awaitの後処理にはUIスレッドが暇になるのを待つ必要があるのではと考え、Dispatchr.BeginInvokeを思いつきました。
ただし、BeginInvokeを追加した例が見当たらないので、もっとうまい手があるのかもしれないと思い、質問しました。

長文失礼
0676デフォルトの名無しさん (ワッチョイ 527c-Oe62)
垢版 |
2021/02/15(月) 15:24:35.05ID:89MhGAsi0
実際の実装は知らんがWindowsのメッセージループを処理するスレッドがUIスレッド(メインスレッド)だろうから、その手のスレッドプールで処理されるものは処理が終わった時点でメインスレッドにメッセージをポストしてメインスレッドがメッセージを受信したときに終了後の処理がされると言う流れかと
0678デフォルトの名無しさん (ワッチョイ c232-oFCC)
垢版 |
2021/02/15(月) 17:54:07.29ID:ytBU07x20
>>675
作業を中断して*1を呼ぶというのは不適切に感じます。中断というならButton_Clickがawaitで後続処理が保留になる所でしょうか
そうなると*1が再開される手順ですが、UI処理はメッセージ単位なので>>676が仰る様なその合間に完了を感知してになると思います
このメッセージキューがパフォーマンスや互換性問題から専用スレッドによる処理が前提なのでBeginInvokeなどが必要になる訳です

翻ってawaitを使うとその辺りをやってくれます。FormsやWPFで異なる手順を抽象化したものがSynchronizationContextやTaskSchedulerですが
それらを推し進めて簡便に扱えるようにしたのがasync/awaitです。※同期的待機内で非同期待機とかしなければそんなに留意する必要はありません

技術的な解説については↓等が参考になると思いますが、直下のコードについてはTaskベース世代のものではないですね
https://docs.microsoft.com/ja-jp/dotnet/desktop/wpf/advanced/threading-model?view=netframeworkdesktop-4.8
0679664 (ワッチョイ d602-w1GE)
垢版 |
2021/02/15(月) 19:20:24.59ID:Hxbo2jbM0
>>677,678
私の例で *1のプロパティ変更と通知ではメッセージループを使っているのかもしれませんが、*1の呼び出しは awaitの後続処理ではないでしょうか

次の例はまずいのではないでしょうか。
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Delay(2000);
MyCLREvent(this, EventArgs.Empty);
}
0682デフォルトの名無しさん (ワッチョイ c67c-FDiY)
垢版 |
2021/02/16(火) 09:52:46.68ID:ZNVxOhBd0
ボタン2つ用意してこういうので確認してみては
async void btn1_Click(object sender, RoutedEventArgs e) {
await Task.Delay(2000);
Trace.WriteLine("btn1");
}
void btn2_Click(object sender, RoutedEventArgs e) {
for (int i = 0; i < 10; i++) {
Thread.Sleep(300);
Trace.WriteLine("btn2");
}
}
0683デフォルトの名無しさん (ワッチョイ c232-lrpJ)
垢版 |
2021/02/16(火) 22:48:01.66ID:/yXZfRwG0
csvで数字を読み込んで、それをグラフ化して表示して、GUIの画面ごとスクリーンショットして保存するWPFプログラムを作ってます。
グラフはwindowsformhostを使ってchartコントロールで表示させています。

VisualTreeHelperでGUIの縦横サイズを取得して、RenderTargetBitmapにDrawingVisualを渡してスクリーンショットしているのですが、chart部分が保存されません
Graphics.CopyFromScreenというのも試してみましたがこちらではchartも表示されるものの、ウィンドウのドロップシャドウみたいなものが一緒に保存されてその分縦横がズレてGUIの右下が見切れます。
解決策を教えてください
0686デフォルトの名無しさん (オッペケ Src7-adQg)
垢版 |
2021/02/17(水) 14:41:28.07ID:UPYA2zP2r
ディスプレイ上の座標を指定して、
画面の指定部分をそのままフォームに表示させたいと思っています
まずこれが可能なのかが資料見つかりませんでした
可能なら、毎回スクショ切り取って保存して表示、とかせずに、リアルタイムで反映させたいです

また、そのようにして表示した画面に、拡大や色反転などの加工を行うことは可能でしょうか?
0688デフォルトの名無しさん (ワッチョイ c67c-FDiY)
垢版 |
2021/02/17(水) 16:27:46.54ID:VhEokLWI0
可能かどうかで言えばWindows標準の拡大鏡ツールで実現できてるから可能といえる
C#で実現するのにはまあまず687を試してみればいいんじゃないかな
あと著作権保護されてるコンテンツを表示してる部分は多分無理
0690デフォルトの名無しさん (ササクッテロ Spc7-Jyxv)
垢版 |
2021/02/17(水) 23:31:19.68ID:5a8siaYVp
リアルアイムでやるならWindows.Graphics.CaptureやDesktop Duplication APIだな
0696デフォルトの名無しさん (ワッチョイ 96bb-9N8P)
垢版 |
2021/02/18(木) 09:27:17.33ID:jXEmO6nJ0
Swiftスレにも似たようなこと書いてる奴がいるから、きっとこのことをまとめてアフィブログにでもするんだろう
0697デフォルトの名無しさん (ラクッペペ MMde-HHI4)
垢版 |
2021/02/18(木) 10:41:06.50ID:4sNPnSsIM
Debug.Printの引数はリリース版でも評価されますか?
0700デフォルトの名無しさん (ワッチョイ 162c-FDiY)
垢版 |
2021/02/18(木) 22:14:18.02ID:UlBwu06v0
Ruby on Rails は、設定よりも規約

プロジェクト構成・名前付けルールなど、すべて決まっているから、
誰でも、同じ構成で作る

これが「レールに乗る」と言う事。
Rails のルールから外れて、独自なものを作ってはならない

オレオレ構成みたいなものを認めていない
0708デフォルトの名無しさん (ブーイモ MMff-wfSA)
垢版 |
2021/02/19(金) 09:55:27.59ID:SQn3IdCjM
プロジェクトのディレクトリ構成はアーキテクチャ設計を反映したもの

アーキテクチャ設計が詳細設計に含まれてるならで詳細設計段階で決める

Railsのようにアプリの機能構成に関係なく一律同じディレクトリ構成にするのもそれなりのメリットがある
0709デフォルトの名無しさん (エムゾネ FF1f-ZFay)
垢版 |
2021/02/19(金) 15:40:30.15ID:LoU7pdW5F
>>707
日頃の行いが相応に報われてるだけ
フェミフェミ噛みついて本気でフェミに迷惑掛けてるのがフェミ
0710デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/19(金) 18:51:07.37ID:xy8YPNBA0
初心者です。画像の一部をクリックすると画面遷移を行うようなプログラムを
作りたいと考え、自分なりに作ってみたのですが
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class NG2to3 : MonoBehaviour
{

Vector2 Pos;
void Start()
{}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Pos = Input.mousePosition;
if (-15 <= this.Pos.x && this.Pos.x <= 15 &&
  -35 <= this.Pos.y && this.Pos.y <= -15 )

{
SceneManager.LoadScene("scene3");
}
}

}
}

このプログラムで指定したPosの範囲の場合画面遷移を行いたいのですが、
画面の至るところをタッチすれど遷移してくれません。
どこが間違っているのか教えていただきたいです。
0718デフォルトの名無しさん (ワッチョイ f361-cyI8)
垢版 |
2021/02/22(月) 18:39:45.74ID:5BxgjfJ50
リストじゃなくレコードじゃね?と言ってみるテスト
0720デフォルトの名無しさん (ラクッペペ MM7f-0TpN)
垢版 |
2021/02/22(月) 19:22:09.14ID:rk3Z26pVM
カレーとコンビニ、どっちにする?
0721デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/22(月) 21:06:02.69ID:8s+nkcdt0
スクリプトから条件で画像を表示させたいんですが、張り替えは出来ても新しく出現させることってできない?
0727デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 00:10:32.83ID:qmo9+9Uk0
すいませんw
2Dunityでボタンを押したら画像を表示できるようなプログラムを作りたいのですが、
調べてみても元々ある画像をスクリプトによって別の物に変更するものはあれど
ボタンを押して0から画像を表示させることができるようなものを
見つけられなかったので、できないのかなと。。。どうなんでしょう?
0729デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 01:56:55.10ID:qmo9+9Uk0
>>728
詳細を教えていただきたいですw(__)
0731デフォルトの名無しさん (ワッチョイ a324-wc/N)
垢版 |
2021/02/23(火) 09:57:34.63ID:kvat21cB0
Windows下におけるmalloc = HeapAllocだけど
どこかしらでロードせざるを得ないネイティブdll内で当然の如くmallocは行われまくってる訳だからその程度でバグったら言語として成り立たない
0736デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 12:52:43.06ID:qmo9+9Uk0
>>735
こちらを参考にSetaActiveを使えばできました!
ありがとうございます。
0737デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/23(火) 17:06:07.35ID:Ke2QO8XG0
質問よろしくお願いします。

uint 型の二つの値 x, y について、

x = 0b_0101, y = 0b_0110

のように最上位の 1 のビットの位置が同じなら true を返し、

x = 0b_0101, y = 0b_0011

のように最上位の 1 のビットの位置が違うなら false を返す関数を
作るというクイズをやっていて、

static bool BitsEquals(uint x, uint y) => (x ^ y) < (x & y);

という答えを考えました。
しかし、どうやらもっと演算の回数が少なくてすむ方法があるらしく、
それがどうしても分かりません。

どなたか良いアイディアをお持ちの方がいらっしゃれば教えていただけないでしょうか。
どうぞよろしくお願いいたします。
0742デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/23(火) 20:26:05.61ID:Ke2QO8XG0
レスありがとうございます!

>>738
> クイズでも出されたの?
おっしゃるとおりです。ネットで調べるのは OK なのですが、
外国語も含めて検索してみても私の力では解決できそうになかったので
こちらで質問させていただきました。


>>739
説明がうまくできなくて申し訳ありません。

x = 0b_0101, y = 0b_0110

の例だと、1 になっているビットで最上位のものが
両方とも下から数えて 3 番目なので true なのですが、

x = 0b_0101, y = 0b_0011

の例だと、x は先ほどと同じですが y のほうは 1 になっているビットで
最上位のものが下から数えて 2 番目なので、false になります。


>>740
補足どうもありがとうございます。
最上位ビット(MSB)というと普通は >>739 さんのおっしゃっているような
意味で捉えられそうなものなので、最初からもう少し丁寧に説明すべきでした。


どうぞよろしくお願いいたします。
0748デフォルトの名無しさん (ワッチョイ b35f-Rlil)
垢版 |
2021/02/23(火) 22:04:06.39ID:6EEdG0Ut0
>>747
普通に考えたら命令ステップ数のことだろうな

今の時点でビット演算2つと比較が1つなので、boolを返す以上は比較は外せないから、これより少ない(軽い)となると、なかなか難しいね
0753デフォルトの名無しさん (ワッチョイ ff63-bUHw)
垢版 |
2021/02/24(水) 00:39:34.09ID:bQ0lAzRD0
(x^y)<(x<y?x:y)
こんなのはいいのかな?
細かくテストしてないからバグってたらごめん
演算1回比較2回だから演算回数は減ったとも言える
どっちが早いかは最適化とかCPUとか次第な気もするけど
0754デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 00:52:24.83ID:jmWlpF6B0
皆様レスどうもありがとうございます。

>>743
> > 比較する2つの数値はビット長が一緒なのか
> さすがにそれは仮定してもいいんじゃね?
補足ありがとうございます。
ひとまず、符号なし32ビット長整数ということにさせてください。

>>744
> 2*x<y
> でいいんじゃないの?
実際、(x ^ y) < (x & y) より簡単なものを探そうとすると
もうそのくらい簡単なものくらいしか候補に残らないですよね。
もしくは、何か発想の転換が必要なんでしょうか。。。

>>745
> x = 1, y = 1 がfalseになるんですけど…
このレスを読んで思ったのですが、
(x ^ y) < (x & y) という計算も x = 0, y = 0 のときは
false になるんですよね。
最上位の 1 の位置を比較するのが目的なので
x や y が 0 のときは気にしなくてもいいのかもしれませんが、
やはりちょっと不自然なので (x ^ y) <= (x & y) のように
等号付き不等号にしたほうがベターでしょうか。
(ただ、
 Math.Floor(Math.Log(2, x)) == Math.Floor(Math.Log(2, y))
 という式は x = 0, y = 0 のとき false になるようです)
0755デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 00:54:09.63ID:jmWlpF6B0
>>747
> BitOperations.LeadingZeroCount(val)
> の比較じゃダメなの?
なるほど!こんな関数があるんですね。
BitOperations クラスのドキュメントを読んでみると
「これらのメソッドでは、基になるプラットフォームで使用可能な場合、
 ハードウェアの組み込みを使用します。」
と書いてあるので、良い答えになりそうです。
アドバイスどうもありがとうございます。

>>748
> 今の時点でビット演算2つと比較が1つなので、boolを返す以上は比較は外せないから、
> これより少ない(軽い)となると、なかなか難しいね
難しいですよね?!
普通の演算子だけを使うなら考えられるパターンは限られているので、
やはり拡張命令を使うとかテーブルを用意するとか、
なにか根本的な発想の転換が必要なのかもしれません。

>>749
> 4bit同士程度ならテーブル引くとかでもいいかも
>>750
> uint でって指定されてるわけだから、4ビットで書かれてるのはあくまで例でわかりやすくしてくれてるだけでしょ
>>750 さんが言ってくださっているとおりなのですが、
逆にわかりにくくなってしまったかもしれません。失礼しました。
ただ、普通の演算子を組み合わせるだけの方法ではどうにも手詰まりな気がしてきたので、
テーブルというアイディア自体は検討する価値がありそうです。どうもありがとうございます。
0756デフォルトの名無しさん (ワッチョイ ff63-bUHw)
垢版 |
2021/02/24(水) 00:54:22.31ID:bQ0lAzRD0
boolのために比較が必要という前提なら比較は6種
== != < <= > >=
2項演算子は加減乗除商、シフト、and or xorくらい?
演算→比較の順に評価することになるので1比較1演算のパターンはそんなに多くない
全部試したわけじゃないけど無理じゃない?
0757デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 00:58:28.94ID:jmWlpF6B0
>>751
> return x==y || (2x<y && y<=x);

>>753
> (x^y)<(x<y?x:y)

色々と考えてくださってどうもありがとうございます。

>>745 さんの猿まねですが、
>>751 さんが書いてくださった式は x = 2, y = 3 のときに false となり、
>>753 さんが書いてくださった式は x = 1, y = 3 のときに true になってしまいますねw

ただ、こうやって苦労を分かち合ってくださるのはとても心が救われます。
本当にどうもありがとうございます。
0758デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 01:04:08.81ID:jmWlpF6B0
>>756
> boolのために比較が必要という前提なら比較は6種
> == != < <= > >=
> 2項演算子は加減乗除商、シフト、and or xorくらい?
> 演算→比較の順に評価することになるので1比較1演算のパターンはそんなに多くない
> 全部試したわけじゃないけど無理じゃない?

レスどうもありがとうございます。確かにおっしゃるとおりのような気がしてきているところです。
とりあえずこの前提の場合だけでも (x ^ y) < (x & y) が最善なのかどうか結論を出したいので、
全パターンを網羅して確認するプログラムの作成に挑戦してみたいと思います。(できるかな…(汗)
0761デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 01:11:25.71ID:jmWlpF6B0
>>756
全部網羅と簡単に書きましたが、
例えば仮に (20210224 * x ^ y) < 12345 が正解だとして、
しらみつぶしに探してこれを見つけるのは至難のワザですよね。
う〜ん、難しい。。。。
0762デフォルトの名無しさん (ワッチョイ ff63-bUHw)
垢版 |
2021/02/24(水) 01:15:30.76ID:bQ0lAzRD0
>>757
もともと提示された式と比較すると同じ結果になるんだけど?
https://sharplab.io/#v2:C4LgTgrgdgNAJiA1AHwAICYAMBYAUBgRjzwDMB7MACgDcBDMAAgEsGBeBzAbmYYB53MAIwD6mAuO5NEiAJR4GChuSp1GAKzYduG/hxFiJDNdLm5F55iQaUAxgAsApjYDWmSkxhqZDAITt7Ts4E7p4yphYRDKgEAJyUACQARFBkwAwOAI4QtAA2IADeTAC+MAz5akWJMpzykebE+AQAbAyCZGQ5DAEubkxQaQAepX1pAJ7erAB81gMMAHoM43wzDABki9V40S1tHV2OLsEjDEPM/Rts05SzC0u8K/ejDAD8JwwgGzW4QA
0763デフォルトの名無しさん (ワッチョイ 83ff-AkpG)
垢版 |
2021/02/24(水) 01:20:20.17ID:jmWlpF6B0
>>759
> 0を排除できるなら、たぶん
> x/y + y/x == 1
> になるような気がする。

!!!
確かにこれ自体は違うかもしれませんし、計算量も減っているとは思いませんが、
発想の新鮮さは私にとって正直感動を覚えるほどでした。

私は問題文にビットという言葉が出ている時点で数値をビットの並びとしか捉えていなくて、
このレスを読むまで数値を数値として扱うという発想がまったくもって出てきていませんでした。

貴重なアイディアどうもありがとうございます。
0765デフォルトの名無しさん (ブーイモ MMe7-Dcdc)
垢版 |
2021/02/24(水) 09:43:01.27ID:BstpO7i2M
NOT(x ^ y) &x &y
0766デフォルトの名無しさん (ブーイモ MMe7-Dcdc)
垢版 |
2021/02/24(水) 09:47:44.01ID:BstpO7i2M
ビット反転は ~か
~(x ^ y) &x &y
0771デフォルトの名無しさん (ワッチョイ cfb5-xG0S)
垢版 |
2021/02/24(水) 21:35:26.39ID:KW+DlOc20
この流れに乗って質問するが、
おまいらはこれからC#とどう付き合っていくつもり?

C#をとことん極めて、新しいバージョンが出れば追い、このまま一生C#と骨をうずめるつもり?
それとも、C#は腰かけ程度と考えて適当に付き合い、もっと良い言語が出たら乗り換えるつもり?

質問を言い換えると、C#ってあと何年ぐらい人気言語の一つとして君臨していられると思う?

Javaがオラ狂うによってほぼほぼ有償化された今、
Javaが失速するのは間違いない
あのJavaが、だ

C#だってそんな日が来るんじゃないの?
来るとしたらどんなオチ?
それとも、親方マイクロソフトだから大丈夫?
0772デフォルトの名無しさん (ブーイモ MMff-cyI8)
垢版 |
2021/02/24(水) 21:58:03.72ID:NDokwu7RM
友達以上愛人未満
0779デフォルトの名無しさん (ワッチョイ ffad-2NXR)
垢版 |
2021/02/25(木) 07:47:32.19ID:ljkJPR6C0
>>771
プロダクトに最適な言語を使うだけよ
どんな業界でも、年々道具は新しくなるだろ?
プログラミング言語もそれと同じ

中には代々受け継がれた道具しか使わないような職もあるが、それは一般的じゃない
0782デフォルトの名無しさん (ワッチョイ 6f62-y4gS)
垢版 |
2021/02/25(木) 11:44:12.11ID:zlGf24tO0
文字数計算のためのCalcDだと思うけど正常に計算できてなさそう
何日後も引数にして、2日後とか3日後で想定した戻り値になってることをテストしてみた方がいいよ
メソッドを分離することとメソッド毎にテストすることの大切さがわかる典型例だな
0785デフォルトの名無しさん (ワッチョイ 6f8c-zh7K)
垢版 |
2021/02/25(木) 13:54:37.81ID:HJ9YlmBf0
ソースコード見えないけど5000兆なんて時間計算量も空間計算量も現実的な値にならんから愚直に文字列計算する方法じゃ無理
最初が1以外なら答えは常に最初の桁の数字になって、そうじゃないときは1じゃなくなるまでの桁数よりKが小さいか同じなら1でKがそれより大きいなら1以外で最初に現れた数字が答え
0786デフォルトの名無しさん (アウアウエー Sadf-pQAD)
垢版 |
2021/02/25(木) 13:58:47.94ID:5iIS9NC9a
パラメータの与え方が間違ってるなw
Console.WriteLine(mi.GetDigit((long)5e15, 9460730472580800));
0787デフォルトの名無しさん (ワッチョイ 6f62-y4gS)
垢版 |
2021/02/25(木) 14:32:33.73ID:zlGf24tO0
>>785
競技プログラミングでそんなひねくれた回答に何の意味があるの?
知らんけどとんち問題じゃないんだから実行時間2sメモリ976MBという制限で作れてるのか、出来てなかったら減点とかそういう感じでしょ
0792デフォルトの名無しさん (ワッチョイ ff63-bUHw)
垢版 |
2021/02/25(木) 15:24:52.06ID:A477YYD30
競技プログラミングって問題文を読み解きいかに計算量を少なくする解法を見つけるかに特化した問題が多い
プログラミング知識より数学的知識やひらめきのほうが重要なこと多い
大抵の問題はメモリも処理速度も大して必要とせずに数秒以内で解けるような解法が存在してる
0794デフォルトの名無しさん (ワッチョイ 6f62-y4gS)
垢版 |
2021/02/25(木) 17:09:26.66ID:zlGf24tO0
プログラミング技術を競うものかと思ってたけど関係ないのも多いんだな
まあ今回の問題がそうだったって感じなのかもしれないけど数値設定がやってくれと言わんばかりにおかしいもんな
0795デフォルトの名無しさん (ワッチョイ a324-wc/N)
垢版 |
2021/02/25(木) 17:23:13.48ID:Kp+Bp4Dl0
ちゃんとインプットのチェックロジックを作れば初っ端に気付ける事なんだよ
pow(10, 18)はqword範囲内なのに対して1以外の文字長は最小の2だとしても余裕で範囲外だからな
0796デフォルトの名無しさん (ワッチョイ cf2d-pQAD)
垢版 |
2021/02/25(木) 17:30:29.82ID:BkBvtXEC0
>>784
ありがとうございます、参考になります
でもこのコードだと入力が
1
1

1121
2
の時2を出力してしまうので不正解になります、正解は両方とも1です。

>>785
たぶん785さんが正解だと思います。私は問題文を愚直にシミュレートしたコードを
書いてしまいがちなせいでよく制限時間をオーバーします

>>794
プログラミングの技術力向上のためと思い、やり始めたのですが
これはむしろ算数、数学力の競い合いだなと感じています
0798デフォルトの名無しさん (ワッチョイ a324-wc/N)
垢版 |
2021/02/25(木) 18:28:40.93ID:Kp+Bp4Dl0
>>797
だからこそ標準入力から渡された桁数指定であるKが10^18以下であるかのチェック構文をちゃんと書けばその時点で気付けるって話
781のコードはそれが書かれてないから「Kは10^18以下」っていう制約自体を見逃してるんだろうな
0799デフォルトの名無しさん (エムゾネ FF1f-pQAD)
垢版 |
2021/02/25(木) 18:53:48.04ID:rcOltu0HF
>>789
競プロっていわゆる普通のプログラミングとか数学とかとは別の世界だと思う
0801デフォルトの名無しさん (ワッチョイ ffe6-0TpN)
垢版 |
2021/02/25(木) 19:49:45.24ID:BqNXMQx70
新聞紙を100回折りたたむと厚みが宇宙と同じぐらいになるって奴ね
0802デフォルトの名無しさん (ワッチョイ b302-lut+)
垢版 |
2021/02/25(木) 20:05:35.05ID:84+MX2N/0
>>785
おまえアタマいいな。
自分は3分考えて分からなかった。

792 の言うようにひらめきの世界だわ。
3分の間にアタマに引っかかっていたところに手が届いてれば正解に行き着いてたかも、とか 785 を読んで思いましたまる
0806デフォルトの名無しさん (ワッチョイ cedf-zMIR)
垢版 |
2021/03/03(水) 21:31:29.25ID:GRpGW1SM0
closedxml初めて触ったけどすごいね
エクセル操作プログラミングで毎回うんざりしてたのがウソみたいに快適
gasのスプレッドシート制御と同じような感覚で書けるしusingも使える
0807デフォルトの名無しさん (ワッチョイ 4e02-CIDx)
垢版 |
2021/03/04(木) 12:19:55.97ID:RGW+RZMQ0
以下のような2つの構造体リストを重複除外して結合したいのですがどうすれば良いでしょうか。
Unionをすると重複したまま結合されてしまうので困っています。

public struct Menber
{
/// <summary>
/// 部署
/// </summary>
public int Id;
/// <summary>
/// 名前
/// </summary>
public string Name;
}

List<Menber> list1
list[0].id = 1
list[0].Name = 田中

List<Menber> list2
list[0].id = 1
list[0].Name = 鈴木
list[1].id = 1
list[1].Name = 田中
list[2].id = 2
list[2].Name = 吉田
0808デフォルトの名無しさん (アウアウウー Sa2f-CIDx)
垢版 |
2021/03/04(木) 12:41:03.43ID:7LtyX+sHa
>>807
Unionのドキュメントぐらい読もうよ。
IEquatable<T>を実装しろって書いてあるでしょ

構造体の場合はEqualsは全フィールドとプロパティが等価なら
trueを返すように自動実装されるはずだと思ったけど、UnionはEqualsの方は
使ってくれないんでしょうたぶん。

知らんけど。
0811デフォルトの名無しさん (ワッチョイ fb5f-/obZ)
垢版 |
2021/03/06(土) 02:12:29.40ID:t6oqPQ7k0
なんか久しぶりにc#に戻ってきたら
public int GetIntVal
{
get => _intVal;
}

とかプロパティの取得に=>とか使ってて意味がわからなかった
この手の構文って今から憶えるとしたらどこのサイトを見たらいいでしょう
0814デフォルトの名無しさん (テテンテンテン MM7f-3iqd)
垢版 |
2021/03/06(土) 11:52:26.43ID:+wsnPdhjM
public int IntVal => _intVal; の形式はよく使うけど、>>811の形式は個人的には嫌いだな
811の形式はgetだけなら冗長なだけなのでsetアクセサを書く必要のある場合のみ意味があるわけだが、
setは副作用そのものなのでexpression bodied syntaxで書くのはあまり良くないと思う
0828デフォルトの名無しさん (ワッチョイ 0fb5-FlFm)
垢版 |
2021/03/06(土) 22:51:05.76ID:zakmvXbT0
INotifyCollectionChangedとか
BuildinglistCollectionViewとか
FrameworkContentElementとか
PolyQuadraticBezierSegmentとかな ←最長ぢゃねーか?

ObservableCollectionはクソいっぱい使ってるんでなんとかしてほしいわ
0835デフォルトの名無しさん (アウアウウー Sa0f-kkZq)
垢版 |
2021/03/06(土) 23:58:57.56ID:d/Tm++Xea
>>834
好みの問題と言えばそれまでだけど個人的には
Pascal形式が一番相対的にマシだと思うし、だから
比較的若い言語であるC#の文化では標準になってるんだと思う。

しかし、いつもの交通整理の人仕事しろよ。
いつまでこの状態を放っておくの?
やっぱり自分で自分に文句は言えないってご都合主義な事情かねw
0836デフォルトの名無しさん (ワッチョイ 7b6e-xiWk)
垢版 |
2021/03/07(日) 07:51:51.56ID:m48VQs8o0
高い知識を持っている技術者や学者さんが
人に文章として伝える(分からない人に分かるように伝える)技術が高いとは限らない
むしろそれが下手な人が多いので、情報系の大学の講義はほにょつまらんしわかりづらい

別の仕事につきながら片手間に独学で勉強したあとに
学生時代のテキストや講義資料みると
いまじゃ簡単なことが、どんだけわかりづらい教え方してるんだろうと思った
いい先生がいればその頃からプログラムが楽しくて好きになってたんだろうなと
0837デフォルトの名無しさん (ワッチョイ fb02-zlPp)
垢版 |
2021/03/07(日) 10:53:06.62ID:viNH5wsJ0
製造の人員に限ってみれば、分かりやすい(日本語の)文章を書けない人が、キレイなコードを書けるとも思えないんだけどね。
コードは機械に対する指示書だから、そう見ると「(人に対する)分かりやすい文章」との共通点は多い。

あと、教師の教え方についても、特定の人に分かりやすい教え方が万人に対してそうとも限らない。
自分の場合は振り返ってみれば開発環境が違うけど C のポインタはテキストを読んでもさっぱり分からなかった。
けどいつの間にか分かるようになってた。

分かるようになった後は「いまじゃ簡単なことが」なんで分からなかったのか分からない状態で、今も分からない。
ある意味での概念的な関門があるんだろうな、とか思う。「自転車に乗る」ってのとどこか似てるような気もしなくもない。
0842デフォルトの名無しさん (アウアウエー Sa3f-gdNk)
垢版 |
2021/03/07(日) 13:24:35.77ID:N1SdY6iGa
>>841
自然言語が達者な(しかし数理に弱い)人って、手続き型プログラミングの方向に進んじゃうんだよ
しかもどういうわけかみんな1つのルーチンを長く書きたがる
冗長な長文に慣れてる&関数を使わないで生きてきたから癖になってるんだと思う
意味があるなら1行でも関数にするなんてタイプはめったに居ない
0847デフォルトの名無しさん (ワッチョイ 9f01-AHxu)
垢版 |
2021/03/07(日) 15:55:22.31ID:RWgRWesX0
>>837
コードは機械に対する指示を機械が理解可能な範囲内で
人間とってできるだけ分かりやすいように書くもの
読み手として意識するのは機械じゃなく人間

だから自然言語で論理的な文章を書く力とかなり部分が共通なのは当然
0851デフォルトの名無しさん (ブーイモ MM7f-5Nd/)
垢版 |
2021/03/07(日) 16:22:51.53ID:hFyVV8HRM
>>844
現実を見ろよ。実装なんざ仕様書をプログラミング言語に置換しているだけだろ。製造って銘打ってもらえるだけありがたい。
0858デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 17:03:50.83ID:lpPFFuHs0
C#.NETの質問ですが
System.Web.Helpers
を参照しないといけないという情報までは辿り付きましたが
参照しようと検索しても出てきません(一覧にない)。どうすればいいんでしょうか?
0861デフォルトの名無しさん (ワッチョイ df2d-mwmJ)
垢版 |
2021/03/07(日) 18:48:35.44ID:kXP4cZZ90
C# というか ASP の質問かもしれないのですが、

public class HiddenFieldEx : System.Web.UI.WebControls.HiddenField
{
 public string TextEx { get => (string)this.ViewState["TextEx"]; set => this.ViewState["TextEx"] = value; }
}

こういうの作りました。
普通にフォームに貼る分にはいいのですが、GridView の ItemTemplate のところに配置し
GridView.RowCreated あたりで TextEx を設定したとき
PostBack すると TextEx が消えてしまいます。

ViewState に保存してるつもりなのですが、
GridView の ItemTemplate でも大丈夫にするには特殊なことが必要なのでしょうか。
0862デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 19:15:16.87ID:lpPFFuHs0
これを実行してボタンクリックすると処理が返って来ず固まります。
ちゃんと動かすにはどうしたらいいでしょう?

async System.Threading.Tasks.Task<string> Get(){
return await webView2.CoreWebView2.ExecuteScriptAsync("test");
}
private void Button_Click(object sender,EventArgs e) {
var task = this.Get();
System.Diagnostics.Debug.WriteLine(task.Result);
}
0865デフォルトの名無しさん (ワッチョイ 7b6e-xiWk)
垢版 |
2021/03/07(日) 20:58:22.56ID:m48VQs8o0
>>847
可読性が良くなるように論理的に文章が書ける力と、
読み手が理解しやすくするように、伝え方を工夫する力とは全然違う
MSリファレンスは後者がさっぱりだから
図やイラストがない無味乾燥だと上の人が言ってるんじゃないの?

>>837
> 教師の教え方についても、特定の人に分かりやすい教え方が万人に対してそうとも限らない。
教師はそうならないように万人にわかりやすくなるよう教え方を工夫するのが仕事(俗に言う教材研究)
まぁ大学の役割がそうじゃないだろと言われてしまえばそれまでだし
誰にでも簡単だったら技術者や専門職として飯食いにくくなるから
世の中の仕組みとしてはそれでいいんだろうけど
0868デフォルトの名無しさん (ワッチョイ 9f01-AHxu)
垢版 |
2021/03/07(日) 21:19:02.70ID:RWgRWesX0
>>865
良いか悪いかは別として
それは可読性をどういう範囲で捉えるかの違いだな

読み手が理解しやすくするように伝え方を工夫することが
可読性を良くしようとすることに含まれないと考えたことはなかったわ
0872デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 21:48:02.10ID:lpPFFuHs0
>>870-871
そこに書けば表示できるんですね。
出来れば分けて書きたかったのですがこれでいきます。
async、await、の使い方がよくわかってないので
ちゃんと勉強します。ありがとうございました。
0873デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 22:13:34.28ID:lpPFFuHs0
>>871
これ戻り値決まってるメソッドの場合、どうすればいいでしょうかね。
0881デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 00:21:38.35ID:qzvxIX+G0
>>878
上手く言えてなくてすみません。
既に定義された形のメソッドを渡す必要があって
戻り値の型を変えられないんです。変えられるかもしれないけど他人が書いた部分なので弄りたくない感じです。
その場合は無理でしょうか?
0887デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 04:11:09.12ID:qzvxIX+G0
>>883
これの一番最初にあるサンプルコードをコピペして
Form1_Load()から呼び出すと止まるのですが
これは当然の結果なのでしょうか?

void Form1_Load(object sender, EventArgs e)
{
var radius = 1.0;
var area = CalculateCircleAreaAsync(radius).Result;
}
static async Task<double> CalculateCircleAreaAsync(double radius)
{
var π = await Task.Run(() =>
{
Thread.Sleep(3000);
return Math.PI; // 級数展開などで円周率を計算したとする
});
return π * Math.Pow(radius, 2); // 円の面積
}
0895894 (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 15:12:14.98ID:qzvxIX+G0
これってメソッドの戻り値の型を自分で指定したい場合は
Task<T>でラップしないといけないって解釈でいいですかね?
0896デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 15:30:58.68ID:qzvxIX+G0
webView2.CoreWebView2.ExecuteScriptAsync()
がTask<T>を受け取らないといけないせいで
既に戻り値を定義された色々なメソッドにも影響が出てしまって
どうにかそれらを全て書き換えるかしないといけないのが困ってる点ですね。
これどうにかならないんですかね?
0897894 (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 16:02:08.72ID:qzvxIX+G0
しかもこれ自作クラスを戻り値にしてるメソッドだと
GetAwaiter()がないとかって怒られてそれも実装しないといけないみたいで凄い面倒で困る…
0898デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 16:05:05.45ID:qzvxIX+G0
もう非同期とかいいので普通にこれでデータ取得できないもんなんですかね。
webView2.CoreWebView2.ExecuteScriptAsync()
非同期とかしなくていいんですよ。必要なら1分くらい待ってもいいので。
たったこれだけのことなのに凄い面倒だ。
0905デフォルトの名無しさん (ワッチョイ 3ba7-k3/Y)
垢版 |
2021/03/08(月) 20:13:34.27ID:pnlhyJpZ0
使用者に非同期処理が必要ないのに非同期処理しか実装されてないクソライブラリはクソだからないのでクソとしか表現のしようがないんだぜ
そこはおk?

ああ、クソじゃん・・・

って話よ?
0909デフォルトの名無しさん (ワッチョイ 3b33-YXAD)
垢版 |
2021/03/08(月) 21:39:32.19ID:lsfVgCLC0
>>908
理解せず簡単に済ますなら900の方法か、
UIスレッドから新しいTaskを作って、そのタスク内で非同期メソッドの結果をawaitして、UIスレッドは作ったTaskのResultを取得すれば良い。
0910デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/09(火) 02:15:52.82ID:Km1Y7VEG0
>>909
900さんの方法でもイケるんですね。ありがとうございます。
あとこんな風にやったら一応自分が求めてる感じにもなりました。
Invoke((MethodInvoker)(async () => {
var task = await func();
}));
0911デフォルトの名無しさん (アウアウウー Sa0f-kkZq)
垢版 |
2021/03/09(火) 13:25:20.94ID:/HWklS3sa
>>887
これ、今更だけど
var radius = 1.0;
Task<double> task = null;
Task.Run(() => task = CalculateCircleAreaAsync(radius)).Wait();
var area = task.Result;
じゃいかんのかな知らんけど。

しかし、非同期メソッドの結果をawaitせずに求めるなんて考えたこともなかったし、
一瞬そんなの簡単だろと思ったけど意外と面倒なのね。
というか非同期メソッドの戻り値は呼び出し元のスレッドで実行される自分自身になるのな。

っていうか、>>891の引用元のコードはバグ?
何年も前の記事なのに誰も突っ込んでないのかな
0916デフォルトの名無しさん (ワッチョイ ef62-FSd8)
垢版 |
2021/03/09(火) 21:40:53.62ID:G6YhpKjy0
なんでタスクで実行すればデッドロックが発生しないか理解してなさそう
こことか分かりやすく書いてくれてるから見てくるといい
ttps://chronoir.net/cs-async-await-taskrun/
0918デフォルトの名無しさん (ワッチョイ 9f7c-/obZ)
垢版 |
2021/03/09(火) 22:52:54.19ID:BIanm+fj0
そもそもTask型が帰ってくるのだから非同期前提だしなぁ
言わばスレッドで実行出来る形にしましたよという事なんだし
非同期だとスレッドセーフかどうかも本来なら問題になる事ではあるけど
0920デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/11(木) 03:25:40.12ID:5JzLcMRo0
System.Web.Helpers.Json.Decode()これと同じ機能を持つのって他にないでしょうか?
使ってるとMaxJsonLength の値を超えています。とエラーがでる時があって。
0925デフォルトの名無しさん (ワッチョイ a905-pfBZ)
垢版 |
2021/03/15(月) 11:36:48.53ID:hpWLXBIY0
C#でSocketIOサーバーを作りたいと思ったのですが、SocketIOのライブラリに思いっきりclientと書いてあるのでサーバーにはなれないんですかね?
0926デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 12:48:51.81ID:fhTxsYs40
表形式を扱うデータ構造といえばList<T>の入れ子、構造体、DataTableクラスとありますが
速度的に一番有利なのはどれでしょうか?
0929デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 13:19:09.67ID:fhTxsYs40
2つのテーブルから共通のコード番号を手掛かりに新しいテーブルを作る処理です

2次元配列が一番速いのですか
最初に件数をカウントしておく必要がありますね
0933デフォルトの名無しさん (ワッチョイ 7d5f-qwqs)
垢版 |
2021/03/16(火) 21:36:32.98ID:Wl/nKXCF0
float[] array_A = new float[] { 0.2, 0.4, 0.6 };
float[] array_B = new float[] { 0.4, 0.6, 0.8 };

List<float[]> hoge = new List<float[]> { array_A, array_B };

floatの配列を要素に持つリストhogeがあったとして、配列の対応する要素の平均を算出してリストを返すスマートな方法ってありますか?
LINQでうまいことやれそうな気がしたものの、やり方が分からず今はfor文でゴリ押してしまっています

最終的にこういうリストが返ってきて欲しいです
{ 0.3, 0.5, 0.7 };
0937デフォルトの名無しさん (ワッチョイ 82e4-pJz1)
垢版 |
2021/03/17(水) 21:54:38.73ID:96WF7Dou0
最近C#の勉強を始めて、オブジェクト指向に関して何となく分かったけどプログラムに落とし込むまでは理解出来ていません
手を動かさなきゃ身につかないと思うのですが練習になる例題などあったら教えて頂きたいです
0938デフォルトの名無しさん (ワッチョイ f1ac-LiHY)
垢版 |
2021/03/17(水) 22:43:21.99ID:EwAVXU9r0
作りたいものがないのにプログラミング言語の学習を始めるってつらくない?

あと大きく分けてコンソールアプリ、Windowsとかのアプリ、Webアプリ(サイト)とかあるけど、
(多分コンソールが一番勉強するには素直に始められそうだけど)
どれがやりたいとかないの?
VS使えるならそれぞれプロジェクト作れば大体helloworldくらいまでは勝手に作ってくれるよ
0941デフォルトの名無しさん (アウアウウー Sac5-YyH6)
垢版 |
2021/03/18(木) 02:59:56.18ID:/DoLsZj+a
>>937
ライブラリのクラスで比較的単純そうなのを
あえて車輪の再発明してみるとか。
例えばList<T>の簡易版を自分で作ってみる。

ただ、オブジェクト指向を習得したいという目標設定自体が
本当に意味があるかどうかは疑った方がいいかもしれないね。

以下個人の見解ですだけど、オブジェクト指向なんて別に
そんな難しい話じゃない。

机上で本読んでる時にはもやもやしてても
コード書いてる間に自然に府に落ちてくる類のものかもしれないよ。
少なくとも俺はそうだった。
0945デフォルトの名無しさん (ワッチョイ a973-mhyL)
垢版 |
2021/03/18(木) 21:08:28.76ID:e7yzUD160
オブジェクト指向の恩恵のほとんどはinterfaceだからなぁ。
自分で作ったのを他の人が使うようになって始めて、迂闊にクラスを参照させてはならない、
カプセル化していたとしても実装変えにくくなって詰みやすいと気づくわけで。

自分で作って自分だけで使ってる分には気づきにくい。
0946デフォルトの名無しさん (アウアウウー Sac5-YyH6)
垢版 |
2021/03/18(木) 22:34:39.09ID:6dHUIFjDa
何がオブジェクト指向の本質かについてはいろんな人がいろんなこと言ってる
(要するに定説がない)けど、個人的には多態はあくまで付随的な物であって本質じゃないと思う。

オブジェクト指向というかOOPの本質は文字通りオブジェクトという仮想機械をクラスという形で
ストレートにコードに表現できることだと思う。

それが正しいかどうかはともかく、初心者が最初に理解すべき考え方はこれ、
つまりクラスとは仮想機械を記述するものだということだと思う。
0947デフォルトの名無しさん (ワントンキン MMd3-EoOz)
垢版 |
2021/03/19(金) 00:55:17.23ID:ZleoXut0M
本来そんな小難しい話じゃなくて、プログラムを人間のメンタルモデルに合わせようというのがオブジェクト指向だよ
人間の感覚に合った設計は破綻しにくいという経験則というか仮説に基づいている
0951デフォルトの名無しさん (ブーイモ MMcb-92UB)
垢版 |
2021/03/19(金) 10:30:15.00ID:B4QNkIexM
オブジェクト指向とか正直よくわからんが
クラスは、ラムダの変数キャプチャを冗長化、明示化、理解容易化したもの、として考えるようになってから、すべてがうまく噛み合うようになった
0953デフォルトの名無しさん (アウアウウー Sa5d-Xoi0)
垢版 |
2021/03/19(金) 13:18:48.59ID:HbCpBKgza
まあ特定の機能を担う仮想的な装置(オブジェクト)に分割統治するのは
人間の脳というか認知能力の都合だというのはその通りだけどね。

繰り返しになるけど、重要なのはその「特定の機能を担う仮想的な装置」を
クラスで表現できることになったことなんだよね。

アルゴルズムの教科書に出てくるようなデータ構造はオブジェクト指向が提唱される前からあった。
画期的だったのは、それらをQueueとかDictionaryとか言ったまんまの名前を付けたクラスで書けるようになったこと。
0957デフォルトの名無しさん (テテンテンテン MMeb-V411)
垢版 |
2021/03/19(金) 14:05:45.45ID:pO9QgyHvM
double[] real; double[] imag;でもってる値をComplex[] compへの変換を1行できれいに書けないでしょうか?
comp[0] = new Complex(real[0], imag[0])を配列に対して操作できればかけそうな気がするのですが、LINQとかで表現できますか?
0961デフォルトの名無しさん (テテンテンテン MMeb-NT4g)
垢版 |
2021/03/19(金) 21:21:23.14ID:vK2IShGtM
ひょっとしなくても>>933のも
var hoge = array_A.Zip(array_B, (a, b) => new float[]{ a, b }).ToList()
でいけたのか

でもこれだったらちょっと冗長でも
var hoge = Enumerable.Zip(array_A, array_B, (a, b) => new float[]{ a, b }).ToList()
って書きたいなあ
0964デフォルトの名無しさん (ワッチョイ 9389-jgaO)
垢版 |
2021/03/21(日) 08:33:37.34ID:O9O05/ov0
class OrderにはItemCodeとQuantityがあり、
List<Order> order1とorder2をまとめたいです
具体的にはItemCodeが同じならばQuantityを合計し、なければ新たに追加する、といった具合です
foreachを使えばできますが、Linqを使用して簡潔に書ける方法があれば教えてください
0965デフォルトの名無しさん (ブーイモ MMcb-vxZl)
垢版 |
2021/03/21(日) 09:25:40.37ID:ai+yXZclM
ConcatしてitemCodeでGroupByしてSum
0972デフォルトの名無しさん (ワッチョイ 51a7-FMtt)
垢版 |
2021/03/21(日) 22:31:46.08ID:S+S4XTWp0
>>967
こんなの現場で書くとどう扱われるか教えてやろうか?

○○さんの書くプログラムはわかりやすいけど
君のはわかりにくいね
読みにくいっていうか
これはどういう処理をしてるの?
仕様を書いてほしいんだけど
文章で書けなかったら
普通の.net2.0ぐらいの機能で書いてくれないかな?
それと○○さんと比べて進捗も遅いよね?
こんな書き方してるからじゃない?
あと処理経過がわかるログも出してほしいんだけど
この書き方のままじゃ出せないでしょ?

とかね
目立つことしないほうがいいよ
0973デフォルトの名無しさん (アウアウエー Sae3-92UB)
垢版 |
2021/03/21(日) 22:43:13.77ID:ejnWrGNOa
長いメソッドの途中でいきなりこれが出てきたら気持ち悪いけど
OrganizeOrdersとか名前つけてメソッドに切り出すなら許せるかな
正しいメソッド名は英語ネイティブに聞いて
0975デフォルトの名無しさん (アウアウエー Sae3-92UB)
垢版 |
2021/03/21(日) 22:48:14.21ID:ejnWrGNOa
>>972
それほぼ全部カウンター食らうから気をつけたほうがいい

わかりにくい→感覚でしゃべるな、コードメトリクス測定したらLinqのほうが成績良い
どういう処理をしてるの→見たまんまorder1とorder2を繋いでItemCodeでグループ化してQuantityの合計を計算しtwる
使用を書いてほしい→↑が仕様
普通の.net2.0で書く→古い言語仕様に合わせる理由がない
進捗→状況次第
0977デフォルトの名無しさん (ワッチョイ b102-+i0H)
垢版 |
2021/03/21(日) 22:54:55.17ID:gB+oqGaT0
>>967
これってそんなに読みにくい?
自分も他の人もこのくらいなら普通に書くけど。
どうしてもなら、各メソッドの間に改行入れて各行ごとに処理内容のコメントを書いてもいいし。

こう言うのでログを出して欲しいって要望を受けたことはないけど自分でそれ用の拡張メソッドを書けば出せないこともないし。とか言ってみる。
0979デフォルトの名無しさん (ワッチョイ 9389-4Ddi)
垢版 |
2021/03/21(日) 23:16:39.83ID:O9O05/ov0
>>967です
たくさんのレスがついていてビックリしています
書いていて思ったのは>>977さんがいうように各メソッドの間に改行を入れればまだ読みやすいと思ったのと、
Orderのプロパティが多いようだとどんどん読みづらくなっていくな、と思いました

foreachで書いたのはこんな感じですが、よりいい方法があれば知りたいです
var allItem = new List<Order>(order1);
foreach (var o in order2)
{
var duplicate = allItem.FirstOrDefault(x => x.ItemCode == o.ItemCode);

if (duplicate is null)
allItem.Add(o);
else
duplicate.Quantity += o.Quantity;
}
0983デフォルトの名無しさん (ワッチョイ 8bbb-Q5Cn)
垢版 |
2021/03/22(月) 01:09:40.25ID:RQGm3cmd0
>>967のコードは、ドットで改行したらいいぐらいでなんも悪くないだろう
0984デフォルトの名無しさん (ブーイモ MM4d-vxZl)
垢版 |
2021/03/22(月) 02:12:24.15ID:GLNo6tkcM
ちゃんとしたテストコード書いてあるなら967のでかまわん
0987デフォルトの名無しさん (ワッチョイ 992d-D9EE)
垢版 |
2021/03/22(月) 03:06:05.30ID:ElndWJoU0
この程度のコードが理解出来ないで文句垂れてるとか恥ずかしくないのかな
足を引っ張りあって低い方に合わせて仲良くってのが日本のITで
生産性の低さに表れてるのだろうな
0989デフォルトの名無しさん (テテンテンテン MMeb-NT4g)
垢版 |
2021/03/22(月) 07:27:03.21ID:68S3N7MUM
C#3.0リリース直後でLINQがまだ物珍しかった頃なら>>972の指摘もまあ分かるけど
C#の最新バージョンなんてもう9.0だぜ?
LINQだって10年くらい前の時点で十分スタンダードになってた技術なのに
いまだに真顔で>>972みたいな指摘する人がいるのか・・・・

>>985
>少なくとも俺はこんな一括でやられたらどこがバグってるのかわからない
え、この程度で分からないの?
「優秀とは程遠い」理解力しか持ち合わせてないのはあなたのほうじゃ
あなたの口ぶりベテランの人なのかと思ってたんだけどただの能力低いロートルだったりする?
0990デフォルトの名無しさん (アウアウクー MM05-Q8H3)
垢版 |
2021/03/22(月) 08:20:54.66ID:IJYAylQJM
うちにもLINQ読めないからやめろ!って言うおっさんがいたな
最初年長者の言うことだからと素直に聞いていたけど
だんだん腹立ってきてボロカスに言ったら何も言わなくなった
0992デフォルトの名無しさん (ワッチョイ 51a7-FMtt)
垢版 |
2021/03/22(月) 09:36:15.54ID:1s/2BcbO0
君のプログラムは
たったこれだけ、
ホントこれっぽちの、
普通のプログラマなら本当に誰でも可能な、
ことすらできないゴミカスなので


対応できませーん!(笑)(´∀`*)ウフフ
0993デフォルトの名無しさん (ワッチョイ 59ad-XoZt)
垢版 |
2021/03/22(月) 09:44:59.10ID:1pgrqUSA0
>>989
>>972の指摘は技術的な無知から真顔でやってるんじゃないよ。

和を乱すなら撤退しろ、ってメッセージなんだから、技術論で正しいって言っても無駄なんよ。

これが正しいってコンセンサスを先に取れば誰も何も言わない。
実際に工数が下がることを証明して、パフォーマンスが落ちていないことを証明して、コーディングルールにLinqの使い方を明示して、やってはいけない使い方なんかも書いて、それで通すもの。
俺は使いたかったからそうして通したから間違いない。

引っ張り合いではなくて、皆のレベルを上げる必要があるの。
一人が踊り狂っても、そいつが辞めたときに誰も面倒が見れない物が残るだけ。
おっさんになってからつくづく思うけど、お前らほんと自己中だな。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 23時間 25分 5秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況