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

レス数が900を超えています。1000を超えると表示できなくなるよ。
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/03/07(日) 16:01:59.94ID:TNmQ0Vam0
滅茶苦茶印象悪いから気を付けて頂きたく。
2021/03/07(日) 16:08:44.22ID:FZPehcc/0
>>844
実装工程の定義がわからんけどコーティングなら製造でいいんじゃないかと思う
やってる事は組立工員とあまり違わないし
2021/03/07(日) 16:12:50.50ID:FZPehcc/0
>>848
毎度お世話になっております
本件、拝承

御社のレベルに合わせて客先で「アタシ嫌い」とか言う奴を連れてきてしまい申し訳ないッスw
851デフォルトの名無しさん (ブーイモ MM7f-5Nd/)
垢版 |
2021/03/07(日) 16:22:51.53ID:hFyVV8HRM
>>844
現実を見ろよ。実装なんざ仕様書をプログラミング言語に置換しているだけだろ。製造って銘打ってもらえるだけありがたい。
2021/03/07(日) 16:32:47.46ID:j7St4ggd0
建設仮勘定たてるために原価計算ちゃんとしようとしたら、製造以外に入れようがないんじゃないの?
2021/03/07(日) 16:35:46.28ID:N1SdY6iGa
>>847
ぜんぜん違うよ
全くの別物
2021/03/07(日) 16:36:35.91ID:Htr3Z/NJ0
>>845みたいに発狂する奴って日本人ちゃうやろ
そもそも製造なんて言葉はおかしいのは事実やろ
流れ作業で作れるなら誰でもええやん
2021/03/07(日) 16:41:10.88ID:RNKpyeef0
日本人ちゃうなら何人なんだよ
2021/03/07(日) 16:42:46.48ID:DjMbSgMb0
何でスレ違いなのにこのスレに書き込まなきゃならないんだろう
義務感でもあるの?
2021/03/07(日) 16:52:12.98ID:j7St4ggd0
>>854
製造はラインのイメージが強いけど、流れ作業でしないものも立派な製造だよ。
一般的な商品開発に疎い人ばっかなのかな。
858デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 17:03:50.83ID:lpPFFuHs0
C#.NETの質問ですが
System.Web.Helpers
を参照しないといけないという情報までは辿り付きましたが
参照しようと検索しても出てきません(一覧にない)。どうすればいいんでしょうか?
2021/03/07(日) 17:24:03.46ID:DjMbSgMb0
>>858
ASP.NETを導入してください
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.helpers
https://blog.shibayan.jp/entry/20110406/1302094656
2021/03/07(日) 17:26:58.17ID:lpPFFuHs0
>>859
NuGetから、Microsoft.AspNet.WebPagesをインストールすることでいけました!
ありがとうございました。
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 でも大丈夫にするには特殊なことが必要なのでしょうか。
862デフォルトの名無しさん (ワッチョイ 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);
}
2021/03/07(日) 20:05:28.07ID:8OuV17PR0
var result = await this.Get();
System.Diagnostics.Debug.WriteLine(result);
2021/03/07(日) 20:51:26.38ID:lpPFFuHs0
>>863
Get()からのstringの戻り値を受け取るにはどうすればいいんでしょうか?
2021/03/07(日) 20:58:22.56ID:m48VQs8o0
>>847
可読性が良くなるように論理的に文章が書ける力と、
読み手が理解しやすくするように、伝え方を工夫する力とは全然違う
MSリファレンスは後者がさっぱりだから
図やイラストがない無味乾燥だと上の人が言ってるんじゃないの?

>>837
> 教師の教え方についても、特定の人に分かりやすい教え方が万人に対してそうとも限らない。
教師はそうならないように万人にわかりやすくなるよう教え方を工夫するのが仕事(俗に言う教材研究)
まぁ大学の役割がそうじゃないだろと言われてしまえばそれまでだし
誰にでも簡単だったら技術者や専門職として飯食いにくくなるから
世の中の仕組みとしてはそれでいいんだろうけど
2021/03/07(日) 21:02:50.60ID:HvxUUjRD0
>>864
>>863の1行目
resultにはstring型の戻り値が格納されてる
2021/03/07(日) 21:06:37.22ID:raVsxTVL0
>>864
Get()でasync, await 使ってExecuteScriptAsync()の戻り値を取得してるじゃないか。
それと同じ。
2021/03/07(日) 21:19:02.70ID:RWgRWesX0
>>865
良いか悪いかは別として
それは可読性をどういう範囲で捉えるかの違いだな

読み手が理解しやすくするように伝え方を工夫することが
可読性を良くしようとすることに含まれないと考えたことはなかったわ
2021/03/07(日) 21:22:42.06ID:lpPFFuHs0
>>866-867
Debug.WriteLine()で表示しても以下のようになるんですが…
System.Threading.Tasks.Task`1[System.String]
取得した中身を表示できないんでしょうか?
2021/03/07(日) 21:28:21.66ID:HR+EwL2z0
だからawait
2021/03/07(日) 21:34:04.57ID:KHBonaWT0
private async void Button_Click(object sender,EventArgs e) {

var result = await webView2.CoreWebView2.ExecuteScriptAsync("test");

System.Diagnostics.Debug.WriteLine(result);
}
ポイントは1行目にasync
2021/03/07(日) 21:48:02.10ID:lpPFFuHs0
>>870-871
そこに書けば表示できるんですね。
出来れば分けて書きたかったのですがこれでいきます。
async、await、の使い方がよくわかってないので
ちゃんと勉強します。ありがとうございました。
873デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 22:13:34.28ID:lpPFFuHs0
>>871
これ戻り値決まってるメソッドの場合、どうすればいいでしょうかね。
2021/03/07(日) 23:07:47.45ID:hG4ECmLc0
戻り値が決まっているメソッドとは?
具体的なコードを出してくれないと分からん
2021/03/07(日) 23:13:32.78ID:/i694rT30
こんなカンジかな?
public string SayYes(string question){
return "Yes";
}
2021/03/07(日) 23:33:44.48ID:lpPFFuHs0
>>874
戻り値が決まってるメッソドを渡す必要がある場合に
async、awaitを使いたい時です。普通にスレッド使った方がいいでしょうか。
2021/03/07(日) 23:42:39.88ID:viNH5wsJ0
とりあえず、落ち着け。
2021/03/07(日) 23:43:28.55ID:/i694rT30
>>876
・戻り値が決まってるメッソド
・渡す必要がある場合
・普通にスレッドを使う
どの意味もおぢさんさっぱり分からん
2021/03/07(日) 23:53:49.57ID:hG4ECmLc0
意味わからんがとりあえずasync await を使わないコードを書いてくれ
まずはそこから
2021/03/08(月) 00:00:47.06ID:2O4m7huW0
>>876
やりたいことが良く分からないけれど
Task.Run()を使えば良いんじゃないかな。
var result = await Task.Run( () => SayYes( "hoge" ) );
2021/03/08(月) 00:21:38.35ID:qzvxIX+G0
>>878
上手く言えてなくてすみません。
既に定義された形のメソッドを渡す必要があって
戻り値の型を変えられないんです。変えられるかもしれないけど他人が書いた部分なので弄りたくない感じです。
その場合は無理でしょうか?
2021/03/08(月) 00:31:52.37ID:qzvxIX+G0
>>875
こういう形のメソッドの中で使いたいとしても
asyncをつけると戻り値がvoidやtask等しか使えなくなるので
無理なんでしょうかという質問です。
2021/03/08(月) 00:53:45.52ID:pnlhyJpZ0
>>862
https://www.kekyo.net/2016/12/06/6186

この記事が参考になるかも
2021/03/08(月) 01:01:23.25ID:8a53dPGk0
>>882
>>610 と同じ内容かな
ここら辺見返せばいいと思うよ
2021/03/08(月) 01:09:14.76ID:pnlhyJpZ0
asyncawait が前準備無しにドキュメントも無しに実装されているときは無意味な上に99.89%バグっているので安心してほしい
2021/03/08(月) 02:12:24.04ID:ZhwAN9h80
>>881
定義済みメソッドを非同期実行するなら>>880の方法でいいかと
此方もそんな感じでやってる
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); // 円の面積
}
2021/03/08(月) 04:37:29.21ID:V3d7DsS+0
どこからコピペしたか詳しく
2021/03/08(月) 08:35:47.21ID:lsfVgCLC0
>>887
はい、当然の結果です。
メインスレッドがデッドロックします。
2021/03/08(月) 08:55:46.45ID:pnlhyJpZ0
>>887
リンク先になくね?
891デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 13:21:09.68ID:qzvxIX+G0
>>888-890
すみません。こっちでした。
https://www.atmarkit.co.jp/ait/articles/1211/02/news066.html

>>887みたいな感じでForm_Load()から呼び出したいんですけど
その場合はどうすればいいんでしょうか?
2021/03/08(月) 14:31:07.77ID:DDkttHUo0
>>891
前のと同じ問題
Form1_Load()をasyncに変更してCalculateCircleAreaAsync()をawaitで待つ
Task.Resultは直接触ったら駄目
2021/03/08(月) 14:51:25.43ID:ZiVdiQxH0
まずは落ち着いて自分に宛てられたレスをきちんと理解するところから始めたら?
いくつかの質問にはすでに答えが付いてるよ。
2021/03/08(月) 15:00:46.23ID:qzvxIX+G0
>>892
たしかにForm_Load()にasync付けたらいけました。ありがとうございます。
>>893
申し訳ない。ちゃんと読み取れてなかったようでした。
2021/03/08(月) 15:12:14.98ID:qzvxIX+G0
これってメソッドの戻り値の型を自分で指定したい場合は
Task<T>でラップしないといけないって解釈でいいですかね?
2021/03/08(月) 15:30:58.68ID:qzvxIX+G0
webView2.CoreWebView2.ExecuteScriptAsync()
がTask<T>を受け取らないといけないせいで
既に戻り値を定義された色々なメソッドにも影響が出てしまって
どうにかそれらを全て書き換えるかしないといけないのが困ってる点ですね。
これどうにかならないんですかね?
2021/03/08(月) 16:02:08.72ID:qzvxIX+G0
しかもこれ自作クラスを戻り値にしてるメソッドだと
GetAwaiter()がないとかって怒られてそれも実装しないといけないみたいで凄い面倒で困る…
2021/03/08(月) 16:05:05.45ID:qzvxIX+G0
もう非同期とかいいので普通にこれでデータ取得できないもんなんですかね。
webView2.CoreWebView2.ExecuteScriptAsync()
非同期とかしなくていいんですよ。必要なら1分くらい待ってもいいので。
たったこれだけのことなのに凄い面倒だ。
2021/03/08(月) 16:20:50.73ID:ZiVdiQxH0
まず落ち着いて自分に宛てられたレスを最初から読み直してみるといいんじゃないかな。
2021/03/08(月) 16:31:12.58ID:cnxTx+zha
task.ConfigureAwait(false).GetAwaiter().GetResult()
2021/03/08(月) 16:47:22.57ID:R5ZHjmWC0
素直にasync/await対応したほうが建設的
悩んでいる時間で修正終わるわ
2021/03/08(月) 18:11:10.07ID:c6FLXLbe0
このレベルだとこんな所で教えてもどうせ理解出来ない
2021/03/08(月) 18:39:35.08ID:2YZIHCv70
今時めずらしいタイプだ
こういうのから金を巻き上げてその辺に棄てるのがスクールの役目のはず
2021/03/08(月) 19:15:52.15ID:qzvxIX+G0
>>901
面倒だけどそうすることにしました。
ひとつずつ地道に置き換えていきます。
2021/03/08(月) 20:13:34.27ID:pnlhyJpZ0
使用者に非同期処理が必要ないのに非同期処理しか実装されてないクソライブラリはクソだからないのでクソとしか表現のしようがないんだぜ
そこはおk?

ああ、クソじゃん・・・

って話よ?
2021/03/08(月) 20:20:54.40ID:lWZwpqsv0
鶏糞と牛糞の詰め合わせでも送ってやろうか?
2021/03/08(月) 20:21:12.62ID:pnlhyJpZ0
散々罵った挙げ句に同期処理が用意されてることがわかったときは死にたくなるぐらい恥ずかしいので気をつけるんだぜ
2021/03/08(月) 20:54:37.86ID:qzvxIX+G0
>>907
どうやればいいんでしょうか?
2021/03/08(月) 21:39:32.19ID:lsfVgCLC0
>>908
理解せず簡単に済ますなら900の方法か、
UIスレッドから新しいTaskを作って、そのタスク内で非同期メソッドの結果をawaitして、UIスレッドは作ったTaskのResultを取得すれば良い。
2021/03/09(火) 02:15:52.82ID:Km1Y7VEG0
>>909
900さんの方法でもイケるんですね。ありがとうございます。
あとこんな風にやったら一応自分が求めてる感じにもなりました。
Invoke((MethodInvoker)(async () => {
var task = await func();
}));
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の引用元のコードはバグ?
何年も前の記事なのに誰も突っ込んでないのかな
2021/03/09(火) 14:04:19.73ID:G6YhpKjy0
引用元はコンソールアプリケーションだからな
2021/03/09(火) 19:16:54.66ID:v67EGRm00
独習C#でもコンソールアプリ以外だとデッドロックするコードが書いてあるからな。
2021/03/09(火) 21:21:04.94ID:mjd4ZCLWa
コンソールかどうか関係ある?

コンソールだろうが何だろうが、「自分が宿題をやり終わるのを寝ながら待つ」子は
死ぬまで宿題完成しないでしょ。
2021/03/09(火) 21:25:50.24ID:zZk3I07S0
>>914
あるよ
SynchronizationContext.Currentが設定されていないから挙動が変わる
2021/03/09(火) 21:40:53.62ID:G6YhpKjy0
なんでタスクで実行すればデッドロックが発生しないか理解してなさそう
こことか分かりやすく書いてくれてるから見てくるといい
ttps://chronoir.net/cs-async-await-taskrun/
2021/03/09(火) 21:43:31.37ID:mjd4ZCLWa
>>915
へーなるほどそうなのか。

非同期メソッドをawaitせずに呼び出した時の挙動なんて
よく考えたことがなかったし知らんかったよ。
2021/03/09(火) 22:52:54.19ID:BIanm+fj0
そもそもTask型が帰ってくるのだから非同期前提だしなぁ
言わばスレッドで実行出来る形にしましたよという事なんだし
非同期だとスレッドセーフかどうかも本来なら問題になる事ではあるけど
2021/03/10(水) 10:40:32.47ID:ayODL1B00
stackallocが使われてる関数ってAggressiveInlining属性付けてもインライン展開されないの?
920デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/11(木) 03:25:40.12ID:5JzLcMRo0
System.Web.Helpers.Json.Decode()これと同じ機能を持つのって他にないでしょうか?
使ってるとMaxJsonLength の値を超えています。とエラーがでる時があって。
2021/03/11(木) 12:01:38.32ID:YEgU3HLW0
Json.NET とか?
2021/03/11(木) 12:20:29.59ID:QyQtpTU4M
>>920
MaxJsonLengthは設定で拡張可能
2021/03/11(木) 16:20:05.07ID:5JzLcMRo0
921-922
ありがとうございます!
2021/03/11(木) 21:28:32.37ID:DBtckLkr0
いえいえ
925デフォルトの名無しさん (ワッチョイ a905-pfBZ)
垢版 |
2021/03/15(月) 11:36:48.53ID:hpWLXBIY0
C#でSocketIOサーバーを作りたいと思ったのですが、SocketIOのライブラリに思いっきりclientと書いてあるのでサーバーにはなれないんですかね?
926デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 12:48:51.81ID:fhTxsYs40
表形式を扱うデータ構造といえばList<T>の入れ子、構造体、DataTableクラスとありますが
速度的に一番有利なのはどれでしょうか?
2021/03/15(月) 12:57:13.67ID:qxmjw6qQa
二次元配列、ジャグ配列、その他の順番でしょう。
2021/03/15(月) 13:14:39.26ID:dLPloTkj0
何をやるときの速度?
929デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 13:19:09.67ID:fhTxsYs40
2つのテーブルから共通のコード番号を手掛かりに新しいテーブルを作る処理です

2次元配列が一番速いのですか
最初に件数をカウントしておく必要がありますね
2021/03/15(月) 13:25:10.25ID:dLPloTkj0
>>929
それって2つのテーブルをAとBとしたときBのテーブルはAの1レコードに対して全レコードアクセスは回避できないよね?
どう持っても早くはならないでFAじゃね?
2021/03/15(月) 15:18:17.81ID:W4mhVG7e0
>>929
SQLのJoinアルゴリズムと考え方は同じなのでそういうの解説してるサイトをググればいいんじゃない
基本はSort Merge Join, Nested Loop Join, Hash Joinの3種類
2021/03/16(火) 13:43:13.37ID:ClH9askc0
>>925
使ってないからリポジトリ眺めただけだけど、Socket.IOのサーバと接続するのに
手順を簡略化できるだけで、サーバは普通にWebサーバにjavascriptとかで
作れみたいだよ

https://github.com/doghappy/socket.io-client-csharp
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 };
2021/03/16(火) 21:40:37.58ID:xlIBh31U0
>>933
普通にforでやりゃいいじゃん
それ以上は初心者じゃねぇだろ
相談室でも行け
2021/03/16(火) 22:22:56.72ID:6arf77iJ0
Enumerable.zipでも使っとけ
2021/03/17(水) 01:49:18.61ID:YSkJqwOsa
Zipって上手いネーミングだよね関係ないけど
2021/03/17(水) 21:54:38.73ID:96WF7Dou0
最近C#の勉強を始めて、オブジェクト指向に関して何となく分かったけどプログラムに落とし込むまでは理解出来ていません
手を動かさなきゃ身につかないと思うのですが練習になる例題などあったら教えて頂きたいです
2021/03/17(水) 22:43:21.99ID:EwAVXU9r0
作りたいものがないのにプログラミング言語の学習を始めるってつらくない?

あと大きく分けてコンソールアプリ、Windowsとかのアプリ、Webアプリ(サイト)とかあるけど、
(多分コンソールが一番勉強するには素直に始められそうだけど)
どれがやりたいとかないの?
VS使えるならそれぞれプロジェクト作れば大体helloworldくらいまでは勝手に作ってくれるよ
2021/03/17(水) 23:04:26.73ID:5t1i5SYf0
>>937
Unityとかだとオブジェクト指向を楽しく学べそう。
2021/03/17(水) 23:44:31.78ID:U0+PPwHU0
>>937
Microsoft VOTT を超えるアノテーションツール
を作ってみては?

マジレスするとpinta辺りのソースを読んで見たまえ
2021/03/18(木) 02:59:56.18ID:/DoLsZj+a
>>937
ライブラリのクラスで比較的単純そうなのを
あえて車輪の再発明してみるとか。
例えばList<T>の簡易版を自分で作ってみる。

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

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

机上で本読んでる時にはもやもやしてても
コード書いてる間に自然に府に落ちてくる類のものかもしれないよ。
少なくとも俺はそうだった。
2021/03/18(木) 15:19:17.41ID:9YUM+NUH0
ソースファイル数十くらいの規模からじゃないとオブジェクト指向は必要にならないから
初心者は暫くstaticマンとして修業するしかない
2021/03/18(木) 15:24:02.53ID:8benOtEXa
えっ
メインだけならいらんけど
そうじゃないならオブジェクト指向したほうがいい
2021/03/18(木) 16:44:12.97ID:U1xZnkhE0
オブジェクト指向もカプセル化の恩恵は結構簡単に実感できるが
多態性のほうは有効な場面が可也少ない
2021/03/18(木) 21:08:28.76ID:e7yzUD160
オブジェクト指向の恩恵のほとんどはinterfaceだからなぁ。
自分で作ったのを他の人が使うようになって始めて、迂闊にクラスを参照させてはならない、
カプセル化していたとしても実装変えにくくなって詰みやすいと気づくわけで。

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

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

それが正しいかどうかはともかく、初心者が最初に理解すべき考え方はこれ、
つまりクラスとは仮想機械を記述するものだということだと思う。
2021/03/19(金) 00:55:17.23ID:ZleoXut0M
本来そんな小難しい話じゃなくて、プログラムを人間のメンタルモデルに合わせようというのがオブジェクト指向だよ
人間の感覚に合った設計は破綻しにくいという経験則というか仮説に基づいている
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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