ふらっと C#,C♯,C#(初心者用) Part149

■ このスレッドは過去ログ倉庫に格納されています
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
2021/02/01(月) 10:24:56.67ID:laVzODdgM
>>426
さすがにこれはひどい
2021/02/01(月) 10:26:19.00ID:iKAM042Ld
>>425
あ、そうか。納得。
2021/02/01(月) 14:37:18.05ID:PZUYg2ag0
>>426
いいね。
何やってるかすぐ分かる
2021/02/01(月) 15:26:59.74ID:DEyQGLil0
MoreLinqにもMaxBy()あるよ
>>418と一緒でループ1回ですむ
標準だけでやりたければ自分でExtension定義すればいい
431デフォルトの名無しさん (ワッチョイ 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秒になってしまうので、単純にな数字ではないと思うのですが、どのような理論で
この数字が出ているのかが皆目わかりません

よろしくお願いいたします。
2021/02/02(火) 21:08:40.40ID:kveRc3Dr0
CPUスレッド数
433デフォルトの名無しさん (ワッチョイ 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; }
2021/02/03(水) 01:43:39.37ID:1I0faZoba
>>433
質問の趣旨は要するにただ「バッキングフィールドをどこに書くべきか?」それだけ?

自分はスニペットのテンプレのままなのでプロパティー本体の直前に書くけど
そんなの別にどこでもお好みでいいと思うよ。
うるさいがこう書けと言うならおとなしくそれにしたがっておけばいいと思う。
2021/02/03(水) 02:41:30.85ID:7CsH6q/40
https://qiita.com/toshi0607/items/801a0d37fb48313cbdbd

C#6.0
自動プロパティ初期化子を与えて、初期値指定ができるようになりました。
public string Name { get; set; } = "Nyanchu"

以下と同意です。

private string _name = "Nyanchu";

public string Name
{
get { return _name; }
set { _name = value; }
}

これでいいんじゃね?
2021/02/03(水) 08:22:20.89ID:0ICj5PSn0
何がこれでいいの?質問を理解してる?
2021/02/03(水) 08:24:12.18ID:qNul9lFK0
久しぶりに触ってんだけど
vs2019でフォームにクラスファイルを追加するときは
右側のプロジェクトウィンドウみたいなところで右クリックして追加ないとダメなんだっけ?
メニューバーのだとただのクラスファイルを作るだけ?
2021/02/03(水) 08:42:49.88ID:7CsH6q/40
>>436
_nameを消したいのかとESP
2021/02/03(水) 08:55:41.75ID:9jfq2zZC0
>>438
そんなこと言ってないよ
ちゃんと質問読もうね
2021/02/03(水) 08:59:26.01ID:7CsH6q/40
そもそも書かなくて良くなるじゃん
set{value=略;}にすれば


なるっけ?
2021/02/03(水) 09:03:06.99ID:9jfq2zZC0
書きたくないんじゃなくて書く必要がある場合にどこに書くのか?だろ
勝手に質問変えないで
自動実装プロパティでは不都合があるため自前でバッキングフィールドを用意する、は大前提
2021/02/03(水) 09:05:26.44ID:7CsH6q/40
>>441
書く必要があるときってあるん?
2021/02/03(水) 09:10:29.51ID:drzEfAtQ0
>>437
「フォームにクラスファイルを追加する」が意味わからん プロジェクトにファイルを追加する?
「メニューバーの」が具体的にどれを指してるのか分からん
「ただのクラスファイルを作るだけ」がやりたいこととどう異なっているのか分からん
2021/02/03(水) 11:07:31.11ID:7CsH6q/40
>>440
自己レス

ホントだ
違う話なんだな
変数なしで初期化ができるのって
自動プロパティって処理の中身がないやつだけ?なのか
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);
}
2021/02/03(水) 15:14:33.67ID:qlx5EMsl0
>>441
code maid使うと、プライベートフィールドは纏められるからそのまま放置するな
大体メンテすることもないから特に困ることもない
2021/02/03(水) 15:24:45.11ID:q3Uucr840
>>445
OrderByのサンプル見れば分かるやろ
https://dotnetfiddle.net/GdxsMG

Customers.OrderBy(c => c.City)を
Customers.OrderBy("City”)にできる
2021/02/03(水) 16:56:36.24ID:ADWHn1WBd
>>432
ありがとうございます
4こあ8スレッドなのでその2倍いっているのが
やや気になります
今度 同時に計って見て検証してみます
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の引数にできるんでしょう?
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);

みたいに変数で実行ファイルのパスを渡すことってできないのでしょうか?
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
2021/02/03(水) 18:29:48.39ID:dgpbKw5W0
>>450
頭の@は文字列リテラルに付けた時と変数に付けた時は意味が違う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/tokens/verbatim
2021/02/03(水) 23:04:55.84ID:PTI/2U/t0
>>451
ありがとうございます。
解決しました!

これでようやっとC#とPythonのアプリケーションを統合することができました。
2021/02/04(木) 03:54:16.03ID:8ASdjdRY0
エクセルの表みたいな
一行に複数の列(項目が並んでる 二次元の配列って
ArrayListじゃだめなんだっけ?

独自のプロプロパティをもったクラスつくってそれを列に放り込むんだったっけ?
2021/02/04(木) 07:35:49.07ID:mMDqMLln0
フィールドがプロパティで
レコードが件数になりまつ
って言うと通じるの?

List<myclass> dtcls = new List<myclass>();

的な
myclassのメンバがプロパティで
456デフォルトの名無しさん (ラクッペペ MM3e-mj3q)
垢版 |
2021/02/04(木) 08:09:30.76ID:+vIUF0nDM
通じない
フィールド、プロパティ、メンバ
それぞれに言語上の意味がある
2021/02/04(木) 09:33:50.26ID:5uFosyLe0
書き込めない
2021/02/04(木) 09:37:28.17ID:5uFosyLe0
WebRequestでウェブページを取得しているのですが、POSTに必要なFormDataがうまく取得できません
普通なら対象ページのHTMLを見れば取得できるのですが、対象ページの”実行”ボタンを押した時にjavascriptでPOSTに必要な情報を
生成しているようで、この値を取得できないのです。
何か方法がありましたら教えてください
2021/02/04(木) 09:38:55.99ID:5uFosyLe0
HTMLはこんな感じです
<input type="submit" value="実行" onclick="sid()">
2021/02/04(木) 11:07:52.39ID:NUvwu5Ez0
自分でJavaScript解析できないならSeleniumで
461デフォルトの名無しさん (ワッチョイ a59b-qCTK)
垢版 |
2021/02/04(木) 11:24:29.52ID:ZzRKCYY/0
selenium
2021/02/04(木) 12:51:14.55ID:PDwRodWn0
ブラウザでF12押してネットワークになに流れてるかを見てみたら?
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
2021/02/04(木) 17:55:14.32ID:uLY+2761M
>>463
C#でそのJavaScriptと同じことをやって値を計算するか、C#からJavaScriptを実行して結果を取得するか
465デフォルトの名無しさん (ワッチョイ 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」となるのですが、なぜですかね?
2021/02/04(木) 21:33:17.59ID:Gk5V85vI0
Ruby on Rails ではシステムテストで、Selenium Webdriver を使う

Capybara で、Headless Chrome とか
2021/02/05(金) 01:41:49.08ID:RhinnOg60
なんでRoRの話が?
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);
2021/02/05(金) 19:45:05.14ID:+3DA/7eT0
ちょっとググれば出るやんw
https://whatsnewmail.yahoo.co.jp/yahoo/20200824a.html
2021/02/05(金) 19:49:44.60ID:KQRmB00P0
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail.smtpclient.enablessl
SMTP+STARTTLSにしか対応してないのでSMTPSに対応する他の方法を使う
2021/02/05(金) 21:14:07.85ID:wjTgrFbp0
SmtpClientってそもそも非推奨だしな
2021/02/05(金) 22:02:49.43ID:8Pa/tTU+0
>>470
ありがとうございます。
単純にポート番号と通信方法変えるだけじゃダメだったんですね。
SMTPSで検索してみたらMailKit使えと出てきたのでやってみたらできました。
ありがとうございました。
2021/02/06(土) 03:01:00.29ID:Yx7joU3b0
質問させてください。
c#でgoogle drive api を使ったWindowsアプリケーションを作ろうと思っているのですが、
ビルド後に出来た配布ファイルは実行ファイルはもちろんの事、NuGetで追加したDLL群や、
取得したJSONファイルも含めて配布すればいいのでしょうか?
2021/02/06(土) 03:29:14.46ID:Ygg5i19/0
インストーラー作れや
2021/02/06(土) 08:28:56.67ID:j0Q2R7my0
そのインストーラーを作るのにも必要なファイル群がわからないとダメだと思うけど
2021/02/06(土) 11:41:20.20ID:MqA6OGOW0
>>473
必要なファイル郡は何らかの形で入手できるようにしなければいけないので、
最低限の情報としてこのDLLとかこのJSON使ってますって情報をユーザに
与えてあげないと動かしようがないけど、配布ファイルに含めるか各自で
ダウンロードさせるかはアプリの作成者が決めること

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

ものによって勝手に配布しちゃダメとか、配布にはこれを使えとか、コンパイル
済みのものは配布不可とか色々あるので
2021/02/06(土) 17:42:10.09ID:Bi5ar2460
>>473
そうだけど、GoogleTokenフォルダ下のものはそれぞれのアカウントのを利用させないと不正アクセス起こっちゃわないか
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を指定したり出来るのでしょうか?
取り敢えず並び替え出来れば良いので一番かんたんな方法をどなたか教えて下さい。
よろしくお願いします。。
2021/02/06(土) 18:18:20.71ID:zn5WrP4C0
>>478
https://qiita.com/tetsu8/items/96b8b889c57eb55125d1
2021/02/06(土) 18:24:06.35ID:bSeS6eqZa
>>478
ItemにIComparable<Item>を実装するか、
SortのオーバーロードのうちComparison<T>かIComparer<T>を引数にとるバージョンを使う。
あるいは>>358

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

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

>>479さんもありがとうございます。
もう少し頑張ってみます。
2021/02/06(土) 18:49:45.30ID:Kl671woR0
Tってなに?とか言ってるのに
List<Item>使ってるやん(笑)
2021/02/06(土) 18:59:51.25ID:UYR2I7R3M
>>482
サンプルなどで使って覚えたので。。
意味を理解しているというよりも、リストの書き方はこうって覚えています。
しかも私が言ってるのは<T>だけに限ったじゃありません。(わからないくせに偉そうですみません)

<T>に限って言えばClass名を入れるって事ですか?
2021/02/06(土) 19:04:04.81ID:uslvvrsY0
ジェネリックのことは黒柳さーんに聞くといいよ。
2021/02/06(土) 19:24:51.67ID:xuEfQm7n0
>>483
そのレベルでは自分のやりたいことのサンプルだけ真似しようとしても分からないことだらけで前に進まないと思うぞ
面倒がらずにC#の入門書とかで体系的に最低限の基礎は固めなよ
2021/02/06(土) 19:41:30.75ID:Kl671woR0
>>483
>>485さんが言っている通りで基礎から勉強した方がいいとは思うけど
Tは別にクラスじゃなくても、stringやらC#の基本型も指定出来ます
つまり、Listが扱う型を指定するという事です
2021/02/06(土) 19:58:10.04ID:pqKs8KDi0
List<Item>だとListにItemしか格納できなくて後々不便になるので、
普通はList<object>にするのが一般的だよ。
2021/02/06(土) 20:10:24.73ID:f+vO1TLm0
え?
2021/02/06(土) 20:20:56.81ID:zn5WrP4C0
>>481
いや、とりあえず真似ればいいやん

people.Sort((a, b) => a.Age - b.Age);

itemList.Sort((a, b) => a.itemID - b.itemID);

※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい

>>487
氏ね、ボケ
2021/02/06(土) 21:00:57.90ID:xFqAsQE9M
最低限の基礎知識の勉強は必要だよね
そうしないと検索してもここで聞いても理解できない
「やりたいこと優先」という気持ちは分かるけど

>>487みたいに変なこと教える人もいるから…
2021/02/06(土) 21:04:16.10ID:UYR2I7R3M
>>489
何を書いてるのかまったくわからないのでちょうどラムダ式についての解説を読んでいました。

そのa,bはNameとは関係ない感じですか?
ラムダ式でしか指定できないのでしょうか?
2021/02/06(土) 21:21:06.73ID:UYR2I7R3M
>>490
今作ってるものが完成したら皆さんが言うとおり基礎の勉強したいと思います。

new Person(){Name = "a"}のaは普通の解説ならTaroとか書くはずで、のちのa,bとは関係ないって事ですね?
2021/02/06(土) 22:25:38.73ID:zn5WrP4C0
>>492
ああ、確かにPersonでName="a"は手を抜きすぎだな、"Taro"とか"田中"とかの方がいいね
その"a"とラムダ式のaは関係ない
それを示すために
> ※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい
って書いたんだけどね
2021/02/06(土) 22:27:37.15ID:AyWHBNPF0
>>492
以下のメソッドの同じ意味
一々メソッドを定義するの面倒だし、型とか一々書くのが面倒で省略しまくったのがラムダ式と思うとイメージしやすい
int Hoge(Item a, Item b)
{
return a.itemID - b.itemID;
}
2021/02/06(土) 22:49:39.66ID:UYR2I7R3M
>>493
出来ました!ソートされました!
本当にありがとうございます!
2021/02/06(土) 23:20:37.38ID:b6D0c/Lh0
>>484
水虫でスヤスヤ
497デフォルトの名無しさん (エムゾネ FFbf-6HDI)
垢版 |
2021/02/07(日) 18:04:33.39ID:4v/nAOdwF
個々の人たちは若い女性には優しい
498デフォルトの名無しさん (ワッチョイ bfbb-5e/0)
垢版 |
2021/02/07(日) 20:57:57.25ID:knu7zqoU0
ラムダ式はちゃんと練習したいな、なんか練習問題集みたいなのないのかな?
特にキャプチャーの概念が自分の感覚と狂う狂う
2021/02/07(日) 21:21:20.13ID:S7zvZDvX0
意味不明
それでしか書けないものがあるならまだしも
結局モノが作りたいんじゃないなら
この職には近づかないほうがいいぞ
不幸になる
2021/02/07(日) 21:21:56.15ID:pmm7svGna
真面目な話、ラムダ式はそこまで奥は深くない気がする。
決していきがって言ってないつもり。

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

川俣さんの記事が割とよく書けてると思うしあれ読めば十分じゃないのかな
2021/02/07(日) 22:40:06.94ID:emwEhLVE0
arcoderでもやってりゃいいんじゃないの?
2021/02/07(日) 23:10:43.01ID:YZfkY6ii0
>>500
あの人、川俣さんって言うんだ?
知らなんだ
2021/02/07(日) 23:56:40.34ID:zExDTdlVd
俺もラムダ式は最初意味不明すぎて苦労した
何で躓いたかって言うと一番は用途が不明な点
デリゲートとか覚えたらそこから理解できた
2021/02/08(月) 00:50:31.00ID:Vt5mMx+g0
ラムダ式のメリットってなによ
わざと難解に書いてるだけにしか見えん
2021/02/08(月) 00:57:45.90ID:GsV6CYPPd
>>504
絶対に一度しか使わないような処理を引数として渡したい時に
わざわざメソッドとして書かなくて済む
2021/02/08(月) 01:00:19.26ID:BqxWbjT60
お手軽処理をその場で書いて渡せることかな
2021/02/08(月) 01:06:18.03ID:hRlo1f3e0
c#でUSBカメラから録画・録音処理をするライブラリでいいのないですかね?
Accordを使ってみたところ、録画は上手くいったけど録音が上手く動かないしもうリポジトリもアーカイブされてるので乗り換え先を探しています。
2021/02/08(月) 01:25:17.22ID:EESpGXM5a
デリゲートを理解してればラムダ式自体を覚えるのは何の苦もないと思うけど
確かにデリゲート的な概念って、プログラミング自体初心者だったりお上品な言語しか
やったことない人だと理解しづらいよねたぶん。
それはそうだと思うわ。
2021/02/08(月) 01:52:41.04ID:YmxwiogA0
ラムダ式がメリットというより
引数として無名関数を指定出来るのがメリットという点を理解すれば良いだけかと
例えばよくあるソートだけど、大抵は2つの比較対象のオブジェクトがラムダ式の引数になるけど、ソート側からしたらそれをどう評価したらいいか分からないから、ラムダ式で評価する関数を戻り値として指定して、ソート側でそれを実行している訳で
この辺の説明でピンとこない人は中々理解できないかも知れない
2021/02/08(月) 08:20:16.41ID:PnrMZIJR0
>>504
名前をいちいち考えなくていい
引数に変数しか指定できなくて毎回
var I1 = I + 1;
foo(I1);
って書くより
foo(I + 1);
って書く方が楽でしょ
それと同じ
2021/02/08(月) 09:02:11.48ID:6em1tYAf0
無名関数は優れた概念だと思う。
問題はコピペが簡単にできる現代であれほど省略する必要があったのかってこと
2021/02/08(月) 10:12:50.26ID:asopwXX20
メソッドを記述するのが面倒なだけってのはお前の都合じゃん

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

あと他でも同じ処理が必要になったときにラムダで書いたから5箇所同じことやってますとか言ったやつは死刑でつ
2021/02/08(月) 11:06:59.86ID:LrP4KWut0
>>512
いちいちコードの全処理に名前付けるのかって話よ
2021/02/08(月) 12:05:27.80ID:TxCBSk9L0
>>512
高階関数に渡す処理なので
「ここのWhereの指定だけどさ…」とか
「ここのGroupByに渡してるラムダの書き方だけどさ…」で問題なく話が通じる

話が通じないようなところにラムダを書いてるなら使い方のほうが間違ってるかも
2021/02/08(月) 12:07:08.93ID:QaH3FId2M
513はわからないんじゃなくて分かろうとするつもりが全く無いだけでしょ
その場限りじゃないことが明白なら1行の処理でも
メソッドにするのは当たり前

というか513はメソッドのラムダ表記すら難癖つけて全面禁止しそうだな
2021/02/08(月) 12:08:42.71ID:QaH3FId2M
レス番ずれてた
513じゃなくて>>512
2021/02/08(月) 12:13:39.02ID:gKVPdjPN0
>>516
じゃあ、メソッド名もそうしたほうがいいのかな?
2021/02/08(月) 12:16:19.29ID:TxCBSk9L0
Linqを使いやすくするためには高階関数を楽に使えるする必要があって
そのために導入されたのが無名関数とその表現形式であるラムダ式

Whereに渡す処理を必ず別の箇所で名前を付けて定義しなきゃいけないようだと面倒だし命名負荷が高い
2021/02/08(月) 12:17:03.96ID:TxCBSk9L0
>>519
そうしたほうとはどうしたほう?
2021/02/08(月) 12:52:14.43ID:NwJJp6aS0
>>512
LINQの記述を読めば分かるじゃん
2021/02/08(月) 12:53:18.46ID:nKGEYTSta
こういう話は抽象論より具体例挙げた方が早いね

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

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

検索一つとってもお前と別のやつは異なるラムダ式で同じことをやるかもしれなくて
そしてそれを見つけるのは異常に困難であると予想できる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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