C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part92 (実質93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/
■次スレは>>970が建てる事
建てられない場合は他を指定する事。 ここ数年はGitHubランキング的なのを8-10位あたりでふらふらしてるけど
普及している割にというか「そんなもんじゃね?」という感覚だな 事実から目を背けるなんてまるでマカーのようだ。フフフ、笑える。 別にネガキャンとかじゃなくて普通の話題として振るけども
俺の周りの(趣味で)C#やってる人間がみんなKotlinに浮気しだしたんだが
そいつら曰く、
KotlinはなんとなくC#的な雰囲気あって良い
って薦めてくる
まだ触ったことないんだけど、実際のとこどうなの? KotlinはなんとなくじゃなくてC#を名指しでリスペクト(公然と丸パクリ)してる
C#もこれまで拡張を繰り返してきて綻びや変えたいけど互換性の問題で今更変えられない部分が沢山出ているので、
それを全面的に見直して綺麗に整理してある
難点を挙げるとすれば、今のところ全体的には素直で普通な言語にまとまってはいるけど
Kotlinがパクリ元のC#やScalaによらずリリース後に独自に入れている部分については
節操がなくあまりセンスが良くなくてScala化の兆しが見えていることかな
あの調子だと結局はScalaみたいに破綻すると思うよ C#が優れてるのは、独自路線の大きな拡張を長期にわたって繰り返し続けているのに
大きな破綻なく複雑にもなりすぎず言語を維持できているという点だ
他の言語の悪いところを見つけるのは簡単だが、トップランナーとして新しいものを作っていくのは遥かに難しいんだよ
その意味ではKotlinは粗探しは非常に上手いが、後者のセンスはC#のように天才的なものは感じないね C#に対する不満てほとんどは
Windows自体か.NET Frameworkに対する文句だからな linqのクエリ構文が出た時はどうなることかと思ったが、
メソッド構文が出て良かったよ MicrosoftはいまC#よりTypeScriptに力入れてんじゃないの >>860
どっちも
c#はほぼ.NET Coreと.NET Standardに全振り VSCodeは使いやすすぎてびっくりする
TypeScriptでインテリセンスが効くのはわかるが、型書いてない普通のJSでも余裕で効く
エスパーかと思うレベル
このままいくとVSもVSCodeに吸収されそうだね >>856
Javaが出てときと同じこと言ってる。同一人物か。 VSもVSCodeに吸収されそうの意味がさっぱりわからんが
フォントレンダリングだけはちゃっちゃと同じにして
ちゅーかもういい加減Windows全域でフォントのヒンティング切っとけや
本来にもう少しマシなレンダリングできるのに完全に癌になってるじゃろ やる気があればVistaの時点でやってただろうねw
どうしてMSみたいな大企業が作ってるOSがフリーのLinuxより酷い品質なのかちょっと理解できないけど VScodeってそんな魅力的じゃないよ
どちらも使ってるけど総合力じゃ今のVSのほうが数段上
VSCodeも最初と比べるとどんどん起動が遅くなってきてる C#がVB化してユーザーも低スキル化、DQN化したのが嫌われる原因だな。 VBとC#なんか変わらんしユーザーというかこの板に変なのがいるだけ
>>869
vsってエディタは聞いたことない マルチプラットフォームなwebプログラミング向けエディタ
って触れ込みだったのに今はVSと比較される様になったのか 言語だけぽこぽこ新しいのがでてくるが、
そろそろ言語+標準クラスライブライというか、.NETやJavaみたいな新しい実行環境でてこねぇかな。
いまなら負の遺産を一掃してもっと素晴らしいやつができるはず 要は.NETをJVM化すればいいのか?
Coreがもう少し充実すればええんでね? JavaはともかくC#や.NETにガラガラポンが必要とは思わないな >>876
SATAに駆逐されたデータ転送規格だろ。そんくらい知ってるわ >>871
まあ俺はほとんどエディタ代わりに使ってたりするけど... w C#もそろそろ新言語への乗り換えの時期じゃないか
いつまでも残ってるダサい互換性を切ってnot nullとか新しい機能を導入してさ
C#は実験場にすればいい プラットフォームが先細りだから無駄な足掻き。
パソコンは名ばかりでもはやオフコン。業務でしか使われない。 C#使い始めて何年も経つけど未だに乗り換えようと思うほど使いこなせない
思った通りのもの作れるし 我流で必要に迫られて始めたものの、汚いいVB6ちっくなコードしか書けない…
キチンとセオリーに則って基礎からやり直したい
とは言え、(どうせ、この先自分以外の誰かがソース開くことなんかねぇだろな…)と思うと、まぁいっか、と逃げてしまう >>888
惰性でいくら書いても無駄
良いコードを書くには良書を読むに限る 目的がきれいなコード書くことならそれに向けて努力すべきだけど
動くものが作りたいならそんなのは遠回り 動けばいいと言う奴のプログラムはえてして正しく動かないものだ オラクルのJavaシルバーに合格した。
C#も勉強したいが少し不安。
似てる部分が多いだけに頭が混乱しそう その場で書いて動かして後のこと考えなくていいなら汚いコードでもいいけど
長期的にメンテナンスすること考えたら多少手間でも綺麗なコード書いたほうが結局近道 >>894
C#なんてすぐバージョンが上がって推奨されてない書き方です、とか
時代についていけない老害とか馬鹿にされるんだぜ。使い捨てのコードを書く言語だよ。 俺も動くものは作れるけど、汚いコードや一箇所仕様変更すると他の関数にまで影響が出て整備がほぼできないコード量産してるわ
整備不可なコードの山を見て、整備しやすいコードの書き方勉強しようとしてるけど、イディオム本読んだりデザインパターン少し調べてもイマイチ理解が深まらなかった
インターフェイスや継承はまったく使ってなかったけど、最近取り入れようとサンプルコード書いてます リファクタリング(マーティンファウラー)
エリック・エヴァンスのドメイン駆動設計
C#の本じゃないけどな >>896
そんなことないよw
基本メソッドの中なんてブラックボックスで構わんが、
メソッドの切り分け方とか全体の設計方法に影響を与えるような変更なんか
そうしょっちゅうあるわけじゃないから。
2.0以降考えてもジェネリkック、ラムダ式、非同期メソッド、
あと強いて言えばオプション変数、これぐらいしかないでしょ ジェネリック
ラムダ
var
System.Linq
匿名型
オーバーロード解決の強化
非同期
2.0使うとこの辺りが欲しくなる 最近はC++でさえ、がんがん新しい機能取り入れてるからな
無理やり感は否めないけど まぁ実際すぐ動くもの欲しくなったら仕様変更考えない作りにする感じはある
余裕ある時じゃないと設計とか考えないから全然身に付かないけど
大手は分からないけど中小で入ったところは上層はコード共通化したがってたけど、PGはライブラリ各個で作って新機能追加の度に客先別コーティングしてたし、整備性を加えるのはそこそこ手間が掛かるのかなって印象 標準ライブラリとオープンソースをラップしてプロジェクト用のライブラリを作る
作業効率最適化とリスクを考えるとどうしてもこのラッピング作業が必要になる
社内ライブラリに変わったとしてもこのラッピング作業は必要だからプロジェクトの工数は減らせない
それどころかバグの多さやドキュメントの少なさを考えると社内ライブラリは害悪にすらなりうる >>906
TryParseが最初からout使う前提
refは呼び出し先でデータ加工して返すときに無いと面倒
あとどっちもwinapiとかアンマネージのライブラリのときによく使う印象 あと、2つ以上値を返すときは、今までrefかout使うのが便利だったが
タプルさん新型で、その需要は大分減ったかもしれんね 俺は綺麗に書こうと努めてるが、他人のすごいスパゲッティコードを見たとき、
ある意味これはこれですごいなと思う。
俺なら発狂しそうだし、こんな長いコードよくメンテできるなと
これはこれですごいなとは思う。 >>909
同意
多分IQはあいつらの方が高いんだろうなって思う
彼らは複雑なものを複雑なまま扱えるからシンプルに置き換えて考えようって気にならないのかもしれない メソッドの戻り値によく処理成否のエラーコードと処理結果のオブジェクトや例外情報をプロパティにした自作クラス使っているんだけど、C#7以降はValueTuple使ったほうが楽なのかね >>907
>>908
ありがとう
>>910
今までは困ってなかったんだけど、あまり使い方を知らなかったせいだとおもう >>909
そういう人って、書いてから何年もごぶさたなコードだって苦もなく修正できるのかな?
だとすれば無条件に感心するけど
自分も作ってすぐのほかほかスパゲティなら勝手わかってるけど、ごぶさたで冷めた
スパゲティはさすがに細部がどうだったか覚えてなくて、麺をほぐすのに苦労するw >>915
文系の記憶力を甘く見ない方がいい
あいつら暗記だけで受験や大学卒業まで乗り切ってきたんだぜ
数年前のスパゲティでもここどうなってんのって聞けばちゃんと答えを返してくる >>917
暗記で何とかなるプログラムしかやらないんだな staticタスクをwhileでずっと回してデータリストのデータを監視しててエラーがあったら注意喚起のフォームを開いたりフォームのラベルを変更したりしたいんだけど
staticだからタスクからインヴォーク使えないし、メインフォームに作ったフォーム開いたりするメソッドをデリゲートしようとしても静的フィールド〜でできなくて詰まった・・・
設計見直したほうがいいレベル? >>920
意味不明だから言いたいこと整理して
1ステートメントは短く簡潔に
複数行に分けてもいい
「〜である。」「〜だと思う。」「〜したい。」「〜してくれ。」をハッキリして 静的イベント定義してタスクはそれを発生させる
受け取り側各位はイベントを受けて適当にハンドルする
でいいんじゃね □メインフォーム
データリストを保持してる
一定間隔でデータリストをデータベースから取ってきて更新する
□バックグラウンドタスク
メインフォームのコンストラクタで起動する
メインフォームを閉じるまでwhileで動き続ける
メインフォームのデータリストに異常値を見つけたら注意喚起フォームを開く
□注意喚起フォーム
データが異常値だから直せ〜のメッセージが表示してある
オーナーはメインフォーム
バックグラウンドタスクのメソッド上で注意喚起フォームを普通に開こうとしたらクロススレッド〜で開けない
タスク上にインヴォークを記述するのはタスクがスタティックだから使えない
フォームを開く処理をメインフォームに書いてタスクにデリゲート処理を記述するのもタスクがスタティックだから静的なフィールド〜でできない
メインフォームはスタティックじゃないけど作りの問題でタスク側でnewするわけにはいかない
どうやってタスクからイベントを投げてメインフォームでハンドルすればいいか教えてください
>>922
これで理解できる? >>924
それはわかってるつもりになってるだけだよ >>925
後半が意味不明
タスクがスタティックってどういうこと
タスクはオブジェクトだろ static修飾子知らないってマジモンの素人やん
そら説明しても理解できませんわ
>>923
ありがとう
ちょっと調べてみる! バックグラウンドタスクをシングルトンパターンにして、
メインフォームから起動すればいいんちゃうか >>925
>バックグラウンドタスクのメソッド上で注意喚起フォームを普通に開こうとしたらクロススレッド〜で開けない
UIスレッドからタスクを実行してるならawaitでUI処理できるよね?
タスク一回終わらしてUI処理してからまたタスク起動する形にすれば簡単だと思う
それかイベントにするか
>メインフォームのコンストラクタで起動する
これって普通?コンストラクタで起動するのはちょっと気持ち悪い Formが抱えてるデータを走査してるんだから
Formインスタンスは持ってるんだろ
ならInvokeするだけじゃねえかアホかこいつ インヴォーク(FormインスタンスのInvokeメソッドのことでいいんだよな?)を記述できないスタティックなタスク
という記述から一般的な意味でのstaticメソッドではないスタティックなタスクと名付けられたもの固有の事情があることは明らか
なぜなら非UIスレッドで実行中のstaticメソッドからFormインスタンスのInvokeメソッドを呼び出せないということはないからだ
そもそもInvokeは非UIスレッドからUIスレッドに処理を移譲するための機構だ
まずはそこ(スタティックなタスクと呼んでいる何かについて)を説明しろ 綺麗なコードって何なんだろうと思う
俺のかいたコードじゃないことは確か
クラス設計もきちんと学んだことがなく
いつの間にか親子関係がおかしくなってそれぞれをコンポジションしたり
よくよく見たらstaticでいいよなって思うものが生えてくる
状態なのか具象なのかが混とんとしてくる
参考にしようと小さなソフトのgithubみたら100行に満たない小さなクラスが100も200もあったりする
どうやってこれの役割覚えて管理してるのかと感心する >>934
製作者がクラス図書いてなきゃ
そこで終了な案件
ソースからクラス図を生成するツールがうまく動いてくれればラッキー
動かなかったら地道に書いて見るしかない >>930
コンストラクタで起動するのが気持ちわるいのは超同意
でもコンストラクタで立ち上げて常駐する形じゃないとダメー!!!らしいのでしゃーなしでやってる
タスクの処理をUIスレッドでawaitして返り値で処理するのを繰り返す形が正解なのは理解してるんだけど
>>932
ぶっちゃけボタンかタイマーで起動してawait繰り返せば済むしコードも読みやすいし実装も楽だし拡張性も上がるんだけど
「おじいちゃんはバックグラウンドという言葉が大好き」なのでしょうがない >>934
小さいクラスはたくさんあっても困らない
見れば何やってるかすぐにわかるから
それに小さいクラスは1つの役割に集中していることが多い(それが良い設計)
なのでクラス名を見れば何をやってるクラスなのか大体わかる
何千行もある巨大なクラスは見てもよくわからない
大抵の場合、様々な役割が1つのクラスに詰め込まれているので、名前も曖昧になる
こういうクラスは1つでもあるとプロジェクトが大混乱する >>937
俺はわからんかった
細切れソースは俺は読めない
資料書いてくれ >>936
そもそも繰り返すのは正解じゃない
入力系イベントで同期的に検証すればいいだけの話
今回の場合は入力ではなくデータ取得なので取得したあとにデータを検証ればいい
検証なんてほとんど時間がかからないんだから非同期にする必要はない
データに変化がないのに何度も繰り返しデータが正しいか検証したってしょうがない >>938
そうか
長いクラスを読むのはもっと大変だろうね 俺が見たのは何とかジェネレーターというの沢山あるものだった
AジェネレーターがBジェネレーターをつくりそのクラスからCジェネレーターが出来て…と
とてもとても理解不能だった
なぜなんとかジェネレーターが必要なのかどうかがわからない コンパクトなクラスが読めないのは能力云々より
設計か命名の問題だと思う >>940
そういう問題じゃなくて意味があるまとまりにしてくれないと困る
んでおそらく形成されているであろうツリー構造がソースから把握できない >>941
単ー複の複が増減するんだろうねw
クラス図だと「ー●」確かこんな関係? コンストラクタ+メソッド1個みたいのもたくさんあった
単機能を実装したらこういうことになるんだろうとは思うけど
クラスが現実世界のものを表してるならこんな感じにはならない >>943
クラスは意味のあるまとまりだよ
クラスのグルーピングは名前空間でやってるでしょ
名前空間使ってないなら命名規約でわかるようになってるんじゃないかな
どっちも無いならちょっと不親切だね
ちなみにどのリポジトリ?Githubだったよね? >>945
作るの勝手だけど
そういう奴に限って設計書のクラスの
記述漏れてんだよなぁ
プチクラス作れば作るほど
設計書書くの大変なのに >>946
githubなんてアクセスしたら警告表示が出ちまうよ >>941
それはジェネレーターではなくファクトリーでは?
DIフレームワークを使わない硬派なプロジェクトだと大量のファクトリーが作られる 無駄にこだわりが多かったりプライド高いやつのは汚いソースになるな レス数が950を超えています。1000を超えると書き込みができなくなります。