!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part144
https://mevius.5ch.net/test/read.cgi/tech/1563258983/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
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/index
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
探検
ふらっと C#,C♯,C#(初心者用) Part145
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 1e7b-qjLW)
2019/10/07(月) 20:16:17.93ID:9eyAES450535デフォルトの名無しさん (ワッチョイ 2b22-y5kd)
2019/11/09(土) 16:58:20.97ID:jywkcdak0 >>510
ランタイム同梱でexeを配布できるから問題ない
ランタイム同梱でexeを配布できるから問題ない
536デフォルトの名無しさん (ワッチョイ cb88-4TTv)
2019/11/09(土) 17:06:05.75ID:4gIYGCYB0 不要な引数は_だね
破棄パターンはまだ言語仕様になってないけど要望も多いし議論も進んでるからそう遠くない未来には入るだろう
すでに導入されてる言語もあるし
俺個人的には526のbみたいなlistなのかarrayなのかよくわからん制御のほうが混乱する
破棄パターンはまだ言語仕様になってないけど要望も多いし議論も進んでるからそう遠くない未来には入るだろう
すでに導入されてる言語もあるし
俺個人的には526のbみたいなlistなのかarrayなのかよくわからん制御のほうが混乱する
537デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/09(土) 17:12:48.50ID:MvykJ39t0 >>526
>(b)
>var list = new List<Label>(100);
>for (int i = 0; i < list.Count; i++) list[i] = new Label();
list.Countは0なのでループの中身は実行されない
一瞬で何やってるか理解できてる・・・?
>(b)
>var list = new List<Label>(100);
>for (int i = 0; i < list.Count; i++) list[i] = new Label();
list.Countは0なのでループの中身は実行されない
一瞬で何やってるか理解できてる・・・?
538デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/09(土) 17:20:28.60ID:YXlbcSmw0 >>526
LINQ が万能ではないことは認める。使う人を選ぶ技術でもあるし。
だが、Enumeration の操作にいちいちカウンタ使って境界テストしなければならなかったり、if, break, continue でフローを追わなければならなかったりするのは、レビュアーや運用・保守者を泣かせるコードになることが多い。
モダンな言語がここ10年のあいだに参照透過性や関数型を追求する方向に進化しているのは、そういう可読性、保守性、開発効率性を意識しているから。
ちっちゃいコードなら手続型で好きなように書けばいいんだよ。大規模開発やビジネスロジックが重要な場面では関数型で書くのが適してる。
まあ、LINQ もあまりやりすぎると読みにくくなるのだが。
LINQ が万能ではないことは認める。使う人を選ぶ技術でもあるし。
だが、Enumeration の操作にいちいちカウンタ使って境界テストしなければならなかったり、if, break, continue でフローを追わなければならなかったりするのは、レビュアーや運用・保守者を泣かせるコードになることが多い。
モダンな言語がここ10年のあいだに参照透過性や関数型を追求する方向に進化しているのは、そういう可読性、保守性、開発効率性を意識しているから。
ちっちゃいコードなら手続型で好きなように書けばいいんだよ。大規模開発やビジネスロジックが重要な場面では関数型で書くのが適してる。
まあ、LINQ もあまりやりすぎると読みにくくなるのだが。
539デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/09(土) 17:41:21.17ID:MvykJ39t0540デフォルトの名無しさん (ブーイモ MMbf-pFIx)
2019/11/09(土) 17:42:32.31ID:05Upg6UNM541デフォルトの名無しさん (アウアウウー Sacf-FD+t)
2019/11/09(土) 17:47:37.52ID:6EEimGlVa >>537
ぐぬぬw
ぐぬぬw
542デフォルトの名無しさん (ブーイモ MMbf-pFIx)
2019/11/09(土) 17:53:51.45ID:05Upg6UNM 良いコントだったよ
543デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/09(土) 18:17:38.87ID:iu4bIs8od わろたwww
544デフォルトの名無しさん (アウアウウー Sacf-FD+t)
2019/11/09(土) 18:25:40.87ID:6EEimGlVa MSのDocs(?)の日本語版ってマウスオーバーでオリジナルの英語版が読めなかったっけ?
対応してるページと対応してないページが混在してるのか?
Docsって何やねんw
対応してるページと対応してないページが混在してるのか?
Docsって何やねんw
545デフォルトの名無しさん (ワッチョイ 8b6e-msxt)
2019/11/09(土) 19:22:51.64ID:rNsqZ2GJ0546デフォルトの名無しさん (JP 0Hcf-ApVS)
2019/11/09(土) 20:24:40.88ID:pySBQwYBH おまえら天才か
547デフォルトの名無しさん (ワッチョイ fb38-zIDV)
2019/11/09(土) 20:45:25.24ID:RT6p7yxc0 LINQは慣れると意図が読めるけど
forは何のためにループ回してるのかは解りづらくなりがち
数学的な問題や複雑な処理を書く場合LINQの表現力はすごいけど、慣れてない人が理解できるようになるのは大変
LINQやRxなしで同等のコード書くのはもはや考えられない
forは何のためにループ回してるのかは解りづらくなりがち
数学的な問題や複雑な処理を書く場合LINQの表現力はすごいけど、慣れてない人が理解できるようになるのは大変
LINQやRxなしで同等のコード書くのはもはや考えられない
548デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 20:48:12.46ID:sTrPPJ5/r プログラマなら普通は逆だよね?
linqというかSQLはただの集合論のはずなのになぜかforの代替で使われたりする
linqはループを隠ぺいしているだけで実際はループしてる
linqというかSQLはただの集合論のはずなのになぜかforの代替で使われたりする
linqはループを隠ぺいしているだけで実際はループしてる
549デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 20:50:43.28ID:sTrPPJ5/r Linqが本当に集合論を表してるなら途中でエラーがでてもデフォルトで残りの処理を終えるはず
そしてエラー含んだ集合が手元に残るはず
そしてエラー含んだ集合が手元に残るはず
550デフォルトの名無しさん (ワッチョイ 9f01-lZUE)
2019/11/09(土) 21:03:01.43ID:XH4+9Keu0 >>547
> forは何のためにループ回してるのかは解りづらくなりがち
流石に
> for (int i = 0; i < list.Count; i++) list[i] = new Label();
の意図がわからないならプログラマーやめるべきだと思うわ
> forは何のためにループ回してるのかは解りづらくなりがち
流石に
> for (int i = 0; i < list.Count; i++) list[i] = new Label();
の意図がわからないならプログラマーやめるべきだと思うわ
551デフォルトの名無しさん (アウアウエー Sa3f-pFIx)
2019/11/09(土) 21:05:00.70ID:aDURcOtda やりたいことは何かを書いてそれを実現する具体的な方法をライブラリにお任せするのがLinq(宣言的)
やりたいことは何か全くわからないけどそれを実現する具体的な手続きだけは知りたくないことまで細かく書くのがループ(手続き的)
何をしたいのかわからないコードよりしたいことが書いてあるコードのほうが親切
やりたいことは何か全くわからないけどそれを実現する具体的な手続きだけは知りたくないことまで細かく書くのがループ(手続き的)
何をしたいのかわからないコードよりしたいことが書いてあるコードのほうが親切
552デフォルトの名無しさん (ワッチョイ 5b63-DaD1)
2019/11/09(土) 21:06:24.76ID:d07pJzzX0553デフォルトの名無しさん (ワッチョイ ef8c-jXsh)
2019/11/09(土) 21:13:08.77ID:6gLEbAuX0 基本LINQでいいかなってなる
List.ForEachは使わんが
List.ForEachは使わんが
554デフォルトの名無しさん (ワッチョイ fb38-zIDV)
2019/11/09(土) 21:16:52.79ID:RT6p7yxc0555デフォルトの名無しさん (ワッチョイ 9f01-lZUE)
2019/11/09(土) 21:22:32.05ID:XH4+9Keu0 >>554
そりゃこんなコード「だけ」じゃ仕事にならんけど、仕事でその手のコードを書くことはあるだろ
そりゃこんなコード「だけ」じゃ仕事にならんけど、仕事でその手のコードを書くことはあるだろ
556デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 21:32:36.03ID:sTrPPJ5/r 大体の場合においてやりたいことだけをlinqで書けはしない
普通の処理をすべてLinqに置き換えられるならそれだけでいいが
そんな世界どこにもない
実現不可能な話でlinqがいいなんて現実的じゃない
普通の処理をすべてLinqに置き換えられるならそれだけでいいが
そんな世界どこにもない
実現不可能な話でlinqがいいなんて現実的じゃない
557デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 21:34:38.32ID:sTrPPJ5/r 標準で書けたところでそれって本当に効率的なのか疑問な場合がある
ループなら一回でmax min両方とれる
linqで標準で書いたとしてMAX MIN二回ループが回る
ループなら一回でmax min両方とれる
linqで標準で書いたとしてMAX MIN二回ループが回る
558デフォルトの名無しさん (ワッチョイ 5b63-DaD1)
2019/11/09(土) 21:40:24.07ID:d07pJzzX0 基準はシンプル
状態の更新を伴うものはループで書く
状態の更新を伴うものはループで書く
559デフォルトの名無しさん (アウアウエー Sa3f-pFIx)
2019/11/09(土) 21:45:51.67ID:aDURcOtda プログラマがヘボでクエリとコマンドの分割がうまくできてないとLinqが綺麗に適用できないことがある
しかしLinqはクエリであることを忘れてはいけない
コマンドで汚染されたループをLinqでは書きにくいと主張するより先にリファクタリングすることをおすすめする
速度最適化が必要な場面はあるが常に速度最適化が求められるわけではない
速度よりメンテナンス性が重視されることの方が多い
しかしLinqはクエリであることを忘れてはいけない
コマンドで汚染されたループをLinqでは書きにくいと主張するより先にリファクタリングすることをおすすめする
速度最適化が必要な場面はあるが常に速度最適化が求められるわけではない
速度よりメンテナンス性が重視されることの方が多い
560デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 21:46:24.40ID:sTrPPJ5/r 本当に集合論ならループの順番などという概念がない
が実際にはある
MS自体はシーケンス(連続、並び)と言ってるが一部のオタが勝手にSQLと同じ集合論だと言ってるだけ
が実際にはある
MS自体はシーケンス(連続、並び)と言ってるが一部のオタが勝手にSQLと同じ集合論だと言ってるだけ
561デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 21:48:01.22ID:sTrPPJ5/r どちらとも使えるのが正しい姿で必要に応じて使い分けるのが筋
所がlinq信者は全部lnqでいいforは使わなくていいと言う
所がlinq信者は全部lnqでいいforは使わなくていいと言う
562デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 21:55:50.65ID:sTrPPJ5/r Linqでももともとやりたいことをそのまま表現できるパターンは少ない
それでどちらにしてもコードに落とし込みをする段階がある
処理に応じて手順を分解してコードにする
実際にそれをやるのがプログラムである
手順が分解できない、他人の書いた手順を理解する気がないならプログラムする気がないと言うこと
それでどちらにしてもコードに落とし込みをする段階がある
処理に応じて手順を分解してコードにする
実際にそれをやるのがプログラムである
手順が分解できない、他人の書いた手順を理解する気がないならプログラムする気がないと言うこと
563デフォルトの名無しさん (アウアウイー Sa0f-acGn)
2019/11/09(土) 22:00:36.64ID:OIyXFfhra 信者うんぬんの前に正しいスペル・大文字小文字でLINQと書けない人がテクニカルなことを主張しても説得力ががが
564デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 22:01:50.43ID:sTrPPJ5/r 説得力などなくていいよ
酒飲んでごろ寝してスマホでかいてるんだから適当だよ
酒飲んでごろ寝してスマホでかいてるんだから適当だよ
565デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/09(土) 22:05:04.49ID:sTrPPJ5/r ああこれwintabだわ
つかいにくなこれw
つかいにくなこれw
566デフォルトの名無しさん (アウアウウー Sacf-FD+t)
2019/11/09(土) 22:38:55.83ID:6EEimGlVa >>534
これもイテレーター使った方が読みやすい気がする
IEnumerable<string> ReadFilePathsRecursive(string path)
{
yield return path;
foreach (var path2 in ReadFilePaths(path))
foreach (var path3 in ReadFilePathsRecursive(path2))
yield return path3;
}
}
これもイテレーター使った方が読みやすい気がする
IEnumerable<string> ReadFilePathsRecursive(string path)
{
yield return path;
foreach (var path2 in ReadFilePaths(path))
foreach (var path3 in ReadFilePathsRecursive(path2))
yield return path3;
}
}
567デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/09(土) 23:36:14.18ID:MvykJ39t0 循環する可能性を考慮しないのって普通にヤバイと思う
568デフォルトの名無しさん (ワッチョイ 0fe3-DaD1)
2019/11/10(日) 00:04:25.73ID:oSCFf5ef0 俺社環で{}省略していると糞扱いされるので迷わずLinq選ぶわ
569デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/10(日) 00:18:01.25ID:jJedryfu0 >>561
LINQ をまともに使っている人は LINQ の得手不得手を知っているから LINQ が万能だとは言っていない。
データ処理の多くの場面ではカウンタ使ってプリミティブに手続書くのは非効率だと言っているだけ。
逆に手続型信者 (老害ともいう) は不必要な場面でもカウンタ使ってイテレーションを書き、コードをいたずらに冗長化するねっていうこと。それに対する有効な反論がない。自分にとっては読みにくいっていう個人的感想ばかりじゃないか。
誰かが言ったとおりこれは慣れだよ。初めは確かにとっつきにくいが慣れる。そして戻れなくなる。
>>562
趣味グラマーならそれでいいよ。だが、ビッグデータやデータサイエンティストの時代になって業務ユーザもコード読むようになったこのご時世。
運用が止まって、下手くそなコード読んでトラブルシュートしなければならない身にもなってみて欲しい。センスない奴が書いたプリミティブな手続をダンプしながらフロー追っかけて修正し、リグレッションテストして、一定時間内に通常運用に戻すのは地獄。
無意味な宗教戦争にしないために、みなさんが前提や目的や利用場面をもう少し明確にすることを提案する。
下請けで隠蔽工程のコーディング担っているプログラマは LINQ のありがたみなんてわからなくても当然。レビュアーや PM や使う人のことを考えず、自分のスキルでとりあえず動くものを行数書いて月給もらえればいいんだから。
LINQ をまともに使っている人は LINQ の得手不得手を知っているから LINQ が万能だとは言っていない。
データ処理の多くの場面ではカウンタ使ってプリミティブに手続書くのは非効率だと言っているだけ。
逆に手続型信者 (老害ともいう) は不必要な場面でもカウンタ使ってイテレーションを書き、コードをいたずらに冗長化するねっていうこと。それに対する有効な反論がない。自分にとっては読みにくいっていう個人的感想ばかりじゃないか。
誰かが言ったとおりこれは慣れだよ。初めは確かにとっつきにくいが慣れる。そして戻れなくなる。
>>562
趣味グラマーならそれでいいよ。だが、ビッグデータやデータサイエンティストの時代になって業務ユーザもコード読むようになったこのご時世。
運用が止まって、下手くそなコード読んでトラブルシュートしなければならない身にもなってみて欲しい。センスない奴が書いたプリミティブな手続をダンプしながらフロー追っかけて修正し、リグレッションテストして、一定時間内に通常運用に戻すのは地獄。
無意味な宗教戦争にしないために、みなさんが前提や目的や利用場面をもう少し明確にすることを提案する。
下請けで隠蔽工程のコーディング担っているプログラマは LINQ のありがたみなんてわからなくても当然。レビュアーや PM や使う人のことを考えず、自分のスキルでとりあえず動くものを行数書いて月給もらえればいいんだから。
570デフォルトの名無しさん (ワッチョイ 5b63-DaD1)
2019/11/10(日) 00:23:11.55ID:rujkcJN50 LINQでDB通信タイミングコントロールできなくなって
泣きを見る話は聞いたが
泣きを見る話は聞いたが
571デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/10(日) 01:00:17.48ID:jJedryfu0 >>570
LINQ to Entities のことかな?
LINQ to Entities は残念ながらまだ発展途上だね。(もう 10 年にもなるのに。)
業務ロジックも書けなくはないが、.NET プラットホームや DB 実装などへの依存性が強すぎて、かなり工夫する必要があり、汎用性がなくなってしまう。
Select, Where (, OrderBy, Take, FirstOrDefault, Join)くらいしかまともに使えないと思っていた方が無難だと思う。となると DB アクセス回数と無駄なデータ取得が増えることになり、性能が出ない。
また C# 9 あたりで予定されている Records がないとデータ変換ロジックが非常に書きにくい。
.NET 5 になれば期待できるのではないかと思うけど。
LINQ to Entities のことかな?
LINQ to Entities は残念ながらまだ発展途上だね。(もう 10 年にもなるのに。)
業務ロジックも書けなくはないが、.NET プラットホームや DB 実装などへの依存性が強すぎて、かなり工夫する必要があり、汎用性がなくなってしまう。
Select, Where (, OrderBy, Take, FirstOrDefault, Join)くらいしかまともに使えないと思っていた方が無難だと思う。となると DB アクセス回数と無駄なデータ取得が増えることになり、性能が出ない。
また C# 9 あたりで予定されている Records がないとデータ変換ロジックが非常に書きにくい。
.NET 5 になれば期待できるのではないかと思うけど。
572デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/10(日) 01:09:03.51ID:jJedryfu0 >>557
おっしゃる通り、LINQ は Reduce 系処理の効率性がよくない。そこは工夫する必要あり。
ただ、Aggregate を使えば、一回の走査で Max, Min 両方同時に取れると思うよ。
おっしゃる通り、LINQ は Reduce 系処理の効率性がよくない。そこは工夫する必要あり。
ただ、Aggregate を使えば、一回の走査で Max, Min 両方同時に取れると思うよ。
573デフォルトの名無しさん (ワッチョイ 9fad-SCE2)
2019/11/10(日) 12:04:37.46ID:FrBSq/JS0 >>550
やめた方がいいよ
やめた方がいいよ
574デフォルトの名無しさん (ワッチョイ efde-cErl)
2019/11/10(日) 12:51:05.83ID:Q+o0EoEH0 いいからアプリ作れよ初心者
575デフォルトの名無しさん (ワッチョイ 9f79-DaD1)
2019/11/10(日) 14:15:34.99ID:j17ZnuaO0 標準のLINQでは効率的に処理できないなら
効率的に処理できる拡張メソッドを定義してそれを使うべき
流れの中でforやらforeachを使われると可読性が落ちるしテストもしにくくなる
効率的に処理できる拡張メソッドを定義してそれを使うべき
流れの中でforやらforeachを使われると可読性が落ちるしテストもしにくくなる
576デフォルトの名無しさん (ドコグロ MM0f-keNo)
2019/11/10(日) 14:48:47.97ID:Vkpd4679M そういうオナニーされるとそれこそ読みづらい
フレームワーク作ってるんでない限り、チーム開発で拡張メソッドを自作するのは本当にやめてくれ
フレームワーク作ってるんでない限り、チーム開発で拡張メソッドを自作するのは本当にやめてくれ
577デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/10(日) 15:27:29.24ID:Fk6O1w1g0 開発組織のコード管理能力やチームメンバーのリテラシーに合わせて判断することだとは思うが
拡張メソッド作れないって縛りプレイはできれば勘弁して欲しいな
拡張メソッド作れないって縛りプレイはできれば勘弁して欲しいな
578デフォルトの名無しさん (スップ Sdbf-4TTv)
2019/11/10(日) 15:45:16.03ID:VGQLXxaqd 拡張メソッド無しはさすがにしんどい
そら上位のnamespaceにstringやらintのextension大量に作るとかやられるのは勘弁してほしいがちゃんと整理されてるなら問題ないじゃん
そら上位のnamespaceにstringやらintのextension大量に作るとかやられるのは勘弁してほしいがちゃんと整理されてるなら問題ないじゃん
579デフォルトの名無しさん (ワッチョイ 9f5e-B9Yx)
2019/11/10(日) 16:04:31.99ID:cwUfzKNl0 拡張メソッドを使わないというオナニーではないのだろうか。
580デフォルトの名無しさん (ワッチョイ 4bda-zfwn)
2019/11/10(日) 19:59:11.47ID:osonYbcZ0 Linqの構文を本家のSQLに逆輸入すれば良いのに
581デフォルトの名無しさん (ワッチョイ df2d-tdZI)
2019/11/10(日) 23:41:53.75ID:Xa0PWm0+0 そういや、Max、Min句が対象とした個別要素を返すってのは酷い気がするな
IEnumerable<T>に対して使った時にT型で返すように何故しなかったのか全く理解できん
IEnumerable<T>に対して使った時にT型で返すように何故しなかったのか全く理解できん
582デフォルトの名無しさん (ワッチョイ 8b6e-msxt)
2019/11/11(月) 00:31:18.41ID:gP2AYUUm0 多少非効率でもなるべくもともと用意されてる機能や関数を使うのが分かりやすい派です
583デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/11(月) 02:22:50.36ID:U14XuieM0 MoreLINQ使えばMinBy/MaxByがある
(複数返すからTじゃなくIEnumerable<T>的なのが返される)
リスト埋めるやつもMoreLINQ使えば比較的読みやすい
var labels = new List<Label>().Pad(10, _ => new Label());
(複数返すからTじゃなくIEnumerable<T>的なのが返される)
リスト埋めるやつもMoreLINQ使えば比較的読みやすい
var labels = new List<Label>().Pad(10, _ => new Label());
584デフォルトの名無しさん (ドコグロ MMcf-lZUE)
2019/11/11(月) 06:43:42.02ID:Ndyau4keM >>581
そりゃ欲しいのは最大値や最小値なのに複数の要素が返ってきても面倒なだけだし
そりゃ欲しいのは最大値や最小値なのに複数の要素が返ってきても面倒なだけだし
585デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/11(月) 08:24:51.18ID:k+N9opvZ0586デフォルトの名無しさん (ドコグロ MMcf-lZUE)
2019/11/11(月) 09:41:13.10ID:Ndyau4keM587デフォルトの名無しさん (ワッチョイ 9f2c-E8Ce)
2019/11/11(月) 12:40:24.59ID:bjD92kdR0 generics, trait だろ。
has-a, interface, duck typing など、継承じゃなくて包含
Ruby では、<=> 宇宙船演算子があれば比較できる。Comparable
has-a, interface, duck typing など、継承じゃなくて包含
Ruby では、<=> 宇宙船演算子があれば比較できる。Comparable
588デフォルトの名無しさん (アウアウウー Sacf-FD+t)
2019/11/11(月) 12:41:25.30ID:W7OxtIUea589デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/11(月) 12:47:13.66ID:k+N9opvZ0 >>588
上位互換の方がいいっていうのはわかる。でもそれは LINQ to Object だけを考えた場合ね。
LINQ は LINQ to Entities という OR マッパーも強く意識しているから、標準 SQL 互換の機能も大事であり、どちらか一つという選択を強いるなら現状になる。
上位互換の方がいいっていうのはわかる。でもそれは LINQ to Object だけを考えた場合ね。
LINQ は LINQ to Entities という OR マッパーも強く意識しているから、標準 SQL 互換の機能も大事であり、どちらか一つという選択を強いるなら現状になる。
590デフォルトの名無しさん (スップ Sdbf-4TTv)
2019/11/11(月) 12:47:47.01ID:pQGjPoV1d 別に難しいもんじゃないんだし作りゃいいんだよ
どういうのがベストかが状況によってたやすく変化する処理だと思う
値が欲しいのか要素が欲しいのか、一つで良いのか全部列挙するのか
だから標準としては1回走査で済んでsum等の算術系と同じような入出力になる現仕様を選んだんじゃない?
どういうのがベストかが状況によってたやすく変化する処理だと思う
値が欲しいのか要素が欲しいのか、一つで良いのか全部列挙するのか
だから標準としては1回走査で済んでsum等の算術系と同じような入出力になる現仕様を選んだんじゃない?
591デフォルトの名無しさん (ワッチョイ df2d-tdZI)
2019/11/11(月) 18:08:06.42ID:FT34EqpP0 なんかよくわからないけど、SQLとの互換性ならTが返ってきた方が遥かにSQLに近いでしょ
592デフォルトの名無しさん (スププ Sdbf-piWr)
2019/11/11(月) 18:48:51.85ID:/nYlZGiNd ??SQLで集計関数使ったら元のレコードはわからんめえ
593デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/11(月) 18:53:21.43ID:k+N9opvZ0594デフォルトの名無しさん (ブーイモ MM7f-hbis)
2019/11/11(月) 18:57:02.20ID:Xp4ki1TGM Tを返すと戻り値がIEnumerable<T>になる
流石にそれをMax関数と呼ぶのは抵抗がある
流石にそれをMax関数と呼ぶのは抵抗がある
595デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/11(月) 19:00:34.90ID:oQXr0vGEr まず最大値を取る
その値を持つ要素の集合をselectする
確かに無駄だな
SQLはどこかで最適化してるのかな?
その値を持つ要素の集合をselectする
確かに無駄だな
SQLはどこかで最適化してるのかな?
596デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/11(月) 19:02:33.34ID:oQXr0vGEr MAXはMAXだけどそういう用途の関数?があってもいいかもね
というかすでにあるんだろうか?
というかすでにあるんだろうか?
597デフォルトの名無しさん (ワッチョイ cb88-4TTv)
2019/11/11(月) 19:42:55.85ID:rlOgmRK80 >>596
標準ではない
使ったこと無いけど583が紹介してるものか自作するか
自作しても数行だしググればコードは転がってるよ
個人的にはこういうやつは上げだすとキリがないんで現状で十分かなと思ってる
標準で山ほど用意されても何があって何を自作しなきゃならんかがわからなくなるんで本当に基本的なものだけあればいいかなと思う
標準ではない
使ったこと無いけど583が紹介してるものか自作するか
自作しても数行だしググればコードは転がってるよ
個人的にはこういうやつは上げだすとキリがないんで現状で十分かなと思ってる
標準で山ほど用意されても何があって何を自作しなきゃならんかがわからなくなるんで本当に基本的なものだけあればいいかなと思う
598デフォルトの名無しさん (オッペケ Sr0f-EJQs)
2019/11/11(月) 19:55:30.29ID:oQXr0vGEr LINQじゃなかったら作るのは簡単
599デフォルトの名無しさん (ワッチョイ df2d-tdZI)
2019/11/11(月) 20:48:49.06ID:FT34EqpP0 SQLで書けるものはだいたい書けるようなってないと使いづらいよやっぱ
600デフォルトの名無しさん (ワッチョイ fbda-4fxd)
2019/11/11(月) 20:52:24.25ID:S9KO9pzP0 SQLだとストアドあるけど、LINQで書けるの?
インラインビューとかも
インラインビューとかも
601デフォルトの名無しさん (ワッチョイ df2d-tdZI)
2019/11/11(月) 20:54:23.36ID:FT34EqpP0 それは流石にLinqのせいじゃなく、例の変な人が言ってるフレームワーク等で吸収する部分じゃないか?
602デフォルトの名無しさん (ワッチョイ 9f01-vL98)
2019/11/11(月) 21:13:49.74ID:U14XuieM0 >>595
SQLの場合はインデックスがあるから一般的にO(log n)で最大値のキーが取得できる
LINQ標準でMaxByと同じことをやる場合はちょっと効率悪いけどOrderBy使う
O(n)にするためだけにAggregate使った拡張メソッド作るよりも
走査する件数を減らすことを考えたほうがよかったりする
SQLの場合はインデックスがあるから一般的にO(log n)で最大値のキーが取得できる
LINQ標準でMaxByと同じことをやる場合はちょっと効率悪いけどOrderBy使う
O(n)にするためだけにAggregate使った拡張メソッド作るよりも
走査する件数を減らすことを考えたほうがよかったりする
603デフォルトの名無しさん (ブーイモ MM7f-pFIx)
2019/11/11(月) 21:39:19.76ID:ouAhYYgiM LinqとSqlは根本的に別物なので使い分けろ
当たり前のことだな
当たり前のことだな
604デフォルトの名無しさん (ドコグロ MMcf-lZUE)
2019/11/11(月) 21:40:04.42ID:Ndyau4keM >>600
DDLもLINQで書けるようにしろとか言いそうな勢いだなw
DDLもLINQで書けるようにしろとか言いそうな勢いだなw
605デフォルトの名無しさん (ワッチョイ fbda-4fxd)
2019/11/11(月) 21:46:03.84ID:S9KO9pzP0 出来ればやってくる欲しいけどw
606デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/11(月) 21:51:17.93ID:k+N9opvZ0 >>602
LINQ to Object vs LINQ to Entities でインデックスの有無は大きいよね。テーブルごとに特性とサイズを考えて、AsEnumerable でやるか AsQueryable でやるか機能配置の決め手になることがある。
OrderBy 使っていいなら、こんな感じかな?
public static IEnumerable<T> MaxBy<T>(this IEnumerable<T> src, Func<T, IComparable> selector) =>
src.GroupBy( selector ).OrderByDescending( x => x.Key ).Take(1).SelectMany( x => x );
>>600, 601
ストアドは DB の機能だから、フレームワークでは実現できないよ。
フレームワーク側でエミュレートできたとしても DB との間で通信が頻繁に発生することになるから、性能が出ないと思われる。
DB のストアドを呼ぶことはできるはず。
LINQ to Object vs LINQ to Entities でインデックスの有無は大きいよね。テーブルごとに特性とサイズを考えて、AsEnumerable でやるか AsQueryable でやるか機能配置の決め手になることがある。
OrderBy 使っていいなら、こんな感じかな?
public static IEnumerable<T> MaxBy<T>(this IEnumerable<T> src, Func<T, IComparable> selector) =>
src.GroupBy( selector ).OrderByDescending( x => x.Key ).Take(1).SelectMany( x => x );
>>600, 601
ストアドは DB の機能だから、フレームワークでは実現できないよ。
フレームワーク側でエミュレートできたとしても DB との間で通信が頻繁に発生することになるから、性能が出ないと思われる。
DB のストアドを呼ぶことはできるはず。
607デフォルトの名無しさん (アウアウイー Sa0f-acGn)
2019/11/11(月) 21:59:36.96ID:jrmXg5Iea >>604,605
つEFのCodeFirst
つEFのCodeFirst
608デフォルトの名無しさん (ドコグロ MMcf-lZUE)
2019/11/11(月) 22:10:23.25ID:Ndyau4keM >>607
LINQじゃねーしw
LINQじゃねーしw
609デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/11(月) 22:38:21.34ID:k+N9opvZ0610デフォルトの名無しさん (ワッチョイ bb5f-vPHs)
2019/11/11(月) 22:50:03.30ID:bl21NUGN0 >>609
初めからLINQの話してて、何がベストかなんて話してない
初めからLINQの話してて、何がベストかなんて話してない
611デフォルトの名無しさん (ブーイモ MM4f-rQqJ)
2019/11/11(月) 23:03:24.65ID:FJX73dNWM LINQって便利なんだけど今一歩物足りないよな
何が足りないのかと言われても難しいが
何が足りないのかと言われても難しいが
612デフォルトの名無しさん (スフッ Sdbf-y5kd)
2019/11/11(月) 23:09:21.20ID:c2Z6IyQ8d 十分もの足りるよ
613デフォルトの名無しさん (JP 0Hcf-ApVS)
2019/11/12(火) 01:07:27.57ID:uL6vLpX0H 前処理はストアドで定義してアプリはストアド叩くのが定石やろ
614デフォルトの名無しさん (ワッチョイ 9f2f-E8Ce)
2019/11/12(火) 02:21:22.46ID:AYqcftQb0 LANが10Mだったころの定石だな
615デフォルトの名無しさん (JP 0Hcf-ApVS)
2019/11/12(火) 03:26:22.31ID:uL6vLpX0H 今は前処理クライアントでやるもんなん?
616デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/12(火) 06:42:14.04ID:8jIzWHEF0 >>610
LINQ にこだわるなら、こだわるだけの理由が必要。
スレに貢献している人を茶化すなら、茶化すだけの知識なり、思想なり、技術的裏付けが必要。
>>611,612
どちらの意見もわかる。
LINQ to Object に閉じるなら十分。足りない部分はライブラリ自作すればいいし、そのパズルが楽しかったりする。
でも、LINQ to Entities に踏み込むと足りないことだらけ。本質的ではないところで相当な工夫が必要だし、工夫しすぎると汎用性がなくなって使い物にならなくなる。
LINQ to Object で組み始めたロジックを LINQ to Entities 互換に拡張することを考えている時間が結局ムダになることも多い。
両者、似ているようでギャップがかなり大きいところに物足りなさを感じる。
LINQ にこだわるなら、こだわるだけの理由が必要。
スレに貢献している人を茶化すなら、茶化すだけの知識なり、思想なり、技術的裏付けが必要。
>>611,612
どちらの意見もわかる。
LINQ to Object に閉じるなら十分。足りない部分はライブラリ自作すればいいし、そのパズルが楽しかったりする。
でも、LINQ to Entities に踏み込むと足りないことだらけ。本質的ではないところで相当な工夫が必要だし、工夫しすぎると汎用性がなくなって使い物にならなくなる。
LINQ to Object で組み始めたロジックを LINQ to Entities 互換に拡張することを考えている時間が結局ムダになることも多い。
両者、似ているようでギャップがかなり大きいところに物足りなさを感じる。
617デフォルトの名無しさん (アウアウエー Sa3f-I5cZ)
2019/11/12(火) 06:51:40.24ID:9Bw+vwp6a 最初から全くの別物なのに似ているというだけで変な期待をかけて勝手に裏切られた気持ちになる人が少なからず居る
別物と割り切って名前もインターフェースも変えれば初学者が迷わずに済んだだろうな
別物と割り切って名前もインターフェースも変えれば初学者が迷わずに済んだだろうな
618デフォルトの名無しさん (ワッチョイ 2b54-BjYd)
2019/11/12(火) 07:47:36.42ID:8jIzWHEF0 >>617
そうだね。裏切られたとは思わないけど、当初の期待はかなり高かった。
でも、LINQ to Entities の情報が少なすぎて別物だって理解するまでに相当な時間がかかってしまう。
誰も頼れる人がいない中、ネット情報のみの独学でみっちり3週間かかったよ、まともに使えるようになるまでに。
そうだね。裏切られたとは思わないけど、当初の期待はかなり高かった。
でも、LINQ to Entities の情報が少なすぎて別物だって理解するまでに相当な時間がかかってしまう。
誰も頼れる人がいない中、ネット情報のみの独学でみっちり3週間かかったよ、まともに使えるようになるまでに。
619デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/12(火) 07:51:50.22ID:87WSr1Vsd EntityFrameworkなのかEntityFramework Coreなのかはっきりさせとけよ…
620デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 08:11:27.68ID:SXTlA5+FM621デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 08:13:15.74ID:SXTlA5+FM あ、ID 変わっちゃった。
618=620
618=620
622デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/12(火) 10:46:47.47ID:87WSr1Vsd >>620
一次リソース見なよ
一次リソース見なよ
623デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 10:52:36.27ID:wo/moEjDM >>622
当然見てるよ。原文で。
当然見てるよ。原文で。
624デフォルトの名無しさん (ラクッペ MM0f-6c3l)
2019/11/12(火) 11:56:05.18ID:uH6v+/CZM まともに使えないものがまともに使えるようになったと言ってる時点でまともな人間でないのは明白
625デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/12(火) 12:00:35.23ID:87WSr1Vsd >>623
なら混乱しないはず
なら混乱しないはず
626デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 12:08:55.50ID:wo/moEjDM >>624
君は読解力ないのかな?
局面によっては使えるかもしれないけど、業務ロジックを完結させるには役者不足、LINQ to Entities はまだまだ発展途上だね、今後に期待、と一貫して言っているのだが。
一次ソースも二次ソースも充実してないのは発展途上でこれからもまだまだ移りゆくものだからだとも思ってる。それがわかるのにけっこうコストがかかったよ、そのあたりが個人的に物足りなさを感じるところかな。
君は読解力ないのかな?
局面によっては使えるかもしれないけど、業務ロジックを完結させるには役者不足、LINQ to Entities はまだまだ発展途上だね、今後に期待、と一貫して言っているのだが。
一次ソースも二次ソースも充実してないのは発展途上でこれからもまだまだ移りゆくものだからだとも思ってる。それがわかるのにけっこうコストがかかったよ、そのあたりが個人的に物足りなさを感じるところかな。
627デフォルトの名無しさん (ブーイモ MM7f-I5cZ)
2019/11/12(火) 12:15:05.01ID:yJMEc/1iM あぁなるほど
データアクセスに業務ロジックをバリバリ書いてしまうタイプの人か
データアクセスに業務ロジックをバリバリ書いてしまうタイプの人か
628デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 12:31:28.37ID:wo/moEjDM >>625
一次ソースはバージョンに関しては混乱しない。それは二次ソースの話。一次ソースが混乱させるのは、LINQ to Object から Entities へ移行するにあたって、重要かつ基礎的なコンセプトをまともに解説していないこと。
たとえば、IEnumerable の派生である IQueryable はアップキャストするだけで AsEnumerable で評価されてしまうとか、引数となるラムダ式が全く同じ記法なのに IEnumerable では Func で IQueryable では Expression だとか。
これらは分かってしまえば当たり前だし、うまく設計したものだなと感心するけれど、初学者にはトラップでしかない。
君はこれら暗黙の前提を一次ソースで知ったのか?
だとしたらどこにガイドがあるか教えてほしい。
一次ソースに当たれというのは一般的なお約束だけれども、LINQ to Entities に関しては、コンセプトや実装の難しさに比して一次ソースがかなり脆弱で不親切だと思うよ。
617 の言うとおり Object と Entities でインターフェースを変えて設計するか、あるいは、移行に十分な情報を一次ソースが用意するか、どちらかだと思う。そのどちらでもないことがアンチを生んでいる原因ではないかと。
一次ソースはバージョンに関しては混乱しない。それは二次ソースの話。一次ソースが混乱させるのは、LINQ to Object から Entities へ移行するにあたって、重要かつ基礎的なコンセプトをまともに解説していないこと。
たとえば、IEnumerable の派生である IQueryable はアップキャストするだけで AsEnumerable で評価されてしまうとか、引数となるラムダ式が全く同じ記法なのに IEnumerable では Func で IQueryable では Expression だとか。
これらは分かってしまえば当たり前だし、うまく設計したものだなと感心するけれど、初学者にはトラップでしかない。
君はこれら暗黙の前提を一次ソースで知ったのか?
だとしたらどこにガイドがあるか教えてほしい。
一次ソースに当たれというのは一般的なお約束だけれども、LINQ to Entities に関しては、コンセプトや実装の難しさに比して一次ソースがかなり脆弱で不親切だと思うよ。
617 の言うとおり Object と Entities でインターフェースを変えて設計するか、あるいは、移行に十分な情報を一次ソースが用意するか、どちらかだと思う。そのどちらでもないことがアンチを生んでいる原因ではないかと。
629デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 12:34:30.29ID:wo/moEjDM630デフォルトの名無しさん (ラクッペ MM0f-6c3l)
2019/11/12(火) 12:56:06.79ID:3Ic/AzmcM 真っ赤なガイジ一歩手前
631デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/12(火) 13:00:05.39ID:87WSr1Vsd ごめんガイジに触っちゃっま
632デフォルトの名無しさん (ブーイモ MMbf-BjYd)
2019/11/12(火) 13:53:14.21ID:wo/moEjDM >>630,631
業務ユーザが LINQ to Entities に手を突っ込むの、ガイジだよなぁ、わかるぞ。
だがね、人のやらないことを先鞭をつけてやらねばならない場合もあるのだよ。
ひととおり技術評価した結果、本格的に導入するのは時期尚早という判断で別の技術つかうことにした。.NET 5 以降に期待してる。
業務ユーザが LINQ to Entities に手を突っ込むの、ガイジだよなぁ、わかるぞ。
だがね、人のやらないことを先鞭をつけてやらねばならない場合もあるのだよ。
ひととおり技術評価した結果、本格的に導入するのは時期尚早という判断で別の技術つかうことにした。.NET 5 以降に期待してる。
633デフォルトの名無しさん (ワッチョイ 8bda-SIb9)
2019/11/12(火) 17:44:24.07ID:EGn19C9N0 え、業務アプリで普通にLINQ to Entities使ってるけどなんかマズい問題でもあるの?
単純に手軽で使いやすいと思ったから使ってるんだけど・・・・
単純に手軽で使いやすいと思ったから使ってるんだけど・・・・
634デフォルトの名無しさん (スップ Sdbf-SCE2)
2019/11/12(火) 17:50:33.05ID:87WSr1Vsd >>633
問題ない。Dapper開発元のStackOverflowでさえEntityFramework Coreを併用してる。
問題ない。Dapper開発元のStackOverflowでさえEntityFramework Coreを併用してる。
■ このスレッドは過去ログ倉庫に格納されています
