21/03/23 12:58:24.10 ACoFzk2L0.net
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
スレリンク(tech板)
■関連スレ
C#, C♯, C#相談室 Part94
スレリンク(tech板)
■コードを貼る場合は↓を使いましょう。
URLリンク(ideone.com)
URLリンク(dotnetfiddle.net)
■情報源
URLリンク(docs.)
2: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
3:デフォルトの名無しさん
21/03/23 18:03:39.73 VsSEePUk0.net
List<乙>
4:デフォルトの名無しさん
21/03/23 21:59:18.80 EIK7uDnA0.net
コンソールでRPGみたいなゲーム作ろうとしてるけど
クラスの作り方がいまいち思い浮かばない
例えば
レベルアップした時にHPとかMPとかのクラスのフィールドをいじりたいけど、レベルクラスに入れるとステータス取るときに毎回status.level.hpみたいにレベルを通らないといけないのが厄介
かといってステータスクラスの中にレベルクラスとHPクラスを内包してしまうとレベルクラスのメソッドが呼び出された時にhpクラスのメソッドが呼び出せない…(staticはなしとして)
どうすれば良いのだ
5:デフォルトの名無しさん
21/03/23 23:03:31.32 CY92qFOb0.net
レベルやHPをクラスにしたい理由は?
どういうメソッドを想定してるの?
6:デフォルトの名無しさん
21/03/23 23:04:14.83 zRupaTqla.net
>>3
単純に、ステータス、レベル、HP、MPをメンバ変数に持つクラスにすりゃええんちゃう?
レベルアップメソッドを呼ばれたら、それぞれを更新するだけ
最初は難しく考えないで、ありのまま設計して実装してみる
で、破綻しそうなら設計を変えて再実装
そういう試行錯誤も楽しいかもよ
7:デフォルトの名無しさん
21/03/23 23:32:37.84 3AlrkluQ0.net
ゲームはすべてのリアルタイムデータをエクセルに並べるつもりでプログラムを組め
物体同士の相互作用処理が一番多くてかつそれが7つも8つも同時に関わるので
オブジェクト指向言語の機能が役に立たないどころか悪影響すら及ぼす
絶対に使わないほうが楽に組めるぞ
まあ、まずやってみろ
8:デフォルトの名無しさん
21/03/23 23:52:01.54 oR7E8wqDr.net
偉そうなやつだな
9:デフォルトの名無しさん
21/03/23 23:59:45.77 ACoFzk2L0.net
でもまあ、とにかくやってみるってのには賛成。
根気よく続けて、それにちょっとした向上心があるなら、そのうちそれなりにはなる。
>>3 の人は、直接的なアドバイスを求めてるんだろうけど、ちょっとアドバイスしたくらいでどうにかなるようなもんでもないなぁって感じ。
10:デフォルトの名無しさん
21/03/24 03:06:14.87 hZzg7ROH0.net
>>3
オブジェクト指向言語だからクラスは物、オブジェクトであって、
RPGのキャラはそれぞれステータスを持つオブジェクト=クラス。
キャラにはステータスがあるなら、それぞれのキャラクラスにはステータスクラスが保有されるべき。
・・・などと自分なりに整理して、設計してみてはどうか。
その設計で厄介なことがあっても、設計に納得出来るなら、それは通るしかない厄介事なのかもしれない。
それを回避したり厄介を軽減する手段はいろいろ有ると思う。
やってれば身についてくる。その過程がまた楽しい。
設計が正しいかどうか、それは自分が決めればいいが、想像が付かないなら書籍を漁る。
11:デフォルトの名無しさん
21/03/24 06:37:38.52 k6isLik00.net
3だけど
一応4回くらい違う設計で同じ処理のコードを作ってみたんだが、やりたいことは
親クラスに子クラス1,2がいて
子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい
一応現状はref使ってインスタンスされてる子クラス2のアドレスを保存して子クラス1で間接的に更新してるけど
子クラス3,4,…って増えた時に毎回コンストラクタの引数変えて処理追加させるのは冗長的だなぁと思って違うやり方したいと考えてるけど思いつかない…
12:デフォルトの名無しさん
21/03/24 06:43:09.14 k6isLik00.net
>>4
パラメータクラスに最大値、最小値、現在値をプロパティで持つようにして
HP、MP、LV、EXP、クラスをパラメータクラスを継承して作ろうとしてる
さいごにステータスクラスとしてHPからEXPをフィールドに持つようにしてコンストラクタでインスタンス化させるようにしてる
13:デフォルトの名無しさん
21/03/24 07:00:45.85 k6isLik00.net
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で処理変えたりして実装してるんだ
14:デフォルトの名無しさん
21/03/24 07:19:03.14 k6isLik00.net
>>6
やっぱりそうか。Cのような関数での設計なら単純で作りやすいんだがオブジェクト指向の練習と思ってやってると意外と難しかった。
ちょうど7つも8つもパラメータが増えてきていちいち引数変えたりするの面倒やしクラスにするメリットがあまりないな…
15:デフォルトの名無しさん
21/03/24 07:39:20.22 IIHDBzfT0.net
>>13
7つ8つはパラだけじゃなくてオブジェクトもやぞ
アクセスを限定するオブジェクト指向言語の機能は絶対に役に立たん
16:デフォルトの名無しさん
21/03/24 12:54:19.52 C9/npL5e0.net
>>11
ステータスクラスがHP, MP, LV, EXPの最大値、最小値、現在値をそれぞれ直接int等で持つ構成と
ステータスクラスがHP, MP, LV, EXPの各クラスのインスタンスを保持する構成とを比較して
後者にどういうメリットがあるのか、もしくはないのかを考えればいいんでないのかな?
>>10
>親クラスに子クラス1,2がいて
親クラス・子クラスという表現は一般的に継承関係を指すので
あるクラスが別のクラスのインスタンスを保持してる場合は親クラス・子クラスという表現は使わないほうがいい
>子クラス1のフィールドが更新されたとき、子クラス2のフィールドを更新したい
今回のケースで使うべきかどうかは微妙だけど
フィールドが更新されたときにそれをイベントとして通知するようなパターンを使えば
クラス1のコードでクラス2を参照する必要がなくなって通知先が増えてもクラス1を変更しなくてよい
17:デフォルトの名無しさん
21/03/24 13:06:41.79 C9/npL5e0.net
URLリンク(paiza.io)
これ、とあるゲームのキャラクターステータスだけどベタなキーバリューペアで管理してる
スキルや装備によってバトル中のHPや攻撃力/防御力とかが変化するから本来の値と底上げされた値は別項目で管理されてる
18:デフォルトの名無しさん
21/03/24 15:14:08.35 hZzg7ROH0.net
何か既存のRPGでやってるステータス計算の再現なのかな。
C#の仕組みを凝ると、デバッグが怖そう。
19:デフォルトの名無しさん
21/03/24 17:52:37.32 JXkKcrLid.net
なるほど、
皆様、様々なアドバイスありがとうございます。
特に親、子クラスとかのニュアンスや使い方の指摘はありがたい。
ちなみにゲームの再現はしてないけど、イメージはCUIのドラクエのイメージ。それをオブジェクト指向の練習としてクラスで作ってみようとして一番最初で詰んだという経緯っす。
メリットデメリットは正直オブジェクト指向が初めてだからよくわからないってのが本音。ただ知識として幅は広がってる気がする。MVCモデルとかで実現するのかなーとか考えたりイベントをリストで管理するのかなーとか色々模索はしたけど結局いい感じにならず苦難中。
20:デフォルトの名無しさん
21/03/24 17:59:16.27 HEdEJwPg0.net
最初はあんまり沢山クラス作らない方がいいかと思う
段々とここは分離した方がいいとか継承した方がいいとか分かってくるので
とにかく動くものを作れるかどうかで勉強するにしても先に進めるかどうかの分岐点になるからな
21:デフォルトの名無しさん
21/03/24 18:09:40.53 spck33He0.net
オブジェクト指向の学習が目的なら、ポケモンで学ぶオブジェクト指向みたいなのがいくつかあるから
そういったPOSTを眺めるとなんとなく雰囲気がつかめるかもしれない
22:デフォルトの名無しさん
21/03/24 18:29:08.45 c5QGfFFqa.net
ゲーム自体があんまりOOP向きの題材じゃないかもしれないよ。
モデル化する必要があるのはゲームの世界を成立させている「舞台装置」
であってプレーヤーの目に見える表層的なキャラじゃなかったりすると思うんだけど
前者は得てして抽象的な存在になるし、どうしても後者に引きずられてしまう。
知らんけど。
大昔シューティングゲームとかボードゲームがいかにOOP向きじゃないかって
論争があったねw
23:デフォルトの名無しさん
21/03/24 18:34:43.36 7kvkVNgG0.net
そうか…
既にOOPに対して嫌悪感を抱き始めるこの始末。
とはいえ継承ができたりオーバーライドして変更したりできるのは良いね
〇〇/××って形の表示するのもは全部同じパラメータクラスで扱えるし、ちょこっと変えたいとなるとオーバーライドで消したりオーバーロードで処理増やしたりできるもんね。
うーん、やっぱC#はよーわからんw
24:デフォルトの名無しさん
21/03/24 18:43:27.34 1tcqqVj20.net
ちなみに、C#(プログラミング)初心者が理解しやすそうな題材ってあります?
まだhelloworldから変数作って弄るよりかはゲームのほうが楽しめるんかなと思ってそれで始めたらドツボ入ったんだよね。
難易度も低めが良いけど…(マルチスレッドやGUIでないようなもの)
25:デフォルトの名無しさん
21/03/24 18:57:55.30 HEdEJwPg0.net
どういうものを最終的に作りたいかによるけどゲームが目標なら
最初からUnityで勉強するのもアリかなと思う
勉強ならコンソールアプリの方が文字だけの世界だから分かりやすいけど
最初からWinFormsのプロジェクト作ってボタンやテキストボックスなど配置して
GUIのアプリのつくり方を勉強するのも良いかも知れない
GUIだとButtonにはClickイベントが、TextBoxにはTextChangedイベントがあるとか
(デザイン画面のボタンなどをダブルクリックすれば、上記の説明した一番使うであろうイベントの
実装が追加されるようになっている)
そういうイベントにより処理を行うみたいな形になるので、リアルタイムのゲームとは違った感じになるかと
どっちにしてもプログラムしてみて動かしてを繰り返し出来る方が望ましいかな
26:デフォルトの名無しさん
21/03/24 19:03:33.84 1tcqqVj20.net
なるほどなー
よく考えたら最終的にはGUIのアプリケーションプログラムが作りたいと思ってた。ゲームは特に好きじゃないけど好きな人が多そうだから説明する時にも役立つかなとは思ってゲームにしてた具合。
先にFormやるのもありかも
27:デフォルトの名無しさん
21/03/24 21:14:45.45 6P4Y/Xh7d.net
ライフゲーム
28:デフォルトの名無しさん
21/03/24 21:41:45.26 C9/npL5e0.net
いろんな種類のキャラを動かす系のゲームはOOPに向いてると思うけどな
実際そういうゲームのほとんどがオブジェクト指向で作られてるわけで
プログラミングを学ぶ目的に適してるかと言われると微妙だが
29:デフォルトの名無しさん
21/03/24 21:51:54.97 IIHDBzfT0.net
>>27
向いてない
オブジェクト指向って
オブジェクト同士の処理を綺麗に書く
ように作られてない
全オブジェクトが存在するシーンにほぼすべての処理を記述することになる
マップ情報がないとキャラは移動すらできないことがすぐにわかる
ではマップとキャラのデータが混在した処理をどこに記述するべきか?
シーンに決まってる
なのでゲームシステムに関わるほぼすべての処理をシーンに記述することになる
もう仮にオブジェクト個別の処理が2~3個見つかった程度で個別のクラスなんかに書くのはバカってぐらい
全部シーンに書くことになる
30:デフォルトの名無しさん
21/03/25 06:17:54.99 PnLvSLd80.net
言語そのものよりライブラリに何があるのか把握しきれなくて辛い。
自分でクラスを作ったら、もう既に.Netにあったりするし。
辞書を熟読するような事前の勉強が必要なのかな。
31:デフォルトの名無しさん
21/03/25 07:11:43.36 /8oIOqtL0.net
>>29
必要なのは作る前にググる癖じゃね?
32:デフォルトの名無しさん
21/03/25 08:33:30.77 tiLz+LJ90.net
>>29
わかる。会社に入るとドキュメントの無いライブラリも加わる。
33:デフォルトの名無しさん
21/03/25 08:39:46.38 qKMPIZcm0.net
ゲームって普通にOOP学習にはもってこいじゃね?
一見全く種類の違う自キャラや敵やNPCなどを一つのベースクラスから派生させたりとかオブジェクト指向の有難みを享受しやすいジャンルだと思うけどな
まぁそういうことせずとも一度C言語を使ってみればC#を使ってる時点でデフォでめちゃくちゃオブジェクト指向の恩恵に授かってるというのを認識できるけど
34:デフォルトの名無しさん
21/03/25 09:28:18.12 WBb7w08Pd.net
ゲームだと単純に楽しいし、良く知ってる世界だし。
異世界小説が流行るのも、みんなリアルよりゲームのほうが詳しいからね。
35:デフォルトの名無しさん
21/03/25 13:24:44.00 P2foE7HjM.net
ゲームはOOPより関数型のがやりやすい
OOPだとゲーム状態が大量のオブジェクトに分散してしまい管理が追いつかなくなる
36:デフォルトの名無しさん
21/03/25 13:26:41.67 KsV0Sf9V0.net
パラメータ管理とレンダリングは別視点
37:デフォルトの名無しさん
21/03/25 13:29:23.03 Nsykn7+b0.net
unityやwpfで何か作ったらいいんじゃない?
嫌でもOOPを使うことになるし
38:デフォルトの名無しさん
21/03/25 15:14:45.90 mlbm7rgK0.net
Unityはやめといたほうがいいんじゃん?
ゲーム特有の定石が多い上にあまり公開されていないので、なかなかOOPを活かせるようなコードが書けるもんじゃない
39:デフォルトの名無しさん
21/03/26 06:50:34.94 M+ibeJ+i0.net
なんか作るとき、ついつい無駄にインターフェース作ったり、クラスを継承させたりしたくなる。
後で使うかもって置いといても、結局、役立たずで無駄になったり。
40:デフォルトの名無しさん
21/03/26 08:06:06.50 kpMAymvOM.net
YAGNI原則
41:デフォルトの名無しさん
21/03/26 14:55:15.51 OgsXGrRW0.net
質問です。
'string[][]'と'string[*,*]の違いは何ですか?
List<string[]> lists = new List<string[]>();
を
string[,] = lists.ToArray();
で二次元配列にしようとすると、
CS0029: Cannot implicitly convert type 'string[][]' to 'string[*,*]'
とエラーが出て困っています。
42:デフォルトの名無しさん
21/03/26 14:58:50.52 jmlXC9C1M.net
[][]は配列の配列
[,]は二次元配列
43:デフォルトの名無しさん
21/03/26 15:04:21.89 OgsXGrRW0.net
>>41
なるほど、理解出来ました。
ありがとうございました。
44:デフォルトの名無しさん
21/03/27 08:26:55.12 8mKnzpiaD.net
>>1
関連スレ
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
スレリンク(tech板)
45:デフォルトの名無しさん
21/03/28 08:30:33.61 w0FgUNmI0.net
>>38
「いつか使うだろう」という動機で作る機能の9割は結局使われないという法則があってだな
46:デフォルトの名無しさん
21/03/28 10:40:20.81 i/QSKAGe0.net
でも、ついでだし作っとくか、で作ったやつがその後のバグ対に効果大なこともあったな。結構。
「起こる可能性のあることはいつか必ず起こる」ってのはマーフィーの法則だっけ。
アタマの片隅にでも置いておくと、後で助かることがままある。
47:デフォルトの名無しさん
21/03/28 11:33:59.11 wZjOpvsr0.net
一人で作ってるならいいんだけど別の人が対応する時に混乱させるだけなことが多いからな
チーム開発では起こらないことを無駄に考えてしまうのはよくないって場面の方が多い
48:デフォルトの名無しさん
21/03/28 12:40:48.84 UWp6RwLlM.net
個人的には>>45に同意
要件レベルだと「いつか使うかも」で入れた機能はゴミでしかないが、
開発者が気を利かせて入れたものは役に立つことが多い
49:デフォルトの名無しさん
21/03/28 13:48:24.42 mEH1r/L60.net
>>47
センス悪い奴って絶望的じゃん
ユースケースを脳内で構築できないっつーの?
50:デフォルトの名無しさん
21/03/28 14:10:23.36 maSv/WgVa.net
必要になると思って書いておいたプロパティやメソッドが結局まったく使われなかった、
っていうのはないことはないと思う。
YAGNIって普通はこういう話じゃないの?
>>38が言ってるような要らんInterfaceや要らん継承関係を作ってしまうって
YAGNIとちょっと違う気がするし、そもそも普通はあんまりやらん気がするなあ。
51:デフォルトの名無しさん
21/03/28 14:18:03.89 YWsxET0EM.net
コードレベルで呼び出されないのと運用上使用されないのは別問題だよ
前者はほぼ例外なく無駄無価値無意味なんで、俺がコードレビューするなら基本的には消させる
52:デフォルトの名無しさん
21/03/28 20:04:07.22 GjVtou7p0.net
スレチ
議論は議論スレでどうぞ
53:デフォルトの名無しさん
21/03/28 20:15:57.09 AfIP7Kkq0.net
>>44-50
横から便乗で質問ですけど、
「いつか使うだろう」とインターフェースや継承関係を作っておく自体は推奨されることですか?
例えば、インターフェースや継承関係が無くても、直付けで作れてしまう訳じゃないですか。
むしろ、そっちの方が楽(というか、直付けでしか作れない人もいますし)。
ただし、物事が複雑化してきたときに、インターフェースや継承関係があると拡張しやすい。
これって上級者なら、(どんなに小さいプログラムだろうが)常にインターフェースや継承関係を作った方がいいのか、
それとも、ケースバイケースで「このぐらい複雑ならインターフェースや継承関係が要る」という判断基準に則って作った方がいいんですか?
54:デフォルトの名無しさん
21/03/28 20:16:36.58 AfIP7Kkq0.net
>>51
すれ違いになりました。
議論スレ、行きます。
55:デフォルトの名無しさん
21/03/28 20:49:47.68 qVTIlpQ/a.net
>>52
推奨する人は確実にいないと思うよ。
「ついやっちまう」ことも普通はまずないんじゃないか。
IClonableみたいな実例があるから皆無とも言えないけど。
56:デフォルトの名無しさん
21/03/29 18:40:55.68 dJ0caBH40.net
Seleniumで closeとquitをセットで使ってましたが
quitさへ使えばプロセス残りも防げて万能という認識で良いでしょうか?
57:デフォルトの名無しさん
21/03/29 18:41:48.60 dJ0caBH40.net
というのもなぜか、最近アップデートされたChromeドライバーのバグなのか
driver.close();を実行するとやたらと時間が掛かる様になり、ストレスを感じています。
58:デフォルトの名無しさん
21/03/31 11:53:07.69 /skdgMDzd.net
演算子のオーバーロードを定義したクラスを継承してそのクラスのオブジェクト同士を足したりしたいんだけど、
継承した子クラス同士足し算してもオーバーロードしてるのが親クラス返してエラー出る…
なんとかなりませんか…
59:デフォルトの名無しさん
21/03/31 12:51:53.66 rGwDN8jFD.net
コーのせられる?
60:デフォルトの名無しさん
21/03/31 14:43:21.83 FnhDsC03a.net
>>57
当たり前のことが起るべくして起こってるようにしか聞こえんよ
何か盛大に勘違いしてない?
61:デフォルトの名無しさん
21/03/31 17:43:40.43 /skdgMDzd.net
>>59
その当たり前の事がわからないのですが…
子クラスのクラス変数に親クラスのインスタンスを入れれないのはわかりますが、それに対してどうすれば良いのですかと質問しています。
62:デフォルトの名無しさん
21/03/31 18:12:45.92 k0t0X50Ga.net
子クラスどうしの演算子を新しく定義する
63:デフォルトの名無しさん
21/04/02 02:49:16.07 4F6/LV520.net
いやいやゲームはメチャクチャOOPに向いてる。
ゲームエンジンがプロパティペインで物を制作管理していくのが中心になってるってことは
全体としてOOPと相性がいい。
そらそうよ、鋳型と各オブジェクト、その相互作用、隠蔽やインターフェース、
まさにオブジェクト指向言語の基礎サンプルやエクササイズが綺麗にヒットしやすいのがゲームよ。
64:デフォルトの名無しさん
21/04/02 03:35:33.76 p2YnI9xf0.net
>>62
エアプ乙
ゲームはオブジェクト同士の関連処理が一番多い
それを綺麗に書く処理はオブジェクト指向言語には無い
これを議論するといっつも言語機能に用意されてないもんだから色んなワンダーランドがご披露されるだけのクソ展開になる
いいか
そんなもんないんだ
お前がどう書くかなんて俺は興味ない
ただ言語の機能にない
それだけだ
65:デフォルトの名無しさん
21/04/02 16:59:32.21 kD/N/lyPr.net
たんに解がひとつではないだけの話じゃね?
そんなの普通のGUIアプリ一つ取ってもそうじゃん
66:デフォルトの名無しさん
21/04/02 17:30:53.01 bweg+I/EM.net
文面見ればオブジェクト指向を理解して言ってるのかどうかわかるやろ
67:デフォルトの名無しさん
21/04/02 21:13:27.05 qd7mj8LF0.net
議論スレに行った方が良いのか判らないけど、
俺も初心者なんだけどC#の機能を試したくってさ。
基本キャラからキャラ種類別にクラス継承させたりして楽しんでたよ。
でもゴリゴリにスペックを切り詰めるようなゲームだと、そんな余裕はないのかもな。
68:デフォルトの名無しさん
21/04/02 21:22:46.60 nM9RZYDRD.net
ゴリゴリにスペック使うような案件にC#使うとは思えないけど
69:デフォルトの名無しさん
21/04/02 21:33:37.08 iQ+JaQcP0.net
日本産のスマホゲーと大陸産のスマホゲーぐらいの速度差は出るだろうな
70:デフォルトの名無しさん
21/04/02 21:37:00.93 L8b3h71w0.net
オブジェクト同士の関連処理を綺麗に書く機能、って具体的にどんな感じの物なのか興味はある。
71:デフォルトの名無しさん
21/04/02 21:37:57.13 JUK+seey0.net
ここ「初心者の質問スレ」で「初心者の雑談スレ」じゃないんだけどテンプレ読めないの?
マ板でやれ
72:デフォルトの名無しさん
21/04/02 23:15:46.39 jbXSiLa80.net
>>68
中華の大手どころってマルチプラットフォーム対応なソシャゲもUnityとか使わずにそもそも自前エンジンで開発してね?
73:デフォルトの名無しさん
21/04/03 00:11:57.23 nqPdKYBV0.net
むしろUnityじゃないの見たことない
74:デフォルトの名無しさん
21/04/03 01:51:35.91 2NRf1R7da.net
>>69
まあ言語機能云々は意味不明に聞こえるねw
前も書いたけど、ゲームの場合Mediator的な装置を用意すべき場面でも
目に見えるオブジェクトに引きずられて変な設計してしまいがちだと
いう意味なら分からんでもない。
バブルボブル(おっさんにしか分からんかも)で泡の相互作用を
Bubbleクラスに無理に実装したらたぶんハマるよね。
75:デフォルトの名無しさん
21/04/03 02:58:34.81 RiNFSwHX0.net
ちきしょー、分かっちまった
76:デフォルトの名無しさん
21/04/03 04:13:43.36 a3PJiZ4L0.net
linq便利だなーって使いまくってたけど
最近自分が手続き型の思考をしなくなってきたことが怖くなってきた
これプログラミング能力が低下するのでは..
77:デフォルトの名無しさん
21/04/03 10:48:17.75 UQC8gxiad.net
>>75
でもLinqって古くから有る技術の延長にある気がする。
SelectしてWhereで選んでSortしてっていうのは、コマンドプロンプトでパイプリダイレクションとかいう手法に似てる。
ラムダ式とかは新しいのかな。数学の世界とかそういう所では古いのか。
78:デフォルトの名無しさん
21/04/03 11:15:26.55 vVgJyrul0.net
やっててよかったラムダ式。
やらなきゃよかった苦悶式。
79:デフォルトの名無しさん
21/04/03 12:27:40.46 4GR7Zrkb0.net
>>76
君はLISPを何だと思っているのかね?
80:デフォルトの名無しさん
21/04/03 12:41:49.44 msrmgqC70.net
そうか、C#だとメソッドチェーンすらも一般的ではないのか…
いやそんな馬鹿な
Unity制御スクリプトとしての利用が多いから?
いいや雑談だし
81:デフォルトの名無しさん
21/04/03 12:56:50.93 49uAy5SrM.net
>>75
そりゃ脳みそは使わないと衰えるだろうね
最適化重視で副作用を容認したコードを書こうとすると詰まることが増えた気がする
82:デフォルトの名無しさん
21/04/03 13:57:02.33 PWpcDrEf0.net
いきなりメソッドチェーンとか持ち出したのはLinqの話に絡めてか?
全然違うものだと思うが。
83:デフォルトの名無しさん
21/04/03 18:55:38.38 a2otFyvK0.net
Linqのクエリ式自体はメソッドチェーンのシンタックスシュガーじゃん
84:デフォルトの名無しさん
21/04/03 19:11:52.27 CmPk+yxPa.net
メソッドチェーンの元々の意味はvoidのメソッドをthisを返すようにして....
ってことだったんだと思うよ。
個人的にはこういう重箱の隅を突く話は好きじゃないけど
85:デフォルトの名無しさん
21/04/04 13:52:07.93 U9Ytphde0.net
>>73
純粋に、自分が知らない有用な書き方があるなら知りたいとは思うんだよな。
別スレの LINQ がらみの話題もやるかどうかは置いておいて勉強にはなったし。
もしくだんの人が出てきてくれて講釈してくれるなら専用のスレぐらいは立てる。
86:デフォルトの名無しさん
21/04/04 17:58:30.84 a8juFvNn0.net
初歩的な事かもしれませんが教えて下さい。
以下のような独自クラス「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();
}
}
87:デフォルトの名無しさん
21/04/04 19:15:49.58 LnRN74zvM.net
>>85
どうすればいいじゃなくてどうしたいのかをお前が決めろ
平均年齢なのか最大年齢なのかそれともまた別の基準なのか
グループ化に使うキーが一意に定まらないならグループ化のしようがない
88:デフォルトの名無しさん
21/04/04 19:55:19.53 m/N7RFml0.net
>>85
最低限ビルドできるコードを例に挙げろよ
89:デフォルトの名無しさん
21/04/04 19:59:05.44 gm8Ka2TU0.net
そもそもの設計ヤバない?AgeはMemberに持つのでは?
90:デフォルトの名無しさん
21/04/04 20:15:49.42 +2DTDHawM.net
デフォルトで使われる比較関数じゃ欲しい結果が得られないからGroupByに独自の比較関数を渡すか、Groupクラスに比較方法を定義しておくかのどちらか
91:デフォルトの名無しさん
21/04/04 20:17:26.34 +2DTDHawM.net
新卒研修の課題とかだろうから設計にツッコミいれてもしょうがないような
92:デフォルトの名無しさん
21/04/04 20:45:41.30 C0fdEpC00.net
初心者以前の話だよな
何がしたいか位は分かるように書けよと思う
93:デフォルトの名無しさん
21/04/04 20:52:52.48 ufNVz0O6a.net
何がしたいかはなんとなくわかるだろ
94:デフォルトの名無しさん
21/04/04 20:55:57.89 C0fdEpC00.net
>>92
動かないあれを見て分かるか?
そもそも構造すら間違ってるやろ
95:デフォルトの名無しさん
21/04/04 21:09:17.93 ghBYdtOLM.net
>>92
わかるんなら説明してくれよw
メンバーの年齢だけを保持してるグループってあまり見かけないし
96:デフォルトの名無しさん
21/04/04 21:13:12.33 xvT8M2vo0.net
俺はこういう場合、独自解釈して好きなように作る。
今回ならAgeListをソートしてカンマ区切りの文字列にして、をれをキーにする。
でGroupByだな。
過去この独自解釈が5割くらいそのまま仕様になってる
97:デフォルトの名無しさん
21/04/04 21:16:41.13 jr3tMa1na.net
>>93
>独自クラス「Group」のリスト
>このリストをクラスのAgeListをキーにGroupByしたい
List<Group> list = new List<Group>();
// なんか処理
list.Groupby(x => x.AgeList)
ってしたいって理解したんだけど違うんかな
宣言でそもそも間違ってるのは知らん
98:デフォルトの名無しさん
21/04/04 22:12:27.02 0QnJQanX0.net
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}]
99:デフォルトの名無しさん
21/04/04 22:18:00.59 LUDq5H1sM.net
>>97
C#なら?
100:デフォルトの名無しさん
21/04/04 22:23:09.43 ciXsbyqc0.net
>>97
APLなら?
101:デフォルトの名無しさん
21/04/04 22:32:47.74 glgnW2pm0.net
そんな議論はさておき、俺様が>>100を掻っ攫う
102:デフォルトの名無しさん
21/04/04 22:38:41.33 C0fdEpC00.net
Rubyガイジは無視して同じコードをちょっと書いてみた
URLリンク(paiza.io)
103:デフォルトの名無しさん
21/04/04 22:45:22.63 7UKH0ZmwM.net
ピザくいたい
104:デフォルトの名無しさん
21/04/04 22:48:28.83 ciXsbyqc0.net
この時間だからラーメンにしておきな
105:デフォルトの名無しさん
21/04/07 14:11:22.94 /xOeegWId.net
C++とJavaを業務でやっていてc#始めた初心者です。
Xamarin.Mac でmacOSのアプリを作りながら学んでるけど
恐ろしく情報が少ない…。Macでc#使う人って少ないんでしょうか?
106:デフォルトの名無しさん
21/04/07 20:43:30.57 keBvs1o20.net
そもそもXamarinで作る必要あるのかという感じがする
正直流行ってないからね
Java出来るならJavaでいいんじゃね?
もっと新しい技術ということならelectronをお勧めしておくわ
Windows限定アプリならVisualStudioでC#は楽でいいけどね
107:デフォルトの名無しさん
21/04/07 21:57:44.60 5xSMK6sJd.net
MacといえばSwiftじゃないの?
108:デフォルトの名無しさん
21/04/07 22:41:15.43 fLp1VLDK0.net
>>104
109: 人脈作りから始めよう。 objective cとcocoaの方が需要あるやろ
110:デフォルトの名無しさん
21/04/08 03:06:33.38 AfyS2Eek0.net
>>105-107
回答ありがとうございます。
マジですか。。。C#以外をお勧めされて複雑ですが
その言語も調べておきます。
まだC#学習して1ヶ月程度ですが機能が盛り沢山で面白いので
Macでも普及して欲しいですね(´・ω・`)
111:デフォルトの名無しさん
21/04/08 03:47:40.98 mAebMgXVd.net
機能は盛りだくさんでもPythonやJavaの方が人気なんだよね。
それぞれ良し悪しや向き不向きがあるだろうけど。
112:デフォルトの名無しさん
21/04/08 04:49:18.36 SlRPMViD0.net
今、統計的な素養があってPytorch触れると
月単価150万からだもんなぁ。
113:デフォルトの名無しさん
21/04/08 14:03:49.02 3r6MsATA0.net
>>108
どうしてもC#がいいなら採用出来るかどうかは別にしてもUnityという手はあるけどね
114:デフォルトの名無しさん
21/04/08 14:17:05.70 d++ONVxC0.net
>>110
TensorFlowでもええん?ダメなん?
115:デフォルトの名無しさん
21/04/08 16:37:37.25 kfGdZKXS0.net
これってDLL importとかしなくなるってことですか?
URLリンク(www.atmarkit.co.jp)
116:デフォルトの名無しさん
21/04/08 17:10:27.78 eSL736QZ0.net
>>113
MSが共通Wrapper作りましたってことでDLL importは必要なくなるし、アンマネージ
部分についてもお約束を守ればよくなるみたいだけど、サンプル見ると色々手続きが
面倒臭そうで使い勝手は良くなさそう
117:デフォルトの名無しさん
21/04/08 17:48:44.06 4s+x/uBpa.net
void*とかobjectにするしかないだろうしアホみたいなオーバーロードの山になるだろうし
始まる前から破綻の予感しかしない
っていうか何で今更
118:デフォルトの名無しさん
21/04/08 18:56:34.79 HxWbcod1M.net
そもそもガンガンWin32API使うなら素直にC/C++使うし、C#だとちょっとつまみ食いする程度にしか使わんから今のままでもいいや
119:デフォルトの名無しさん
21/04/08 19:11:09.64 7Q+Xoj4V0.net
apiで使う構造体とかの面倒くささが無くなるならいいんじゃない?
120:デフォルトの名無しさん
21/04/08 20:07:04.02 SlRPMViD0.net
>>112
需要と供給で単価は決まるからなぁ
121:デフォルトの名無しさん
21/04/08 20:11:07.35 Rugi+GK60.net
Cじゃない言語でOS作り直してくれよもう
122:デフォルトの名無しさん
21/04/08 20:20:01.9
123:6 ID:SlRPMViD0.net
124:デフォルトの名無しさん
21/04/08 21:41:44.08 oExYloS10.net
OSのようなハードに近いレベルの言語となると、Rustが流行ってるのかな。
C#でそういうのも出来ると良いのにね。
125:デフォルトの名無しさん
21/04/08 22:08:07.77 5uUtmx9J0.net
>>113
URLリンク(dot-sharp.com)
Shell32.dllを使うとき、com参照を追加するだけでC#のライブラリと同じ程度の手軽さで使えました
これが増えるってならいいんじゃないかな
126:デフォルトの名無しさん
21/04/09 01:46:32.36 tMeqLsRz0.net
>>118
PyTorchはずっと不人気だったのに
今調べてみたら、ここ二年ぐらいでTensorFlowと拮抗してんな
ま、いいや、どっちか使えりゃ問題ないだろ
127:デフォルトの名無しさん
21/04/09 04:55:29.41 dxRxz0Yw0.net
C#をネイティブコンパイルできうようにすればいいだけだと思うが。
なぜ回り道をするのか
128:デフォルトの名無しさん
21/04/09 05:03:11.50 mVBnPI5w0.net
>>123
無理せずPaddlePaddle使ってたんでえぇで
日本では需要ないけど
129:デフォルトの名無しさん
21/04/09 10:06:28.56 tMeqLsRz0.net
>>125
PaddlePaddleはダメダメだな
日本だけじゃなくて、世界でもダメな奴
130:デフォルトの名無しさん
21/04/09 15:11:32.43 Sg2n4mcl0.net
AI関連は、何を使えるかよりどこの博士号を持ってるかの方が重要なんだろ?
131:デフォルトの名無しさん
21/04/09 19:20:58.42 mVBnPI5w0.net
CNTKの求人って見ないな
URLリンク(www.bigdata-navi.com)
132:デフォルトの名無しさん
21/04/10 07:46:10.33 qc4cGBnV0.net
以前画面解像度切り替えのツールを作った時にvanaraといwin32apiのラッパー使ったな
構造体も用意してあって簡単に使えた
133:デフォルトの名無しさん
21/04/10 09:05:48.65 Zw7mVk6D0.net
win32って一々ラッパー挟まずとも実はC#側で結構調節してくれるんだよな
GetProcAddressみたいなANSI版しかないような関数でもstringそのまま放り込んでもちゃんと機能してびっくりした
134:デフォルトの名無しさん
21/04/10 20:01:50.03 00IQtlCT0.net
人はそれをマーシャリングと呼ぶのである
135:デフォルトの名無しさん
21/04/10 21:24:18.51 mb0ile8c0.net
a={1, 2, 3, 4}という配列が与えられて
更に10進数x=5が与えられた時、5を2進数にして101なので
(最下位ビットがa[0]になります)
配列の要素1と3の和を出力せよという課題が出ました
var r = 0;
for (int i = 0; i < a.Length; i++)
if ((x & i << 1) == 0)
r += a[i];
で求める答えが出そうだと思ったのですが
4ではなく3が出ます。どこが間違っているんでしょうか
136:デフォルトの名無しさん
21/04/10 22:21:05.25 ZQT/KDjfa.net
>>132
わざと間違えてない?w
static int GetBit(uint x, int position)
{
return (int)((x >> position) & 1);
}
137:デフォルトの名無しさん
21/04/10 22:33:06.71 mb0ile8c0.net
>>133
その書き方だと通るんですよね..
下のように解説してるサイトがあったのでそう書いてみたのですが
なんかおかしいんです
ビット bit に i 番目のフラグが立っているかどうか if (bit & (1<<i))
138:デフォルトの名無しさん
21/04/10 23:55:58.75 GWhpBmtX0.net
え。
>if ((x & i << 1) == 0)
>if (bit & (1<<i))
139:デフォルトの名無しさん
21/04/11 00:13:20.51 Zc34G5gB0.net
あ、やっと気づきました
bit操作理解せずに、コピペで済ませてた弊害が出ました
ありがとうございました
140:デフォルトの名無しさん
21/04/11 00:18:38.88 gSPWaQTLa.net
>>134 それはたぶんC#ではなくてCのコード 「bit & (1<<i)」この式の型は何? Cと違ってC#のifの()の中の式はboolでなければダメ まあこれは初心者が知らずに混乱しても仕方ないかもしれない。 でも>>132のコードの何が間違ってるかは初心者でも自分で考えれば分かるでしょ。 とりあえず問題を小さい問題に分けて分割統治することから始めましょう。 >>133はそういう意味で書きました。
142:デフォルトの名無しさん
21/04/11 06:53:51.52 +8zEqMg4d.net
Typescriptじゃインターフェース名にI(アイ)をつけないのが推奨されてるけど、
C#もそうなったりするのかな。
143:デフォルトの名無しさん
21/04/11 08:10:38.23 JfLfucqJ0.net
破壊的変更を.NETユーザーが受け入れてくれるなら良いんじゃね
144:デフォルトの名無しさん
21/04/11 08:23:58.76 DcU1Z0EW0.net
付けろと言ってる
URLリンク(docs.microsoft.com)
145:デフォルトの名無しさん
21/04/11 12:26:31.31 y6cz0vLM0.net
C#でIが取れなかったのはCOMの影響があったからとかなんとか
今更C#の方針を変えることはないだろうね
146:デフォルトの名無しさん
21/04/11 13:01:27.23 +MjFaIzva.net
エディタで色分けしてくれればいclass, struct, interface, abstract
147:デフォルトの名無しさん
21/04/11 17:06:24.47 LOxmuPpta.net
プリフィクスのIは字面からインターフェイスだと分かるようにしたい、という強迫神経症的な動機というより、
単純に名前のバッティングを機械的に回避できる点が大きいんじゃないの?
148:デフォルトの名無しさん
21/04/11 17:51:20.56 v+npbxj+0.net
どうせインターフェースにIを付けなくなっても、実装クラスのいい名前が思いつかずになんとかImplってサフィックスつけるんだろ?
149:デフォルトの名無しさん
21/04/11 19:02:53.13 jqn7J9El0.net
Delphiだと、クラスにはTypeのT、パラメータにはFieldのFを付けるんだよね。
InterfaceのIはその名残なのかな、とか思ったんだよ。
そして、そういうのは無くしていく傾向なのかな、と。
150:デフォルトの名無しさん
21/04/11 20:39:38.45 9ef64+I30.net
>>144
付けないよ
そんなの付けるのJavaやってたやつくらいやろ
151:デフォルトの名無しさん
21/04/11 21:55:51.16 XlCnUXyn0.net
命名規則で一番上手くいってるのはC#と思う
インターフェースにプリフィックスIをつけるから命名で困った時にImplとかやらなくてすむし
プロパティ名は大文字で始めるから小文字で始めるローカル変数とぶつかりにくいし
152:デフォルトの名無しさん
21/04/11 22:00:03.96 XlCnUXyn0.net
で、最近は名前がさらぶつかりにくくなるようにメンバ変数はm_を付けるスタイルに個人的に変更した
153:デフォルトの名無しさん
21/04/11 23:11:51.93 Jjs5QDLf0.net
キャメルケースwww
154:デフォルトの名無しさん
21/04/11 23:30:29.10 gtdLzQZJ0.net
まあVSの恩恵でかいよなあって
155:デフォルトの名無しさん
21/04/12 00:03:30.52 5s47Rc9D0.net
>>147
こういう適当な名前を付けるやつがいることにピキってるっぽいね
適切な名前にすりゃブッキングしねえから名前付けをサボるなってことらしい
156:デフォルトの名無しさん
21/04/12 00:35:55.51 z0nrn9OY0.net
なるほどなぁ
ちなみにIListはなんて名前にすればより適切だと思う?
157:デフォルトの名無しさん
21/04/12 00:41:39.46 JfC2SlE/0.net
おまえ馬鹿か
たいていぶつかるのはローカル変数や外部に公開しないクラス名だろ
JavaのImpl使うのだって、内部クラスや非公開や内部のエンジンクラスとか
158:デフォルトの名無しさん
21/04/12 00:43:02.12 JfC2SlE/0.net
そんなのに適切な名前なんかブッキングできねぇよカス
159:デフォルトの名無しさん
21/04/12 04:43:49.73 FczQKoXE0.net
>>152
Microsoftの推奨する命名規則を参考にすれば良いんじゃない?
つまり、I付きPascal形式でスペル省略不可のフルネームで名詞を表せば良いのかな。
自由に付けても良いけど、.Net Frameworkと調子を合わせると違和感が無いと思う。
160:デフォルトの名無しさん
21/04/12 06:14:41.91 nRLgqnE00.net
うちの会社、昔から変数名の1文字目にデータ型の略称(?)をつける文化みたいで、
intのListがiListだったり、longのListがlListだったり、ちょっと困惑した。
161:デフォルトの名無しさん
21/04/12 06:47:12.36 HnVQKAJ10.net
>>156
郷に入っては郷に従え!
君の使って良い変数はI150からI300までな!
そこはFortran出身者の支配する村であった
162:デフォルトの名無しさん
21/04/12 07:54:06.97 lF7oqfJtD.net
MSの.NETプログラムにおける命名ガイドラインな
URLリンク(docs.microsoft.com)
163:デフォルトの名無しさん
21/04/13 07:46:13.80 FVP0aIINd.net
皆さんコメント入れる? 命名規約とか守ってたらコメント要らないような気がしてきた。
164:デフォルトの名無しさん
21/04/13 08:25:02.43 lZomqcCZ0.net
>>159
いわゆるドキュメンテーションコメント的なものは入れる。
あと、実例みたいなの。
//引数にXXとYYとZZを渡したら、戻り値はAAになる。
165:デフォルトの名無しさん
21/04/13 08:48:00.08 cGgJVHDFa.net
>>159
入れる
166:デフォルトの名無しさん
21/04/13 09:02:05.69 t+pv5GMk0.net
visualstudioだとクラスやメソッドの1行前に///入力で自動補完されるからそれは使ってるかな
167:デフォルトの名無しさん
21/04/13 09:08:35.29 gWbnUgF3a.net
日付、所属、名前、旧コードはコメントに残すのが常識でしょ
168:デフォルトの名無しさん
21/04/13 09:19:57.30 Ehg3izfw0.net
ギャグかな?
169:デフォルトの名無しさん
21/04/13 11:05:10.28 fFoE8jgx0.net
バージョン管理ツール使ってるのに旧コード残すやつにはイラッとする!
特に不具合のコードをコメントアウトして残されてると、当てつけなのかと思ってしまう
170:デフォルトの名無しさん
21/04/13 12:14:15.55 YrXVy+xO0.net
コメントって入れるものだったんだ。
書くものだと思ってた。
171:デフォルトの名無しさん
21/04/13 12:48:28.16 ZNHsyNhsD.net
>>159
コメントには「なぜ」を書くんだよ
172:デフォルトの名無しさん
21/04/13 14:24:24.21 ovEIWddm0.net
なぜこんなコード書いたんですか?と書いて旧コードを残すわけですね
173:デフォルトの名無しさん
21/04/13 14:40:11.12 cQExUzr8M.net
168が仕様を理解せずおかしな実装を
したので辻褄合わせの辞書を実装しました by 167
174:デフォルトの名無しさん
21/04/13 16:02:36.93 ct/xqAfva.net
>>159
コメントは基本的には必要悪なので必要がない限り書かないのが正しいけど、
少なくともパブリックメンバーについては単純に「必要」かもしれんね。
ないと書いた人の意図を変に誤解してないか不安になって
結局中のコードを覗きたくなるかもしれない。
そんなことしなくて済むためのカプセル化のはずなのに
175:デフォルトの名無しさん
21/04/13 17:44:15.92 Kc5TdA4a0.net
1年後に自分の書いたコード読んで、何をやっているかちゃんと理解できるならば
書かなくてもよいんじゃないかなw
176:デフォルトの名無しさん
21/04/13 18:24:41.93 arsZDomXD.net
>>171
何をやってるかなんてコード読めば解るんだから、
そんなことのためにコメントは不要
「なぜ」そんなメソッドが必要か、
「なぜ」そのデータ構造やアルゴリズムを選択したか
なんていう、コードから見えない情報を記すのがコメント
177:デフォルトの名無しさん
21/04/13 18:31:59.11 KJ4k5XjpM.net
MS含めアメリカ製の高品質なコードって「なぜ」のコメントが無茶苦茶充実してるよな
日本だとだいたい // 〇〇処理 みたいな無意味なコメントか、ほとんど無いかのどちらか
SaaSとか一般的にレベル高いと思われてるはずの現場では、だいたい後者のパターンでほぼコメントが無い
根本的に論理的な言語能力に差があるんだろうなと思わざるを得ないわ
178:デフォルトの名無しさん
21/04/13 18:37:50.47 781G2uFla.net
コードレビューでコメントを書けって指摘されるじゃんw
179:デフォルトの名無しさん
21/04/13 18:43:17.63 /XAQKj46M.net
コメントなんて要らないんだよ
コミットログを見ればいいんだから
180:デフォルトの名無しさん
21/04/13 18:48:56.00 2mKMjuav0.net
private なプロパティってフィールドにするべきですか?
181:デフォルトの名無しさん
21/04/13 18:55:44.96 ufUQjDoVa.net
>>172
言いたいことは分かるけど「何をやってるかなんてコード読めば解る」というのは
あくまで理想であって常にそうできるわけじゃない。
何をやっているか書いてくれた方がありがたい場合もあるよ。
>>176
そんなことをルールで強制する理由はないと思うよ。
182:デフォルトの名無しさん
21/04/13 19:02:46.98 arsZDomXD.net
>>177
何をやってるかがコメントとコードで乖離してる事があるのが問題
英語でthirteen daysって言ってるのに、
字幕には2ヶ月って書かれる戸田奈津子の翻訳みたいな事が起きうる
183:デフォルトの名無しさん
21/04/13 19:08:03.49 KJ4k5XjpM.net
>>178
逆に、コメントを書かせることでコメントを書きやすいコードになるという面はあると思うよ
クラスやメンバの責務が十分に明確ならコメントと実態の乖離なんてそう起きるものではない
184:デフォルトの名無しさん
21/04/13 19:14:53.40 ufUQjDoVa.net
>>178
コメントはバグる可能性があるからコメント書くな、
なんて言ったらバグる可能性があるのはコードも同じなんだから
コードも書くなってことになっちゃうよw
「不必要なコメントは有害無益」は正しいけど、それは
必要なコメントを否定する根拠にはなりえない。
185:デフォルトの名無しさん
21/04/13 19:40:32.77 arsZDomXD.net
>>180
コメントがバグるって話じゃなく、
書いた人の「つもり」がコメントとして残るのが危うい
実行時にどう動くかを決めるのは、コメントではなくコードなのだから、
コメントを読んでコードを読んだつもりになれるのも危うい
186:デフォルトの名無しさん
21/04/13 19:42:57.23 arsZDomXD.net
入門書の多くがコメントの書き方を蔑ろにしてるのが元凶だと思うんだよね
ほぼ単なるメモ機能としての記載しかされてない
187:デフォルトの名無しさん
21/04/13 19:46:12.88 arsZDomXD.net
続いちゃったので議論スレに移します
スレリンク(tech板:82番)
188:デフォルトの名無しさん
21/04/13 19:48:22.85 DZHUx02Q0.net
「コードを読めば何してるか分かる」のだから、メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
・・・たまにブチ切れたくなることがあるけどな。
189:デフォルトの名無しさん
21/04/13 19:53:58.09 1xWi7ZbJ0.net
>>182
あれは解説を見ないとプログラムが理解できない人向けの本なんだからそれをコメントに書くのは当たり前じゃん
190:デフォルトの名無しさん
21/04/13 20:27:38.26 vPRWCVoWM.net
>>184
> 「コードを読めば何してるか分かる」
ならコメントなんていらんだろw
191:デフォルトの名無しさん
21/04/13 20:43:00.23 YIOTduDg0.net
>>172
YOLOv5をC#に移植して内容を説明しては
くれまいか?
そんなに簡単な話なら誰も論文なんて読まないよ~ :-p
192:デフォルトの名無しさん
21/04/13 21:22:13.67 51HoYqEa0.net
ドキュメント代わりにしてるから入れる
///<summry>
の形式のやつ
doxygenで出力してモジュール設計書として納品して一丁上がり
193:デフォルトの名無しさん
21/04/13 21:30:50.70 cA2aWYvl0.net
クラス図もシーケンス図もねぇのになにいってんだこのバカ
194:デフォルトの名無しさん
21/04/14 05:43:13.79 C2CdPm+G0.net
>>186
だから要らないって話だろ
var hoge = items.First();
で最初の要素を取得するなんてコメントは要らん
記載するならwhy何故取得するのかだけ書けばいい
もし動作について記載したくなったなら、それはメソッド化するとかを検討した方がいい
195:デフォルトの名無しさん
21/04/14 06:13:30.67 NHvKxhVFM.net
>>190
だからと言って
> メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
ってアホだろ、って言う指摘なんだが…w
196:デフォルトの名無しさん
21/04/14 07:02:48.39 C2CdPm+G0.net
それはアホだけどコメント入らないも的外れって指摘なんだが
197:デフォルトの名無しさん
21/04/14 07:55:29.84 IRkO9LrOM.net
>>192
>>184の全文読んでから出直してこいよw
198:デフォルトの名無しさん
21/04/14 10:15:09.46 +thTLvERM.net
宗教が合わないと作成者本人が綺麗に作ったつもりでも読みにくくてしょうがないからブロック毎に動作の概要ぐらいはコメントで書いといて欲しいわ
199:デフォルトの名無しさん
21/04/14 10:31:27.70 GNdqlmcr0.net
なんだよ、せっかく議論スレに移ったのについてきてねーじゃん
正直者が馬鹿を見る世界
もう移らん、絶対移らん(笑)
俺はコメント入れてほしい派
読めば判るっつってもさ、
コード書いてる本人ですら
何やってるか分かってない場合もあるからな(笑)
せめてコメントで
「ここではこんなことをしてる(つもり)」
って書いてくれら「全然そうなってないだろ!」と突っ込める
200:デフォルトの名無しさん
21/04/14 11:35:41.20 pb7R6DhS0.net
xxxInternal
xxxPublic
xxxOverride
201:デフォルトの名無しさん
21/04/14 11:40:36.85 tyZiRMgdM.net
パワーポイントやエクセル内の文字列を検索するクラスってありますか?
windowsの検索窓ではなく…
202:デフォルトの名無しさん
21/04/14 11:48:50.60 RaIqb6oIM.net
>>197
Windows Searchを使えば検索窓と同等の機能がプログラムから使える
203:デフォルトの名無しさん
21/04/14 11:53:46.39 tyZiRMgdM.net
>>198
素早い回答ありがとうございます!
そんなのあったのですね!検索力不足を痛感しました…
調べてみます。
204:デフォルトの名無しさん
21/04/14 14:15:46.62 MmF8o4I50.net
議論スレに移れないってことは、
コメント付けたところで読めない無能だから無意味って証明になったな
205:デフォルトの名無しさん
21/04/14 14:21:26.07 IGhCcGj6a.net
>>200
何度も言うけど、真の無能はそれが自分を棚上げした物言いである、
という簡単な事実に気づく程度のこともできないお方だよ。
これ割とマジで大丈夫かと思うわ
206:デフォルトの名無しさん
21/04/14 14:23:38.27 IGhCcGj6a.net
ついでに、これも何度も言ってるが、そんなくだらない「交通整理」に誰も従わないのは
「交通整理」の欺瞞性とそれを主張している人間の卑しい動機に普通は気が付くから。
207:デフォルトの名無しさん
21/04/14 17:19:19.99 gLzfQxv5D.net
>>202
卑しい動機って何?
208:デフォルトの名無しさん
21/04/14 17:43:05.15 fKew9GPPM.net
他人を見下し自分が主導権を握りたいという自分勝手な承認欲求が行動原理
209:デフォルトの名無しさん
21/04/14 17:58:45.23 d4l1z4pL0.net
>>202
暴れて飛行機から下ろされ
飲食店で入店拒否されて暴れて警察を呼ばれ
警察を殴った誰かはTwitterで同じこと言ってたなw
210:デフォルトの名無しさん
21/04/14 19:48:09.33 5dAhuQZZ0.net
>>193
その 184 だけど。w
「コードを読めば何してるか分かる」な人は、そもそもコメントがなくてもいいんだから、書かれていても無視すればいい。
コメントが欲しい人は、コメントの弊害(メンテ忘れとか)の現状を承知の上でそう言ってるんだから、そもそも問題ない。
つまり、コメントがいる/いらないの論争は無意味だからやめとけってことなんだよ。
その上で「コードを読めば何してるか分かる」ように丁寧な書き方を目指せば済むことじゃん。
まあ自分はブロックと言うか処理単位でのコメントは出来るだけ書くけど。
211:デフォルトの名無しさん
21/04/14 19:57:35.09 un1gf4OwM.net
だってコメント邪魔なんだもん
212:デフォルトの名無しさん
21/04/14 20:17:08.74 22Gnyx3vM.net
・コメントがあるとノイズになり視認性が落ちる
・コメントには嘘が混ざっていたり情報が欠落していることがあるので常にコードとコメントの整合性を確認しながら読まなくてはならない
・コメントに嘘を混ぜたり情報を欠落させないために細心の注意を払わないとコードを更新できなくなる
213:デフォルトの名無しさん
21/04/14 21:19:55.23 5dAhuQZZ0.net
これは茶化しで書くけど。
コメントがなければストレスなく読める美しいコードなんて見たことないなあ。
214:デフォルトの名無しさん
21/04/14 22:05:49.52 MpN5sHI3M.net
>>206
> つまり、コメントがいる/いらないの論争は無意味だからやめとけってことなんだよ。
誰もそんな論争してませんよ…
もしかして>>186をコメント不要という主張だと思ったのか?w
215:デフォルトの名無しさん
21/04/14 22:33:48.02 5dAhuQZZ0.net
そーなのか。
じゃあバカな私に分かるようにおまえ様の主張をきちんと述べてみてくれ。
216:デフォルトの名無しさん
21/04/15 07:44:33.23 UZqM7amYM.net
>>211
>> メンテ忘れで誤ったコメントが残ったとしても問題ないとも言える。
> ってアホだろ、って言う指摘なんだが…w
217:デフォルトの名無しさん
21/04/15 08:01:46.43 PPG2Aw5dM.net
改修履歴をコメントで残すとかいうのさえなけりゃ
他のコメントはコード読むのに邪魔になりはしない
218:デフォルトの名無しさん
21/04/15 08:08:37.68 OPERSbUtD.net
>>211
>>183
219:デフォルトの名無しさん
21/04/15 09:10:14.90 UMT499lla.net
必要だからどの言語もコメント機能が有るのでは?
220:デフォルトの名無しさん
21/04/15 10:39:52.56 V+OBz7ue0.net
言語ではないけどjsonってのが有ってだな
221:デフォルトの名無しさん
21/04/15 11:20:52.75 ZYoZizjK0.net
>>209
ほんこれ
222:デフォルトの名無しさん
21/04/15 11:28:50.53 VIeSEXX8M.net
>>216
あれなぜコメントの機能を持たせないのか不思議だわ
{
"$comment": "コメント"
}
みたいな形でコメント書くという方法もあるみたいだけど気持ち悪いし
223:デフォルトの名無しさん
21/04/15 11:44:04.13 V+OBz7ue0.net
最初に作った人が「コレはデータだからコメント不要」って取り付く島もないんだとか
VsCodeの設定ファイルみたく独自で拡張してjsonもどきになっているよな
224:デフォルトの名無しさん
21/04/15 20:44:07.32 ggX3n8E30.net
jsonなんて人間の読めるもんじゃないと思う
ダブルコーテーションが目にキツイ
225:デフォルトの名無しさん
21/04/15 20:56:31.12 yv1G2zip0.net
>>218
JSON自体は仕様がもう確定してるから。
jsoncとかJSON5とかRelaxed JSONとか拡張した別仕様ならある。
226:デフォルトの名無しさん
21/04/15 23:45:13.23 025iJfef0.net
json便利だけど、protobufを使うようになってから使用頻度減ったなー
227:デフォルトの名無しさん
21/04/16 21:25:28.58 UPAcC/fc0.net
1つの一連の処理で一度に10回以上は失敗する可能性があるんだけど
例外って複数ストックできる?
228:デフォルトの名無しさん
21/04/16 21:36:31.59 WuJ5uN/Q0.net
できるよ
ValidationでエラーためてIsValidで確認するのと同じ
229:デフォルトの名無しさん
21/04/16 21:41:19.41 AE+nXjed0.net
try{
...
}catch(Exception ex){
exceptions.Add(ex);
}finally{
continue;
}
こんな糞コード見たことないけどな。
230:デフォルトの名無しさん
21/04/16 21:41:25.62 UPAcC/fc0.net
デーモンコアと
マイナスドライバーを設定
try{
while(米が勝つまで回す){
①測る
②マイナスドライバーを動かす
}
}
finally
{
③デーモンコアを離す
④if(青い光りが見えた){
⑤みんなを退避
⑥逃げる
⑦救急車を呼ぶ
⑧遺書を書く
}
}
大体こんな処理なんだけど
③~⑧は途中で例外起きても
最後までやってほしいらしい
っていう一連の処理なんだ
どのエラーや例外も全部保存したい
>>224
なんかサンプルないですかね?
231:デフォルトの名無しさん
21/04/16 21:53:27.03 XmBIRBCo0.net
溜めておいた例外を最後にAggregateExceptionのInnnerExceptionsにセットして投げれば
232:デフォルトの名無しさん
21/04/16 21:54:23.20 UPAcC/fc0.net
>>227
なんかそういう処理の書き方の流れが知りたい感じです
233:デフォルトの名無しさん
21/04/16 22:18:19.07 57BTnFcs0.net
年内に死にそう
234:デフォルトの名無しさん
21/04/16 22:48:51.32 yteCGRud0.net
NlogつかってファイルかDBに残すのが現実的じゃね?
URLリンク(nlog-project.org)
こんなやつ
235:デフォルトの名無しさん
21/04/17 00:39:50.34 v4ZcCEOKa.net
>>223
失敗してても処理が継続される時点でそれを例外を呼ぶべきか、そもそも疑問に感じるね。
236:デフォルトの名無しさん
21/04/17 01:02:22.39 v4ZcCEOKa.net
class DaemonSequenceException:Exception
{
public Exception FooResult { get; set; }
public Exception BarResult { get; set; }
....
}
とかみたいに他の部分の成否と無関係に実行できる各部分に名前をつけて、
その部分の例外をプロパティーで持つとかするのかね知らんけど
237:デフォルトの名無しさん
21/04/17 10:56:45.87 F6GtSG/H0.net
DirectoryInfo.GetDirectories は例外を送出するけど処理は継続する
238:デフォルトの名無しさん
21/04/17 20:32:02.82 mfYtpggw0.net
まあ、結論としては
c#的にはこういう複数の処理が失敗するまたは終了処理も失敗するケースは言語的には完全に想定外ってことですかね
239:デフォルトの名無しさん
21/04/17 20:42:29.21 IkH2FR7eM.net
>>234
そもそも一体何をしたいのかさっぱりわからん
記録したいだけなのか失敗毎になにか処理したいのか
240:デフォルトの名無しさん
21/04/17 20:47:08.33 mfYtpggw0.net
>>235
1メソッドでたくさん失敗するんです
でも例外って1つしか返せないじゃないですか?
241:デフォルトの名無しさん
21/04/17 20:47:45.31 7MTKb57l0.net
>>234
地道に処理毎にtry{}catch(){}で囲めばいいだけ
言語のせいにするのはお門違い
242:デフォルトの名無しさん
21/04/17 20:50:06.01 mfYtpggw0.net
>>237
そもそも例外で返すのが間違いということでしょうか?
243:デフォルトの名無しさん
21/04/17 20:56:09.74 7MTKb57l0.net
>>238
<1>
var exceptions = new List<Exception>();
<2> (処理の数だけ作る)
try
{
処理
}
catch( Exception e )
{
exceptions.Add( e );
}
<3>
throw new AggregateException( exceptions );
244:デフォルトの名無しさん
21/04/17 20:59:45.02 mfYtpggw0.net
>>239
ありがとうございます
それって受け側ってどう書くんでしょうか?
245:デフォルトの名無しさん
21/04/17 21:15:57.36 PG7156wz0.net
>>240
受け側って何を指すのかわからないけどエラーをcatchしておいて投げなおしているだけじゃね
>>230の考え方でエラー起こるたびに「~の処理中に~のエラーが起きました」って全部記録する形から作っていけば?
エラー発生しても続行させる処理の方が大変になると思うしとりあえず一通り作ってみた方がいい
246:デフォルトの名無しさん
21/04/17 21:17:13.40 8nmJAkjBM.net
>>236
だから受け側で何をしたいんだよ…
247:デフォルトの名無しさん
21/04/17 21:20:05.07 mfYtpggw0.net
>>241
普通に
try
{
}
catch(exception ex)
{
}
でaggregateexceptionってキャッチできますか?
248:デフォルトの名無しさん
21/04/17 21:23:05.33 gq87BRHm0.net
簡単なサンプルで試してみればいいでしょ…
249:デフォルトの名無しさん
21/04/17 21:24:17.27 3+8Yd0vAa.net
たぶん欲しいのはエラーのログなんだろうね。
あるいはPOSTでやるようなチェックリスト?
例外オブジェクトをエラーを表す目的で使ってもいいとは思うけど、
何がしたいのか目的をはっきりさせずに「例外をストックできるか?」とか質問するから
みんな混乱する。
250:デフォルトの名無しさん
21/04/17 21:38:41.80 8nmJAkjBM.net
なぜかこういう人は何をしたいのか書かないんだよな…
まあもういいや、相手もしてもしょうがなさそうだし
251:デフォルトの名無しさん
21/04/17 21:38:56.54 7MTKb57l0.net
>>243
それで出来るけど、catch( AggregateException ex )で受けた方が
AggregateException.InnerExceptionsを参照しやすくていいんじゃない
252:デフォルトの名無しさん
21/04/17 21:42:46.43 mfYtpggw0.net
>>246
正直
俺もよくわからない(笑)
253:デフォルトの名無しさん
21/04/17 21:43:49.75 mfYtpggw0.net
>>247
ありがとうございます
受け側はなんの例外がくるかしらないんですよ多分
254:デフォルトの名無しさん
21/04/17 21:51:17.10 6GAIvEwc0.net
例外を見ればどの処理で発生した例外なのか確実に分かる場合はいいけど
そうじゃないならList<Exception>だとたぶん困るよね
255:デフォルトの名無しさん
21/04/17 22:17:04.15 svTSVNg/M.net
>>250
どこで発生した例外かを知りたいなら例外にその情報を入れとけば良いだけだろ
256:デフォルトの名無しさん
21/04/17 22:42:26.62 6GAIvEwc0.net
>>251
>>239の例ではそれをやってないから困るんじゃねって話なんだけどさ
257:デフォルトの名無しさん
21/04/17 23:35:25.92 svTSVNg/M.net
>>252
ExceptionでもSourceに入れるとかMessageの一部に入れるとかやりようはいくらでもあるだろ
258:デフォルトの名無しさん
21/04/17 23:49:44.95 CX6JLVJZM.net
エスパー回答すると、Disposeをしっかり作ってusingを使え、が顧客が本当に欲しかったもの
259:デフォルトの名無しさん
21/04/18 00:46:37.58 hpbx6fns0.net
C#の話と関係無いかもしれませんが、パッケージの開発環境って今の時代何がありますか?
完全にオフラインで使える開発環境とかって無いんでしょうか?コマンドプロンプトしか無いんでしょうか?
260:デフォルトの名無しさん
21/04/18 01:09:20.83 IgLv47etM.net
落ち着け(´・ω・`)
パッケージ、開発環境、コマンドプロンプト
全然話が繋がっていない
261:デフォルトの名無しさん
21/04/18 08:55:30.53 v8qpskqd0.net
開発環境と言われても困るな
聞きたいのはここら辺?
URLリンク(it-kyujin.jp)
262:デフォルトの名無しさん
21/04/18 18:43:20.44 H0K908230.net
なんとなくエスパーすると、開発ソフトをインストールさえすれば、その後はネット非接続で何でも開発出来る環境が理想ってこと?
なら、たぶん無い。
.net sdk使って、標準ライブラリだけ使うなら出来るんかな?
結局必要なライブラリやらランタイムをDLするか、他のPCでDLして開発PCに入れる事になりそうだけど。
263:デフォルトの名無しさん
21/04/18 18:52:54.76 qPyS0oex0.net
>>258
待て待て、標準ライブラリだけでもオフラインで開発できるなら、回答しては「Yes」じゃないか?
264:特に、その「他のPCでDLして開発PCに入れる事になりそうだけど」が出来るんだしさ >>255 目的を話せ 俺のエスパー能力をフル発揮すると、 セキュリティ上、スタンドアローンで動かさんといかんPCがあって、そこで開発したいだよな?
265:デフォルトの名無しさん
21/04/18 21:38:47.12 hpbx6fns0.net
>>258
ありがとうございます!!!
環境を自分で作る以外ないんですかね。無謀すぎますね。
コンパイラ作るわけじゃないですからね統合環境は。
>>259
そうそう単にセキュリティの心配です。
オフラインだと全く外部に漏れる心配ないわけじゃないですか。
めちゃくちゃ安心するじゃないですか。
何でインターネットに繋いでないとプログラミング環境が整わないような
状況なんでしょうか?どう考えたってオフラインのほうがよくないですか?
266:デフォルトの名無しさん
21/04/18 23:39:25.09 svx6jcyS0.net
今はネットワーク繋いでなんぼの時代だから
267:デフォルトの名無しさん
21/04/18 23:42:54.47 4BU0O/MkM.net
そういうセキュリティの気にし方をするのであれば、普段使いのPCとは別に
個人情報を一切入れないPCを1台用意して開発勉強専用にするのが一番安心できると思うよ
外に漏れて困るようなレベルのコードを書くならダメだけどさ
というかMicrosoftDocsやGitHubやStackOverflow/Qiitaとか一切閲覧できない環境で
NuGetやNPMに登録されてる出来合いのライブラリもまったく利用しない縛りを入れて
自分の能力だけで1から100までコードを書けるなんてすごいなあ
俺にはそんな縛りプレイしてたらとてもじゃないけど開発にならないや
268:デフォルトの名無しさん
21/04/19 01:35:18.62 X+u8pzLd0.net
インターネットにつながっていないが故に管理がおろそかになってパッチ適用がされない弊害の方がやっかい
日立のランサムウェアなんかはまさにそれ
269:デフォルトの名無しさん
21/04/19 01:49:10.86 c6NDAp6p0.net
構造体(値型)を関数の参照渡し以外で、参照する方法ってありますでしょうか?
配列の構造体にアクセスするコードを書いているのですが、
逐一配列の添字計算が入るのも嫌なので避けたいと思っています。
添字の数は関数の中では変わりません。
今は関数の参照渡しで使っていますが、他に方法は無いのかなと思いまして。
270:デフォルトの名無しさん
21/04/19 02:02:38.37 Kd9UEe0s0.net
>>264
refローカル変数じゃあかんの?
271:デフォルトの名無しさん
21/04/19 02:03:15.10 lMV2Jqgd0.net
>>264
理想形が見えねぇ
272:デフォルトの名無しさん
21/04/19 02:06:16.22 4lrHWi0u0.net
配列の構造体って何?
273:デフォルトの名無しさん
21/04/19 02:06:36.98 XVH2We7ia.net
>>264
策士策に溺れてはいけない
愚直に一時変数を使いましょう
274:デフォルトの名無しさん
21/04/19 02:14:43.49 c6NDAp6p0.net
>>265
ref ってローカル変数に使えるんですね!
前に軽く試した時には右辺値にしかrefを記載してなかったので、
左辺の定義にもrefを記載すれば行けました。
有難うございました!
275:デフォルトの名無しさん
21/04/19 03:18:25.46 RtpbkBzw0.net
オフライン環境での開発だけど、
VS Community2019のオフラインインストーラをダウンロードして
オフライン環境に持ち込んで使ってる
c#でフォームのデスクトップアプリしか作らんので特に困ってない
276:デフォルトの名無しさん
21/04/19 07:43:09.06 rq760clV0.net
>>264
var p = &array[5];
277:デフォルトの名無しさん
21/04/19 07:51:00.81 trWXRHySM.net
ゆう君みたいにCSCで開発するのだ
278:デフォルトの名無しさん
21/04/19 08:22:30.53 X+u8pzLd0.net
>>270
バグや脆弱性対応は?VS2019って頻繁に更新されてるけど
279:デフォルトの名無しさん
21/04/19 08:27:27.76 eEvFTkhNM.net
>>273
of
280:flineインストーラーも知らないのは開発者としてどうかと思う
281:デフォルトの名無しさん
21/04/19 09:01:07.98 qHBf6kdf0.net
getsetプロパティをFuncで呼び出せるようにしたいのですが可能でしょうか?
メソッドで括って呼び出せば良いのだろうけど直接Funcに入れる方法があるならそうしたいです
282:デフォルトの名無しさん
21/04/19 09:10:46.59 a1UfxEQG0.net
よく分からん
Func<string> func = () => person.Name;
を
Func<string> func = person.Name;
みたいに書きたいってことか? 無理だけど
func = person.Name.Surname;
のときperson.Nameがいつ解決されるのか判断つかないし
283:デフォルトの名無しさん
21/04/19 09:26:07.33 qHBf6kdf0.net
>>276
返信ありがとうございます
イメージとしては複数のクラスで
public bool hoge {set => test = value; }
が複数あって
List<Func<bool, bool>> func;
に追加していってキャンセルとか何らかの処理後に一括して戻したい、と言うような処理です
やはりプロパティってメソッドみたくできないFuncに入れる事ができないんでしょうか
他の方法ですっきりする方法はないですかね?
284:デフォルトの名無しさん
21/04/19 09:56:26.88 lMV2Jqgd0.net
やりたいことがさっぱりわからんな
ダイアログのキャンセル押したら画面ごと破棄でいいじゃん
285:デフォルトの名無しさん
21/04/19 10:04:55.77 aTPYfb0+0.net
>>277
List<Action<bool>> list;
list.Add(b => hoge = b);
こういうこと?
286:デフォルトの名無しさん
21/04/19 10:21:06.38 8YZTYag9M.net
まあ気持ちはわかる
(Webでなく)GUIアプリで独学した初心者って、エンティティオブジェクトをアプリ全体で生存させるような設計をしちゃうんだよな
オブジェクト指向を普通に解釈すりゃそれが自然なんだけど、実際そういう設計はしないんだよ
ドメインモデルだろうとトランザクションスクリプトだろうと、エンティティはトランザクション毎に作る
287:デフォルトの名無しさん
21/04/19 10:39:20.82 X+u8pzLd0.net
>>274
知らないって決めつけてるのはどうかと思う
単にどうしてるのか聞いているだけ
288:デフォルトの名無しさん
21/04/19 10:44:42.24 7XobiDdgM.net
>>278破棄と生成できれば良いのですがちょっと難しい。ユーザーコントロールでバインドしていて各コントロールは値を参照しあってます
今回は画面が切り替わったときに表示非表示を変える戻す、なので直接は関係ないのですが影響度を減らしたい
>>279
>>276見直してプロパティを直接でなくてもラムダ式でいけそうなことに気付き>>279さんの形を思い浮かびました、今出掛けてるので確認は後ですが多分解決できそうです
皆様ありがとうございます
解決しなければまた聞くかもです
ありがとうございます
289:デフォルトの名無しさん
21/04/19 10:58:10.70 Ee/wQKnTM.net
>>281
知ってて聞くのはもっとどうかと思う
290:デフォルトの名無しさん
21/04/19 12:13:19.27 lMV2Jqgd0.net
>>282
なんだかとってもおかしいよ
291:デフォルトの名無しさん
21/04/19 12:18:18.64 lMV2Jqgd0.net
これあれじゃね?
開始日と終了日に期間制限があると値が設定できないやつ(笑)
292:デフォルトの名無しさん
21/04/19 12:41:53.53 /vkKNniZa.net
何がしたいのかよく分からないね。
キャンセル要求が発生したら初期状態に戻したいなら
素直に初期状態をまるごとキャッシュしておく方が分かりやすいんじゃないかと思うけど
もっと素直なのはそもそもApplyするまでUIの値をモデルに反映しないことだよね。
まあたぶん要件を説明しきれてないんだろうけど
293:デフォルトの名無しさん
21/04/19 12:42:25.65 eG8AP0Ht0.net
>>282
元に戻す処理を管理したほうがいいケースなのか
元の状態を管理したほうがいいケースなのかを考えたほうがいいよ
294:デフォルトの名無しさん
21/04/19 13:39:27.50 lMV2Jqgd0.net
まあ、設定画面がモードレスでリアルタイムで値を変えたいときもあるかもしれんが
それやると
地獄の一丁目にご招待って感じ(笑)
295:デフォルトの名無しさん
21/04/19 13:46:03.66 0ewLpJwG0.net
Contract?
296:デフォルトの名無しさん
21/04/19 13:50:22.81 wot3CwpcM.net
>>288
更にundo/redoの機能を付けてくれまいか?
で更なる深淵へw
297:デフォルトの名無しさん
21/04/19 14:13:33.61 lMV2Jqgd0.net
>>290
影響する値でエラーが出てもそれとは関係ない表示はできる限り続けて欲しい(プレビューが見えないから)
エラーが出てるときは値の変更で表示は変わっても最後の反映はできないようにしてほしい
でも値を変更してる最中のundo,redoは効くようにして欲しい
って割とありがち要求だよね
モードレスやった時点で地獄を覚悟しろって感じ
298:デフォルトの名無しさん
21/04/19 14:17:30.66 5/g8GOz6M.net
そのためのMVVMですから!
299:デフォルトの名無しさん
21/04/19 16:11:25.84 X+u8pzLd0.net
>>283
めんどくさいのに本当にしてるのか気になったから聞いたんだけど何かおかしい?
300:デフォルトの名無しさん
21/04/19 16:13:54.25 LEIxqEAm0.net
うちにも本当にしてる端末はあるぞ。
むしろ自動で上げたくないしな。
既知の問題でワークアラウンドがあるならそれで良いというケースもあるし。
リリースノートめちゃくちゃ読む。
301:デフォルトの名無しさん
21/04/19 16:51:10.44 qG+FkDTLM.net
>>293
ネットに繋げないならそうするしかないし言うほど面倒でもないだろ
そもそもネットに繋いでる場合でもアップデートがある度に適用なんてしないよ
>>294が書いてるように修正内容見て影響ないとかワークアラウンドがあるなら適用しない
302:デフォルトの名無しさん
21/04/19 16:56:35.95 Ly5FRhD3d.net
オフラインがめんどうとか何言ってんの?開発する時にはセキュリティ上当然やろ
オンラインとか最近の開発ではありえない
303:デフォルトの名無しさん
21/04/19 17:17:52.34 ssZtrIutM.net
今のVSって最新メジャーバージョンは完全に人柱向けだからなあ
アップデートをすぐに入れられないような環境だと詰む可能性があるからむしろリスクが大きい
最新版を追えない環境なら2017使ったほうがいいよ
304:デフォルトの名無しさん
21/04/19 17:59:46.65 sAdoeVNCM.net
更新頻度はどちらも大して変わらん
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
305:デフォルトの名無しさん
21/04/19 18:14:05.65 HuLqOw9zM.net
>>298
中身読めよ
2017の方は脆弱性修正と軽微なバグ修正しかやってない
306:デフォルトの名無しさん
21/04/20 00:39:35.61 TLYpp//E0.net
docker「…」
307:デフォルトの名無しさん
21/04/20 02:18:25.03 hE4KV5oa0.net
C#を勉強中です
Delegateの機能はわかったのですが、これはどのような状況で使うのか思いつきません
こう使うと便利だという例を教えてください
308:デフォルトの名無しさん
21/04/20 02:19:59.60 X693LKGY0.net
それは繊細な問題ですね
309:デフォルトの名無しさん
21/04/20 02:23:17.77 mCU9Z3ky0.net
delegateの機能が解説されていた箇所に書いてなかったの?書いてあったけどそれを理解できないってこと?
310:デフォルトの名無しさん
21/04/20 02:33:44.44 KMnW7zDR0.net
>>301
そのわかったというDelegateの機能を説明してみてもらってもいい?
311:デフォルトの名無しさん
21/04/20 02:54:23.22 C6K6mBrBa.net
>>301
真面目な話、無理に今理解しようとしなくていいと思うよ。
コード書き出ぜば自然に分かる。
後回しにして先に進んだ方が吉。
312:デフォルトの名無しさん
21/04/20 03:07:10.55 hE4KV5oa0.net
>>303
機能の解説だけでどのようなときに使うかは書いてなかったです
Delegate型の説明と作り方の後に例としてConsole.WriteLineでHelloと表示するメソッドを
新たに作ったDelegate型のaという変数に突っ込んでa()を実行して
ほら表示できたでしょという感じだったのだけれど
だからどうしたとしか思わなかったです
313:デフォルトの名無しさん
21/04/20 03:22:02.21 HBCxLvi90.net
自分も変数のシャドーイングとか何が便利なのかわからないです
脳みそのメモリ圧迫されるのでは
314:デフォルトの名無しさん
21/04/20 03:27:57.34 HBCxLvi90.net
>>306
こういうメソッドの引数がデリゲートで、まさに便利な使い方だと思ってる
URLリンク(docs.microsoft.com)
間違ってたら訂正よろしくです
315:デフォルトの名無しさん
21/04/20 03:33:39.19 hE4KV5oa0.net
>>308
これがdelegateだとしたら意識しないで使ってました
まさかこれが..
316:デフォルトの名無しさん
21/04/20 04:41:05.35 IRlXB/YU0.net
デリゲートは自分で使うもんじゃないと思ってた。
Buttonをクリックしたら、このメソッド実行してねってのを、IDEが作ってくれる奴だから。
だから、「こんなときどうしよう」って悩んだときに、
そうだ!デレゲートってのがあるんだよ!っていう、よっぽどの場合に、入門書を読めば良いと思う。
初めてのC#みたいな本がお薦めなんだけどね。
317:デフォルトの名無しさん
21/04/20 05:04:14.96 mPkgRyxP0.net
>>306
試しにhello2 からhello100まで突っ込んでみよう
318:デフォルトの名無しさん
21/04/20 08:17:28.06 UlsxkGg7D.net
デリゲート定期
319:デフォルトの名無しさん
21/04/20 08:29:39.05 2x6gxMkWM.net
デリケートに好きして
320:デフォルトの名無しさん
21/04/20 09:39:52.16 KMnW7zDR0.net
>>306
わからなかったらまず最初にリファレンスを読むといい
Delegateとは何かどういう目的で使われるのか普通に書いてる
URLリンク(docs.microsoft.com)
321:デフォルトの名無しさん
21/04/20 09:49:15.79 UooL86SRr.net
まあこういうものが腹に落ちるようになるのが楽しいとこでもある
322:デフォルトの名無しさん
21/04/20 11:01:31.30 wGU9ai2r0.net
>>313
パジャマのままで
323:デフォルトの名無しさん
21/04/20 12:07:45.54 7xfghfsY0.net
例えば、Ruby では、Forwardable でインスタンス変数に委譲できる
自分で配列クラスから、Stack を作って、その内のpush, pop だけを使いたい場合、
もし配列を継承・is-a すると、余計なメソッドまで継承してしまうので、それらを使いたくない。
そういう場合に、委譲・has-a で、インスタンス変数に委譲して、使うメソッドも限定できる
Go, Elixir も継承がない、委譲だけ。
継承は大掛かり。
使わないメソッドを呼ばれてしまう可能性があるから
また、誰でも使うような、String クラスなどを継承して、メソッドを追加されるのも嫌。
そういう継承は想定外だから
素人は、よくそういう事をする。
継承用のクラスじゃないのに継承したりする
require 'forwardable'
class Stack
extend Forwardable
def initialize( ) @ary = [ ] end
def_delegators( :@ary, :push, :pop )
end
stack = Stack.new
stack.push 1
stack.push 2
stack.pop
p stack #=> #<Stack: @ary=[1]>
324:デフォルトの名無しさん
21/04/20 12:25:42.67 7xfghfsY0.net
>>307
shadowing とは、内外の変数は、別々の扱いで、
内側のスコープに入ると、内側が優先されて、
外側の同じ変数名が隠されること。
その際、外側の変数には影響を与えない。
Ruby では、外側のa は10で、内側のブロックスコープでは、
同名の変数aを使っても、外側の変数には影響を与えない。
ブロックスコープを抜けると、aは10のまま
a = 10
ary = [ 1, 2 ]
ary.each do |a|
puts "ブロック内: #{ a }"
end
p a
出力
ブロック内: 1
ブロック内: 2
10
325:デフォルトの名無しさん
21/04/20 13:01:47.56 TyJgyLsfa.net
このスレはRubyの宝石箱や!まで読んだ。
326:デフォルトの名無しさん
21/04/20 20:38:25.40 mPkgRyxP0.net
火入れするかあんたのはスピネルや
と言うべきか
327:デフォルトの名無しさん
21/04/20 21:04:57.15 HBCxLvi90.net
なにかのネタというかエンジニアジョークなのかな? わからないや
シャドーイングがどんな機能なのかは単純だからわかってるつもりだけど、一見同じ変数名を扱えることで何が嬉しいの?って話です
コード読んでて混乱しそうなので無い方が綺麗だと思うのだが、自分の脳みそが貧弱なだけかな?
328:デフォルトの名無しさん
21/04/20 21:05:35.48 3ANNQsEU0.net
c から来た人なんだけど、デリゲートって関数ポインターの認識
329:デフォルトの名無しさん
21/04/20 21:08:17.98 3ANNQsEU0.net
半角の++が書き込めない。なんだこれ。
330:デフォルトの名無しさん
21/04/20 21:28:46.29 mPkgRyxP0.net
>>322
それがリストになっているので
複数の呼び出しを一気に行える。
という感じ
331:デフォルトの名無しさん
21/04/20 22:48:16.53 wpz1WDBF0.net
メモリリークの温床だがな。。
332:デフォルトの名無しさん
21/04/20 23:13:15.40 oW++joyya.net
>>321
嬉しいでしょ。
まあぶっちゃけフィールドをローカル変数で隠蔽することはあまりないと思うけどね。
>>322
Cより機械語レベルで考えた方が分かりやすいね。
要はcall命令のオペランドだよね
厳密にはthisポインタの情報を含むから違うんだろうけど概念的には