ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 06:40:45.47ID:mH9qbH+m0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part129
http://mevius.2ch.net/test/read.cgi/tech/1497000961/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/07/27(木) 22:08:18.79ID:I7X5vmO00
みなさんありがとうございます。>>96です。

皆さんがおっしゃるように、とにかくオブジェクトが云々と考えるより構文をたくさん打って感覚で覚えていくのが一番の近道なのかもしれません。

でも皆さんの話を聞いて少し頭の中が晴れてきました。
ありがとうございました。
2017/07/27(木) 22:12:49.28ID:h5VgGO8jM
オブジェクト指向って本来はモジュール設計のベストプラクティスに現実世界のアナロジーをこじつけたものだから、
高尚な理論なんか無視して単なるモジュール化の一手法として導入すべきなんだよな
C言語を使っていれば自然とlist_add(&list, item)のようなパターンに行き着いて、
そこからのオブジェクト指向への発展はきわめて自然なもの
2017/07/27(木) 22:30:42.28ID:aAe8+IMH0
>>95
とりあえずその本のタイトルと筆者をさらせ

オブジェクト指向ってのもいくつかの流派があるから、一概には言えないが
C#ベースで説明してるならその本は焼き捨てた方が良い
2017/07/27(木) 22:36:39.83ID:aAe8+IMH0
>>83,98
その例えならクラスは何よ?
その答え見ないとまともかどうかは何とも言えん

それがC#での一般的な用法になじむかどうかは別だがな
2017/07/27(木) 22:45:52.46ID:zjuaYXLUa
>>112
誰に向かって何を威張ってるのか知らんけど、>>95にあるような記述は
初心者向けのざっくりとした説明としてはまあ妥当なもの。

最初から重箱の隅つつく勢いで厳密に矛盾がないように書いたら初心者は理解できないよ。
ばっかじゃないの
2017/07/27(木) 23:04:02.99ID:MLlkqyWN0
ここまで液晶に価値なし
2017/07/27(木) 23:16:14.24ID:I7X5vmO00
私が参考にしたのは「c#の絵本」という本です。
立ち読みした本の中で一番わかりやすく感じたので買いました。

http://i.imgur.com/nAKj1Ds.jpg
http://i.imgur.com/y3u7rfK.jpg
2017/07/27(木) 23:20:12.49ID:OcfywRta0
classって、共通の性質や特徴を有するものの分類とかいう意味みたい。
オブジェクト指向の言語は、大体がobjectを基本として、そこから色んな性質に分けていったものをクラスにして「名前をつけて」あげる。
オブジェクト指向でいうクラスは「分類整理のやり方、結果」と言えるんじゃないかな。

動物とか車とかに例えたりする説明の仕方もありだと思う。けど、分類整理のやり方という文脈がないと、継承とか派生、つまり上下・並列の概念が分かりにくくなったりしないかな。
いま目の前にライオンが2匹いたとして、同じライオンとして分類していいのか、タテガミの長さが分類のポイントなのかとか、片方は外敵から身を守るために火を噴くとか。ペンギンと比べてどの程度同じ分類が出来て、どの程度違いがあるのかとか。

まとめると、モノでも生き物でも何かしらの特徴とか性質を持っていて、特徴で分けたのがクラス。
オブジェクト指向とは指向、言い換えると、方向性としてはモノを「最小の単位」として扱うことを表している。元素や光といった、もっと根本的な最小になる要素もあるけど、そのレベルで扱おうとすると色々細かすぎたり、人が理解しにくいから。

かな?俺もよく分からなくなってきた。
個人的には日本に来るとき訳する際に、継承とかいう普段使い慣れない概念語じゃなく、「環境適応」とか「マイナーチェンジ」とかがよかったのかなと勝手に思ってる。
2017/07/27(木) 23:32:44.71ID:dUeJpjKg0
>>117
後半に行くに連れて、段々変になっていってるぞ

最も重要な点は、
「データ(プロパティ)」と「振る舞い(メソッド)」を1つにパッケージする事だろう
一々現実世界の物体に例えて説明する必要は無い
2017/07/27(木) 23:45:51.22ID:2ra8985e0
stackoverflowでも回答者によってマチマチだし
考えたら負けな気がしてきた
2017/07/27(木) 23:52:55.67ID:OcfywRta0
>>118
データと振る舞い、そこが理解できたらパッと先が開ける感あるんだけど、灯台元暗し的に回り道しちゃうよね。

質問者の人には、その疑問は忘れず、さりとて目の前の事をこなしてみて、たまーにまた疑問に立ち返って欲しいなあ。試行錯誤してるある瞬間に、パッと思い出してすんなり受け入れられる時が来ると思う。

オブジェクト指向だとかなんだとか、結局はどっかのオッチャンインスタンスが考えたものだろうし、完全な答えはないんだろうなぁ。
2017/07/27(木) 23:54:43.51ID:iQBWuJsZa
厳密な定義も元からないし実装によって変わるし
そもそもクラスベースじゃないものまである
設計段階と実装段階でも別のことがある
ひとくくりに語るのは難しい

でも意思の疎通はかなりできてしまうという曲者
2017/07/28(金) 00:24:58.46ID:EhJxrJBra
哲学的な話は初心者には意味ないって自分で書いておいてあれだけど、
あえてそういう話をすれば、オブジェクトっていうのは「〜であるかのように振舞う仮想機械」
だと考えるのが一番いいと思うよ。

従来の構造体+関数より分かりやすく仮想機械を記述するための仕組みがクラス。
仮想機械の組み合わせでプログラムを作りましょう、っていうのが(もっとも素朴な)オブジェクト指向
2017/07/28(金) 00:42:55.93ID:y+yGDebS0
っていうかオブジェクト指向自体いらねぇ
2017/07/28(金) 06:24:23.12ID:Jgtd2W1RM
>>113
あれは「オブジェクトとインスタンスの関係性」をハイパーざっくり示すだけでほかに流用できるほど高尚な例えじゃないよ
ごめんね
2017/07/28(金) 07:18:09.76ID:jwLN5n78M
>>117
> classって、共通の性質や特徴を有するものの分類とかいう意味みたい。
IT系(に限らんのかも知らんが)の用語は結構元の意味と違う使い方されてるから気を付けた方がいいよ
例えばネットワークカードでパケットキャプチャするためにPromiscuousモードって言うのがあるんだがあるときふとどういう意味だろう?って辞書引いて笑たし
https://dictionary.goo.ne.jp/ej/67118/meaning/m0u/
2017/07/28(金) 10:18:52.22ID:asrj9iFF0
引っ越して来ました。
いろいろ、よろしくお願いします。 ┌(_Д_┌ )┐
2017/07/28(金) 10:27:48.91ID:dynW8EUsx
皆さん、float、double、intの使い分けはどうされてますか?例えばドラクエのようなRPGでせいぜい4桁程度の整数しか使わない場合でしたら、intを使っておけば間違いはありませんか?
2017/07/28(金) 10:42:44.33ID:asrj9iFF0
初心者として記載

基本的にintでも良いと思う。けど、 true(1) false(0)で詳細分けする時に便利
http://ideone.com/7joXzQ
2017/07/28(金) 10:59:03.19ID:asrj9iFF0
bool a = true;
bool b = false;

bool c = null; // error CS0037: Null 非許容の値型であるため、Null を 'bool' に変換できません
bool d = 0; // error CS0029: 型 'int' を 'bool' に暗黙的に変換できません
2017/07/28(金) 11:22:46.32ID:epWJgUcsM
>>127
普通に整数が使いたければint
アニメーションなどで込み入った計算をするときは無理に整数でやるよりdoubleの方が職人芸がいらなくて楽floatは精度の低さが問題になりやすいから描画などの最終的な出力以外には使わない方がいい
2017/07/28(金) 20:00:02.99ID:pQs+fj960
>>127
とりあえず、整数ならint、小数点以下が必要ならdoubleを使っておけば良い。
floatを使うメリットはあまり無い。
2017/07/28(金) 20:04:18.47ID:7FfAB0Haa
decimalじゃだめなのん?
2017/07/28(金) 20:15:41.50ID:wfFGjuoDM
decimalは必要ない時は極力使わない。
2017/07/28(金) 20:40:55.30ID:id99yFTOM
こんなときこそvarだろwww
2017/07/28(金) 20:44:23.47ID:X/Koq0Svd
varはアタイのカレシだから
ホットイテネ
136デフォルトの名無しさん (アウアウカー Safb-yXEd)
垢版 |
2017/07/29(土) 00:13:16.03ID:2gt99MhJa
doubleの演算って結構誤差でない?
2017/07/29(土) 00:29:15.87ID:1IyGodP30
情報落ちを起こしてるんじゃないか?
浮動小数点数は大量の値を前から順に加算したりしたらダメだよ
2017/07/29(土) 02:59:59.30ID:7hJeLMqCa
>>136
誤差を累積させるような演算をしてるからだろうねえ。
誤差の性質を理解して累積しないようなコードを書かなきゃだめでしょう
2017/07/29(土) 06:35:15.67ID:2ltffe2l0
要求される精度にもよる
double /frortは2進数表現だから表現できない小数がある
dicimal は10進数表現
2017/07/29(土) 06:36:38.66ID:2ltffe2l0
×dicimal
○decimal
2017/07/29(土) 06:38:47.23ID:u24XiLoFM
>>140
その前に直すところあるだろ...
2017/07/29(土) 11:14:24.90ID:HVIziSO2a
>>139
デジャビューだけど、こういう寝言を書く人は誤差の問題の初歩の初歩も理解してない
2017/07/29(土) 11:19:08.43ID:Qn9Ku8Gw0
>>142
おまえもだよ
2017/07/29(土) 12:26:02.64ID:VZ2r/0rxM
double/frort(笑)の表現が2進数だからdicimal(笑)と違って誤差が…みたいな話をする奴は本質を理解してないよな
実数型は常に連続な近似値として扱うべきで、最終的には要求される精度に応じて必ず丸めて使うんだよ
decimalとは扱う問題の性質が違う
2017/07/29(土) 14:51:29.49ID:BX2/zm3r0
任意の範囲(C#に組み込まれてないようなのも含めて)の整数型を総称してintegerと呼ぶなら
double/frortはinteger / 2^integerでdicimalはinteger / 10^integerなのじゃ
2017/07/29(土) 17:41:23.74ID:VUs/Df8Wa
誰かに突っ込まれるまでボケ続けるつもりかなw
frortってどういう発音なんだろw
2017/07/29(土) 18:33:12.08ID:Qn9Ku8Gw0
frortはfrort型だろ

読み方はfrortって読むんだ
2017/07/29(土) 18:35:29.45ID:H4b4Ug9O0
>>145は分かっててやってんだろw
2017/07/29(土) 19:48:17.74ID:zJVnUUbX0
わかってやるほどのネタとは思えないけどな
2017/07/29(土) 21:29:22.88ID:KUGfTbWw0
decimal の、なかみは、いんと
2017/07/29(土) 21:54:03.03ID:AM/Q5FkU0
だからよ、var使えば済むっしょ!
2017/07/29(土) 22:02:40.05ID:WMSNsXaM0
しつこい
2017/07/29(土) 22:23:19.76ID:K+Yuy2zX0
varint作るわwww
2017/07/30(日) 01:11:39.61ID:D1mwD1EJd
>>116みたいな人もおるんやし
ちょまどさんもそろそろ本書いてみたらどないやろ?
真奈たその後釜じゅうぶん狙えるんちゃう?
2017/07/30(日) 01:15:46.07ID:D1mwD1EJd
>>134
そういのがいるからC♯たんが馬鹿言語扱いされちゃう
2017/07/30(日) 08:26:12.42ID:J6wXHp7uM
>>151
ちゃんと設計したら?
2017/07/30(日) 10:02:02.22ID:LoeDXXSlM
>>153
なにその便利そうな型は w
2017/07/30(日) 14:48:33.51ID:/FPaeL7f0
>>157
intっぽい型を自動判別
string,double,date,boolの値が入ってきたらアウト
decimal,char,int,byteはセーフ
2017/07/30(日) 15:04:18.95ID:IhAKIxVt0
variant型かと思ってた。
2017/07/30(日) 15:06:27.30ID:/FPaeL7f0
>>159
そんなvb坊みたいな期待してたら減点
2017/07/30(日) 15:06:34.85ID:bPp21s/fM
でもさ、ソモソモなんで型分けてるかと言うと
消費する容量が違うからじゃないの?

バリアント型って結構デカイとかないの?
例えばbyteで済むならbyteの方がよくね?
2017/07/30(日) 15:11:52.74ID:/FPaeL7f0
>>161
違うよ
型ってのはあくまで気分なんだよ
厳密に定義したらわかりやすいし
でも厳密にし過ぎると使いにくい

マシンみたいなPGにはこんなもん必要ない
メモリ上にはアドレスと実際の値
それしかない
そこになんのデータを入れてるかなんて知ったこっちゃない
2017/07/30(日) 15:15:39.29ID:r8KQ5Iv4a
何言ってるのか意味不明だね
2017/07/30(日) 15:18:29.06ID:/FPaeL7f0
>>163
まあ、c言語とかアセンブラやんないとわかんないと思う
2017/07/30(日) 15:42:06.12ID:P5Qwr2jWd
気分だな。unionとか使い出すともう本当どう扱いたいかの気分でしかない。
浮動小数点と巨大整数と、それらのテンソルの型作ったことあるけど、SIMD的な命令として流し込むためにバラバラにしたりしやすいように都合よく書いてた覚えがある。
2017/07/30(日) 16:04:34.61ID:ZiKC4drW0
>>161
C#に限った話なら
byteはSystem.Byte構造体のエイリアスだし、
intはSystem.Int構造体のエイリアスだから
当然、消費するメモリ容量に差は出るが

大昔ならいざ知らず、現代のマシン環境において
そこまでメモリ容量を切り詰めて考えなきゃならん場面なんざ、そうそうねえよ
メモリを節約したきゃ、変数のスコープや生存期間を見直した方がいい
2017/07/30(日) 16:15:05.92ID:/FPaeL7f0
型を厳密にしたいかどうかだな
仕事で設計書書いて実装してるときは
varとか邪魔だし
2017/07/30(日) 16:39:12.40ID:9HwmeiiRM
CLRの型はVMレベルで実装されていて、気分で扱えるのはbittableな値型だけだよ
それ以外はメタデータを含んでてアホなことするとAccessViolationException
2017/07/30(日) 17:56:10.49ID:QVOgnQhb0
C#はどこもかしこもvar推奨だぞ
数値計算以外はvarでええやろ
2017/07/30(日) 18:15:04.88ID:reLfmDHf0
今まで型厳密に書いてたけど、var推奨だったのか・・・
2017/07/30(日) 18:19:11.77ID:/FPaeL7f0
>>169
さすがにvar推奨は見たことないな
禁止は結構見る
2017/07/30(日) 18:19:12.89ID:0Cb6dJF4M
推奨してるかしらんけど
varの方が見やすい
2017/07/30(日) 18:20:22.83ID:J6wXHp7uM
右辺を見て明確な場合はな
全体を見渡す力のない俺は使うとしてもローカル変数までにしとかなきゃ死ぬ
2017/07/30(日) 18:20:43.69ID:/FPaeL7f0
>>172
var unk = GetUnko();
の型を追跡するの面倒じゃね?
2017/07/30(日) 18:22:58.28ID:/FPaeL7f0
印刷はあんまりしないけどブロックで取り出したときにIDEが無いと読めないんだよね
2017/07/30(日) 18:24:40.67ID:ZiKC4drW0
パッと見で型が明確な場合は、varで問題無いと思ってる
varで訳が分からなくなるなら、メソッドを肥大化させ過ぎという意見も理解は出来る

しかし、それはそれとして
型名をきちんと書くのが手癖として身に付いてしまってるのだ
2017/07/30(日) 18:26:42.51ID:DlHK/Glf0
>>174
GetUnko()がUnko型を返さないのならそれは命名がおかしくね?
2017/07/30(日) 18:29:34.45ID:/FPaeL7f0
>>177
インターフェースってそういうもんだってさ
2017/07/30(日) 18:50:20.73ID:0Cb6dJF4M
型が目に見えたら何かメリットあるの?
全ての型のAPIと振る舞いを覚えてるならともかく普通覚えてないよね
public UnkoNagashi() {
Unko unko = unkodb.GetUnko();
unko.Nagasu();
unkodb.SaveUnko(unko);
}
というコードをみてなるほどunkoはUnko型なのかとわかる
でもUnko型がNagasu()以外に何をできるかは僕は知らない
そしてこの文脈ではNagasu()以外の振る舞いを知る必要もない
だったらそれって型名を書く意味あるの?
unkoがNagasu()できる事だけ知ってればいいよね
それはコードがコンパイルできる事から自明でしょ
2017/07/30(日) 18:58:07.04ID:xsWXBNij0
ここ初心者の質問スレなんだよ
質問でなく議論したいなら
ふらっと C#,C♯,C#(議論用)
http://mevius.2ch.net/test/read.cgi/tech/1469538912/
でやれよ
2017/07/30(日) 18:58:57.54ID:/FPaeL7f0
unk.FermentationShit();
182デフォルトの名無しさん (アウアウカー Safb-yXEd)
垢版 |
2017/07/30(日) 19:06:43.78ID:/Qu7y73ua
>>174
デジャブかな?
もう何回みたことか。。つーか毎回言われてると思うけどカーソルあてるのそんな面倒か?
2017/07/30(日) 20:39:56.83ID:QVOgnQhb0
>>171
MSのオープンソースプロジェクトは殆どvar推奨だぞ
どんなときも使える限りvar使えって言ってる

https://github.com/dotnet/roslyn/blob/master/.editorconfig
2017/07/30(日) 20:46:54.11ID:dej2VYm/d
>>171
いつの時代の話だよwww
2017/07/30(日) 21:37:31.57ID:ynobldaf0
var に拒否反応示してるのは老害だけだろ
自動的に型名に置き換えてくれるだけなのにな
2017/07/30(日) 22:03:52.72ID:YWZp07X/a
>>171
var禁止なんて見たことがないから参考までに教えてほしい
2017/07/30(日) 22:07:36.28ID:hMQywZRx0
>>186
わざとvarってクラスを作って型推論を阻止するやつらがいるとかなんとか
2017/07/30(日) 22:16:53.75ID:J6wXHp7uM
>>185
ホントに害なの?
2017/07/30(日) 22:22:32.05ID:/FPaeL7f0
>>182
1000行あるうち300行そんなのがあったら300回当て無いといけないんだぜ
2017/07/30(日) 22:35:12.83ID:J6wXHp7uM
>>189
1000行ものメソッドを作る時点で設計を見直そう
2017/07/30(日) 22:40:01.38ID:Pvq5DEUn0
>>189
1/3が変数宣言って前提に無理があるのでは?
2017/07/30(日) 22:42:42.77ID:hMQywZRx0
>>189
当てなきゃわかんないようなやつがそんなにある時点でクソ
2017/07/30(日) 22:43:59.63ID:/FPaeL7f0
>>190
トータルとはいってない
2017/07/30(日) 22:47:13.08ID:/FPaeL7f0
>>191
結構あるぜ
でもここで考えて欲しいのは
そもそもvarなんて使わなければ当てる必要などないということ
当てなければ読めないソースと
当てなくても読めるソースのちがいしかない
2017/07/30(日) 22:47:50.56ID:J6wXHp7uM
>>193
や、だからメソッド単体で1000行だったら何かしら設計あぶないっての
2017/07/30(日) 22:53:22.17ID:Pvq5DEUn0
自分はなんでもvarは使わない派
右辺見ればわかるときだけ使うからマウスカーソル当てる必要もない

var list = new List<int>();
こういうのも気に入らないの?
2017/07/30(日) 22:56:46.57ID:RXgrd63BM
>>194
その前に考えるべきことは
型を読めないと全体が読めないメソッドなど書くべきではないということ
そもそも型を読まなくてもいいならvarを使わない理由を考える必要などない
2017/07/30(日) 22:57:08.87ID:uiXc0u2O0
プリミティブ型以外は全部varだわ
2017/07/30(日) 22:57:14.29ID:/FPaeL7f0
>>195
メソッド1個しか読まねーわけじゃねーじゃん
じゃあ30万行のコードのプロジェクトがあって1万行もvarがあったら
1万回もマウスの素振りすんだぞオメー

単純に害にしかならないと思う
varを本来の型に1発変換できるリファクタリングができればえーけどね
2017/07/30(日) 23:01:58.42ID:hMQywZRx0
>>199
しねーよアホ
当てなきゃわかんない書き方がクソなんだよ
2017/07/30(日) 23:04:19.66ID:/FPaeL7f0
>>200
それをアホにわかるように説明するのが難しい
なので一律でvar禁止が楽

これを禁止で困る奴がこの世にいない
2017/07/30(日) 23:11:55.64ID:RXgrd63BM
var禁止はめちゃ困るわ
いちいち書かなくてもいい型を書いてたら手が疲れるじゃん
単純に文字数が多いだけでも読みにくくなるし最悪
2017/07/30(日) 23:16:40.71ID:QVOgnQhb0
C#2.0で止まってる老害結構いるやろ
LINQ禁止すらあるんやろ
2017/07/30(日) 23:18:15.40ID:hMQywZRx0
>>201
Microsoftのコーディング規則に違反するってツッコミには何も反応せずにオレオレ理論かよ
2017/07/30(日) 23:18:42.38ID:X0A6ZRSXM
>>201
俺は型を明示するタイプだがvarを否定はしない
限られた区域内で扱われる分にはとても効果的だと思ってる
2017/07/30(日) 23:19:44.46ID:ZiKC4drW0
>>205
大体の人はそんなもんだよね
2017/07/30(日) 23:22:03.74ID:FlO7tdYLa
またアルルハイマーどものが繰り言言い合ってるのか。

繰り言を楽しく感じる奴は比喩じゃなく本当に病気だからマジでまずは精神科で
診てもらった方がいいよ。これ本当にそう思う。
重症化してからではもう遅い。
2017/07/30(日) 23:22:49.91ID:/FPaeL7f0
>>204
誰が言ったかを強調するやつとまともに話をする気はない
それにMSなんて後5年持たない
どうでもいい
2017/07/30(日) 23:24:28.64ID:5An4udmXd
>>208
5年もたないワロタwwwお前なんでこんなところいるんだよwww
2017/07/30(日) 23:25:50.29ID:brVl3K5IM
>>208
MSが死んだらC#も確実に消滅するんだからその仮定は意味を持たない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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