21/02/04 16:17:55.89 TgPbTxkL.net
>>46
古いことしか知らなくて申し訳ないけど
excelのシート操作時の解放とか面倒なんでvb.netで書いちゃうけどそんなことないのか?
51:デフォルトの名無しさん
21/02/04 21:06:21.96 ZtMmgGts.net
>>48
安心した。pythonなんて埋め込みに一番向いてなさそうな言語なのにどうするんだろうと思ってた。
52:デフォルトの名無しさん
21/02/04 22:30:48.72 QcsaodMG.net
>>51
Python埋め込みに向いてないってどうして?
BlenderもMayaも3DS MaxもPythonでいい感じにスクリプト組めるよ。
53:デフォルトの名無しさん
21/02/04 22:48:54.62 ZtMmgGts.net
javascriptならdllひとつで組み込めたりするのに、embeddable pythonなんて
embeddableと言いながら結局実行環境まるまるコピーしてるようなものだし。
54:デフォルトの名無しさん
21/02/04 22:55:28.26 QcsaodMG.net
実用に耐えるクロスプラットフォームなJavaScriptの実行環境はdll一つで組み込めんでしょ。
実行環境内包する事のどこがおかしいのかわからんが。
MS製品でいうと、すでにPowerBIなんかだとPythonで書いたモジュールでグラフ描いたりできるよ。
埋め込みに向いてないってのは知らないだけの無知でしょ、流石に。
55:デフォルトの名無しさん
21/02/05 07:39:08.16 5Tgc7yvD.net
できるできないじゃなくてどれだけ向いてるかって話な。
埋め込みならlua mruby python javascriptと一通り試したことはあるが。
>実用に耐えるクロスプラットフォームなJavaScriptの実行環境はdll一つで組み込めんでしょ。
msのjavascriptエンジン(chakra)は実際dllひとつだけ。
56:デフォルトの名無しさん
21/02/05 07:51:45.21 km3pMqV5.net
>>55
すまん、Chakraそうだったのか。そりゃ便利そうだな。
ちょっと興味あるんだけど、ファイルとかのIOとかはどうなるの?ホスト言語側で持たないと?クロスなの?
日頃MAXとMayaとでごちゃごちゃやってUnity用アセット管理したりしてるけど、結構向いてると思うよ、Python。
57:デフォルトの名無しさん
21/02/05 08:26:53.87 5Tgc7yvD.net
I/Oは全部ホスト側で用意しなきゃならないね。埋め込みとしてはそちらの方がありがたいけど。
58:デフォルトの名無しさん
21/02/05 08:41:45.27 uaJ+yOd+.net
なるほど。IOを再実装しないといかん事の是非は、埋め込みをどのように使うかだろうなぁ。
ファイル一覧とか触りたいときは標準のライブラリが使えたほうがだいぶ楽だし、そのアプリ専用のコマンドが減れば減るほどありがたいと思う方。
ユーザに開放するか開発者に開放するかどっちかってやつかもね。
59:デフォルトの名無しさん
21/03/28 20:18:17.69 AfIP7Kkq.net
ふらっと C#,C♯,C#(初心者用) Part150
スレリンク(tech板)
の
>>44-50
横から便乗で質問ですけど、
「いつか使うだろう」とインターフェースや継承関係を作っておく自体は推奨されることですか?
例えば、インターフェースや継承関係が無くても、直付けで作れてしまう訳じゃないですか。
むしろ、そっちの方が楽(というか、直付けでしか作れない人もいますし)。
ただし、物事が複雑化してきたときに、インターフェースや継承関係があると拡張しやすい。
これって上級者なら、(どんなに小さいプログラムだろうが)常にインターフェースや継承関係を作った方がいいのか、
それとも、ケースバイケースで「このぐらい複雑ならインターフェースや継承関係が要る」という判断基準に則って作った方がいいんですか?
60:デフォルトの名無しさん
21/03/28 20:34:19.07 XhrJbcfF.net
ドキュメントの用意ができるかできないかでも違ってきそうな気がする
61:デフォルトの名無しさん
21/03/28 20:45:56.60 AfIP7Kkq.net
>>60
なるほど、その回答は暗に「ケースバイケース」と言っていますね。
62:デフォルトの名無しさん
21/03/28 21:03:33.98 aCkXL8Lz.net
>>59
あくまでチーム開発が前提にはなるが、インターフェイスを作るなら、今取り組んでいるタスク(pull request)のコードの中で必要性を示せ
一番分かりやすいのはモックして単体テストを書くことだな
それが示されてない限り俺ならリジェクトするよ
63:デフォルトの名無しさん
21/03/28 21:04:39.00 8DGgAvpz.net
>>59
普通はやってはならないが常識
その設計と拡張方向の正当性が問われる事態になる
その時~な気がするではなくキチンとビジネスで通用する説明ができないと窮地に追い込まれる
ただドキュメントを書かない現場というのもあって
そういうところでは担当者の趣味で付けてしまう
64:デフォルトの名無しさん
21/03/28 21:53:06.83 AfIP7Kkq.net
>>62-63
なるほど、納得です。
一番合理的な意見でよかったです。
インターフェースや継承についての本やネットの記事では、
なんでもかんでも拡張できるように書くような勢いで、
しかも読んでる最中は確かにそうすべきかなと思ってました。
でも、実際に使おうとすると、どこまでやっていいのか迷ってました。
YAGNIに沿って「必要になってから作る」でいいんですね。
65:デフォルトの名無しさん
21/03/28 21:59:13.76 Ah6uwjvI.net
>>59
継承関係に関しては明確に必要な場合か
事前のアーキテクチャ設計方針で決まってる場合以外には使わないかな
インターフェースに関しては依存性の方向を変えたかったり
結合度を下げたかったりする明確な理由があれば良いと思う
(「いつか使うだろう」という理由とはちょっと違うけど)
依存性の方向は大事
66:デフォルトの名無しさん
21/03/28 22:00:39.57 yHCir1no.net
王位継承権のように順位をつけるべきでは?
67:デフォルトの名無しさん
21/03/28 22:06:31.86 Ah6uwjvI.net
例えば
あるライブラリを後で違うものに入れ替えられるように作っておきたい
というのでも十分な理由
入れ替え可能にする手間や増加するコードの複雑性と
呼び出し側の変更なく入れ替えが可能な柔軟性とのトレードオフ
関数のある処理をヘルパー関数として抽出するべきか
そのままインラインで書いておくべきかというのと考え方的には大きな違いはない
68:デフォルトの名無しさん
21/03/28 22:54:02.07 AfIP7Kkq.net
>>65-67
> 継承関係に関しては明確に必要な場合か
> 事前のアーキテクチャ設計方針で決まってる場合以外には使わないかな
これは明確な回答ですね。
つまり、例えば大学の学生証管理システムだとすると、Studentクラスで直にコーディングして、
後にアーキテクチャ設計方針がひっくり返されて「教授も身分証作ったから足してくれ」となった場合は
Person→Student, Person→Professorのような継承関係にするわけですね。
それまでにStudentに直に結び付けて作ったメソッドなどは一部作り直しになりますが、そこは許容するスタイルですね。
> インターフェースに関しては依存性の方向を変えたかったり
> 結合度を下げたかったりする明確な理由があれば良いと思う
> あるライブラリを後で違うものに入れ替えられるように作っておきたい
…と言われると、依存性は低い方が良いに決まっていますし、
あるライブラリを後で違うものに入れ替えられるように作っておいた方が良いに決まっていますよね?
そして、未来は予測できないので、その工夫が後に活きてくるか無駄になるかは不明です。
つまり、
> 入れ替え可能にする手間や増加するコードの複雑性と
> 呼び出し側の変更なく入れ替えが可能な柔軟性とのトレードオフ
つまり、工数として、
入れ替え可能にする手間や増加するコードの複雑性 > 呼び出し側の変更なく入れ替えが可能な柔軟性
か
入れ替え可能にする手間や増加するコードの複雑性 < 呼び出し側の変更なく入れ替えが可能な柔軟性
かは不明です。
このトレードオフをどのように決めていますか?
>>62-63さんは「今、不要な機能なら要らない」という指標を示して下さいました。
69:デフォルトの名無しさん
21/03/29 00:35:35.42 kW6kUd5H.net
>>68
>…と言われると、依存性は低い方が良いに決まっていますし、
>あるライブラリを後で違うものに入れ替えられるように作っておいた方が良いに決まっていますよね?
決まってないよ
Rails使ってWebアプリ開発する場合ならActiveRecord以外のORMに入れ替えられるように作っておいたほうがいい?
Rails以外のフレームワークに入れ替えられるように作っておいたほうがいい?
JavaScriptでReact使う場合ならReact以外のフレームワークに呼び出し側の変更なく入れ替えられるように作っておいたほうがいい?
jQueryやlodash使う場合は他のライブラリに入れ替えられるよう作っておいた方がいい?
状況に応じてどこまでを許容するかの線引きをするんだけどその線をどこに引くのかはケースバイケース
要件、組織、ライブラリの品質/将来性/安定性/重要性、変化の方向性などを総合的に判断することになる
それと結合度を下げる方法はインターフェース以外にもある
インターフェースでより重要になるのは依存性の方向
70:デフォルトの名無しさん
21/03/29 00:45:34.96 kW6kUd5H.net
>>68
>Person→Student, Person→Professorのような継承関係にするわけですね。
それは継承関係が明確に必要なケースじゃないから作らない
71:デフォルトの名無しさん
21/03/29 02:24:21.84 9yINXZUI.net
知識と経験が乏しいから勝手に~しかないって決めちゃってる場合がほとんどだよね
72:デフォルトの名無しさん
21/03/29 02:27:48.16 9yINXZUI.net
windowsとLinuxを切り替えられるように作っておったアホがいたけど
そもそもそんな要件ないのにプロジェクトに過剰な負担を強いただけのアホだったと思う
アホってこういうの勝手に入れちゃうんだよね
お前の趣味だろそれって
73:デフォルトの名無しさん
21/03/29 07:31:15.62 w2mFGclo.net
最近、というかいまさらながらDDDに挑戦したんだが
リポジトリクラスのインターフェース作ることで、DBに依存しないテストをすることができるということがやっと理解できた
私はアホなので手を動かさないと理解できないのだ…
本やネットと睨めっこしててもダメなのだ…
74:デフォルトの名無しさん
21/03/29 07:34:46.96 2VNxxGaX.net
JDBCはその目的で作られたはずなんだが
75:デフォルトの名無しさん
21/03/29 07:37:09.01 2VNxxGaX.net
HibernateもMyBatisもそのはずなんだが
なぜもう一枚レイヤーが必要だったのか
76:デフォルトの名無しさん
21/03/29 07:38:34.20 2VNxxGaX.net
ビジネスロジックを全部自前のクラスで固めて
世間に依存しないようにしましょうということだったのだろうか
77:デフォルトの名無しさん
21/03/29 08:46:53.61 z3NFX8KE.net
実用的にはほぼDAOだよ
テストの時に小回りが利いていいかなーって程度だな
DB乗り換えみたいな超絶レアケースを利点に挙げてる奴はどうかしてると思う
あとビジネスロジックをRepositoryに書くと原理主義者に殴られるから要注意な
俺は殴んないけど
78:デフォルトの名無しさん
21/03/29 08:48:15.09 z3NFX8KE.net
×DB乗り換え
○ドライバーが無いようなDBへの乗り換え
79:デフォルトの名無しさん
21/03/29 12:08:39.12 y7wcwcm/.net
費用は安ければ安いほど良いに決まってますよね
速度は速ければ速いほど良いに決まってますよね
機能は多ければ多いほど良いに決まってますよね
いや、機能は少なければ少ないほど良いに決まってますよね
おっぱいは大きければ大きいほど良いに決まってますよね
こんなのは子供の考え方に決まってますよね
80:デフォルトの名無しさん
21/03/29 15:27:05.10 K2k3tipf.net
実際に経験せずに机上だけで理解しようとしてるからそういう発想になるんだろうね
おそらく学生さんだろうから生暖かく見守ってあげれ
81:デフォルトの名無しさん
21/03/29 20:02:35.07 2VNxxGaX.net
自分も生あったかい目で見られてたから
とやかくいうつもりはないが
なんでできないやつにばっかりやらせるんだよ!
できるやつがやって下に教えりゃいいんじゃないの?!
82:デフォルトの名無しさん
21/04/13 19:45:32.34 arsZDomX.net
コメントの要否・コメントの内容について
コメントには「なぜ」を書くのが原則
処理の内容はコードを読めば解ることなので不要と考える
83:デフォルトの名無しさん
21/04/13 19:55:52.28 WoYnxMFx.net
俺はコメント入れてほしい派
読めば判るっつってもさ、
コード書いてる本人ですら
何やってるか分かってない場合もあるからな(笑)
せめてコメントで
「ここではこんなことをしてる(つもり)」
って書いてくれら「全然そうなってないだろ!」と突っ込める
84:デフォルトの名無しさん
21/04/15 06:46:40.67 S1KqOAhX.net
ぱっと見で複雑な処理の概要をコメントに書いてるわ
他人や将来の自分がなるべく素早くコードを読めるため、ってつもり
85:デフォルトの名無しさん
21/05/04 12:03:49.50 mq0qLgJb.net
細かいところを省略してエッセンスだけ書くのは勝手だけど、実際に運用していくときに出てきそうな問題点の指摘を無視するのは違うでしょ
むしろID:/WM42vypMの言う本質ってなんだったんだろうな。最初は書くのが楽になるしか言ってないような気がしたが
最終的にはテストが楽に書きたいに変わってたし
そも書き手1人が楽になるより全体の可読性や保守性が重要だろうし、関数のシグネチャだけじゃ表現しきれないケースがあるだろうって指摘だったろうに
86:デフォルトの名無しさん
21/05/04 12:28:40.76 9VBk1Szv.net
問題が散逸してるように思える。
インターフェイスではなくて、関数を渡すといっても、そのシグニチャは結局どこかで定義することになるし。
これが勘違いなのかな。delegate宣言せずにいきなりAction<string> callbackみたいに受けるんだろうか。
これはこれでめちゃくちゃ密結合な気がするんだが。
単独アセンブリとか、単独ソリューションだから成立するような気がする。
モックフレームワークは確かに難解だけど、まずモックオブジェクト自作して困ってからでいいと思うし、そもそも必要になるのは、それこそラムダで部分的に処理を突っ込むのと同じの、依存性の注入を行うからだと思う。
特別扱いしてるインターフェイスはフェアではないと言うが、インターフェイスだから特別扱いできるんだろうし。
拡張メソッド生やすのも簡単だし、Linqなんか器用にやってると思うんだけどな。
87:デフォルトの名無しさん
21/05/04 14:09:50.83 c21jxOwi.net
横からごめん。
>>86
>delegate宣言せずにいきなりAction<string> callbackみたいに受けるんだろうか。
delegate と Action / Func って実質的な違いってあるんだっけ。
delegate を使用しないから密結合になるってのが理解できなかった。
88:デフォルトの名無しさん
21/05/04 14:23:12.84 9VBk1Szv.net
>>87
実質的な違いは無いよ。
ただ、Interfaceで定義するなり、delegateを用意しておくなりしないと、
呼ぶ側、呼ばれる側(≒コールバックを返す側)どちらも、今から使う関数の引数を直接的に知っている事が前提になるんじゃない?
ホントにそれ差し替え可能なのかな。
89:デフォルトの名無しさん
21/05/04 15:19:18.88 9VBk1Szv.net
あいつは何なんだ。
90:デフォルトの名無しさん
21/05/04 15:27:57.73 c21jxOwi.net
>>88
ありがとう。
自分的には Action / Func でも delegate と同じに思えるけど、そう言う価値観もあるのだと理解した。
91:デフォルトの名無しさん
21/05/04 15:39:43.41 mq0qLgJb.net
> 呼ぶ側、呼ばれる側(≒コールバックを返す側)どちらも、今から使う関数の引数を直接的に知っている事が前提になるんじゃない?
その辺は別モジュールなりトップレベル関数なりに宣言すれば良いって言ってた
そこまでするならインターフェース継承したクラス宣言するのと殆ど変わらないと思うんだけどな
それこそ↓で書かれてるような、フィールドに外部から渡されたインターフェース(private IY y)を持つかどうかの1,2行の違いしか無いと感じた
スレリンク(tech板:651番)
そんで、ここに保持するインターフェースは冗長なのではなくて、
このクラスはこのインターフェースを使用して処理を行うという宣言みたいなものだと思ってる
classXのfooメソッドからしたら呼びだし元を確認することなく最低限の挙動が保障されるし
>>90
表現の違いじゃない?
delegate=ActionとFuncの総称だと思ってるので、自分はこう読んだよ
「どこか別の場所でAction宣言せずに、いきなり匿名関数なりで定義したものをAction<string> callbackみたいに受けるんだろうか。」
92:デフォルトの名無しさん
21/05/04 15:53:19.15 9VBk1Szv.net
>>91
別モジュールを前提に考えてたなぁ。
インターフェイスを継承したクラス宣言も、必要なシーンでは必要だと思ってるんよ。
関数を渡すとしても、Func<T,TResult>のTResultは、インターフェイスになりがちで、それを無理に解決する必要は無いと思うんよね。
Loggerとか、データベースへのコネクションなり。
93:デフォルトの名無しさん
21/05/04 16:17:57.34 9VBk1Szv.net
属性をデコレータというかAOPを主目的としてる人、初めて知ったんだけど、偏ってない?
94:デフォルトの名無しさん
21/05/04 17:25:07.47 7QH9BmBJ.net
>>93
シリアライゼーション、属性バリデーションはAOPの一種だと考えてるので違和感はないかな
95:デフォルトの名無しさん
21/05/04 18:11:31.11 9VBk1Szv.net
>>94
AOPの一種か。微妙に納得いかんな。
シリアライズするときに入れる共通処理のための属性という事だろうか。
96:デフォルトの名無しさん
21/05/06 03:16:24.05 i9c/0LkH.net
横から失礼
virtual func と delegateの違いは状態を持つかどうかじゃないの
97:デフォルトの名無しさん
21/05/06 09:30:26.23 /bC2jc3v.net
>>95
シリアライゼーションという横断的な関心ごとをシリアライザという単体の機能に分離して管理する
これはまさしくAOPの特徴
98:デフォルトの名無しさん
21/05/17 09:06:11.62 ukB7joMl.net
privateフィールドにはプレフィックスを、の件、
キャメルケースだのスネークケースだの言ってる奴ばかりで、
this.について触れてる奴一人だけなの草
99:デフォルトの名無しさん
21/05/17 11:23:18.09 jha2r4tC.net
自転車置き場すぎて気にしてなかった
100:デフォルトの名無しさん
21/05/17 18:51:24.93 ouC7xxTJ.net
デフォルトでthis.が削除対象になるから使ってねーわ
101:デフォルトの名無しさん
21/05/28 10:10:27.34 bKZdxO87.net
c#で心掛けるのは、処理速度より開発速度とか省ステップでいいのかな。
どうしてもStringBuilder使うの面倒だから文字列を足し算してしまう。
102:デフォルトの名無しさん
21/05/28 10:13:12.28 nxnFhRam.net
C#はバランスタイプだよ
開発速度などで言ったらTypeScriptとか他の言語には勝てない
103:デフォルトの名無しさん
21/05/28 12:30:03.15 +US5DWqq.net
>>101
他の言語と同じで、普通は開発速度とか重視でいい
で、速度が必要な部分のみ速度重視
104:デフォルトの名無しさん
21/05/28 12:34:59.00 WzBNxoJG.net
Typescriptって開発速度で優位なんだ
逆にtsの弱点ってなんなんだろ
105:デフォルトの名無しさん
21/05/28 19:35:58.43 hvuiLCOu.net
型嫌いが怒る
106:デフォルトの名無しさん
21/05/28 21:15:34.40 bKZdxO87.net
>>102-103
どうもです。あんまり気にせず組みやすさ重視で良さそうですね。
無駄はダメだろうけど、それもこだわると霧がなさそう
107:デフォルトの名無しさん
21/09/06 17:30:21.92 hRz0UfzR.net
V-VM-UseCase-ServiceのよくあるCleanアーキでWPFデスクトップアプリ組んでるんだけど凄くツラミを感じる
VMとUseCaseの接続をReactivePropertyでやるとどうしてもカオスになってしまう
みんなどうやって対処してるんだろ
108:デフォルトの名無しさん
22/01/02 13:37:01.01 caWVN6xf.net
C#10の機能試そうとVS2022で新しいプロジェクト作ろうとしたけど、テンプレートすごい選びにくいな。
.net framework やら .net core やら .net の事情知ってるから選べるけど、部外者お断り感がすごい。
全部の一覧が並んでるんじゃなくて、ウィザード形式なりもう少しなんとかならんのかと思う。
109:デフォルトの名無しさん
22/01/02 16:31:40.65 svYtaABt.net
2019 ですでにそんな感じだったような。悪化したのか。
110:デフォルトの名無しさん
22/08/31 13:31:19.09 CzazX99E.net
C#で一般企業の人事システムや財務システムを構築するのはどうだろうと思う
基本的にC#の仕様は金額計算は不得手だと思われる
111:デフォルトの名無しさん
22/08/31 13:40:47.85 rQxi5a/d.net
整数かdecimalを使えばいいだけ
112:デフォルトの名無しさん
22/08/31 13:45:10.00 1Rvyxsfs.net
>>110
なんで?
113:デフォルトの名無しさん
22/08/31 13:47:20.21 bNG7ckOO.net
>>110
何を根拠にそう思った
114:デフォルトの名無しさん
22/08/31 15:05:47.98 83s/Qhp/.net
C/C++で一般企業の人事システムや財務システムを構築するのはどうだろうと思う
基本的にC/C++の仕様は金額計算は不得手だと思われる
115:デフォルトの名無しさん
22/08/31 15:20:49.74 zj1v6oZ+.net
COBOL使えとかそういう話?
116:デフォルトの名無しさん
22/08/31 20:22:49.31 nl82w9tj.net
何の根拠も無く金額計算は苦手とか言われても…
117:デフォルトの名無しさん
22/08/31 20:26:47.75 7kY9EZzP.net
C♯は実際に金融計算のシステムに使われているのかこれ
118:デフォルトの名無しさん
22/09/01 10:22:10.34 qjv9Q1pT.net
>>117
ユニシス系の銀行システムでC#使われてる
119:デフォルトの名無しさん
22/09/01 12:09:09.25 N6+Jtpjw.net
銀行システムで使われているなら安定性や信頼性は最強じゃないの
120:デフォルトの名無しさん
22/09/01 12:35:52.13 SRMxcXFz.net
銀行システムという括りが微妙すぎる
まぁJavaで勘定系作ってるところもあるからC#でも何の問題もないわな
必要なら自分達で型を作ればいいだけだから
121:デフォルトの名無しさん
22/09/01 13:30:44.78 sc0TjgYi.net
decimal型では不味いことってあるの
122:デフォルトの名無しさん
22/09/02 08:36:58.10 FhFYbPMR.net
>>121
処理速度が遅くなる
123:デフォルトの名無しさん
22/09/02 20:15:10.81 7STm9Jbj.net
遅くなるって具体的にどれくらい?
124:デフォルトの名無しさん
22/09/02 20:17:42.15 ZxhhELCj.net
Decimalって64bitだっけか
125:デフォルトの名無しさん
24/01/06 14:29:22.00 AYkaYTA3.net
age
126:デフォルトの名無しさん
24/01/07 09:47:48.71 puo1Tntr.net
>>123
doubleに比べて無茶苦茶遅い
decimalは10進数という意味だけどその名の通り多倍長で演算してるから
127:デフォルトの名無しさん
24/01/08 19:53:28.11 P2IcO0H5.net
> 具体的にどれくらい?
↓
> 無茶苦茶遅い
アホの会話やめ
128:デフォルトの名無しさん
24/01/11 21:33:05.95 Rr1Eyt4+.net
そもそも何をするかによって速さが違うから正確な表現など出てくるはずもなかろう
曖昧な質問で出てくると思った?w
アホなのかな?w
129:デフォルトの名無しさん
24/02/29 22:00:54.37 e2R+EPM+.net
> パッケージ 'Microsoft.WindowsAPICodePack-Shell 1.1.0' はプロジェクトのターゲット フレームワーク 'net6.0-windows10.0.22000' ではなく '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8, .NETFramework,Version=v4.8.1' を使用して復元されました。このパッケージは、使用しているプロジェクトとの完全な互換性がない可能性があります。
こういうエラーが出るんだけどどうしたらいいんだろう?
.NET SDK 6.0.419 は入れた
OSはWindows10 Pro 22H2