X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/11/28(火) 21:30:48.55ID:7U+HR4FY
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

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

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

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

■情報源https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0412デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:09:21.56ID:HHgBYreh
enumなんて存在すら忘れてた
もうクセでデータ保持するクラス作っちゃってたわ
やっぱ固定値の列挙はenumの方がええんやろか
0413デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:10:43.29ID:1RSLLPBx
>>411
それでいいよ
ビジネスが入り組んできたらクラスにリファクタリングすればいい
俺は最初からクラスにしてるけどね
0415デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:16:05.80ID:KNXh5gp+
enumをクラスにするという考えがあることが根本的な設計のセンスの無さを感じる
0416デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:18:31.13ID:u72ghqtY
そのenumを置き換えたクラスを使う場所が100個あって後段でそれぞれ違う処理(メソッド)が必要なら
100個のクラス*100のメソッド=10000必要になる
本当に管理しきれるのかな

記号は記号でしかないと思う
0417デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:23:13.06ID:1RSLLPBx
君たちはさC#を使ってるけどOOPはできてないんじゃないかな?
たぶん昔ながらの手続き型のパラダイムから進歩してない
フィールドやプロパティは丸出しで
データベースの物理構造を色濃く反映したDTOを
ネストしまくり分岐しまくりのやけに長いトランザクションスクリプトで処理する
そんなコードばかり書いてるんだろ?
0418デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:27:02.30ID:1RSLLPBx
>>416
仕切れるよ
疎結合高業務で責務がしっかり分けられてるからね
というかそれで管理できなかったらクラスという枠組みを失い無秩序状態になった同じ数(経験上もっと多くなるが)の処理なんて余計に管理できないだろ
0419デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:28:10.84ID:RKQe6ZfS
>>417
キミ自身、キミの言う「昔ながらの手続き型のパラダイム」でキミの考える最強の「OOP」をしとるんやで
もう少し脳を鍛えようか?ね?
0420デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:28:59.49ID:0VP/mrFZ
滅茶苦茶レベルの低いところで仕事してるんだろうなあってのは伝わってくる
0422デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:32:15.18ID:1RSLLPBx
>>421
疎結合だよ
クラスにすればenumを使う側はenumの振る舞いの実装を知らなくていい
クラスにすればある値と他の値の処理が同じスコープで干渉しなくて済む

こんな基本もわかってないんだよなぁ
ま、初心者スレってことか
0423デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:36:46.16ID:O8bRFaEo

   ̄ヽ、   _ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     `'ー '´
      ○
       O
          ,.- ‐── ‐- 、
            ,r'´            `ヽ   
           ,イ              jト、   
        /:.:!       j     i.::::゙,  
          i:.:.:|    _,,    ,、--、  !:;;;;|  
         |;;;;j ,r''"二ヽ   r'⌒ヽ  !;;;!   
       ,ヘ;;i! ,,_r ・,ン.:!  {〈・_,>、,, jヘi!   
       〈 j>j、   "´, イ   `ヽ  ,':::〉!  
        `ゝ.`,     ノ、__,入   j::rソ  
           `゙i   / ,r===ュ, `,  '.:〔_  
             }!  ! i.:::::::::::.:! ;!  .!::::j::`` ー----─r- 、
           , イ.:ト、   ゙===='′ ,イ!:::::!::.:.:.:.       ゙,  `ヽ
       _ノ /j.:::!:トヽ、 ´ ̄` ,ノ´ ,リ::::.:!:::.:..      i.    \  
     ,.r'´  /.::!:::::::| `ヽ`"""´ /ノ.:.:.:.:.::!:.:.         |     !
   /      .:|.:.:.:::ト、 リ   /     !:.         !     |
  /       l  , へ\!  /'7ヽ    |:        j       |
. /           l/^ヾ:::ト、!  j! l  〉、   |        | .      |
/       i       .::| i|  j! | /  `ー'′       ! j!      !
0425デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:40:38.39ID:0VP/mrFZ
enumの使い所を間違えるようなレベルの人間でないと共感は得られないと思う
0427デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:46:34.91ID:YjUTAOlB
ステータス(状態)をクラスにしちゃうと色々と説明が必要になっちゃうけどな
もっと素直に設計できねぇの?
お前らの剣は無駄な動きが多過ぎる
0431片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/12/10(日) 19:52:02.61ID:M7uFif4k
例外は制御がぶっ飛ぶやつ。
エラーは、正常に処理ができなかったという意味。
0433デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:58:57.63ID:in4pjWGE
>>428
ここで言っている例外はtry-catchでcatchで受けられる処理(Application Exceptionの類)の話
そのエラーの意味が何に対するエラーなのかわからないので違いは説明できない
0434デフォルトの名無しさん
垢版 |
2017/12/10(日) 19:59:05.93ID:0VP/mrFZ
enumだらけの.net frameworkを、enumじゃなくてクラスにしろよなんて思いながら使ってないだろうよ
0435デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:01:31.79ID:1RSLLPBx
>>434
ベーシックライブラリと業務システムのドメインロジックを同じ感覚で書くプログラマは居ないよ
0436デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:04:07.99ID:0VP/mrFZ
>>435
だから普通は使い所をわかってるから、こんなこと何の議論も起こらないよねって話じゃん
0439デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:17:38.09ID:in4pjWGE
このスレ来ている時点でみんな初心者。スレタイに「初心者用」ってちゃんと書いてあるから
0440デフォルトの名無しさん
垢版 |
2017/12/10(日) 20:41:13.41ID:o/NiMYKz
初心者ならいいんだけど、初心者を卒業したと勘違いしてる ID:1RSLLPBx が痛々しいだけ
0443デフォルトの名無しさん
垢版 |
2017/12/10(日) 21:46:32.27ID:Uujd9YQH
計算量の観点で比較すると
switchはコンパイラが2分探索にしてくれる場合がある O(log2(N))
クラス化はインスタンス生成された時点で仮想関数テーブルが紐付く O(1)+ディスパッチのコスト
で合ってる?
0445デフォルトの名無しさん
垢版 |
2017/12/10(日) 22:12:18.04ID:Uujd9YQH
>>444
C#はジャンプテーブルも使うみたいですね
この比較はあんま意味ない気がしてきたので閉めます
0447デフォルトの名無しさん
垢版 |
2017/12/10(日) 22:37:53.36ID:8I95hEEE
仮想メソッド呼び出しはJITがインラインキャッシュで展開するからコストはほぼゼロのはず
0449447
垢版 |
2017/12/10(日) 22:39:14.02ID:8I95hEEE
補足
展開っていってもインライン展開するわけじゃないよ
静的なメソッド呼び出しに置き換えるということ
0453デフォルトの名無しさん
垢版 |
2017/12/10(日) 23:47:37.64ID:u72ghqtY
shapeクラスをベースに持つrectangleとcircleクラスの挙動をswitchで制御してるならOOPに反すると思うけど
確固たる概念も実体もないものをわざわざクラスにしてまでenumを消す理由はない

普通のマジックナンバー代わりの記号がenum
オブジェクト間でクラスがメッセージをenumで渡すだけ
上手に使えばいいだけ
0456デフォルトの名無しさん
垢版 |
2017/12/11(月) 00:13:22.40ID:duNhD2vY
実体の無い物をクラスにしたらドキュメント書けよと
それだけだけどな
書かないでやってる奴はギルティ
0457デフォルトの名無しさん
垢版 |
2017/12/11(月) 00:24:03.35ID:ZlOMrHZS
メッセージがただの記号だったのにクラスになるとオブジェクトの生成や
必要に応じてライフタイム管理が必要になる

しかも作ったオブジェクトに処理を移譲したり他のオブジェクトを渡したりして新たなオブジェクトと結合が密になる恐れがある
そこまでしないなら記号の受け渡しで済んだものがクラスの管理が増えるだけでメリットは薄い
0460デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:32:07.64ID:Pz9H8j59
> オブジェクトの生成
状態変わらないのだからpublicなstaticメンバで持てばよい

> ライフタイム管理
そんなに気になるのならstructにすればよい

> 処理を委譲したり(最後まで)
全く意味不明
0461デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:37:46.08ID:PAoZtWNN
一晩経っても負け惜しみ言ってるやつ居てわろた
せめて反論したらどうなの?

>>457
メッセージを列挙値で済ませようとする発想がまずチープだがまあいい
RegexOptionsみたいな場合もあるからな
問題はドメインオブジェクトを列挙値で表現してしまうケースな
昨日から議論してんのはメッセージの話じゃないんだよそもそも
君はまだそこを理解してない
0462デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:40:03.91ID:Pz9H8j59
どうしてもenumにこだわりたいのなら
Attribute付加
拡張メソッド作る
こんな手段はある
0463デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:44:48.49ID:PAoZtWNN
他のオブジェクトとの関連云々ってさ
べつに列挙値からオブジェクトにしたから急に関連が出てきたものじゃないんだよね
ドメインの性質としてもともと本質的に関連があるものなんだよそれは
それがオブジェクトにしたことによって可視化されただけ
列挙値のままだと関連があるのにそれがハッキリと見えず暗黙の結合状態になってるだけ
それはまさに最悪の状態だよ
0464デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:50:22.92ID:DFoAuevB
設計書の構造に箱ができないものをクラスにするのはセンスが悪いな
こんなゴミクラスたくさん作っちゃってクラス図でどうやって説明するの?
0465デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:56:14.04ID:DFoAuevB
汎用ライブラリにでもぶち込むならともかく
こんな枝葉までクラスにされるとソースの粒度に統一感がでない
ステータスなんかクラスにすんなよ
ドキュメント書くのが面倒くせえだろ
それはイコール他人に説明する手間が増えてることだと気づけよ
どーせドキュメント書かないんだろお前馬鹿だから
0466デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:36:16.99ID:SJ7HWrxD
他人に説明するためのドキュメントは確かに書かないな
ソース見たほうが早いし間違いがない

ソースコードが設計書である

俺が馬鹿かどうかに関係なく、
アジャイルやGOAでやるとどこでもそうでしょ
0468デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:41:22.91ID:ibPW1Iwl
ちょっと昔な感じだな
今は当たり前にドキュメントを書いてる時代だと思うけど
0470デフォルトの名無しさん
垢版 |
2017/12/11(月) 09:48:35.34ID:kESkT9Ub
おはようございます。(改行大杉で怒られたので行間を詰めています。

現在押し付けられて困っていることがありご教示いただければと思っております。
環境:フレームワーク4.71 + MVCフレームワーク5OS:Win2012

現在上記環境で動いているシステムがあり、
いくつかのリクエスト文字列と画像ファイル1つをマルチパートで受け取るシステムがあります。

今回、アンドロイド側のJAVAアプリからデータをマルチパートでPOSTしてくる予定だったのですが
時間不足で実装できないと言われ、データを以下のように送ると言ってきています。
(AndroidといえどJavaと同様なのでマルチパートのOutputStreamを作成して送ってくるだけだと思うのですが…。)
1.ファイルをバイト配列に変換
2.そのバイト配列をBase64エンコード
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
上記の仕様だそうです。
そこで上記の逆手順を…と思い
考えれる範囲で
1.リクエスト文字列をUTF-8バイト配列に変換
2.そのバイト配列をChar[]に変換
3.Char[]をFromBase64CharArrayでバイト配列に変換
とやってみたのですが
System.FormatException: 入力は有効な Base-64 文字列ではありません。
上記例外が当然のように発生します。
単純にアンドロイド側からBase64で送ってもらえればそのままデコードできるのですが
それも突っぱねられて困っています。
そもそもこの逆変換が技術的に不可能なようであれば相手側に強く言うこともできるのですが
その根拠が示せず言い出せません。
1.そもそも可能なのか?
2.手順的にはどのようにするのがよいのか
ヒントだけでも構いませんのでご教示いただければと思っております。
以上です。
0472デフォルトの名無しさん
垢版 |
2017/12/11(月) 10:11:54.42ID:kESkT9Ub
>>471
ありがとうございます。

あぁ、なるほど!
該当ファイルをBase64文字列にして
その差を比較してみて両者が合うように変換していってみる
ということですね。
ちょっとコツコツやってみることにしてみます。
0474デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:02:38.34ID:0NyrcvQf
switchを無くせって話、WPFとかのMVVMにちょっと似てるね

どっちの場合も原理主義者が主張するような美しい理念がワークするのは、
ある一定の条件というか閾値を超える事例だけであって、それ以外の場合は
かえって可読性とか保守性とかが低下すると思うんだけど、原理主義者がそういう現実を
無視して何にでも適用可能な万能の方法みたいにごり押ししてる感がある
0476デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:12:00.53ID:LDcEcB6H
もういい加減組めちまってる奴は
次の課題を自分で探さないといけない

プログラムスキルは組めるようになったら
そこでMaxなんだよ
さっさと次の課題を探さないから
どーでもいいことが意味ありそうに思えてくる
0477デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:58:53.47ID:WHbaikY8
>>378みたいなケースでswitchをなくせ
って言うのはそりゃそうだなって思うけど
そもそも>>378の最初の方の組み方がおかしいだけでenumの問題じゃない
それを>>378の例だけでswitchをなくせと言うならまだしもenumなくせとか言い出すから頓珍漢なことになってるだけ
0478デフォルトの名無しさん
垢版 |
2017/12/11(月) 13:49:25.47ID:jxfuchh+
>>743
レスありがとうございます。
相手が手順的にBASE64のバイト配列をUTF8文字列にして送ってくるようだったのでその手順が必要なのかな…と思いまして。
そもそも何故バイト配列からBASE64の文字列にダイレクトにしなかったのかと…。おもいつつです。
0479デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:28:30.74ID:MTsA4uB/
>>470
元の仕様
1.ファイルをバイト配列に変換
バイト配列ができる
2.そのバイト配列をBase64エンコード
ファイルをBase64エンコードした文字列ができる(仕様上UTF-8でもシフトJISでも同じ)
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
これが何の変換かわからない(2.の理由により必要がない)

まず元の仕様を勘違いしていないか?
その上で逆手順のテストコードバグっているから不必要にややこしくなってる
0480デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:39:40.21ID:FZFaQSBJ
ファイルをバイト配列に格納→をBase64に変換

Base64をバイト配列に変換→バイト配列をファイルとして保存
0481デフォルトの名無しさん
垢版 |
2017/12/11(月) 15:45:33.14ID:MTsA4uB/
>>470
あとBASE64の文字列の長さは4の倍数でConvert.FromBase64CharArrayにそれ以外の長さのChar[]を指定するとエラーになる
不足分を自分で埋める('='で埋める)必要があればそれもやらないと
0482デフォルトの名無しさん
垢版 |
2017/12/11(月) 16:00:32.40ID:JAdbtKtz
多分UTF-8のBOMの有無でずれているんだろうな
手順がいくら増えようが不可逆になることはない
0485デフォルトの名無しさん
垢版 |
2017/12/11(月) 19:55:13.88ID:WHbaikY8
>>483
お前が誰か知らんけど

>>376
> ダメとは言わないがコード整理するとenumが自然と消える

とか言ってたアホがいるって話
0490デフォルトの名無しさん
垢版 |
2017/12/11(月) 22:59:42.23ID:SJ7HWrxD
goto文をなくせの頃から何にも変わってないな

gotoをなくせ
enumをなくせ
switchをなくせ
シングルトンをなくせ
ヘルパークラスをなくせ

一応どれも正しい
間違ってはいない

でもこういうルールは別に守らなくてもいい
どうでもいいルールなんだよ

DRY原則とかOpen/Close原則とかの設計原則の方がより重要あってね
0491デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:06:06.50ID:+NqpgsqU
どっちでもどうでもいいよ
どうせ動くんだし
テストをしっかりすればいいだけ
0492デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:22:47.89ID:Mf9o9uwW
gotoとenumの間にはかなり差がある気がする
前方へgotoは絶対悪だから使用厳禁
ドメインのenumと同じかw
もうちょっと緩いと思うが
switchはパターンマッチとして使うのは推奨なご時勢だけどC#のswitch構文は力不足だね
0494493
垢版 |
2017/12/11(月) 23:40:04.94ID:izyLx6FJ
書いてから気付いたが前方参照の意味での前方か
失礼
0495デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:43:50.74ID:wiZ77PPl
>>490
ルールと呼ぼうが原則と呼ぼうが本質は何も変わらんよ
要するにバカの暴走を制限する為の足枷でしかないw
0496デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:54:41.55ID:SJ7HWrxD
>>495
〇〇をなくせというルールが馬鹿にたいする足枷でしかないのは全くその通り
だから俺みたいな賢人にはどうでもいい

逆に馬鹿に設計原則は理解出来ないだろう
SOLID原則が理解出来るならそいつは馬鹿ではない
0497デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:01:45.14ID:98iDbaWn
>>496
表面的な理解で原理主義に陥いってしまう奴は沢山いるし
本質的にそいつはバカなんだと思うよw
それは理解してないのだと言われればそれまでだがw
0500デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:26:32.44ID:98iDbaWn
抽象的な話になると必ずこういうレスがつくなw
これもバカの典型w
0503デフォルトの名無しさん
垢版 |
2017/12/12(火) 01:33:06.37ID:lIsHmOMn
初心者用スレで難しい話すんなよ
俺みたいな趣味グラマーが楽しめないだろ
0510デフォルトの名無しさん
垢版 |
2017/12/12(火) 21:31:34.33ID:CwRQgOlO
tensorflow+keras+c#で
エロ画像を自動分類するソフトを
作って欲しいと頼まれたんだけど
c#から出来そうですか?

参考になるサイトないですか?
■ このスレッドは過去ログ倉庫に格納されています

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