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

■ このスレッドは過去ログ倉庫に格納されています
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/03/23(火) 18:03:39.73ID:VsSEePUk0
List<乙>
3デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/23(火) 21:59:18.80ID:EIK7uDnA0
コンソールでRPGみたいなゲーム作ろうとしてるけど
クラスの作り方がいまいち思い浮かばない
例えば
レベルアップした時にHPとかMPとかのクラスのフィールドをいじりたいけど、レベルクラスに入れるとステータス取るときに毎回status.level.hpみたいにレベルを通らないといけないのが厄介
かといってステータスクラスの中にレベルクラスとHPクラスを内包してしまうとレベルクラスのメソッドが呼び出された時にhpクラスのメソッドが呼び出せない…(staticはなしとして)

どうすれば良いのだ
2021/03/23(火) 23:03:31.32ID:CY92qFOb0
レベルやHPをクラスにしたい理由は?
どういうメソッドを想定してるの?
2021/03/23(火) 23:04:14.83ID:zRupaTqla
>>3
単純に、ステータス、レベル、HP、MPをメンバ変数に持つクラスにすりゃええんちゃう?
レベルアップメソッドを呼ばれたら、それぞれを更新するだけ

最初は難しく考えないで、ありのまま設計して実装してみる
で、破綻しそうなら設計を変えて再実装
そういう試行錯誤も楽しいかもよ
2021/03/23(火) 23:32:37.84ID:3AlrkluQ0
ゲームはすべてのリアルタイムデータをエクセルに並べるつもりでプログラムを組め
物体同士の相互作用処理が一番多くてかつそれが7つも8つも同時に関わるので
オブジェクト指向言語の機能が役に立たないどころか悪影響すら及ぼす
絶対に使わないほうが楽に組めるぞ
まあ、まずやってみろ
2021/03/23(火) 23:52:01.54ID:oR7E8wqDr
偉そうなやつだな
2021/03/23(火) 23:59:45.77ID:ACoFzk2L0
でもまあ、とにかくやってみるってのには賛成。
根気よく続けて、それにちょっとした向上心があるなら、そのうちそれなりにはなる。

>>3 の人は、直接的なアドバイスを求めてるんだろうけど、ちょっとアドバイスしたくらいでどうにかなるようなもんでもないなぁって感じ。
2021/03/24(水) 03:06:14.87ID:hZzg7ROH0
>>3
オブジェクト指向言語だからクラスは物、オブジェクトであって、
RPGのキャラはそれぞれステータスを持つオブジェクト=クラス。
キャラにはステータスがあるなら、それぞれのキャラクラスにはステータスクラスが保有されるべき。
・・・などと自分なりに整理して、設計してみてはどうか。
その設計で厄介なことがあっても、設計に納得出来るなら、それは通るしかない厄介事なのかもしれない。
それを回避したり厄介を軽減する手段はいろいろ有ると思う。
やってれば身についてくる。その過程がまた楽しい。
設計が正しいかどうか、それは自分が決めればいいが、想像が付かないなら書籍を漁る。
10デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 06:37:38.52ID:k6isLik00
3だけど
一応4回くらい違う設計で同じ処理のコードを作ってみたんだが、やりたいことは
親クラスに子クラス1,2がいて
子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい

一応現状はref使ってインスタンスされてる子クラス2のアドレスを保存して子クラス1で間接的に更新してるけど
子クラス3,4,…って増えた時に毎回コンストラクタの引数変えて処理追加させるのは冗長的だなぁと思って違うやり方したいと考えてるけど思いつかない…
11デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 06:43:09.14ID:k6isLik00
>>4
パラメータクラスに最大値、最小値、現在値をプロパティで持つようにして
HP、MP、LV、EXP、クラスをパラメータクラスを継承して作ろうとしてる
さいごにステータスクラスとしてHPからEXPをフィールドに持つようにしてコンストラクタでインスタンス化させるようにしてる
12デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 07:00:45.85ID:k6isLik00
class Prameter{
private int _Max;
public int Max{
set MaxUpdate(value);
get return _Max;
}

protected virtual
void MaxUpdate(int val){
_Max=val;
}

最小値も上と同様
現在値も上と同様※
}

※少し実装とは違うけどざっくりとしたらこんな感じのクラスを現状HP,MP,Level,exp全クラスにそれぞれ継承してる
レベルアップとかは現在値の更新時処理のoverrideで処理変えたりして実装してるんだ
13デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 07:19:03.14ID:k6isLik00
>>6
やっぱりそうか。Cのような関数での設計なら単純で作りやすいんだがオブジェクト指向の練習と思ってやってると意外と難しかった。
ちょうど7つも8つもパラメータが増えてきていちいち引数変えたりするの面倒やしクラスにするメリットがあまりないな…
2021/03/24(水) 07:39:20.22ID:IIHDBzfT0
>>13
7つ8つはパラだけじゃなくてオブジェクトもやぞ
アクセスを限定するオブジェクト指向言語の機能は絶対に役に立たん
2021/03/24(水) 12:54:19.52ID:C9/npL5e0
>>11
ステータスクラスがHP, MP, LV, EXPの最大値、最小値、現在値をそれぞれ直接int等で持つ構成と
ステータスクラスがHP, MP, LV, EXPの各クラスのインスタンスを保持する構成とを比較して
後者にどういうメリットがあるのか、もしくはないのかを考えればいいんでないのかな?

>>10
>親クラスに子クラス1,2がいて
親クラス・子クラスという表現は一般的に継承関係を指すので
あるクラスが別のクラスのインスタンスを保持してる場合は親クラス・子クラスという表現は使わないほうがいい

>子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい
今回のケースで使うべきかどうかは微妙だけど
フィールドが更新されたときにそれをイベントとして通知するようなパターンを使えば
クラス1のコードでクラス2を参照する必要がなくなって通知先が増えてもクラス1を変更しなくてよい
2021/03/24(水) 13:06:41.79ID:C9/npL5e0
https://paiza.io/projects/jSt0Q60s11SN8n8JJzO_7Q
これ、とあるゲームのキャラクターステータスだけどベタなキーバリューペアで管理してる
スキルや装備によってバトル中のHPや攻撃力/防御力とかが変化するから本来の値と底上げされた値は別項目で管理されてる
2021/03/24(水) 15:14:08.35ID:hZzg7ROH0
何か既存のRPGでやってるステータス計算の再現なのかな。
C#の仕組みを凝ると、デバッグが怖そう。
18デフォルトの名無しさん (スププ Sd33-PDCb)
垢版 |
2021/03/24(水) 17:52:37.32ID:JXkKcrLid
なるほど、
皆様、様々なアドバイスありがとうございます。
特に親、子クラスとかのニュアンスや使い方の指摘はありがたい。

ちなみにゲームの再現はしてないけど、イメージはCUIのドラクエのイメージ。それをオブジェクト指向の練習としてクラスで作ってみようとして一番最初で詰んだという経緯っす。

メリットデメリットは正直オブジェクト指向が初めてだからよくわからないってのが本音。ただ知識として幅は広がってる気がする。MVCモデルとかで実現するのかなーとか考えたりイベントをリストで管理するのかなーとか色々模索はしたけど結局いい感じにならず苦難中。
2021/03/24(水) 17:59:16.27ID:HEdEJwPg0
最初はあんまり沢山クラス作らない方がいいかと思う
段々とここは分離した方がいいとか継承した方がいいとか分かってくるので
とにかく動くものを作れるかどうかで勉強するにしても先に進めるかどうかの分岐点になるからな
2021/03/24(水) 18:09:40.53ID:spck33He0
オブジェクト指向の学習が目的なら、ポケモンで学ぶオブジェクト指向みたいなのがいくつかあるから
そういったPOSTを眺めるとなんとなく雰囲気がつかめるかもしれない
2021/03/24(水) 18:29:08.45ID:c5QGfFFqa
ゲーム自体があんまりOOP向きの題材じゃないかもしれないよ。

モデル化する必要があるのはゲームの世界を成立させている「舞台装置」
であってプレーヤーの目に見える表層的なキャラじゃなかったりすると思うんだけど
前者は得てして抽象的な存在になるし、どうしても後者に引きずられてしまう。

知らんけど。

大昔シューティングゲームとかボードゲームがいかにOOP向きじゃないかって
論争があったねw
22デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 18:34:43.36ID:7kvkVNgG0
そうか…
既にOOPに対して嫌悪感を抱き始めるこの始末。
とはいえ継承ができたりオーバーライドして変更したりできるのは良いね
〇〇/××って形の表示するのもは全部同じパラメータクラスで扱えるし、ちょこっと変えたいとなるとオーバーライドで消したりオーバーロードで処理増やしたりできるもんね。

うーん、やっぱC#はよーわからんw
23デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 18:43:27.34ID:1tcqqVj20
ちなみに、C#(プログラミング)初心者が理解しやすそうな題材ってあります?
まだhelloworldから変数作って弄るよりかはゲームのほうが楽しめるんかなと思ってそれで始めたらドツボ入ったんだよね。
難易度も低めが良いけど…(マルチスレッドやGUIでないようなもの)
2021/03/24(水) 18:57:55.30ID:HEdEJwPg0
どういうものを最終的に作りたいかによるけどゲームが目標なら
最初からUnityで勉強するのもアリかなと思う

勉強ならコンソールアプリの方が文字だけの世界だから分かりやすいけど
最初からWinFormsのプロジェクト作ってボタンやテキストボックスなど配置して
GUIのアプリのつくり方を勉強するのも良いかも知れない
GUIだとButtonにはClickイベントが、TextBoxにはTextChangedイベントがあるとか
(デザイン画面のボタンなどをダブルクリックすれば、上記の説明した一番使うであろうイベントの
実装が追加されるようになっている)
そういうイベントにより処理を行うみたいな形になるので、リアルタイムのゲームとは違った感じになるかと

どっちにしてもプログラムしてみて動かしてを繰り返し出来る方が望ましいかな
25デフォルトの名無しさん (ワッチョイ d901-PDCb)
垢版 |
2021/03/24(水) 19:03:33.84ID:1tcqqVj20
なるほどなー
よく考えたら最終的にはGUIのアプリケーションプログラムが作りたいと思ってた。ゲームは特に好きじゃないけど好きな人が多そうだから説明する時にも役立つかなとは思ってゲームにしてた具合。
先にFormやるのもありかも
2021/03/24(水) 21:14:45.45ID:6P4Y/Xh7d
ライフゲーム
2021/03/24(水) 21:41:45.26ID:C9/npL5e0
いろんな種類のキャラを動かす系のゲームはOOPに向いてると思うけどな
実際そういうゲームのほとんどがオブジェクト指向で作られてるわけで

プログラミングを学ぶ目的に適してるかと言われると微妙だが
2021/03/24(水) 21:51:54.97ID:IIHDBzfT0
>>27
向いてない
オブジェクト指向って
オブジェクト同士の処理を綺麗に書く
ように作られてない

全オブジェクトが存在するシーンにほぼすべての処理を記述することになる
マップ情報がないとキャラは移動すらできないことがすぐにわかる
ではマップとキャラのデータが混在した処理をどこに記述するべきか?
シーンに決まってる
なのでゲームシステムに関わるほぼすべての処理をシーンに記述することになる
もう仮にオブジェクト個別の処理が2〜3個見つかった程度で個別のクラスなんかに書くのはバカってぐらい
全部シーンに書くことになる
2021/03/25(木) 06:17:54.99ID:PnLvSLd80
言語そのものよりライブラリに何があるのか把握しきれなくて辛い。
自分でクラスを作ったら、もう既に.Netにあったりするし。
辞書を熟読するような事前の勉強が必要なのかな。
2021/03/25(木) 07:11:43.36ID:/8oIOqtL0
>>29
必要なのは作る前にググる癖じゃね?
2021/03/25(木) 08:33:30.77ID:tiLz+LJ90
>>29
わかる。会社に入るとドキュメントの無いライブラリも加わる。
2021/03/25(木) 08:39:46.38ID:qKMPIZcm0
ゲームって普通にOOP学習にはもってこいじゃね?
一見全く種類の違う自キャラや敵やNPCなどを一つのベースクラスから派生させたりとかオブジェクト指向の有難みを享受しやすいジャンルだと思うけどな
まぁそういうことせずとも一度C言語を使ってみればC#を使ってる時点でデフォでめちゃくちゃオブジェクト指向の恩恵に授かってるというのを認識できるけど
2021/03/25(木) 09:28:18.12ID:WBb7w08Pd
ゲームだと単純に楽しいし、良く知ってる世界だし。
異世界小説が流行るのも、みんなリアルよりゲームのほうが詳しいからね。
2021/03/25(木) 13:24:44.00ID:P2foE7HjM
ゲームはOOPより関数型のがやりやすい
OOPだとゲーム状態が大量のオブジェクトに分散してしまい管理が追いつかなくなる
2021/03/25(木) 13:26:41.67ID:KsV0Sf9V0
パラメータ管理とレンダリングは別視点
2021/03/25(木) 13:29:23.03ID:Nsykn7+b0
unityやwpfで何か作ったらいいんじゃない?
嫌でもOOPを使うことになるし
37デフォルトの名無しさん (ワッチョイ 8bbb-Q5Cn)
垢版 |
2021/03/25(木) 15:14:45.90ID:mlbm7rgK0
Unityはやめといたほうがいいんじゃん?
ゲーム特有の定石が多い上にあまり公開されていないので、なかなかOOPを活かせるようなコードが書けるもんじゃない
2021/03/26(金) 06:50:34.94ID:M+ibeJ+i0
なんか作るとき、ついつい無駄にインターフェース作ったり、クラスを継承させたりしたくなる。
後で使うかもって置いといても、結局、役立たずで無駄になったり。
2021/03/26(金) 08:06:06.50ID:kpMAymvOM
YAGNI原則
40デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
垢版 |
2021/03/26(金) 14:55:15.51ID:OgsXGrRW0
質問です。
'string[][]'と'string[*,*]の違いは何ですか?

List<string[]> lists = new List<string[]>();

string[,] = lists.ToArray();
で二次元配列にしようとすると、

CS0029: Cannot implicitly convert type 'string[][]' to 'string[*,*]'

とエラーが出て困っています。
2021/03/26(金) 14:58:50.52ID:jmlXC9C1M
[][]は配列の配列
[,]は二次元配列
42デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
垢版 |
2021/03/26(金) 15:04:21.89ID:OgsXGrRW0
>>41
なるほど、理解出来ました。
ありがとうございました。
2021/03/27(土) 08:26:55.12ID:8mKnzpiaD
>>1
関連スレ
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
2021/03/28(日) 08:30:33.61ID:w0FgUNmI0
>>38
「いつか使うだろう」という動機で作る機能の9割は結局使われないという法則があってだな
2021/03/28(日) 10:40:20.81ID:i/QSKAGe0
でも、ついでだし作っとくか、で作ったやつがその後のバグ対に効果大なこともあったな。結構。

「起こる可能性のあることはいつか必ず起こる」ってのはマーフィーの法則だっけ。
アタマの片隅にでも置いておくと、後で助かることがままある。
2021/03/28(日) 11:33:59.11ID:wZjOpvsr0
一人で作ってるならいいんだけど別の人が対応する時に混乱させるだけなことが多いからな
チーム開発では起こらないことを無駄に考えてしまうのはよくないって場面の方が多い
2021/03/28(日) 12:40:48.84ID:UWp6RwLlM
個人的には>>45に同意
要件レベルだと「いつか使うかも」で入れた機能はゴミでしかないが、
開発者が気を利かせて入れたものは役に立つことが多い
2021/03/28(日) 13:48:24.42ID:mEH1r/L60
>>47
センス悪い奴って絶望的じゃん
ユースケースを脳内で構築できないっつーの?
2021/03/28(日) 14:10:23.36ID:maSv/WgVa
必要になると思って書いておいたプロパティやメソッドが結局まったく使われなかった、
っていうのはないことはないと思う。

YAGNIって普通はこういう話じゃないの?

>>38が言ってるような要らんInterfaceや要らん継承関係を作ってしまうって
YAGNIとちょっと違う気がするし、そもそも普通はあんまりやらん気がするなあ。
2021/03/28(日) 14:18:03.89ID:YWsxET0EM
コードレベルで呼び出されないのと運用上使用されないのは別問題だよ
前者はほぼ例外なく無駄無価値無意味なんで、俺がコードレビューするなら基本的には消させる
2021/03/28(日) 20:04:07.22ID:GjVtou7p0
スレチ
議論は議論スレでどうぞ
52デフォルトの名無しさん (ワッチョイ b1b5-lMfL)
垢版 |
2021/03/28(日) 20:15:57.09ID:AfIP7Kkq0
>>44-50
横から便乗で質問ですけど、
「いつか使うだろう」とインターフェースや継承関係を作っておく自体は推奨されることですか?

例えば、インターフェースや継承関係が無くても、直付けで作れてしまう訳じゃないですか。
むしろ、そっちの方が楽(というか、直付けでしか作れない人もいますし)。
ただし、物事が複雑化してきたときに、インターフェースや継承関係があると拡張しやすい。

これって上級者なら、(どんなに小さいプログラムだろうが)常にインターフェースや継承関係を作った方がいいのか、
それとも、ケースバイケースで「このぐらい複雑ならインターフェースや継承関係が要る」という判断基準に則って作った方がいいんですか?
2021/03/28(日) 20:16:36.58ID:AfIP7Kkq0
>>51
すれ違いになりました。
議論スレ、行きます。
2021/03/28(日) 20:49:47.68ID:qVTIlpQ/a
>>52
推奨する人は確実にいないと思うよ。
「ついやっちまう」ことも普通はまずないんじゃないか。
IClonableみたいな実例があるから皆無とも言えないけど。
2021/03/29(月) 18:40:55.68ID:dJ0caBH40
Seleniumで closeとquitをセットで使ってましたが
quitさへ使えばプロセス残りも防げて万能という認識で良いでしょうか?
2021/03/29(月) 18:41:48.60ID:dJ0caBH40
というのもなぜか、最近アップデートされたChromeドライバーのバグなのか
driver.close();を実行するとやたらと時間が掛かる様になり、ストレスを感じています。
57デフォルトの名無しさん (スププ Sdb2-uiCP)
垢版 |
2021/03/31(水) 11:53:07.69ID:/skdgMDzd
演算子のオーバーロードを定義したクラスを継承してそのクラスのオブジェクト同士を足したりしたいんだけど、
継承した子クラス同士足し算してもオーバーロードしてるのが親クラス返してエラー出る…
なんとかなりませんか…
2021/03/31(水) 12:51:53.66ID:rGwDN8jFD
コーのせられる?
2021/03/31(水) 14:43:21.83ID:FnhDsC03a
>>57
当たり前のことが起るべくして起こってるようにしか聞こえんよ
何か盛大に勘違いしてない?
60デフォルトの名無しさん (スププ Sdb2-uiCP)
垢版 |
2021/03/31(水) 17:43:40.43ID:/skdgMDzd
>>59
その当たり前の事がわからないのですが…
子クラスのクラス変数に親クラスのインスタンスを入れれないのはわかりますが、それに対してどうすれば良いのですかと質問しています。
2021/03/31(水) 18:12:45.92ID:k0t0X50Ga
子クラスどうしの演算子を新しく定義する
2021/04/02(金) 02:49:16.07ID:4F6/LV520
いやいやゲームはメチャクチャOOPに向いてる。
ゲームエンジンがプロパティペインで物を制作管理していくのが中心になってるってことは
全体としてOOPと相性がいい。

そらそうよ、鋳型と各オブジェクト、その相互作用、隠蔽やインターフェース、
まさにオブジェクト指向言語の基礎サンプルやエクササイズが綺麗にヒットしやすいのがゲームよ。
2021/04/02(金) 03:35:33.76ID:p2YnI9xf0
>>62
エアプ乙
ゲームはオブジェクト同士の関連処理が一番多い
それを綺麗に書く処理はオブジェクト指向言語には無い
これを議論するといっつも言語機能に用意されてないもんだから色んなワンダーランドがご披露されるだけのクソ展開になる
いいか
そんなもんないんだ
お前がどう書くかなんて俺は興味ない
ただ言語の機能にない
それだけだ
2021/04/02(金) 16:59:32.21ID:kD/N/lyPr
たんに解がひとつではないだけの話じゃね?
そんなの普通のGUIアプリ一つ取ってもそうじゃん
2021/04/02(金) 17:30:53.01ID:bweg+I/EM
文面見ればオブジェクト指向を理解して言ってるのかどうかわかるやろ
2021/04/02(金) 21:13:27.05ID:qd7mj8LF0
議論スレに行った方が良いのか判らないけど、
俺も初心者なんだけどC#の機能を試したくってさ。
基本キャラからキャラ種類別にクラス継承させたりして楽しんでたよ。

でもゴリゴリにスペックを切り詰めるようなゲームだと、そんな余裕はないのかもな。
2021/04/02(金) 21:22:46.60ID:nM9RZYDRD
ゴリゴリにスペック使うような案件にC#使うとは思えないけど
68デフォルトの名無しさん (ワッチョイ a3e6-JnQU)
垢版 |
2021/04/02(金) 21:33:37.08ID:iQ+JaQcP0
日本産のスマホゲーと大陸産のスマホゲーぐらいの速度差は出るだろうな
2021/04/02(金) 21:37:00.93ID:L8b3h71w0
オブジェクト同士の関連処理を綺麗に書く機能、って具体的にどんな感じの物なのか興味はある。
2021/04/02(金) 21:37:57.13ID:JUK+seey0
ここ「初心者の質問スレ」で「初心者の雑談スレ」じゃないんだけどテンプレ読めないの?
マ板でやれ
2021/04/02(金) 23:15:46.39ID:jbXSiLa80
>>68
中華の大手どころってマルチプラットフォーム対応なソシャゲもUnityとか使わずにそもそも自前エンジンで開発してね?
2021/04/03(土) 00:11:57.23ID:nqPdKYBV0
むしろUnityじゃないの見たことない
2021/04/03(土) 01:51:35.91ID:2NRf1R7da
>>69
まあ言語機能云々は意味不明に聞こえるねw

前も書いたけど、ゲームの場合Mediator的な装置を用意すべき場面でも
目に見えるオブジェクトに引きずられて変な設計してしまいがちだと
いう意味なら分からんでもない。

バブルボブル(おっさんにしか分からんかも)で泡の相互作用を
Bubbleクラスに無理に実装したらたぶんハマるよね。
2021/04/03(土) 02:58:34.81ID:RiNFSwHX0
ちきしょー、分かっちまった
2021/04/03(土) 04:13:43.36ID:a3PJiZ4L0
linq便利だなーって使いまくってたけど
最近自分が手続き型の思考をしなくなってきたことが怖くなってきた
これプログラミング能力が低下するのでは..
2021/04/03(土) 10:48:17.75ID:UQC8gxiad
>>75
でもLinqって古くから有る技術の延長にある気がする。
SelectしてWhereで選んでSortしてっていうのは、コマンドプロンプトでパイプリダイレクションとかいう手法に似てる。
ラムダ式とかは新しいのかな。数学の世界とかそういう所では古いのか。
2021/04/03(土) 11:15:26.55ID:vVgJyrul0
やっててよかったラムダ式。
やらなきゃよかった苦悶式。
2021/04/03(土) 12:27:40.46ID:4GR7Zrkb0
>>76
君はLISPを何だと思っているのかね?
2021/04/03(土) 12:41:49.44ID:msrmgqC70
そうか、C#だとメソッドチェーンすらも一般的ではないのか…
いやそんな馬鹿な
Unity制御スクリプトとしての利用が多いから?
いいや雑談だし
2021/04/03(土) 12:56:50.93ID:49uAy5SrM
>>75
そりゃ脳みそは使わないと衰えるだろうね
最適化重視で副作用を容認したコードを書こうとすると詰まることが増えた気がする
2021/04/03(土) 13:57:02.33ID:PWpcDrEf0
いきなりメソッドチェーンとか持ち出したのはLinqの話に絡めてか?
全然違うものだと思うが。
2021/04/03(土) 18:55:38.38ID:a2otFyvK0
Linqのクエリ式自体はメソッドチェーンのシンタックスシュガーじゃん
2021/04/03(土) 19:11:52.27ID:CmPk+yxPa
メソッドチェーンの元々の意味はvoidのメソッドをthisを返すようにして....
ってことだったんだと思うよ。

個人的にはこういう重箱の隅を突く話は好きじゃないけど
2021/04/04(日) 13:52:07.93ID:U9Ytphde0
>>73
純粋に、自分が知らない有用な書き方があるなら知りたいとは思うんだよな。
別スレの LINQ がらみの話題もやるかどうかは置いておいて勉強にはなったし。
もしくだんの人が出てきてくれて講釈してくれるなら専用のスレぐらいは立てる。
2021/04/04(日) 17:58:30.84ID:a8juFvNn0
初歩的な事かもしれませんが教えて下さい。

以下のような独自クラス「Group」のリストがあります。
このリストをクラスのAgeListをキーにGroupByしたいのですが上手くグループ化できません。
どうすれば良いでしょうか。

public class Group{
/// グループID
public int Id {get; set;}
/// グループ名
public int GroupName {get; set;}
/// グループ所属の年齢一覧
public List<int> AgeList {get; set;}

public Member()
{
List = new List();
}
}
2021/04/04(日) 19:15:49.58ID:LnRN74zvM
>>85
どうすればいいじゃなくてどうしたいのかをお前が決めろ
平均年齢なのか最大年齢なのかそれともまた別の基準なのか
グループ化に使うキーが一意に定まらないならグループ化のしようがない
2021/04/04(日) 19:55:19.53ID:m/N7RFml0
>>85
最低限ビルドできるコードを例に挙げろよ
88デフォルトの名無しさん (ワッチョイ b501-5QI3)
垢版 |
2021/04/04(日) 19:59:05.44ID:gm8Ka2TU0
そもそもの設計ヤバない?AgeはMemberに持つのでは?
2021/04/04(日) 20:15:49.42ID:+2DTDHawM
デフォルトで使われる比較関数じゃ欲しい結果が得られないからGroupByに独自の比較関数を渡すか、Groupクラスに比較方法を定義しておくかのどちらか
2021/04/04(日) 20:17:26.34ID:+2DTDHawM
新卒研修の課題とかだろうから設計にツッコミいれてもしょうがないような
2021/04/04(日) 20:45:41.30ID:C0fdEpC00
初心者以前の話だよな
何がしたいか位は分かるように書けよと思う
2021/04/04(日) 20:52:52.48ID:ufNVz0O6a
何がしたいかはなんとなくわかるだろ
2021/04/04(日) 20:55:57.89ID:C0fdEpC00
>>92
動かないあれを見て分かるか?
そもそも構造すら間違ってるやろ
2021/04/04(日) 21:09:17.93ID:ghBYdtOLM
>>92
わかるんなら説明してくれよw
メンバーの年齢だけを保持してるグループってあまり見かけないし
2021/04/04(日) 21:13:12.33ID:xvT8M2vo0
俺はこういう場合、独自解釈して好きなように作る。
今回ならAgeListをソートしてカンマ区切りの文字列にして、をれをキーにする。
でGroupByだな。

過去この独自解釈が5割くらいそのまま仕様になってる
2021/04/04(日) 21:16:41.13ID:jr3tMa1na
>>93
>独自クラス「Group」のリスト
>このリストをクラスのAgeListをキーにGroupByしたい

List<Group> list = new List<Group>();
// なんか処理
list.Groupby(x => x.AgeList)
ってしたいって理解したんだけど違うんかな

宣言でそもそも間違ってるのは知らん
2021/04/04(日) 22:12:27.02ID:0QnJQanX0
Ruby なら、こういう感じ

members = [ {id: 1, age: 30}, {id: 2, age: 20}, {id: 3, age: 50} ]

p members.sort_by{ |member| member[ :age ] }

出力
[{:id=>2, :age=>20}, {:id=>1, :age=>30}, {:id=>3, :age=>50}]
2021/04/04(日) 22:18:00.59ID:LUDq5H1sM
>>97
C#なら?
2021/04/04(日) 22:23:09.43ID:ciXsbyqc0
>>97
APLなら?
2021/04/04(日) 22:32:47.74ID:glgnW2pm0
そんな議論はさておき、俺様が>>100を掻っ攫う
2021/04/04(日) 22:38:41.33ID:C0fdEpC00
Rubyガイジは無視して同じコードをちょっと書いてみた
https://paiza.io/projects/XRdHMEMPrv4_lIhlB8WYuw
■ このスレッドは過去ログ倉庫に格納されています