C#, C♯, C#相談室 Part93©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/05/12(土) 10:07:34.76ID:RvuVG0qm0
自分は成り行きでBの機能の一部をCに放り込んでしまったから、
Bを処理するDも必要に迫られてCに入れざるを得なくなってたんですね。

入門書にあったサンプルプログラムはコード数が少なかったから、
BをCに入れてるものが結構あったので無意識にこんなもんだと思ってました。

こういうのって本では学びづらいですね。
勉強になりました。
ありがとうございます。
2018/05/12(土) 11:04:14.67ID:PbE4ojLD0
>>251
それはOOPではなくMVCな。一応。
2018/05/12(土) 11:05:17.79ID:vhGL8v7ea
まぁGUIアプリケーションでのOOPの具体的なアーキテクチャだから
2018/05/12(土) 11:23:13.92ID:RvuVG0qm0
MVCは初耳で今ググって勉強しました。

やはり自分のコードは人と共有できるレベルではなかったですね。
MVCの設計で修正してみます。

手続き型言語しかやってないので、
手続きで処理していって
「なんども同じ手続き出てくるな。」
と思ったらクラスにして分離する思考になってたんですけど、
それじゃだめですね。

こういうのが学べるいい本があったらいいなぁ。
2018/05/12(土) 11:32:37.31ID:RvuVG0qm0
dataHolderクラスってABCDどれからもアクセスすることになるんですが、
パブリックにして、どこからでも読み書きできるようにしていいんでしょうか?

バグの温床になるからダメ?
2018/05/12(土) 11:36:18.82ID:RvuVG0qm0
マイクロソフトのホームページだとPublicにしてますね。

これだとどこからでもすべてのデータにアクセスできるから便利だし可読性もいいけど、
どこかでうかつにdataHolderの変数に変な値を入れると、
どこがバグになっているのか全コード読まなければいけないですね。

うーん・・・。
世の中そんなもんなのか?
2018/05/12(土) 11:43:38.40ID:vhGL8v7ea
>>256
お好きに
結局は書きやすさと安全性のトレードオフ

ガッチガチに書くならgetterだけのImmutableオブジェクトを表すインターフェイスとそれを実装する具体クラスに分離してViewにはインターフェイスだけ教えるとか(あまりやらない)
作る人数とか規模によってどの程度強制するか変わってくるから程よくやるのが重要, 一貫性は重要だが徹底しすぎるとしんどい
2018/05/12(土) 11:57:15.21ID:RvuVG0qm0
>>258
immutableなんてものがあるんですね。
ごく一部の変数以外はimmutableで事足りるから、immutable設定にします。
publicでdataHolderクラス作ってメンバ変数はすべてimmutableにすれば、

可読性、コーディングの利便性、安全性

全部満たせますね。
なんて便利なんだ…。( ゚д゚)
2018/05/12(土) 12:02:17.65ID:vhGL8v7ea
>>259
残念ながらC#では上手くImmutableに出来ない(出来るかもしれないが最近やってないので詳しい人教えて)
TypeScriptとかなら既存の型にReadonlyを再帰的に付けた型が簡単に作れるんだけどなぁ
2018/05/12(土) 12:04:38.53ID:F4kLnVK3p
MVCって、VとCの境界が曖昧になりがちだよな。
ってか、VとCを分ける様な事するからUIが使い辛い物になるんだよな。
2018/05/12(土) 12:06:20.36ID:vhGL8v7ea
>>261
せやな
MVVMとかあるしな
2018/05/12(土) 12:12:09.32ID:F4kLnVK3p
そそ、MVCやMVPってのは、オンラインサービスみたいにデータ管理と画面操作が隔離してる様なコンピュータサービスでなら適してるけど、スマホとかパソコンの中で完結した操作性重視のアプリの設計には適して無いんだよな。
2018/05/12(土) 12:25:35.08ID:CthSiE230
厳密に言えば readonly と immutable は別
interface で表現出来るのは readonly
2018/05/12(土) 12:57:15.57ID:RvuVG0qm0
残念・・・

bool resultOfGetTimeLimit = int.TryParse(this.timeLimit.Text, out constant.timeLimit);

みたいに定数をフォームから取得できればありがたいんだけどなぁ。
そういう需要ってあんまりないんだろうか。
2018/05/12(土) 14:45:46.09ID:UZR1Ryt2a
>>265
何いってるのかわかりません
2018/05/12(土) 14:55:22.20ID:5EDA9IkjM
それに変数名長すぎ
2018/05/12(土) 14:55:53.42ID:5EDA9IkjM
しかもbool型に見えない
2018/05/12(土) 17:01:44.57ID:RvuVG0qm0
なんかもうMVCに従って書き直すの不可能な気がしてきた・・・
初めから作り直すほうが早いかも・・・。
2018/05/12(土) 17:16:54.39ID:15xgRckc0
>>269
MVCは基本的にWebだかんね…
2018/05/12(土) 17:19:31.54ID:VhwAlNWxd
設計思想根本から変えるのに小手先の修正で済むわけないよw
2018/05/12(土) 17:32:27.30ID:XEHHkDisM
初心者が勉強のためにゲームプログラムを作るのにMVCなんてナンセンスです。
先ず、何でもいいから動くものを作る。プログラムスタイルはそれからいろんなな本で学べばいい。
2018/05/12(土) 17:33:18.63ID:oxtjRRByM
まず設計からやり直さないと無理だと思うよ
2018/05/12(土) 18:06:22.88ID:RvuVG0qm0
頭の中がどぁーっとなってきました。
とりあえずゲーム本体は完成したんですが、一部改変しようとしたらかなりの機能がすべてゲーム画面フォームにくっついてるので読みづらいことこの上ないなと。
データ部分を別構造にしたかったんですが、ほぼ句見直しに近い改変であたまがわやになってます。
2018/05/12(土) 18:11:39.59ID:RvuVG0qm0
すんごい読みづらいコードなんだけどこのまま進めていいのかな・・・。
とりあえず力業で進めることは可能なんですけど気持ち悪い。
2018/05/12(土) 18:12:38.37ID:5EDA9IkjM
>>274
で、でたーオブジェクト指向不出来form.cs全部書込奴w
2018/05/12(土) 18:16:14.33ID:XIsYMxrj0
動くコード書ける奴の方が神だからな。
設計どうのこうのなんて、動くコード書ける様になってから理解すれば良い。
何なら作った後で反省的を挙げながらここはこう言う構造の方が良かったんじゃね?
なんてやるのが一番設計の知識ぐ身につく。
2018/05/12(土) 18:23:40.04ID:XEHHkDisM
自分のプログラムが汚いわかりにくいと思ったのなら、あなたはセンスがあるんだよ。
汚いプログラム書いて平気なプロもいるからね。
後はいろんなサンプルプログラムを検索して読んだらいい。あっ、これがいいとか気付きがあると思う。
2018/05/12(土) 18:26:39.51ID:XEHHkDisM
プログラマの能力を試すには書かせるより読ませるのがいいからね。
人のプログラム読めない奴は進歩ないから。
2018/05/12(土) 18:31:48.49ID:RvuVG0qm0
あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはdataHolder.a=hoge;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??
2018/05/12(土) 18:33:40.32ID:RvuVG0qm0
>>276
全部ではないけどほぼご指摘あってます・・・。
本に書いてある小さなプログラムはほとんどform.csに放り込んでたので、そんなものかと思ってた。
2018/05/12(土) 18:34:30.46ID:RvuVG0qm0
>>277
ありがとうございます。
今ようやっと設計の大事さを学習しました。
レベル0から0.01ぐらいには成長できた気がします。
2018/05/12(土) 18:35:15.53ID:RvuVG0qm0
>>280
そもそもこれが分かってなかったから一つのフォーム画面にいろいろ機能を盛り込みすぎたんだと。
2018/05/12(土) 18:37:29.64ID:RvuVG0qm0
>>280

間違いました。

あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはthis.a=dataHolder.a;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??
2018/05/12(土) 20:01:02.99ID:9rdAnFG4a
まあなんだよ
今の君に必要なのは鉛筆と紙だ
なんたらチャートのお作法なんぞ知らんでいいから、まずは機能を書き出して丸で囲め
それからどの機能が何処から必要になるかを線引っ張って繋げ
めちゃくちゃ線がごちゃごちゃするだろう?
それをなるべく少ない線で済むように書き直すんだ何回でも
2018/05/12(土) 23:33:51.06ID:RvuVG0qm0
>>285
自分で書いててこんがらがってきますね。
でもまずやってみます。
2018/05/12(土) 23:36:15.36ID:RvuVG0qm0
Aフォームのメンバ変数、メソッドを
BCフォームからも使用できるようするにはどうすればいいのでしょう。

Bだけで使用するならB内でAのインスタンス生成→ShowでAフォームを表示させればいいと思うのですが、
Cフォームでも使用するとなると、Cフォームで新たにAのインスタンスを生成するわけにもいかないですよね。
2018/05/12(土) 23:44:08.44ID:7v9y2RSd0
>>287
ググるなりして調べた?そろそろ初心者スレでやって
インスタンスを渡せばいいだけなのに
2018/05/13(日) 11:04:57.10ID:ySggkKZM0
>>288
すいません。
ググってもよくわからなかったので質問したのですが安易に人に頼りすぎてましたね。

昨夜からわからないところを実際にコードで打ち込んでみて実験重ねて理解できました。
インスタンスの参照渡すって言っても

フィールド渡し
プロパティ渡し
メソッド渡し

と色々方法あるんですね。インスタンスの参照を渡す方法が分かってなかったから一つのクラスに一杯盛り込むことになってたんだと理解できました。
2018/05/13(日) 11:06:37.40ID:ySggkKZM0
こういうのってCやってれば常識なんですね。
どこからC#でどこまでCの質問か分からずこちらで何でも聞いていました。

次から初心者板に移動してみます。

でも、みなさんのおかげでだいぶいろいろなことを学べました。
ありがとうございます。
2018/05/13(日) 13:59:35.41ID:23x2pXKw0
〇〇する機能みたいにして、重要だと思う機能ほど大きく書いて相関関係を、ドラマの登場人物の関係図みたいに描いたらなんとなくクラス図の基本が出来上がる。
2018/05/13(日) 14:41:31.02ID:ySggkKZM0
>>291
ありがとうございます。
クラス図についても勉強してみます。
293デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 19:32:08.48ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

094C5
2018/05/25(金) 17:55:34.06ID:kaJ5fQAg0
あくまでわかりやすくするために分けるのであって、クラスを分けることが目的になってしまってはいけない
余計わからん構造になる可能性があるからね
2018/05/25(金) 23:51:50.59ID:q1degsPf0
わかりやすくする為にわけるのではない
問題が適切に表現される様に自ずとにわかれるのだ
それが本質的にわかりにくい問題であるならば
わかれた結果わかりにくいのは当然の帰結である
己の能力をわかるまで高めるしかあるまい
わかめ
2018/05/26(土) 08:31:56.50ID:Mb7u4pS+0
なんか偉そうなこと言ってる
2018/05/26(土) 10:29:20.38ID:Qkk0DhfZM
ナイーブすぎ
2018/05/26(土) 16:16:32.23ID:nVIiMXOl0
桃とアロエのカネボウ
299デフォルトの名無しさん (JP 0Hcd-ftu6)
垢版 |
2018/05/28(月) 11:28:40.07ID:vRphuiRoH
ゲームくんのゲームは完成したのだろうか?
そもそもGameManagerクラスみたいなゲームを管理するクラス作ってないのが不思議
ゲーム管理クラス通して設定画面開いたり設定値を取得すればいいのに
2018/05/28(月) 18:36:44.90ID:rzi0Cqlc0
どんだけ連打してんだよ
2018/05/29(火) 12:36:07.71ID:0Vp36Os40
C#の勉強を講習会なりでお金を払う方式でレクチャーを受けたいのですが、どういった所が良いでしょうか?
ドットインストールやプロゲートの様な既にある動画を有料で見るのではなく、
欲を言えば1対1で即座に質問できる方式が良いのですが探してみたところ見つけられず、
初心者〜中級者を対象にした評判の良い講習会の様なものがあれば教えて頂けないでしょうか
東京都の渋谷区に住んでいます
2018/05/29(火) 13:37:15.19ID:dUPfr/v4M
もったいないね
マンツーマンで一時間5千円〜1万はらって12〜36時間でC#を勉強するくらいなら
入門書を3冊ぐらい買って1週間で何度も読めばいいのに
2018/05/29(火) 13:45:33.86ID:iBcg+dk20
しかし新しいC#の作法にのっとった良い入門書なんてあるかね?
2018/05/29(火) 13:47:56.92ID:dUPfr/v4M
新しい作法にのっとった講師のほうが少ないと思うよ
2018/05/29(火) 17:24:32.50ID:0Rufp4wm0
>>301
趣味目的なら金余っているバカだし就職目的なら手に負えないバカ
そんなことで身につかないからパソコン教室にでも通ってろ
2018/05/29(火) 18:15:54.45ID:5CF0lkGw0
パソコン教室じゃ、最高でエクセルの使い方くらいしか教えてくれねーだろ。
2018/05/29(火) 18:33:40.52ID:/62QaXdPa
>>301
金と時間の無駄って意見に俺も一票。

学校の勉強でもそうだけど、だいたい独習の方が効率が高いよ。
分からないところを質問できる人がいるとはかどるのは確かだと思うけど、
そんなの今はネットで代替できるし(しかもタダ)

子供の習い事みたいにモティベーション不足を金で補うっていうのはありかもしれないけど。
2018/05/29(火) 18:38:51.88ID:5CF0lkGw0
何とか教室や何とかスクールって、出逢いを求めて通うものだろ?
2018/05/29(火) 18:39:33.21ID:iBcg+dk20
云うてもプログラムって何すんの状態だと独学とか無理やん
まあ講習受けて出来るようになるかったら確率低いが
2018/05/29(火) 18:51:29.09ID:b3SRNDoC0
>プログラムって何すんの状態だと独学とか無理やん
そんな人はプログラムを触ることはないので問題なし
2018/05/29(火) 19:02:37.30ID:bwgc0PeYa
C#プログラマの求人いきゃいい
マンツーマンでみっちり教えてくれてしかも金ももらえるぞ
2018/05/29(火) 21:20:40.23ID:Zh8oS8xcM
>>302
>>307
でもさ、メンターがほしい気持ちは解るよ。独学で始めて今でこそイメージしたアプリは大体作れるようになったけど。
2018/05/29(火) 21:22:39.57ID:tOEtldFh0
教えてくれる人がいなくてもできるぐらいのやる気は持ってないと
教えてくれる人がいてもできない気がする
314デフォルトの名無しさん (アウアウカー Sa95-9DOT)
垢版 |
2018/05/29(火) 21:30:02.17ID:+v4yesMaa
独学でやってると自分のやり方が正しいのか確認が出来ない不安があるのはわかる
とにかくプログラムを書くこと、実務を重ねるとその不安は経験値でだんだん消えていく
とにかく経験を積むしかない
2018/05/29(火) 21:34:05.00ID:T0OOxyUA0
>>313
スレ違いになるけどモチベーション保つのが一番大事だからな
わからなくなるとやる気無くすから誰かに教えてもらいたい、って気持ちはわかるが
2018/05/30(水) 01:10:37.65ID:eBpQDrsU0
メンターってか、語れる仲間がほしい・・
だが人付き合いはめんどくせーw
2018/05/30(水) 01:15:01.88ID:9LsQ0F9t0
だから皆ここへ集うのですね
2018/05/30(水) 11:53:56.18ID:8D7UWmqma
メンター(導師)ってリアルで言ってる人を見ると笑うけど
意識高い系ですかって
メンターは技術面より精神的な面のよりどころだな
わけわからんけどこの人は正しい導いてくれるって人って思いこむ相手

c#入門にメンターがいる必要はないね
中級以上ならまだしも

入門者には導師より同志が必要かな
2018/05/30(水) 12:12:53.49ID:qVo0G4AWa
メンターなんて初めて聞いた
グルなら知ってる

jai guru deva om
2018/05/30(水) 12:16:35.68ID:4fnC318RM
>>318
とりあえず中途半端な改行やめたら?
2018/05/30(水) 12:53:27.56ID:2+ZWaFznd
メンター初耳って…
そりゃ昔はあまり使わなかったが今の20代なら大学で大方耳にしたことあるんじゃない?
2018/05/30(水) 13:06:00.57ID:tkaPgK/fa
ゲームの初心者指導機能以外で聞いたことない
2018/05/30(水) 14:44:19.09ID:zGXcDYuB0
ちょまど神に帰依するべきです
2018/05/30(水) 15:57:46.68ID:OvgslO8CM
CodeMentorっていう英語のメールニュース取ってるんだが?
2018/05/30(水) 17:39:32.49ID:zRdb0GuK0
ぼくはメンタリストですが、何か?
2018/05/31(木) 18:07:05.50ID:ZDpw5PAMd
引数ありのdelicateでデリゲートをnewする段階で
関数に引数渡しておくことはできますか?

使うときは引数関係なく実行するだけにしたい

delicateじゃなくてもそういう方法があれば教えてほしいです
2018/05/31(木) 18:49:53.75ID:YepGdlhS0
ない
2018/05/31(木) 19:21:37.82ID:mNqG/VKAa
>>326
たとえばこれを、
Action<string> a = Console.Write;

こうするだけと違うの?
Action a = () => Console.Write("Hage");
329デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/05/31(木) 20:29:05.32ID:XpaqSCj3a
>>328
普通に考えたらそうなるわな
何がいいたいんやろ
2018/05/31(木) 21:18:37.12ID:ZDpw5PAMd
>>328
わかりづらくてすみません
Actionですね
これでちょっとやってみます
ありがとうございます
2018/06/01(金) 00:56:14.18ID:v9HhHj/a0
もしかして delegate? > delicate
2018/06/01(金) 01:50:30.82ID:Kjs/aFNB0
痒くなってきた
333デフォルトの名無しさん (ワッチョイ fa23-i+D0)
垢版 |
2018/06/02(土) 01:19:12.37ID:te+Rl8LG0
もうふらっとと統合しろよ
2018/06/02(土) 14:30:29.50ID:sz40x79U0
隔離用のスレを本スレに統合って斬新だな
2018/06/05(火) 14:10:31.00ID:kDP+/j8RM
デリケートって結局なんねことなんや
336デフォルトの名無しさん (ワッチョイ 7ad2-OufX)
垢版 |
2018/06/05(火) 23:17:30.29ID:vNq9k7GF0
>>335
関数ポインタ
2018/06/06(水) 11:05:26.21ID:kgKhbEIB0
わかるように説明しろや!
2018/06/06(水) 11:13:20.04ID:Glbjy1Oa0
赤ん坊が庖丁持ったからと言って何かを生み出せるわけでは無し
2018/06/06(水) 13:00:14.82ID:/mNmPD5La
>>337
「〜とは何か」って哲学論争はたぶん時間の無駄w
実際の使われ方を見て何に使えるかを理解するのがいいよ

禅問答みたいに聞こえるかもしれんが、デリゲートのメリットは
デリゲート型の変数を作れること。

デリゲートの使えない従来の言語は、コードの中にdoubleのリテラルしか書けず
doubleの変数が作れないようなものだった
2018/06/06(水) 22:58:53.30ID:x4kBoo940
>>330です
Actionでできました!ありがとうございます。
クロージャー(?)っていうんですかね?
関数の外の値を引数で渡さずに関数内で使うやり方が知りたかったんです。
2018/06/07(木) 21:28:18.26ID:HziEaPXa0
デリゲート型の変数?????
デリゲート型にすると何かいいことあるのか?
デリゲート型にすると何がいいんだ??????何が使えるんだ?????
2018/06/07(木) 21:34:22.85ID:9x16GWRr0
>>341
ここ読め
http://ufcpp.net/study/csharp/sp_delegate.html
343デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/07(木) 21:34:36.55ID:uqa5AZHUa
あーこういうの出来たら便利なのにー
って思ったら調べて使えばいいよ
使わんと頭入らないし
2018/06/07(木) 21:41:39.12ID:muNvrUxm0
デリゲート、デリゲートって、おまえら
青空球児・好児かよ。
2018/06/07(木) 23:38:02.20ID:p05PC41Ra
>>341
そうじゃなくて、上に書いたように、もしdoubleのリテラルしかコード中に書けなくて
doubleの変数が使えなかったらどう困るか考えて
2018/06/07(木) 23:51:09.11ID:HziEaPXa0
図にしてくれ
2018/06/08(金) 00:56:57.47ID:057UgUqy0
数値を格納する変数は int 型
文字を格納する変数は string 型
メソッドを格納する変数が デリゲート型
2018/06/08(金) 01:01:01.34ID:7BdVtDm70
なんで
メソッドを
格納する
必要が
あるんだよ
2018/06/08(金) 01:20:20.47ID:vel+6yPba
だから、どうして実数を変数に入れる必要があるの?
入るのはメソッド自身ではなくその参照だけどね
2018/06/08(金) 07:41:09.77ID:V2PqzfzLd
>>348
自分の場合はある関数にある処理を追加したい場合とか

ある処理は呼び出しもとによって変わったり
2018/06/08(金) 07:54:30.62ID:VEbWNRWu0
>>350
ピンとこない

処理を追加したいならメソッド自体に書くか、overloadとかを考えちゃう
呼び出し元で処理変えるなら引数で、みたいな
352デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/08(金) 07:59:48.51ID:FRxZCKgGa
メソッドを引数にして渡してあげられると、実行する側は何をするか気にしないでいいじゃない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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