ふらっと C#,C♯,C#(初心者用) Part148at TECH
ふらっと C#,C♯,C#(初心者用) Part148 - 暇つぶし2ch449:デフォルトの名無しさん
20/10/29 19:28:53.48 obW6sm8G0.net
>>435
共有メモリというのは知らなかったです
勉強してみます
ありがとうございます

450:デフォルトの名無しさん
20/10/29 20:32:35.12 ytciXGtBp.net
お前が好きだと今日言うメモリー
気持ちを交換共有メモリー

451:デフォルトの名無しさん
20/10/29 21:27:35.00 fAmed0Klr.net
動的なJsonを作成したいのですが、いい方法ありませんか?
今考えてるのは
1. Jsonシリアライズ用クラスを用意(複数)
2. 処理部で使用するタイミングで1.クラスnew
3. 2.でnewしたクラスのみ匿名型オブジェクトに突っ込む
4. 3.をシリアライズ
これで一応は出来るんですが、3.で分岐多くなるのが非常に汚くて。

452:デフォルトの名無しさん
20/10/29 21:28:58.34 fAmed0Klr.net
できれば使用したタイミングで、都度匿名型に追加できればいいんですが、実装方法わからず…

453:デフォルトの名無しさん
20/10/29 21:32:20.78 fAmed0Klr.net
都度匿名型に追加ってのはあくまでイメージですはい。

454:デフォルトの名無しさん
20/10/29 21:37:54.98 w+K6PrrE0.net
DynamicObjectとか使えばよかったような

455:デフォルトの名無しさん
20/10/29 21:45:46.98 HAxtGf170.net
いまいちよく分からんが、Dictionary<string, object>だとダメなの?

456:デフォルトの名無しさん
20/10/29 22:08:26.61 fAmed0Klr.net
>>448
あ、何かできそうな予感。試してみます。
>>449
使用の度にAddすればって事ですね。
…何かこれもできそうな予感…試してみます。

457:デフォルトの名無しさん
20/10/29 22:56:17.00 28O5aXgi0.net
>>426
Python が最初だとどうなるんだろうな

458:デフォルトの名無しさん
20/10/30 05:36:06.93 Of4L3rez0.net
スタティックライブラリーを使うためDLLにしているのだが、関数ポインタを引数にする関数があって困っています。
C#の関数をその関数ポインタに結びつける方法ありますか?

459:デフォルトの名無しさん
20/10/30 07:28:47.86 NoXL5vik0.net
>>452
関数ポインタ引数に対してはdelegateをそのまま渡せばいいよ
LPCTSTR引数に対してstringをそのまま放り込んでも成立するのと同様にdelegateもPVOIDとして解釈される
つまりそのDLLで使う関数の型のdelegate型を作って渡せば良いだけ

460:デフォルトの名無しさん
20/10/30 07:32:51.69 NoXL5vik0.net
ちなみにC#9だか10からは生の関数ポインタも扱えるって聞いた

461:デフォルトの名無しさん
20/10/30 09:43:54.51 Of4L3rez0.net
>>453
ありがとうございます。

462:デフォルトの名無しさん
20/10/30 09:48:27.53 +BFmFpNo0.net
関数ポインタをDLL側が保持する(寿命が関数から返ってくるまでより長い)場合は
マネージ側もその間そのdelegateインスタンスを保持しとかないとだめだぞ

463:デフォルトの名無しさん
20/10/30 12:16:19.25 7MkyV1CpF.net
>>445
msgpack

464:デフォルトの名無しさん
20/10/30 23:02:16.07 YXzIJ61G0.net
>>454
どどど、どう書くの?

465:デフォルトの名無しさん
20/10/31 12:17:23.59 8cswqFVg0.net
>>458
URLリンク(ufcpp.net)

466:デフォルトの名無しさん
20/10/31 12:27:36.76 fxcwqRC2F.net
>>459
URLリンク(www.youtube.com)

467:デフォルトの名無しさん
20/10/31 20:35:43.78 jPO/JqMva.net
最近最新版がプレリリースされたwebView2って、C#ではまだ使えないんでしょうか?
URLリンク(docs.microsoft.com)
上記サイトに習ってnugetからインストールし、1日いろいろ試して全く動作しませんでした。
ソリューションエクスプローラーの参照の、webView2をダブルクリックすると、「このプロジェクトは利用不可能き、またはビルドされていないため、オブジェクトブラウザで表示できません」と表示されます。
webView2もVisualStudioもMicrosoft Edgeも最新版をインストールしてもダメでした。

468:デフォルトの名無しさん
20/10/31 20:37:54.93 jPO/JqMva.net
間違えました。
「このプロジェクトは利用不可能か、またはビルドされていないため、オブジェクトブラウザでは表示できません。」の間違いです。

469:デフォルトの名無しさん
20/10/31 20:40:31.48 4IwElBvx0.net
WindowsFormsを勉強しはじめたんだけど
テキストボックスに処理の状況を逐一表示させたい場合ってどうやるのが正しいやり方?
とりあえずこんな感じで作ってみたら動くけどなんか違う気がする
URLリンク(ideone.com)

470:デフォルトの名無しさん
20/10/31 20:55:29.78 Pj54f0iv0.net
ログ的な事をやりたいんだったらListBox使う方が良いよ
一定行数に達したら先頭(最終)行を削除とかも簡単に実装できる

471:デフォルトの名無しさん
20/10/31 21:00:31.63 +32PkI4zM.net
>>463
allocconsole してconsole に出力するの吉

472:デフォルトの名無しさん
20/10/31 21:00:33.78 1joLaKYt0.net
>>463
それでも良いと思うけどConsole.WriteLineみたいに強制改行関数作っといたら?
あとC#自体のアドバイスになるけど、"処理しています……" + "\r\n"は+いらないから"処理しています……\r\n"で良いし
変数挟むときは$を付けて{}で囲む$"あと{i}秒\r\n"って書き方は各プログラミング言語の中でもトップクラスに便利だから覚えておいた方が良い

473:デフォルトの名無しさん
20/10/31 21:34:45.65 2P+i0kOV0.net
>>463
>>466の言うように文字列とか送るだけで表示するメソッド作っておくといろいろ後付けで改変しやすくなる
RichTextBox使えば状況に応じて文字列ごとに色やフォントを変えることもできるし
あとAppendTextは自動でTextBoxをスクロールしてくれる便利なものだけどメソッドの先頭で念のためFocus()かSelect()しておくと確実
フォーカス当たってないと自動スクロールしてくれないので

474:デフォルトの名無しさん
20/10/31 21:59:39.41 b+5qg5vxa.net
>>463
何に不満や違和感を感じてるのか具体的に言わないと誰も答えようがないよw
プログラミングの分野に限らず他人に自分の意図を正確に伝えることってほんと大事

475:デフォルトの名無しさん
20/10/31 22:07:28.55 1TbrihkJ0.net
>>463
その方法が正攻法だと思って良い
あとは他の人のアドバイスのように便利なメソッド作って使いやすくすればいいと思う

476:デフォルトの名無しさん
20/10/31 22:21:19.47 4IwElBvx0.net
>>464
ありがとう。使ってみる
>>465
今回やりたい事は違うけどこれはこれで知りたかった事だ。ありがとう
>>466
改行用の関数をForm1の方で作っといてdelegateかfuncで処理用クラスに渡す感じかな?
$マークのやつそういう使い方だったんかサンクス
あと改行だけ分けたのは元のコードで「str + “¥r¥n”」の形だったのを直した名残だわ
>>467
フォーカス当たってないとスクロールしてくれないのか
なんか動いてくれないと思ってたんだよな

477:デフォルトの名無しさん
20/10/31 22:39:35.75 syXSgGXN0.net
>>470
積極的にコンソールを使う意図が無いのであれば、AllocConsoleよりも
System.Diagnostics名前空間のDebug.WriteLine()やTrace.WriteLine()を勧める
VSのデバッグ出力画面やDebugView++等のアプリで見れる

478:デフォルトの名無しさん
20/10/31 23:14:04.52 +32PkI4zM.net
コンソールにはコンソールのメリットが
あるからなぁw

479:デフォルトの名無しさん
20/11/01 00:44:45.18 TS2lQNKS0.net
>>461
本当に書かれている通りにやったの?
・WebView2はプレリリース版でなければならない(今だと1.0.674-prereleaseかな?)
・EdgeはCanary版でなければならない
なんとなく、WebView2のプレリリース版でなく安定版の方を入れてそうな予感

480:デフォルトの名無しさん
20/11/01 08:45:28.58 R1ZyiuLQa.net
>>473
ありがとうございます!
通常版のedgeをアンインストールして、edgeのcanary版をインストールして、再度通常版のedgeをインストールしたらできました!
2種類のedgeがインストールしてないと動作しないんですね。
webview2を使う場合は、全ユーザーも、canary版のedgeをインストールしていないと使用できないんでしょうか?

481:デフォルトの名無しさん
20/11/01 16:17:54.64 hv15RbEG0.net
まあまだ.NET版はpereleaseだからな

482:デフォルトの名無しさん
20/11/01 18:01:16.91 CXNCiFbu0.net
WinUI版のWebView2使ってみたが、マウスの戻るボタンが効いたのに感動したわ
コレをどうにかするためにどんだけ苦労したことか

483:デフォルトの名無しさん
20/11/02 07:35:20.34 kZXAdCJzM.net
クラスの自動プロパティについて質問
自動プロパティがない頃は、頭にアンダースコア(_hogeHoge)をつけたprivate変数を用意しておいて、
コンストラクタやメソッドではそちらを読み書きしていた。
でも自動プロパティができたら、アンダースコアのprivate変数は不要になった。
これまで何も考えずに、コンストラクタやメソッドではプロパティそのもの(HogeHoge)に対して読み書きしているんだが、これでいいんだろうか…
それともクラス内部で読み書きが発生する場合は自動プロパティ使わないほうがいい?

484:デフォルトの名無しさん
20/11/02 08:40:37.73 J1SwCvmZ0.net
getterに副作用持たせてるの?

485:デフォルトの名無しさん
20/11/02 08:54:07.90 kZXAdCJzM.net
>>478
何も考えずにpublic string HogeHoge{get;set;}しか書いてない

486:デフォルトの名無しさん
20/11/02 12:37:17.75 NZsZuJ1ia.net
>>477
何を悩んでるのか分からない。
同じ機能なら簡潔に書けるほうがいいに決まってるので
自動実装プロパティーで必要な機能が過不足なく実現できるなら
自動実装プロパティーを使わない理由はないんじゃないの?
別にpublicやinternalなメンバーにクラス内からアクセスしてはいけないなんて変なルールはないよw

487:デフォルトの名無しさん
20/11/02 12:39:05.37 kZXAdCJzM.net
>>480
そのそんなルールはないよというのが聞きたかった。
ありがとう。

488:デフォルトの名無しさん
20/11/02 13:48:19.73 iMasp6IMD.net
c#にも、cでいうプログラミング言語Cみたいなバイブルと言える本はありますか?

489:デフォルトの名無しさん
20/11/02 17:57:45.09 9N3uvmex0.net
どんどん言語がアップデートされていってるからなあ

490:デフォルトの名無しさん
20/11/02 18:02:08.07 kfCt0hOOd.net
googleかmsか
ufcppでもいいと思うけど

491:デフォルトの名無しさん
20/11/02 18:19:04.77 8cdEIkcV0.net
K&Rみたいな読んでるとドヤれる(気がする)ようなのはC#ではないよね

492:デフォルトの名無しさん
20/11/02 19:33:36.63 QcicrBn8M.net
ちょっと前までrtfでインストールされてたじゃん

493:デフォルトの名無しさん
20/11/02 21:55:02.37 KMJSmLX80.net
>>482
「プログラミング.NET Framework 第4版」Jeffrey Richter 著、藤原 雄介 訳 

494:デフォルトの名無しさん
20/11/02 22:06:56.80 8/l8UOwbr.net
ガチの素人で趣味でプログラミングを始めました
フォントファミリー名を取得してフォントファミリー名一覧コンボボックスを作成、そのあとコンボボックスで選んだフォントファミリーの名前で横においてるテキストブロックのフォントを変えるプログラムを作ってるんですけど、選択したコンボボックスからフォントファミリー名の取得はできてると思うんですがテキストブロックのフォントが変わりません
どうすればうまくいきますか?

495:デフォルトの名無しさん
20/11/02 22:27:22.35 onwGyibB0.net
pictureBox1.Image = @"パス";
PictureBoxで画像を表示している時、別の画像に切り替えるときはDisposeしてからパスを変更したほうがいいでしょうか?

496:デフォルトの名無しさん
20/11/02 22:31:57.70 8/l8UOwbr.net
もしかしてフォントファミリーは文字型変数じゃ指定できないの?

497:デフォルトの名無しさん
20/11/02 22:51:52.41 IceSdPzo0.net
>>490
たぶんFontFamilyの名前が間違っている
>>489
メモリが一時的に積みあがっていくけど適当なところでガーベージコレクタが動くはずだから問題ない
それはDispose()というかGC.Collect()で解決する

498:デフォルトの名無しさん
20/11/02 22:54:08.63 NZsZuJ1ia.net
>>488
適当にやってみた
public Form1()
{
  InitializeComponent();
  cboFont.DropDownStyle = ComboBoxStyle.DropDownList;
  cboFont.DisplayMember = "Name";
  cboFont.Items.AddRange(FontFamily.Families);
  cboFont.SelectedIndex = 0;
  cboSize.DropDownStyle = ComboBoxStyle.DropDownList;
  for (int i = 6; i < 81; i++) cboSize.Items.Add(i);
  cboSize.SelectedIndex = 0;
  EventHandler eh = (sender, e) => textBox1.Font = TextFont;
  Load += eh;
  cboFont.SelectedIndexChanged += eh;
  cboSize.SelectedIndexChanged += eh;
}

499:デフォルトの名無しさん
20/11/02 22:54:27.55 NZsZuJ1ia.net
private int TextSize
{
  get
  {
    return (int)cboSize.SelectedItem;
  }
}
private Font TextFont
{
  get
  {
    return new Font((FontFamily)cboFont.SelectedItem, TextSize);
  }
}

500:デフォルトの名無しさん
20/11/02 23:36:41.20 8/l8UOwbr.net
ありがとうございます
今日はもう遅いので明日やってみます

501:デフォルトの名無しさん
20/11/02 23:49:15.55 onwGyibB0.net
>>491
そうなのですね
そのままパスを変更するだけに留めます
先輩ありがとうございます!

502:デフォルトの名無しさん
20/11/03 01:34:50.34 qmbI+CcG0.net
>>495
こいつVBAで荒らしていた馬鹿じゃないか?

503:デフォルトの名無しさん
20/11/03 01:58:10.34 jzL8Touo0.net
>>496
VBAスレは見てないので人違いですね

504:デフォルトの名無しさん
20/11/03 08:28:33.94 dsOM4bkh0.net
MahApps.MetroってC#はどうってことないがxamlがヤベえのね

505:デフォルトの名無しさん
20/11/04 13:54:59.77 MUmomvCg0.net
GUIはXAMLが基本です

506:デフォルトの名無しさん
20/11/07 10:45:15.58 t7w6OMp4a.net
プログラムの実行を優先して、ユーザーのマウスやキーボード操作をパソコンが受け付けないようにしたいんですが可能ですか?

507:デフォルトの名無しさん
20/11/07 10:51:39.94 nZ+0GoS70.net
それをするとプログラムに(応答無し)って表示されるけど可能は可能

508:デフォルトの名無しさん
20/11/07 12:17:39.90 39mGoKKv0.net
メッセージポンプして全部removeしてしまえばよろし
あかよろし

509:デフォルトの名無しさん
20/11/07 12:59:34.40 t7w6OMp4a.net
>>501
応答なしと表示されても問題ありません。ボタンを押した後、プログラムの一部区間だけユーザーの操作を無効化したいです。
理由は、ダイアログボックスが表示されてからSendKeysで文字を入力する際に、他の操作によりプログラムが正常動作しない時があるためです。SendKeysしか方法がなかったのでそうしています。

510:デフォルトの名無しさん
20/11/07 13:48:23.82 GpP1ZiKDa.net
>>503
SendKeysじゃなくてWin32のPostMessageかSendMessageを使うことを
考えるべきじゃないの?
SendKeysの仕様に合わせるためにそんな大鉈を振るうとかまともな考�


511:ヲとは思えんよw



512:デフォルトの名無しさん
20/11/07 14:59:35.50 6IQ4ek2K0.net
>>500
マウスイベントとキーボードイベントをグローバルフックして、イベントをチェーンせずに握り潰す

513:デフォルトの名無しさん
20/11/07 16:41:34.70 cxYX5+z2p.net
>>505
すみません。初心者には難しそうです。諦めます。

514:デフォルトの名無しさん
20/11/07 22:57:41.32 39mGoKKv0.net
sendを理解出来るならpeekも出来るでしょ?

515:デフォルトの名無しさん
20/11/09 13:06:44.87 YQs0Gheb0.net
.NetCore3.1のWPFアプリってエントリポイント変えられないの?
WPFのエントリポイント変更でググるとApp.xamlのビルドアクションを「アプリケーション定義」から「ページ」に変更してMainメソッド作ればいいって書かれてるけど
.NET Coreだとまずそのビルドアクションを変えられない

516:デフォルトの名無しさん
20/11/09 13:27:48.21 9M/x9jqfd.net
>>508
こんなん?
URLリンク(blog.magnusmontin.net)

517:デフォルトの名無しさん
20/11/09 14:29:20.29 YQs0Gheb0.net
>>509
ありがとう
出来た

518:デフォルトの名無しさん
20/11/10 12:46:09.92 Wkf+3jxV0.net
.net5が今日発表される予定らしい
URLリンク(www.dotnetconf.net)

519:デフォルトの名無しさん
20/11/10 14:36:59.32 gS6kMlPu0.net
.NET5でVisual Studioはどう変わるの?
我々はこれまで通り「プロジェクトのプロパティ」から「対象のフレームワーク」で3.5を選んどけばいいんでしょ?

520:デフォルトの名無しさん
20/11/10 20:55:17.07 PRedF3Ga0.net
3.5?

521:デフォルトの名無しさん
20/11/10 21:45:01.26 ZFV7gHPc0.net
3.5は流石に草生える

522:デフォルトの名無しさん
20/11/10 21:54:25.94 whduyV8l0.net
4.0だろ当然

523:デフォルトの名無しさん
20/11/10 22:16:39.16 HXXQLae8M.net
4.0はサポートされていないの?
3.5のほうがいいわけ?

524:デフォルトの名無しさん
20/11/11 00:11:32.86 9mAhI+SY0.net
混乱しておりますねえ

525:デフォルトの名無しさん
20/11/11 00:42:32.57 BDEAVR3x0.net
サポート切れの4.0使うよりは3.5縛りのほうが健全に思えてきたわ
4.5.2に揃えたいけど、古いサーバー多いのよね

526:デフォルトの名無しさん
20/11/11 01:37:56.99 foWqNnZI0.net
>>512
我々は先(.NET 5)に行く、君は3.5を頼む!

527:デフォルトの名無しさん
20/11/11 02:30:08.95 szx2KMpX0.net
>>518
すまないこのファイルZIPでくれ。
なぉ外部DLLの読み込みはダメ

528:デフォルトの名無しさん
20/11/11 04:26:49.73 zN1eFwAm0.net
元ネタがわかんねえw
うち3.5どころか2.0や1.1の化石あるぜ……嘘みたいだろ?

529:デフォルトの名無しさん
20/11/11 07:13:29.31 A0Zt6oTk0.net
C++部がVC6でしかビルドできない

530:デフォルトの名無しさん
20/11/11 07:32:57.28 szx2KMpX0.net
zip関係は4.xから標準実装

531:デフォルトの名無しさん
20/11/11 07:48:32.66 DyE7m0HI0.net
configファイルを作らないまたは削除する連中が嫌いだわ

532:デフォルトの名無しさん
20/11/11 10:40:12.91 96Q/I0na0.net
VS16.8.0に更新したら.NET Coreのプロジェクトは1クリックで.NET5に移行出来たな
.NET Frameworkのプロジェクトも簡単に移行できるのかな?

533:デフォルトの名無しさん
20/11/11 10:44:10.46 QZePbwpJM.net
できるわけないでしょ
WebFormsとWCF廃止の時点で半数くらいのアプリは事実上移行不可能
そうでなくても変なサードのライブラリ使ってたりして移行できないケースも多いだろうね

534:デフォルトの名無しさん
20/11/11 12:47:24.27 5X85No/50.net
16.8でuwpのリリースビルドが実行不能になったわ

535:デフォルトの名無しさん
20/11/11 19:44:06.91 96Q/I0na0.net
あれ、.NET5ってWindowsアプリからコンソールアプリに変更できないの?
プロジェクトプロパティから出力の種類をコンソールアプリに変えてもコンソール出てこないんだが
プロパティ開きなおすとWindowsアプリに戻ってるし

536:デフォルトの名無しさん
20/11/11 20:49:57.45 WaPRIfZP0.net
WCFって代わりに何使えって言ってる?

537:デフォルトの名無しさん
20/11/11 21:00:29.49 szx2KMpX0.net
>>529
MQTT

538:デフォルトの名無しさん
20/11/12 00:35:56.66 qoiJF5zI0.net
C#実践しながら効率良く覚えたいんだけど良い教材ないかな
とりあえずWinアプリ作りたい
頑張って独習C#を9割読んだのにもうほとんど内容覚えてない

539:デフォルトの名無しさん
20/11/12 00:56:44.98 nVOC+il80.net
そりゃ手を動かさんと覚えんよ

540:デフォルトの名無しさん
20/11/12 00:59:41.35 +Hg40DyF0.net
何でも良いから作りゃいいんだよ
ベタなのは電卓
少機能なものをガンガン作る

541:デフォルトの名無しさん
20/11/12 02:56:18.65 XDpnN8VW0.net
仕事してるならいつもやってるちょっとした作業を代替させるようなアプリがモチベになるきっと

542:デフォルトの名無しさん
20/11/12 05:54:42.02 6+k25fjF0.net
WinUIとMAUIの区別が曖昧にしか認識できてないんですが、
具体的な違いを説明してくれてる情報源があれば教えてください。

543:デフォルトの名無しさん
20/11/12 06:11:12.88 xNvOr4tgd.net
日頃やってる単純作業をなんでもいいから自動化
エロ動画収集とかエロ画像整理とかあるだろ

544:デフォルトの名無しさん
20/11/12 12:00:28.21 f5BAQJxFF.net
>>534
めっちゃ判ります
画面キャプチャしてpdfに製本するアプリ造ったら捗った

545:デフォルトの名無しさん
20/11/12 14:31:20.02 s2LM5erN0.net
C#で小数点の倍精度演算をするには自分で作るしか無いの?
整数はBigIntegerで出来るのに

546:デフォルトの名無しさん
20/11/12 14:41:04.78 pnQCXdZla.net
Double 構造体
URLリンク(docs.microsoft.com)
> 倍精度浮動小数点数を表します。

547:デフォルトの名無しさん
20/11/12 15:01:22.45 s2LM5erN0.net
倍精度じゃ無くて多倍長だった
めんご

548:デフォルトの名無しさん
20/11/12 15:16:14.73 f5BAQJxFF.net
BigInteger

549:デフォルトの名無しさん
20/11/12 15:21:45.07 f5BAQJxFF.net
URLリンク(archive.codeplex.com)
URLリンク(web.archive.org)URLリンク(www.emilstefanov.net)

550:デフォルトの名無しさん
20/11/12 15:30:12.32 f5BAQJxFF.net
こっちか
URLリンク(www.nuget.org)
URLリンク(ja.wikipedia.org)

551:デフォルトの名無しさん
20/11/12 17:45:20.41 s2LM5erN0.net
>>543
Math.Gmp.Native.NET
有効桁数20桁じゃん
メモリが許す限りの桁数の小数点数を扱いたいときはどうするの?

552:デフォルトの名無しさん
20/11/12 17:46:57.77 6nU3MdtG0.net
>>544
それを標準機能や標準関数で実装してる言語ってあるの?

553:デフォルトの名無しさん
20/11/12 17:49:22.72 yAJG0kR/0.net
>>544
メモリが許す限りの何かを扱いたいのなら数値に限らず自作しないと、そんな都合のいいものはない

554:デフォルトの名無しさん
20/11/12 18:50:06.12 n9rTzoEP0.net
>>546
馬鹿は黙っていれば良い例

555:デフォルトの名無しさん
20/11/12 19:03:16.89 eGo0h3N+0.net
Pandasに相当するライブラリないの?

556:デフォルトの名無しさん
20/11/12 19:03:45.07 eGo0h3N+0.net
まあC#でやる必要ないかw

557:デフォルトの名無しさん
20/11/12 19:52:59.46 OqW4/kLba.net
ググってみたらdoubleの仮数部は52ビットらしけど、52ビットの分解能じゃ
不足する分野って何なんだろうねw
地球の赤道に1ミクロン単位で目盛りを振っても余裕でおつりがくる分解能みたいだけど

558:デフォルトの名無しさん
20/11/12 20:42:07.53 aPogCkhJ0.net
>>550
円周率じゃん?

559:デフォルトの名無しさん
20/11/12 20:42:17.55 /VjS/nppM.net
>>550
オーダーの異なる多数の数値を何も考えずに前から順に足し合わせたりすれば簡単に狂うよ

560:デフォルトの名無しさん
20/11/12 21:28:06.03 +Hg40DyF0.net
めんどくさいから整数で演算して結果の小数点を動かすわ
ってかみんなそうやってやんないの?
そりゃ高パフォーマンスで多倍長浮動小数扱えるならそれが一番だろうけど

561:デフォルトの名無しさん
20/11/12 21:30:18.59 mp0oTovH0.net
一番面倒臭いのはケチ付けたいだけのID:s2LM5erN0

562:デフォルトの名無しさん
20/11/12 21:32:48.72 WhH2oDBM0.net
GMP使うからC#ではせんな。
CUGにmiracle ってライブラリーがあったけど
これも当然C#用では無いなぁ

563:デフォルトの名無しさん
20/11/12 21:51:54.26 OqW4/kLba.net
>>553
誤差が累積しないような演算方法を工夫するのが普通だろうね

564:デフォルトの名無しさん
20/11/12 21:59:49.04 4tCV4GAu0.net
すまんが、↓こう言う時の「=>」ってどう言う意味なの?
string asdf => $"jkl";
この画面の11行目でそんな感じのが出てきたんだけど・・・・
URLリンク(youtu.be)

565:デフォルトの名無しさん
20/11/12 22:15:18.46 QnwokErS0.net
読み取り専用プロパティの簡単な書き方
string asdf { get { $"jkl"; } }
string asdf { get => $"jkl"; }
string asdf => $"jkl";
string asdf { get; } = $"jkl"; // これだけ意味が違う

566:デフォルトの名無しさん
20/11/13 00:55:38.66 eU7TEgK20.net
>>565
private string _asdf = $"jkl";
string asdf { get { return this._asdf; } }
を1行で書いたもの

567:デフォルトの名無しさん
20/11/13 05:21:57.56 quhoX/Ovr.net
>>544
何の計算したいの?

568:デフォルトの名無しさん
20/11/13 11:17:32.36 d7Iu7DLU0.net
>>560
単なる道楽なんだけどね
昔の放送大学でUBASICを使った自然対数の底と円周率の演算をやってたから
同じことをC#でやろうと思ったけどIEEE754の倍精度実数では桁が足りなかった
BigIntegerがあるならBigFloatも欲しかったなと

569:デフォルトの名無しさん
20/11/13 11:21:41.58 RWm0omqa0.net
放送大学アーカイブズ
懐かしの名講義
再放送中毒

570:デフォルトの名無しさん
20/11/13 11:32:20.13 ehJZ/AtC0.net
URLリンク(bangumi.ouj.ac.jp)

571:デフォルトの名無しさん
20/11/13 12:37:29.01 907SkV9V0.net
>>561
結局欲しいのは多倍長整数なのか倍精度浮動小数なのか
道楽なら自作ライブラリでも作れば良い

572:デフォルトの名無しさん
20/11/13 14:16:13.05 WOWtwvuFd.net
>>564
なんでずれた回答するの?
「作るしかない」
なら良い回答なのに。
新しい人どんどん減っちゃうよ

573:デフォルトの名無しさん
20/11/13 14:18:25.76 RWm0omqa0.net
「作るしかない」
の方が最近の新しい人は逃げる傾向にあるからな

574:デフォルトの名無しさん
20/11/13 15:13:21.55 od/5f45td.net
作るしか無いってことはほぼ世の中にはそんなものは求められていないってこと
そんなものを要求するのは根本が間違ってるか何でも周りに頼り過ぎか
真に有益なものならむしろ作って公開すりゃ良い実績になる

575:デフォルトの名無しさん
20/11/13 15:22:11.67 WOWtwvuFd.net
>>567
なんかそれがもうずれてんだよね。
「作るしかないの?いいのないの?」って聞かれてるんだから
「ないよ。作るしかないよ」って答えればいいのに。
世の中で求められてないとか質問に関係なくない?
有益云々も今ないから作ったら公開してくれって言えば利益にもなんのに。
残念

576:デフォルトの名無しさん
20/11/13 15:25:44.29 fnhS2xNE0.net
20年位前のうbyの時代はそれが通ったけど
若い人にそういう文化はもう無い

577:デフォルトの名無しさん
20/11/13 15:29:35.13 od/5f45td.net
>>568
質問への回答じゃないのにズレてるとかいうレスがそもそもズレてるって思わないの?
というか悪魔の証明はできないんだから無いよ、なんて軽々しく言えないという前提がわかってる?
ついでに誰にも求められていないものを公開して利益になるロジックを教えて

578:デフォルトの名無しさん
20/11/13 16:12:04.51 /kJTTxU10.net
>>558
>>559
ありがとう!
記号系はググりづらくて、本当助かったぜ!

579:デフォルトの名無しさん
20/11/13 16:31:13.21 WOWtwvuFd.net
>>570
そうなの。質問への回答じゃないの。
悪魔の証明とかかたっ苦しく考えなくていいのに。
知らないなら知らないで、「俺はしらんなぁ、作るしかないんじゃない?」で答えるか黙ってればいいじゃない。知ってる人がいれば答えればいいし。
>ついでに誰にも求められていないものを公開して利益になるロジックを教えて
これは
>真に有益なものならむしろ作って公開すりゃ良い実績になる
ここからね。
ないものができるんだから利益でしょ。使う使わないは人それぞれ。少なくとも質問者には必要なんだから。
なんかすまんね

580:デフォルトの名無しさん
20/11/13 16:42:13.42 907SkV9V0.net
>>565
欲しいものの要件をハッキリ言わないからだよ
>>540で多倍長って言いながら、>>544では小数って言ってる
小数求めてるのに>>561ではBigFloat求めてる
Bigは大数の接頭辞
自分で欲しいものを理解してないのに人に探してもらうことは難しいよ

581:デフォルトの名無しさん
20/11/13 16:47:50.11 907SkV9V0.net
精度の高い計算をするためのツールがUBASICなわけ
あえてそれを使わずにC#でやるのは本人の自由だけど、
要件をハッキリさせずにいながら出てきた案はダメ出し
そりゃ顰蹙も買うさ

582:デフォルトの名無しさん
20/11/13 17:05:08.44 od/5f45td.net
>>572
だから答えようがないから質問を見た感想を述べているだけなんでしょ?
それをなんで、その回答はズレている!なんて突っ込むの?
質問者が求めてるなら
誰にも求められていない
に該当しないじゃんw
質問者は世の中含まれていないの?

583:デフォルトの名無しさん
20/11/13 17:39:01.74 j87fJt3YM.net
>>573
多倍長と小数は相反する概念じゃ無いぞ
BigFloatも普通にJuliaとかである型だし
このスレ理系がいなさすぎだろ
多倍長浮動小数点演算求められてんのに
「そんなものは誰にも必要じゃ無いから存在しない!自分で作れ!」とか
普通にGMPとかあるし普通はそれを奨める

584:デフォルトの名無しさん
20/11/13 17:41:05.56 WOWtwvuFd.net
>>575
前半はこっちがはやとちったね。ごめんね。
後半はなんか文脈から言葉遊び以上の君が言ってること理解できないから俺の頭がおかしいんだな。
君が正しいよ。

>>573
>要件をハッキリさせずにいながら出てきた案はダメ出し
>そりゃ顰蹙も買うさ
そりゃそうだな。すまんね

585:デフォルトの名無しさん
20/11/13 18:28:33.10 qE0lneeB0.net
ワッチョイ dd9b-Y0tO ワッチョイ 459b-Y0tO ワンミングク MMa3-Y0tO 質問の仕方も使う言葉も不正確で調べた回答者にダメ出しの上にワッチョイコロコロ
NGでいいよ

586:デフォルトの名無しさん
20/11/13 18:33:46.11 lrdHTx5AM.net
BigFloatって 10÷3 するとメモリ喰らい尽くしてくれるの?

587:デフォルトの名無しさん
20/11/13 18:44:41.25 UDp7AbcK0.net
>>579
扱う桁数を設定しておくんでしょ
juliaだとsetprecisionというのを使うらしい

588:デフォルトの名無しさん
20/11/13 18:45:15.53 907SkV9V0.net
>>576
>>544

589:デフォルトの名無しさん
20/11/13 18:46:10.29 od/5f45td.net
え?普通にgmp勧めてそれじゃ精度が足りん!ってなったんじゃないの?
中身の詳細までわからんが…
C++に有効桁数100桁の演算とかあるみたいだけど要求はメモリたくさん使うレベルなんだから兆オーダーレベルの桁数なんでしょ?

590:デフォルトの名無しさん
20/11/13 18:47:51.67 iD09dkB6M.net
>>576
554で勧めたんだがスルーされたんだよ

591:デフォルトの名無しさん
20/11/13 18:59:56.02 WXkqFeV00.net
やろうとしたこと無いから知らんのだけど例えば円周率を何兆も計算するのあると思うけど、そういう演算ってその桁数の小数点演算必要になるの?
普通にdouble程度で十分だと勝手に思ってたけど

592:デフォルトの名無しさん
20/11/13 22:02:04.34 qUM0ZuKL0.net
wikipediaに依ると円周率の計算は
π/4 =1- 1/3 + 1/5 - 1/7...らしい
BigIntegerで1を必要な桁数だけ大きくすれば良いような

593:デフォルトの名無しさん
20/11/13 22:07:03.28 KPuGe7Gc0.net
>>584
整数演算だけで出来るぞ
というかすべての小数点演算は整数演算の組み合わせで出来る
>>582
GMPのデフォルト精度は64ビットだから20桁くらいしかいけない
precに大きなビット数設定してやれば何万桁でもいける

594:デフォルトの名無しさん
20/11/13 22:26:47.07 A6rK79tx0.net
だから言語に分数型が必要だって言っただろアホが

595:デフォルトの名無しさん
20/11/13 23:04:03.67 V7nqUCXH0.net
いや、も


596:っとストレートに円周率型が必要



597:デフォルトの名無しさん
20/11/14 00:22:57.13 XJ24TZhC0.net
>>585
URLリンク(www.youtube.com)

598:デフォルトの名無しさん
20/11/14 05:05:39.51 hLsGLi/C0.net
分数型があったところで無理数は表現できなくね?
アレば便利なことには間違いないが

599:デフォルトの名無しさん
20/11/14 09:03:12.56 cYQm19/50.net
>>590
三分の一が表現できるってだけで結構便利なんだな
自分でクラス作ってもいいけど

600:デフォルトの名無しさん
20/11/14 15:27:05.74 HtCqr6h30.net
>>538
URLリンク(www.dotsakura.com)

601:デフォルトの名無しさん
20/11/15 09:17:33.20 TE31pbc70.net
日本でC#使うのは殆どUnityかWindowsデスクトップアプリだからな
数値計算とかしたいならPython使うしかない

602:デフォルトの名無しさん
20/11/15 09:55:21.46 zLhs1absM.net
業務アプリで1/3することってあるよ

603:デフォルトの名無しさん
20/11/15 12:40:40.11 wWBHTATOd.net
C#ってCやVC++と比べるとかなり遅い
ですか?
遅いなら、時間の掛かる処理だけは速い言語で作るべきか悩みます
マーシャリングすれば使えるみたいなので

604:デフォルトの名無しさん
20/11/15 12:45:13.00 MP+vmq9O0.net
>>595
処理の内容と書き方による

605:デフォルトの名無しさん
20/11/15 12:45:47.16 4zqmLj42M.net
物にもよるが3割減ぐらいに思っておけば

606:デフォルトの名無しさん
20/11/15 12:58:30.49 TbjZIaKaM.net
分数型を作るのは面白そうやん。約分や通分の機能を持たせておけば素敵。てかMS考えてくれ。

607:デフォルトの名無しさん
20/11/15 13:20:31.23 ttHD4odoa.net
>>595
ファイル読み書きやネットワークアクセスが一切なくて100%CPUパワーを使うだけのプログラムなら差が出るかもしれないけど
そうでなければ処理時間の差などI/Oにかかる時間に比べればごくわずかで塵にも等しい
ので気にするだけ無駄
というかCPUパワーを極限まで使い倒すなら、C#でマルチコア並列実行できるよう処理を書いたほうが
C/C++のシングルスレッド処理よりよっぽど早いかもしれない
よほど低性能なマシンで実行するならともかく、今どきの環境なら全部C#で書くほうが無難だと思うけどね

608:デフォルトの名無しさん
20/11/15 13:23:38.35 y3jy+ngDM.net
>>598
すでに有理数クラスがNugetにあるで
URLリンク(www.nuget.org)
Example usage:
Rational left = (Rational) 1 / 2;
Rational right = (Rational) 1 / 4;
Rational sum = left + right; // equals to: 3 / 4

609:デフォルトの名無しさん
20/11/15 16:21:09.71 d0/9SCdg0.net
>>595
どうしてもC++のライブラリをC#で使いたいとかじゃないかぎり
そのマーシャリングの処理が何気に重い気がするので
関数を何度も呼び出すみたいな使い方するなら
ベンチマーク取ってみるとC#のみの方が速いかも知れないぐらいの差じゃないかな

610:デフォルトの名無しさん
20/11/15 16:38:42.28 alkL58xG0.net
>>601
マーシャリングが重いって言うと例えば
extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)] string procName);
とする場合、のprocNameをAnsiに変換するときってヒープ使われるの?
ヒープ使われるんだとしたら自前でstackallocしてbyte*として渡そうと思うけど

611:デフォルトの名無しさん
20/11/16 08:44:05.44 dMCYT8Lea.net
>>595
C#とC/C++の処理速度はほとんど変わらないよ
ただ、C#はどうしてもGCの影響を受けるから、数msでも遅れたら困る用途には使えない
まあ、そんな要求は滅多に無いけどね

612:デフォルトの名無しさん
20/11/16 10:53:58.92 sF1WJXNTF.net
GCは何時発動するか判らんのが欠点だけど
C#のGCはタイミングは常に判ってるのかな

613:デフォルトの名無しさん
20/11/16 11:05:41.67 qYJ3Dm/90.net
タイミングがわかるわけじゃないけど引き起こす可能性のある手続きはわかっている
コーディングでそれを避けられる余地があるからUnityとかでまだ採用されてるんじゃない?

614:デフォルトの名無しさん
20/11/16 11:27:25.87 jhzDiMvL0.net
本当にクリティカルな区間はGCを(出来るだけ)禁止する等ある程度は制御できる

615:デフォルトの名無しさん
20/11/16 11:30:54.33 Ixi420Wb0.net
GC禁止する前に、あらかじめ明示的にGCって出来る?

616:デフォルトの名無しさん
20/11/16 12:05:22.31 g+EUxdXIr.net
GC連打しまくればいいよ

617:デフォルトの名無しさん
20/11/16 13:22:47.27 jhzDiMvL0.net
GC.Collect()で強制実行出来るけど
世代上昇の問題もあるし使いこなすのは難しい

618:デフォルトの名無しさん
20/11/16 13:24:47.04 sF1WJXNTF.net
生き残りは強毒化するのか

619:デフォルトの名無しさん
20/11/16 14:26:09.78 vD+2eRn00.net
強制GC連打派
30秒に一回とかやってる
それでもなんか1秒ぐらい止まるときあるよ

620:デフォルトの名無しさん
20/11/16 15:09:58.28 dMCYT8Lea.net
ストップザワールドしないGCを実装してくれたらもうアプリケーションでC/C++を使うことはないかも

621:デフォルトの名無しさん
20/11/16 15:48:59.14 eppT6X190.net
むしろVC++に絶対的なGUI決定版が出たら個人開発のデスクトップアプリでC#使う事なくなるだろうな
個人開発程度の規模だとマクロのあるC++の方が返って開発速度早くなることも多いし

622:デフォルトの名無しさん
20/11/16 17:13:00.16 VrPIfzyD0.net
GCSettings.LatencyModeで選べるよ

623:デフォルトの名無しさん
20/11/16 18:58:34.38 ZSbSJvSB0.net
フォーム上に設置したボタンを表示したいのですが、
フォームだけ非表示もしくは透過0%にする方法を教えてください
フォームのopacityいじるとボタンも非表示になってしまいます

624:デフォルトの名無しさん
20/11/16 19:19:54.16 Le2Iq+UD0.net
フォームの背景を単一色で塗り潰してTransparencyKeyで透明にしたい色を指定

625:デフォルトの名無しさん
20/11/16 22:13:31.62 G4eaPjr50.net
c#とvsがなかったら一生プログラムやろうなんて思わなかった

626:デフォルトの名無しさん
20/11/16 23:04:37.19 cHmpQkkDM.net
C#っていい言語だよね
飾らず、気取らず、それでいて力強い。

627:デフォルトの名無しさん
20/11/16 23:25:26.59 LWdxEv1Gd.net
>>596,599,601,603
ありがとうございます!

628:デフォルトの名無しさん
20/11/16 23:34:54.33 LWdxEv1Gd.net
>>597
ありがとうございます!

629:デフォルトの名無しさん
20/11/17 01:43:59.23 lN0UCm9Ya.net
ファイルの日付時刻を比較したいんですがどうしたら良いですか?

630:デフォルトの名無しさん
20/11/17 01:44:52.21 qgtrLMb80.net
datetime型を比較すれば?

631:デフォルトの名無しさん
20/11/17 10:32:21.22 sO+4iEeI0.net
>>621
datediffや

632:デフォルトの名無しさん
20/11/17 13:16:45.53 GB1Hm8K4a.net
>>615
WPFなら普通にできたはずだけどFormでは簡単にはいかないと思うよ。
不完全だけど一番簡単にそれっぽいのを作る方法はButtonを乗せるためだけの別のform2を作って
form1をそれの親にすること。
public Form1()
{
  InitializeComponent();
  var loc = new Point(100, 100);
  var form2 = new Form2();
  Action a = () => form2.Location = PointToScreen(loc);
  form2.Show(this);
  Load += (s, e) => a();
  Move += (s, e) => a();
}

633:デフォルトの名無しさん
20/11/17 15:43:12.61 WBCoLdBR0.net
WPFで作る利点ってのはクロスプラットフォームに出来るってこと?
Formしか作ったことないんやけど

634:デフォルトの名無しさん
20/11/17 16:31:37.70 EuUrSlgt0.net
>>625
WPFはWinFormsと同じくWindowsのみ

635:デフォルトの名無しさん
20/11/17 16:58:38.50 RncVdZGd0.net
利点というか世界的に見たらWPFのほうが主流だから
むしろ今なぜFormなのかという感じだな

636:デフォルトの名無しさん
20/11/17 17:15:11.29 ogxxYnEyH.net
Formsの方が簡単だから……

637:デフォルトの名無しさん
20/11/17 18:04:37.48 YcEiD0LrM.net
グラフィック関係が壊滅的なので
skiaとかで支援しないと使い物にならないWPF
を勧めるとはお主も悪よのう

638:デフォルトの名無しさん
20/11/17 18:39:12.50 Hw9PIOp10.net
WPFなんて死産みたいなもんじゃね・・・
出て結構経つけどWPFの仕事とかの話全然聞かないわ

639:デフォルトの名無しさん
20/11/17 18:46:22.75 PM1Apx6y0.net
Visual Studioの皮ってWPFなんでしょ

640:デフォルトの名無しさん
20/11/17 19:20:07.15 cGx3KuHJ0.net
>>630
仕事はいくつかあった
建物の入り口にあるディスプレイに飾っとくようなアプリ
3D空間にオブジェクトを配置するアプリ

641:デフォルトの名無しさん
20/11/17 19:24:53.52 FpFQah7Cd.net
そういうタイプはunityとかのほうが楽そう

642:デフォルトの名無しさん
20/11/17 19:26:16.29 iD8vjuLm0.net
うちは数年前から新製品で使い始めたよ。
特定業界向け会計ソフトだから一般の目に触れる事は殆どないと思うけど。

643:デフォルトの名無しさん
20/11/17 19:34:04.55 cGx3KuHJ0.net
>>633
全くその通りで結局開発が進んで行くうちに帯に短し襷に長しみたいな中途半端力凄い
>>634
そういうのは絶対Webアプリのが使い勝手いいんだよなぁ
ログインしたらどこでもどのPCでも同じって強過ぎるよね

644:デフォルトの名無しさん
20/11/17 19:37:52.56 cGx3KuHJ0.net
あと何気に困ったのが音
後ろで音楽かけてボタンとか押したら音鳴らしてってのが
わりかしできんかったっていうかなんかあやしいライブラリ使う羽目になったっていうか
まあ、色々動く画面作りたいときはいっそunity考えた方がいいと思う

645:デフォルトの名無しさん
20/11/17 19:42:43.18 qgtrLMb80.net
unity 只け?

646:デフォルトの名無しさん
20/11/17 20:40:45.04 Tiv5/dm/0.net
いまだに新規開発案件でforms使うところあるの?

647:デフォルトの名無しさん
20/11/17 20:44:36.18 ooCV67uO0.net
あるよ

648:デフォルトの名無しさん
20/11/17 20:56:30.30 Fq1hGO400.net
FAだとformで十分でウマーです。

649:デフォルトの名無しさん
20/11/17 21:02:12.76 Qs8QfDsD0.net
windowsなのにformsを使わない理由を逆に知りたい

650:デフォルトの名無しさん
20/11/17 21:04:02.66 qYg8UIQi0.net
>>641
高DPI対応が面倒
バインディングが使い物にならない

651:デフォルトの名無しさん
20/11/17 22:28:01.75 Rs8mNRLj0.net
そして来年からはWinUIというWPF紛いのものが登場する、と
Win10ぽいルックスとx:Bindでコンパイル時にバインドエラー発見ってのはかなり大きい
そのうちAOTコンパイルもサポートされるそうだ

652:デフォルトの名無しさん
20/11/17 22:33:32.13 GB1Hm8K4a.net
WPFは(既に実質的にはそうだったけど)いよいよディスコンになるの?

653:デフォルトの名無しさん
20/11/17 22:39:07.63 qYg8UIQi0.net
>>644
現状維持
これからはWinUI推しでWinFormsとWPFは放置だろ

654:デフォルトの名無しさん
20/11/17 22:40:03.59 GB1Hm8K4a.net
そうか無くなるわけじゃないよねw
メンテモードか

655:デフォルトの名無しさん
20/11/17 22:48:31.36 60XguBAo0.net
.NET MAUI 楽しみ

656:デフォルトの名無しさん
20/11/18 00:03:39.25 MO86P+zt0.net
maui期待しないほうがいい
ただの名前変更レベルの予感
Microsoftはなぜxamarinが失敗したか総括したのか?
表面上何もかわってないように見える
技術的にはSlimRenderアーキテクチャだかようしらんが

657:デフォルトの名無しさん
20/11/18 15:05:11.31 7Ekft4aVr.net
VScodeで成功してるんだがElectronでいいじゃん
Electron.Netを正式サポートしろよ

658:デフォルトの名無しさん
20/11/18 15:10:25.22 870PPpSlr.net
>>648
だね。

659:デフォルトの名無しさん
20/11/18 15:39:37.23 P3jn+KK20.net
Electronは失敗だよな
VSCodeだけだし

660:デフォルトの名無しさん
20/11/18 15:46:24.24 UaAov2o20.net
>>76
C#というのは前身がDelphiという言語なんだ
そのDelphiはVBとの死闘の末敗れてしまった
だからC#(Delphi残党)がVBを憎んでいるのは当然なんだ
ガンダムで例えるとC#はネオジオンでVBは連邦軍なんだよ

661:デフォルトの名無しさん
20/11/18 15:54:18.16 IPbBahkD0.net
>>652


662:デフォルトの名無しさん
20/11/18 15:54:52.11 IPbBahkD0.net
>>651


663:デフォルトの名無しさん
20/11/18 16:11:46.00 YM9VgCd+0.net
>>638
わたしは中国人あるよ

664:デフォルトの名無しさん
20/11/18 16:58:13.83 gt3SSD7y0.net
>>651
SlackやDiscordもElectronだよ

665:デフォルトの名無しさん
20/11/18 16:59:19.38 oW5F7Byc0.net
Azure Data Studio

666:デフォルトの名無しさん
20/11/18 19:57:00.23 hzlSiPtIM.net
>>657
ゴミは引っ込んでろ

667:デフォルトの名無しさん
20/11/18 20:11:49.12 oW5F7Byc0.net
>>658
え?

668:デフォルトの名無しさん
20/11/18 21:07:17.11 RhWccaic0.net
こいつら質問スレでテンプレ無視して雑談しなきゃならない使命でもあるのか?

669:デフォルトの名無しさん
20/11/19 10:08:06.32 fvT6uEqW0.net
StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾に嫌気がさして
アンセーフなstringラッパー作って
public Length => { fixed (char* p = str) *(int*)(p - 2) = value; }みたいなことしてマニュアルで長さ変えたりしてるんだけど、こういうことしてるとGCに影響あったりする?
初期バッファとしてstr = new string('\0', 0x1000);として0x1000文字分のメモリを頂戴したのに、上記の動作で長さを5に変えたりしてると、GCによる解放時に5文字分しか解放されずに残りがリークするって事にはならないんだろうか?

670:デフォルトの名無しさん
20/11/19 11:07:34.05 xT43LVbE0.net
> StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾
そもそもそこは別に矛盾じゃないだろ
「結合のたびにアロケーションが発生する」のを防ぐもんなんだから

671:デフォルトの名無しさん
20/11/19 11:21:03.45 RERzCypk0.net
>>661
ZStringを使いなよ
色々な悩みから解放されるよ

672:デフォルトの名無しさん
20/11/19 11:31:10.28 fvT6uEqW0.net
>>663
良く知らないけどそれもその都度string生成してるんじゃないの?
スレッドアンセーフで良いから生成は初回かキャパ更新程度に留めて使いまわしたいんだよね
そのキャパ更新の際に捨てるときにstring.Lengthを弄ってるとメモリリークの原因になるのではないかと

673:デフォルトの名無しさん
20/11/19 11:37:15.19 fvT6uEqW0.net
さすがに内部でcalloc(sizeof(char), 0x1000)とかしたときの確保サイズメモっておいてくれてるのかね
GC内部の細かい挙動はMS社員でもない限り知りようないか

674:デフォルトの名無しさん
20/11/19 13:58:51.49 5X7qze6C0.net
NameValueCollectionをコピペすると自動整形がうまくいかなくてかっこの位置がおかしくなるので
各行ごとにDelete→Enter→Endを繰り返して手動で整形しなおしてるのですが、ちゃんと整形してくれる方法ってあるんですか?
↓みたいになったりする。
   NameValueCollection vals = new NameValueCollection
   {
{ "hoge","hage"},
{ "fuge","hage"},
   };

675:デフォルトの名無しさん
20/11/19 15:16:47.51 wGypJVfq0.net
1行にする
予期しないところにある改行が原因でフォーマッターが動かない

676:デフォルトの名無しさん
20/11/19 15:26:56.05 3nmF1AP8M.net
>>661
いやそもそもStringBuilder.ToString()は再アロケーションしないぞ
内部のバッファをそのまま引き継ぐ実装だ
その後StringBuilderの方に追加の変更が加えられた時点で再アロケーションが発生する

677:デフォルトの名無しさん
20/11/19 15:52:44.75 5X7qze6C0.net
>>667
1行というのはこういうことですか?
NameValueCollection vals = new NameValueCollection{{ "hoge","hage"},{ "fuge","hage"},};
実際には{ "hoge","hage"},が50行とかあったりするので↑では視認性やエラーチェックが面倒になります。

678:デフォルトの名無しさん
20/11/19 16:13:28.80 XTntku/z0.net
>>668
StringBuilderはchar[]であってstringではない
たとえStringBuilderのCapacityがLengthと丁度良く=であったとしてもToStringで別途string用にアロケーションされる
StringBuilderはLengthを自由に変更出来て任意のインデックスからappendできるので、内部バッファがそのまま返されるようならstringは不変という法則が簡単に崩れ去れることになり>>661がやってるunsafeと何ら変わらなくなる

679:デフォルトの名無しさん
20/11/19 16:33:47.05 wGypJVfq0.net
>>669
そういう長いものに自動整形を期待しない
そういう長いものを人間が視認する必要性を排除する
この手の自動整形をしようとすると負荷が半端ないことになって実用性に欠けるのですっぱり切っているのだと思う

680:デフォルトの名無しさん
20/11/19 16:48:49.64 k15rqtpOa.net
>>670
そんな馬鹿な実装するはずがないと思うよw
そもそもイミュータブルとは状態を変更する方法を外部に提供しない、という意味以上でも以下でもない。
そこのところを勘違いしている気がする

681:デフォルトの名無しさん
20/11/19 16:50:55.24 EbSX4tjh0.net
>>672
ソース見れば普通にわかるやろ
URLリンク(referencesource.microsoft.com)
string ret = string.FastAllocateString(Length);

682:デフォルトの名無しさん
20/11/19 17:07:14.79 9igY/Fs20.net
りふぁれんすそーすw

683:デフォルトの名無しさん
20/11/19 17:26:57.34 k15rqtpOa.net
.NETのStringが機械語レベルでどう実装されてるか勉強したことはないが、
普通に考えればパスカルストリングとCストリングのあいの子みたいな単純な構造でしょたぶん。
ごにょごにょした後のバイト列を普通にstringと「みなす」だけにするよね。
わざわざ別のメモリ確保してベタコピーする馬鹿な実装をする人がいるだろうか。
その必要性ができてからで遅くないと思うんだけど。

684:デフォルトの名無しさん
20/11/19 18:08:19.31 fvT6uEqW0.net
>>675
C#のstringはBStrというoffset0にlength、offset4からcharの配列、そのoffset4へのポインタがstringとなる
末尾がnull文字じゃなくても問題ないが基本は末尾にnull文字が入ってるためconst wchar_t*としても扱える
そんなことはどうでもよくてマネージド内で上記の内部バイナリを書き換える方法は一切無いからわざわざアンセーフstringラッパーを作ったんだよ
一見書き換えられてるように見えるstring操作は全て新stringとして生成されてるだけだからな
+連結は長さが変わるから想像できるだろうけど、Substringすらも切り取り参照をしている訳ではなく新たにstringを生成してる(それを解決しうるマネージドな手段としてReadOnlySpanというのも一応あるが)

685:デフォルトの名無しさん
20/11/19 19:50:48.14 nKYhLbF50.net
細かいことを気にしてまでC#を使う矛盾をどう解決してるのか気になるわ

686:デフォルトの名無しさん
20/11/19 20:59:45.17 fvT6uEqW0.net
>>677
だからプライベートリポの8割はC/C++って程度には普段はC使ってるけど
でもその理論言っちゃうと本家StringBuilderも要らんってことになるしな
全部+とか$"{}"でええやん

687:デフォルトの名無しさん
20/11/19 21:03:40.41 nKYhLbF50.net
StringBuilderを使えというのは学ぶでしょ
そこまででいい
それ以上やるならもうC#使う意味ない

688:デフォルトの名無しさん
20/11/19 21:04:23.57 fvT6uEqW0.net
>>679
それじゃSpanとか実装したMSがバカみたいじゃん

689:デフォルトの名無しさん
20/11/19 21:28:29.15 A4wcMVuA0.net
>>663 が挙げてたZStringの解説記事
個人的にはそこまでパフォーマンス気にするような物作ってないから「へー」って感じで読んだだけだけど
ZString – Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成
URLリンク(tech.cygames.co.jp)

690:デフォルトの名無しさん
20/11/19 21:32:12.66 s0VdR5fOd.net
国内C#erで有名どころだしstringはパフォーマンス絡みでよく上がるから割と有名な方じゃないかな?
あんなにパフォーマンス気にする人が知らないのには驚きだけどw

691:デフォルトの名無しさん
20/11/20 01:24:52.99 ViPIBq0U0.net
パフォーマンスは気にしてないんじゃないの?
アロケーション気にしてただけで

692:デフォルトの名無しさん
20/11/20 07:19:27.10 ShozvaYJ0.net
C++は基本がスタック、C#は基本がヒープ
この二者の最大の差はこれなのでC#のパフォーマンス改善=アロケーション回避に終始する

693:デフォルトの名無しさん
20/11/21 03:48:47.56 zIAbzPq60.net
俺バカだから何万回の処理で何ms差が出るのか教えてほしい

694:デフォルトの名無しさん
20/11/21 08:27:18.63 WoKZFdST0.net
手段が目的と化している人達にそんなこと聞いても無駄だよ

695:デフォルトの名無しさん
20/11/21 11:57:08.18 6fJp/BaL0.net
初心者スレらしい馬鹿がいて嬉しい

696:デフォルトの名無しさん
20/11/21 11:59:54.22 zQZxJMDr0.net
>>681のブログ主みたいな人の方が結局生産性も高いのだから、パフォーマンス厨を馬鹿にするのは知への嫉妬にしか見えない
尤も初心者用スレで話す内容ではないが

697:デフォルトの名無しさん
20/11/21 13:04:44.65 Ny+zGkjNa.net
まあちょっと前の数値演算の話と同じだよ。
純粋な学問として円周率の桁数を追求することを否定する人はいないけど、
実用上必要ないのにそれを追求するのはただの馬鹿なフェティシズム

698:デフォルトの名無しさん
20/11/21 13:16:59.22 QfF2kXL70.net
こだわっている当人が>>663を提案されているのに
>良く知らないけどそれもその都度string生成してるんじゃないの
って見もせずに切り捨てているのがわけわからない。自分の作ったunsafeメソッド誉めてほしかったの?

699:デフォルトの名無しさん
20/11/21 15:32:05.57 TFceIuuT0.net
誰も>>661の質問自体には答えてあげてないんだからスレチとしてスルーで良いのでは

700:デフォルトの名無しさん
20/11/21 16:59:03.08 ZU3qCVhf0.net
ASP.NET Coreを勉強してみようと思うんだけど
レンタルサーバの「使えるプログラム」のところに
PHP, Ruby, PyThon, Sh としか書かれてないところはダメですよね?

701:デフォルトの名無しさん
20/11/21 18:32:27.77 +zQLxjm30.net
勉強ならローカルで動かせばよろし。

702:デフォルトの名無しさん
20/11/21 19:15:26.59 pEQG3awY0.net
>>690
ライブラリ教えてなんてレスは一度もしてないし主題とは違う返信に対して検索や外部リンクまでチェックする義務が発生する理屈の方が訳わからない
提案してくれた>>663には感謝するけど、あくまで自分の質問は660のレス内容
C#の質問をしたつもりだけど言語の質問とは違うということであればスレチと言われても仕方ないが

703:デフォルトの名無しさん
20/11/21 20:16:31.79 WQW9Bpg70.net
>>669
編集してるXXX.csファイルを読み込んで
NameValueCollection vals = new NameValueCollection行の次の
{行からそのあとの};行の間の行に先頭スペースを揃えて挿入して
ファイルを上書き保存するミニアプリを作って実行すればいい
テキストの平文ファイルだから編集は簡単
VSで編集中にそのような外部エディタで編集がされると
編集を反映しますかって即座に聞いてくるからはいすれば位置がそろう

704:デフォルトの名無しさん
20/11/21 23:02:14.09 eXf0RCq40.net
>>689 全世界で行われてる円周率演算がすべて世界記録出すために動いてると思ってる馬鹿

705:デフォルトの名無しさん
20/11/22 02:05:01.90 eyJ/0uPg0.net
>>694
①マジレスするとメモリリークはしない。こんなのはGC.Collectしてメモリ使用量を見比べるだけで分かる
②でも>>661の使い方ではインターンプールで潜在的なバグを抱えるからやめた方が良い
③やりたいこと汲み取るなら先人が同じ悩みから到達したソースを使うべき
④ZStringいいよ
余計な遠回りをしないようにこの結論から言ってくれてるんだよ
>>663は優しい奴だよ、まったく

706:デフォルトの名無しさん
20/11/22 02:09:21.16 r7dn6Jzr0.net
>>696
何のためにやってるの?自己満オナニー?

707:デフォルトの名無しさん
20/11/22 02:37:39.25 XfbnXwSba.net
>>696
どっから世界記録とか出てくるの?w
読解力大丈夫かこの人

708:デフォルトの名無しさん
20/11/22 08:48:28.54 VTf/cbNB0.net
>>697
マジレスすると今のところはヘッダオンリーならぬ単ソースオンリーで済ませたいのであんまり外部ライブラリには乗り気じゃないというのもあるが
とは言えZStringを拝見したところu8stringをC#で実装出来てる凄いライブラリであるようなのでtext系ファイルやらwebやらdbのクエリやらで利用したい構想立ちまくったのでありがたくスターポチって記憶させていただく
確かにただのバッファとして作ったものの実態はstringに違いないので何かの拍子にstring.Internしてしまうと結構不味いことになるね
とりあえずGCに影響ないと教えてくれて大分スッキリしたのでありがとう

709:デフォルトの名無しさん
20/11/22 09:03:29.09 0zyBqMyr0.net
>>699
「円周率の桁数を追求する」ってのは結局そういうこと

710:デフォルトの名無しさん
20/11/22 09:27:31.41 7FLAKb9y0.net
一番じゃないと駄目なんですか?

711:デフォルトの名無しさん
20/11/22 13:34:50.51 vJ51qgrt0.net
superPIじゃ駄目なんですか?

712:デフォルトの名無しさん
20/11/25 08:28:57.90 5XzEVJhy0.net
COMインターフェイスをstructに付けてboxing発生させずに使用する方法って皆無でしょうか?

713:デフォルトの名無しさん
20/11/28 16:25:59.35 Msb6oswN0.net
c# プログラマは goto でコロナを拡散してるから、ウィルス作成罪とかで刑務所にぶちこむべき。
もちろん、実質的に goto と同じ if文 、swich case とか使ってるc# プログラマも有罪。
swift や Pythonプログラマは goto 使ってないから無罪。

714:デフォルトの名無しさん
20/11/28 17:07:38.54 goyIH8CW0.net
面白いと思って書いたの?

715:デフォルトの名無しさん
20/11/28 17:18:49.30 qYAW4hVUM.net
705は死刑

716:デフォルトの名無しさん
20/11/28 17:53:33.87 yGy7muY00.net
>>705
Go To Hell

717:デフォルトの名無しさん
20/11/28 17:57:32.34 qYAW4hVUM.net
>>708
このハゲェ!

718:デフォルトの名無しさん
20/11/28 18:38:36.41 pMGwV9fR0.net
Windowsの ini ファイルの内容を Section, Key, Value の順で
List<Dictionary<string, List<Dictionary<string, string>>>> ini;
ini = new List<Dictionary<string, List<Dictionary<string, string>>>>();
として取り込んだものから Section の一覧(Delphi の ReadSections 相当)を
得たいのですが方法がわかりません。
教えていただけませんでしょうか。

719:デフォルトの名無しさん
20/11/28 18:43:14.08 YkgqIE2E0.net
それのどこが分からないのか分からん
あとListはいらなくない?

720:デフォルトの名無しさん
20/11/28 18:54:47.55 v3rIW/CF0.net
>>705
よくわかりません。
C#はgotoを使わずとも実質gotoできるが、
swiftやPythonが実質gotoもできない根拠を示して下さい。

721:デフォルトの名無しさん



722:>2020/11/28(土) 19:14:35.24 ID:pMGwV9fR0.net



723:デフォルトの名無しさん
20/11/28 19:41:10.86 7NcH7NyO0.net
>>710
自分もList使う意味が見いだせない
var ini = Dictionary<string, Dictionary<string, string>>とかで良いんじゃないの?
これならvar value = ini["セクション名"]["キー名"]で取り出せる
if (ini.TryGetValue("セクション名", out var keys) && keys.TryGetValue("キー名", out var value)) とやったほうが良いと思うが
代入はini["セクション名"]["キー名"] = value;

724:デフォルトの名無しさん
20/11/28 20:02:20.04 M3lV8yHm0.net
Sectionの配列を得たいなら>>714にLinqのini.Keys.ToArray()

725:デフォルトの名無しさん
20/11/28 20:33:03.95 pMGwV9fR0.net
>>714,715
.NET 5 が出たのを機に c# を始めたところなのでよくわかっていません。
勉強がてら自作の Delphi7(Lazarus) の自作ライブラリと同じ物の作成に挑戦中です。
ini ファイルの読み込みもネットからダウンロードしたものをベースに
改造して動きを勉強しているところです。
ですので List になっている理由もまだ理解できていませんし、Dictionary も
今日初めて見た状態です。一応 List を外してみると
foreach (var dic1 in ini)
{
if (dic1.ContainsKey(section))
{
foreach (var dic2 in dic1[section])
{
if (dic2.ContainsKey(key))
{
return dic2[key];
}
}
}
}
のような場面で ContainsKey がエラーとなりました。
とりあえず Delphi の TMemIniFile と同じ程度までできました。

726:デフォルトの名無しさん
20/11/28 21:13:18.17 M3lV8yHm0.net
>>716
Listを外してforeachする場合はこう変える必要がある
foreach (var dic1 in ini)
{
if (dic1.Key == section)
{
foreach (var dic2 in dic1.Value)
{
if (dic2.Key == key)
{
return dic2.Value;
}
}
}
}
もっと簡単な方法は>>714に書かれてる通り
if (ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out var value)) return value;

727:デフォルトの名無しさん
20/11/28 21:20:41.11 M3lV8yHm0.net
pascalのiniなんてもう遥か昔に使ったきりだからあんまり覚えてないがそれっぽいの作るとしたらこんな感じか
Dictionary<string, Dictionary<string, string>> ini = Dictionary<string, Dictionary<string, string>>();
string ReadString(string section, string key)
{
if (ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out var value)) return value;
else return null;
}
これだとnullチェックが必要になるから、Tryメソッドの方が便利だったりする
bool TryReadString(string section, string key, out string value)
{
value = null;
return ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out value);
}

728:デフォルトの名無しさん
20/11/28 21:27:31.90 M3lV8yHm0.net
そういえばiniは無かった場合の規定値を第3引数に入れておけばいいだけか
それならTryメソッドいらんね

729:デフォルトの名無しさん
20/11/28 23:40:53.47 xlHMBUaz0.net
sectionの一覧が欲しいって言ってるのに、valueを取り出す説明を延々してる奴何なの?

730:デフォルトの名無しさん
20/11/29 00:02:00.65 agHPEKHb0.net
string GetValue(Dictionary<string, Dictionary<string, string >> ini, string section, string key){
if(! ini.ContainsKey(section)) return null;
if(! ini[section].ContainsKey(key)) return null;
return ini[section][key];
}
c#に限った事ではないが、何をしたいのか分かりやすいコードを目指そうな。

731:デフォルトの名無しさん
20/11/29 00:10:23.95 eEpZgXkU0.net
だから質問者が欲しいのはvalueじゃなくてsection一覧だっての

732:デフォルトの名無しさん
20/11/29 06:31:38.45 kNuJF9Ar0.net
datagridviewにユーザーコントロールを埋め込みたいんですけどどうすればいいですか?
windowsformアプリです
ていうかdatagridviewじゃなくてもユーザーコントロールをリストで表示できれば何でもいいです
どなたか教えて下さい

733:デフォルトの名無しさん
20/11/29 08:16:40.50 +pk7xniq0.net
>>723
TableLayoutPanel とか FlowLayoutPanel はどう?

734:デフォルトの名無しさん
20/11/29 08:16:40.50 +pk7xniq0.net
>>723
TableLayoutPanel とか FlowLayoutPanel はどう?

735:デフォルトの名無しさん
20/11/29 09:35:53.03 yrxBBFH+0.net
>>720
それは一番上に書いたんだが

736:デフォルトの名無しさん
20/11/29 09:40:01.71 yrxBBFH+0.net
>>721
section取り出す説明は昨日一番最初のレスで書いたからもう脱線して話すけどなんでここまでTryGet使わない奴って多いんだろうな
どうせ後々インデクサアクセスするならTryGetValueの方がよっぽど分かりやすいと思うんだが

737:デフォルトの名無しさん
20/11/29 12:22:24.94 kNuJF9Ar0.net
>>724
ありがとうございます
試してみます

738:デフォルトの名無しさん
20/11/29 17:19:06.82 b9LXd7l70.net
>>723
DataGridViewCellとDataGridViewColumnを継承して自作

739:デフォルトの名無しさん
20/11/29 17:32:18.08 MpNpLm4W0.net
>>727
ConstainsKey → []は、まずContainsKeyの内部でFindEntry走らせて存在確認し、存在したらインデクサアクセスして再度内部でFindEntry走らせて取り出すという2度手間してるIQ低いコード
TryGetValueは存在確認時にFindEntryしたついでに値も取り出すというスマートな関数
そもそも前者で済むならTryGetValueは存在意義ないから、上記の仕組みを想像できずとも「なんでTryGetValueってあるんだろう?」と疑問に思わなければいけない
ま、C#は多様性受け入れてる言語だから個人開発なら好きに書いたらいいが

740:デフォルトの名無しさん
20/11/29 18:14:07.88 o/YPVzQP0.net
そういう値をローカル変数に代入するのを無駄と言い張って勝手にワンライナーに書き直すような地雷プログラマの振りをするのはやめろよ……初心者が本気にしたらどうするんだよ

741:デフォルトの名無しさん
20/11/29 18:23:09.50 MpNpLm4W0.net
>>731
今の話でローカル変数やワンライナーが出てくる余地あるか?

742:デフォルトの名無しさん
20/11/29 18:52:20.22 o/YPVzQP0.net
>>732
明確にガード節で判定が切り分けられているのに、
「TryGetValueなら判定と取得を同時に行える」と言い出すのはまさしくワンライナー君の物言いだぞ
ifをあえて二つ用意してContainsKeyを使ってる時点で
「ははーん、論理重視のコーディングスタイルか」と察してやるのが有能なプログラマってもんだ

743:デフォルトの名無しさん
20/11/29 18:58:47.11 MpNpLm4W0.net
>>733
???
2連続で全く不必要に同じ処理を挟むような奴がとても論理重視とは思えないんだが、ContainsKey + []とTryGetValueじゃ2倍以上パフォーマンス変わってくるって知ってる?
さっきも言ったけどContainsKeyでも内部的にFindEntryが走り、インデクサアクセスでも再度FindEntryが走るという無駄がある
再度言うがMSがなんでTryGetValueというメソッドを公式でわざわざ用意したかって疑問に思わない?
簡潔さ全振りならそもそもLinq使えばいい話

744:デフォルトの名無しさん
20/11/29 19:01:28.82 tRrXGfded.net
メソッドの戻り値を一回判定するだけなら
一行で書かないほうが変じゃね?
それをわざわざ一旦保存とか逆になんの意図があるのかと
たまにはデバッグやらログで出したいからと言うのはあるがそれは2回利用に当たるから入れて当然やしな

745:デフォルトの名無しさん
20/11/29 19:41:11.64 o/YPVzQP0.net
>>734
久々にふふってなった
まるで昨日の俺を見ているようだ……お前にもいつか悟れる日が来ると良いな

746:デフォルトの名無しさん
20/11/29 20:16:26.39 EVjNfLc/0.net
判定と取得を行いたいんじゃなくて取得を行いたい
なのに判定しないとプログラム上まずいことになるので判定機能付きの取得メソッドを使う
読む上でわざわざ判定と取得を別に書いてるならそこにあえての理由があるんだろうな、と推測しないといけない
今回のケースならあえてのケースなど無いので可読性を下げる要因でしか無い

747:デフォルトの名無しさん
20/11/29 20:17:12.32 3Ka2HmX40.net
>>736
きみ中学生?
男?女?どこ住み?

748:デフォルトの名無しさん
20/11/29 20:28:09.84 HJnVnweF0.net
>>736
それは廓然大悟かね?

749:デフォルトの名無しさん
20/11/29 20:31:48.44 yrxBBFH+0.net
>>737
これのどっちが可読性良いかなんて個人の感想レベルだろ
実際俺は100%下のほうで書いてるけど一度もコードレビューで指摘されたことないしな
そして>>734が言うように実行効率は下の方が2倍近く良いので下を選択すべき理由はある
一方で上を選択すべき理由は見当たらない
if(! ini.ContainsKey(section)) return null;
if(! ini[section].ContainsKey(key)) return null;
return ini[section][key];
if (!ini.TryGetValue(section, out var keys)) return null;
if (!keys.TryGetValue(key, out var value)) return null;
return value;

750:デフォルトの名無しさん
20/11/29 20:43:57.67 yrxBBFH+0.net
一応言っておくけどここでは713や720に合わせて書いてるだけで実際には1行で書いたりこんなに複数retは使わない
returnは一つにしろというレビューは受けたことあるんでな

751:デフォルトの名無しさん
20/11/29 20:51:31.28 3Ka2HmX40.net
>>740
普通に英語として下の方が直感的に分かる
上だと今ですら非直感的な上に変数名によっては更に分かりづらくなる可能性をはらんでる

752:デフォルトの名無しさん
20/11/29 20:54:18.24 YUoXGIHl0.net
>>720
TryGetValue()知ってるオレカッケー
って言うおこちゃまだろw

753:デフォルトの名無しさん
20/11/29 20:56:55.50 EVjNfLc/0.net
無理に一行にするな、が通るならreturnを1つにしなくていいのでは?
数十行あるメソッドのいろんな箇所でreturnしてると気持ち悪いと思うが、こういうタイプなら複数returnで良い
可読性が個人レベルなのはそのとおり
文字の並びが似通っている、ではなくどういう機能を呼んでいるか?という意味
判定付き取得メソッドが標準で用意され、しかもメジャーな内容でパフォーマンスも良い
それでもあえてそれを呼ばないのは特殊な事情があるのでは?と読み手の思考を止めることにつながるという意味

754:デフォルトの名無しさん
20/11/29 21:06:40.39 o/YPVzQP0.net
>>740
上のコードを採用する理由は何の値を戻しているか即座に分かるところ、と俺は判断した
return ini[section][key];
この一文で読解に要する数秒を削る為だけに2倍程度のパフォーマンスを許容するのは普通にありだよ

755:デフォルトの名無しさん
20/11/29 21:23:27.82 EVjNfLc/0.net
メソッド名見りゃそれはわかんじゃん
return文にそういう責務を与える意味は?
どうしても必要というならコメントでも書いとけば良い

756:デフォルトの名無しさん
20/11/29 21:36:16.22 yrxBBFH+0.net
>>744
returnについては可読性に関わる納得できた理由はちゃんとあるんだが自分やチームが使わないというだけで別にうちのコーディング規約を議題に上げるつもりはない(ツッコんでくる人いそうだったから一応書いただけ)
まぁもう好きにしたらええんやない
C#メインで使っていきたいなら言語として用意されてるものは出来る限り利用すべきと思うけど
そこまで学習コスト払いたくないってことなら一つの方法を出来る限り使いまわすというのも利に適ってるしな

757:デフォルトの名無しさん
20/11/29 21:49:34.68 EVjNfLc/0.net
チーム内でのローカルルールがどうなってるかはどうでも良いんですよ
そのチームで合意が取れてるならなんの問題もない
ローカルルールを隠した状態で突っ込まれてローカルルールなんです!って言われても知るかよ、という感想しか出ない
ローカルなものでないなら、基本的には標準に準拠すべきで標準がわざわざtryメソッドを回避している書き方をしていない限り公の場でもそれに準じたほうが良いのでは?というだけ

758:デフォルトの名無しさん
20/11/29 21:53:07.17 yrxBBFH+0.net
>>748
いやだからTryGetValueに関してはそれが標準だろっていうのが一貫した俺の意見であってローカルルールなのは>>741で書いた事
実際にギブハブなんかで数多くのプロジェクト参考にしてきたけどLinqで手っ取り早く書く事は多くてもTryGetValueを使わずにContainsとインデクサとかいう非効率な方法採用してる人なんて見た記憶ないしな

759:デフォルトの名無しさん
20/11/29 21:58:49.11 EVjNfLc/0.net
>>749
なんで突っかかってくるかわからんけど747の前半は複数retの話、後半はtryの話
わざわざローカルの話である複数retのことなんざ話題に上げんで良いよ、try使うのが標準なんだからそれに習ったほうがよくね、
後半は君と同意見なんだよ

760:デフォルトの名無しさん
20/11/29 22:01:07.98 yrxBBFH+0.net
>>750
捕捉程度のノリで書いた事に異様に突っ込んでくるなと思ってビックリしたんでね
それも議題に上げたいのであれば>>740でそういう書き方してるから

761:デフォルトの名無しさん
20/11/29 22:11:12.12 EVjNfLc/0.net
>>751
前提として標準に準拠したほうが良いよね、という主張がある
標準では複数retなんて当たり前に使ってる
それをなぜか否定しているので突っ込んだらローカルルールだ!と言われる
そういうローカルルールがあるのは構わんが、それならそう明記しなきゃ標準に準拠しようという主張とズレてブレブレなだけでは?
まさかレビューを受けたことがある、がうちにはそういうコーディング規約があるんです、の意味だったの?

762:デフォルトの名無しさん
20/11/29 22:16:38.50 yrxBBFH+0.net
>>752
だから本気で否定したいなら739でもそうやって書いてるって言ってるやん
740で書いたのは「沢山return書いてる時点で可読性低い」みたいなツッコミが入るかなーと予測して"一応"と前置きして書いたと言っただろ
そこを議論するつもりはないと書いたのに異様に拘るんだな

763:デフォルトの名無しさん
20/11/29 22:22:25.03 kxXRvhGP0.net
複数リターン禁止www

764:デフォルトの名無しさん
20/11/29 22:22:55.87 o/YPVzQP0.net
>>749
正直俺も見たことないが、>>721が書いてるんだからいるところにはいるんだろ
肝心なのはそいつが何を思ってそういうスタイルにしたのか察して評価してやることで、
>>730みたいに重箱の隅突いて喜ぶのはただの地雷コーダーだからやめるべきだよ
例えば誰かが「ギブハブ」とか言ってても、わざわざ「ギブハブってなんだよバカかよ」と噛み付く必要はないだろ?
GitHubなのは分かるし話は通じてるんだからこいつの中ではこうなのかと納得して「ほーん、ギブハブがどうした?」と聞き返すのが有能なんだよ

765:デフォルトの名無しさん
20/11/29 22:26:49.20 EVjNfLc/0.net
>>753
意味がわからんけど補足がなけりゃツッコミなんてなかったんだよw
こだわってるのはそっちでしょwこっちはそうですか、という感想しか無いよって言ってるやんw

766:デフォルトの名無しさん
20/11/29 22:38:58.86 5TTB8+bC0.net
チャゲアスASUKAのギフハブに監視されてるネタに掛けてGitHubをギフハブと呼ぶのは5chの標準語だと俺も思ってたがそこまで浸透してないのか

767:デフォルトの名無しさん
20/11/29 22:42:09.42 T9vV3uABa.net
なんとも不思議な世界があるんだなあ・・・・
TryGetValueを使うのが今どきの常識的なコーディングだと思ってた自分としては
老害(あるいは悪意があって不適切なコーディングを押し付けようとしてる人)が世迷言をほざいてるだけにしか見えないや

768:デフォルトの名無しさん
20/11/29 22:53:33.81 yrxBBFH+0.net
>>755
その理屈で行くとコードレビューなんて出来なくなるな
(これ明らかに意味のない文だけど何かスピリチュアル的な深い意味があるのだろうか…?配慮して指摘すべきではないか…?)なんて一々考察しなきゃいけないのかよ

769:デフォルトの名無しさん
20/11/29 23:00:13.09 YUoXGIHl0.net
了解

770:デフォルトの名無しさん
20/11/29 23:03:55.81 YUoXGIHl0.net
>>754
MISRAにもあるし高信頼性を要求される場面ではそれなりにありがちな話だよ

771:デフォルトの名無しさん
20/11/29 23:14:22.90 iy3zNsHi0.net
>>759
レビュー受けてるような新人はそんなこと考えなくていいと思うよ
多次元辞書でアクセスそのまま返す利点が分からないならまだお勉強段階なんだから、そういうやり方もあると素直に学んでおけば良い
とりあえずチューニングはベテランがもっと後でやる仕事だから、パフォーマンスがーとか言い出すのは十年早い

772:デフォルトの名無しさん
20/11/29 23:30:20.42 yrxBBFH+0.net
そう主張するのであれば具体的な利点を述べろよ
TryGetValue派は俺以外にもメリット述べてる奴いるけどContainsKey派は「そのほうが見やすい」程度の個人の感想以上は出てきてない
勿論それもメリットではあるがTryGetValueの方が見やすいと言う人もいるのでそこでは差は付かない

773:デフォルトの名無しさん
20/11/29 23:51:14.64 kxXRvhGP0.net
>>761
ねーよ


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