C#, C♯, C#相談室 Part93©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
ゲームくんのゲームは完成したのだろうか?
そもそもGameManagerクラスみたいなゲームを管理するクラス作ってないのが不思議
ゲーム管理クラス通して設定画面開いたり設定値を取得すればいいのに C#の勉強を講習会なりでお金を払う方式でレクチャーを受けたいのですが、どういった所が良いでしょうか?
ドットインストールやプロゲートの様な既にある動画を有料で見るのではなく、
欲を言えば1対1で即座に質問できる方式が良いのですが探してみたところ見つけられず、
初心者〜中級者を対象にした評判の良い講習会の様なものがあれば教えて頂けないでしょうか
東京都の渋谷区に住んでいます もったいないね
マンツーマンで一時間5千円〜1万はらって12〜36時間でC#を勉強するくらいなら
入門書を3冊ぐらい買って1週間で何度も読めばいいのに しかし新しいC#の作法にのっとった良い入門書なんてあるかね? >>301
趣味目的なら金余っているバカだし就職目的なら手に負えないバカ
そんなことで身につかないからパソコン教室にでも通ってろ パソコン教室じゃ、最高でエクセルの使い方くらいしか教えてくれねーだろ。 >>301
金と時間の無駄って意見に俺も一票。
学校の勉強でもそうだけど、だいたい独習の方が効率が高いよ。
分からないところを質問できる人がいるとはかどるのは確かだと思うけど、
そんなの今はネットで代替できるし(しかもタダ)
子供の習い事みたいにモティベーション不足を金で補うっていうのはありかもしれないけど。 何とか教室や何とかスクールって、出逢いを求めて通うものだろ? 云うてもプログラムって何すんの状態だと独学とか無理やん
まあ講習受けて出来るようになるかったら確率低いが >プログラムって何すんの状態だと独学とか無理やん
そんな人はプログラムを触ることはないので問題なし C#プログラマの求人いきゃいい
マンツーマンでみっちり教えてくれてしかも金ももらえるぞ >>302
>>307
でもさ、メンターがほしい気持ちは解るよ。独学で始めて今でこそイメージしたアプリは大体作れるようになったけど。 教えてくれる人がいなくてもできるぐらいのやる気は持ってないと
教えてくれる人がいてもできない気がする 独学でやってると自分のやり方が正しいのか確認が出来ない不安があるのはわかる
とにかくプログラムを書くこと、実務を重ねるとその不安は経験値でだんだん消えていく
とにかく経験を積むしかない >>313
スレ違いになるけどモチベーション保つのが一番大事だからな
わからなくなるとやる気無くすから誰かに教えてもらいたい、って気持ちはわかるが メンターってか、語れる仲間がほしい・・
だが人付き合いはめんどくせーw メンター(導師)ってリアルで言ってる人を見ると笑うけど
意識高い系ですかって
メンターは技術面より精神的な面のよりどころだな
わけわからんけどこの人は正しい導いてくれるって人って思いこむ相手
c#入門にメンターがいる必要はないね
中級以上ならまだしも
入門者には導師より同志が必要かな メンターなんて初めて聞いた
グルなら知ってる
jai guru deva om メンター初耳って…
そりゃ昔はあまり使わなかったが今の20代なら大学で大方耳にしたことあるんじゃない? CodeMentorっていう英語のメールニュース取ってるんだが? 引数ありのdelicateでデリゲートをnewする段階で
関数に引数渡しておくことはできますか?
使うときは引数関係なく実行するだけにしたい
delicateじゃなくてもそういう方法があれば教えてほしいです >>326
たとえばこれを、
Action<string> a = Console.Write;
こうするだけと違うの?
Action a = () => Console.Write("Hage"); >>328
普通に考えたらそうなるわな
何がいいたいんやろ >>328
わかりづらくてすみません
Actionですね
これでちょっとやってみます
ありがとうございます もしかして delegate? > delicate 赤ん坊が庖丁持ったからと言って何かを生み出せるわけでは無し >>337
「〜とは何か」って哲学論争はたぶん時間の無駄w
実際の使われ方を見て何に使えるかを理解するのがいいよ
禅問答みたいに聞こえるかもしれんが、デリゲートのメリットは
デリゲート型の変数を作れること。
デリゲートの使えない従来の言語は、コードの中にdoubleのリテラルしか書けず
doubleの変数が作れないようなものだった >>330です
Actionでできました!ありがとうございます。
クロージャー(?)っていうんですかね?
関数の外の値を引数で渡さずに関数内で使うやり方が知りたかったんです。 デリゲート型の変数?????
デリゲート型にすると何かいいことあるのか?
デリゲート型にすると何がいいんだ??????何が使えるんだ????? あーこういうの出来たら便利なのにー
って思ったら調べて使えばいいよ
使わんと頭入らないし デリゲート、デリゲートって、おまえら
青空球児・好児かよ。 >>341
そうじゃなくて、上に書いたように、もしdoubleのリテラルしかコード中に書けなくて
doubleの変数が使えなかったらどう困るか考えて 数値を格納する変数は int 型
文字を格納する変数は string 型
メソッドを格納する変数が デリゲート型 なんで
メソッドを
格納する
必要が
あるんだよ
! だから、どうして実数を変数に入れる必要があるの?
入るのはメソッド自身ではなくその参照だけどね >>348
自分の場合はある関数にある処理を追加したい場合とか
ある処理は呼び出しもとによって変わったり >>350
ピンとこない
処理を追加したいならメソッド自体に書くか、overloadとかを考えちゃう
呼び出し元で処理変えるなら引数で、みたいな メソッドを引数にして渡してあげられると、実行する側は何をするか気にしないでいいじゃない なぜデリゲートがあるか?
君も大人になったらわかるよ。
ママ、なんでボクはおチンチン付いてるの?
この疑問、時間が解決したろう。 >>351
今までの処理は極力変えたくない
引数にAction渡して関数はそれを実行
引数のActionはデフォルトにnullをいれておく
nullだったら処理しないようにすれば呼び出し元は必ずしも変更する必要がなくなる
なんでこうするかってテストするのがめんどいからとか色々 >>354
さっぱりわからない
処理変えたくないメソッド実行
↓
その結果次第で別のメソッド実行
何故これで済まないの? それでも済むよ
例えば繰り返し処理
forなくても書けるだろ。だからforなんて要らないって言ってるようなもん
なくてもプログラミングできるが、あれば楽できる 済まないw
>>355-356は-π/2〜π/2の範囲の実数の数だけ、それに対応する
sinの値を返すメソッドを用意すれば汎用的なsin関数なんかなくて済むと言ってるのと同じ。
だから、どうしてdoubleの変数が必要なのかと。
っていうかこの質問者、本当は分かってて質問してる変な奴だろうね8割方w
たぶん2chの他の板によくいる、サヨクを演じて自作自演やってる頭のおかしいネトウヨと似たようなメンタルの持主なんだろうと想像 >>355
voidだったら"その結果"ってどう受けとる? なんか揚げ足取りしようとして引っ込みつかなくなってる感 つまりメソッドにラムダ式を渡して処理した結果を使ってメソッドの処理をさせるのか? 結局デリゲートの非同期処理BeginInvokeを使用するってのが
従来大きな役割だったんじゃない?
でも今Taskクラスできたから必要なくなった デリゲート(委譲)って名前が悪いのかな
メソッドを他に渡しておいて適宜実行してもらうから委譲ともいえるけどそれは機能の一面しか表してない
MVPの人も過去にデリゲートいらねえって言ってたけど理解力が足りてない
c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない
デリゲートを使えばメソッドをオブジェクト(変数)みたいな感じで扱える
普通の変数とは違って+=で複数のデリゲートをいれることができるのが特徴的
コールバックとして使えるしeventはデリゲートをもとに作られてるので基本的な使用範囲は広い >>367
真面目な話、そういう衒学趣味の文系学生みたいな
文章が一番人を混乱させる。
「c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない 」って何やねんw
関数ポインタが分かればデリゲートがどんなものかはその類推でだいたいイメージできる。
機械語をやった経験があれば、関数ポインタなんか、なんだこんなのただのcall命令の
アドレッシングモードのことかってすぐわかる
でも重要なのは、「デリゲートとは何か」なんか分からなくてもデリゲートは使えるってこと。
「何か」なんか理解しなくていい。それを使って何が出来るかだけ理解すればいい。 ホビーじゃないプログラマ「c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない 」 >>370
この文何か変か?
メソッドはobject型から派生したクラスではないっていう当たり前のことを言ってるだけだろ >>368
他の言語ではメソッドもオブジェクトとして扱えるものもある
c#はメソッドはオブジェクトじゃない
その類推が間違ってるからダメなんだけどなあ…
デリゲートは関数ポインタじゃない
callでもアドレッシングとも全然無関係だわ
機能的には似たようなものに見えるけど全然別物だ >>368
文系学生もプログラミングする時代になったって事だよ。
> 「何か」なんか理解しなくていい。それを使って何が出来るかだけ理解すればいい。
これな。最近の「○○って何ですか」っていう奴らは何なんだ?
お前らだって、日本語の全ての漢字を読めるわけでもないだろうに。
「デリゲート」は失敗作だから新言語を作る気がないのなら理解する必要はない。
あれはthis+関数ポインタで、一番近いのはC++の「メンバ関数ポインタ」だが、
無駄に「クラス」「関数ポインタ」「ラムダ」を抽象化しようとしておかしくなってる。
結局ラムダを導入してしまったし、当初の方針は間違いだと認められたことになる。
今後「デリゲート」を採用する言語はないだろうよ。 .NET Core で過去の遺産が全て無くなるかと思ったけどそんなことはなかったぜ もともと関数がオブジェクトである言語はデリゲートを導入するメリットは少ない
c#にデリゲートが無かったらjavaの様に専用のインターフェイスを継承した無駄なクラスを作らなければならなかった
ActionやFuncやラムダがあればデリゲートが必要なかったと言ってるのは何かを誤解してる >>376
理解してなくても使えれば問題ないんだよ。
お前だってPCの起動方法(BIOSとか)知らなくてもPC使ってるだろ。
MSIL読めなくてもC#使えるだろ。
CPUの例外/割り込み機構を知らなくてもtry/catch使えるだろ。
一般プログラマにとってはプログラミング言語は道具であって、それ以上でも以下でもない。
新言語を作りたいのなら学術的に正確に理解することが必要だが、普通の人はそうではない。
それ以前にC#が死ぬ可能性を考えた方がいい。
C#専用の「デリゲート」の理解はつぶしが利かない。
他言語にもある「ラムダ」の理解のほうが重要だ。
デリゲートは「クラス」と「関数ポインタ+バインド」で対応した方が良かったと思う。
C#には未だに「バインド」がない=デリゲートでの対応になるが、
実際、後付でバインドすることが出来ないだけ不便だろ。
>>377
Javaみたいなそもそも「関数ポインタ」がなかった糞言語と比較したら駄目だよ。
Cには関数ポインタはあった。
C#はそれを「デリゲート」として拡張した。
他言語は「第一級オブジェクト」として拡張した。
今のところ、後者の方が正解っぽいだろ。
(俺自身にはイマイチ「第一級オブジェクト」である利点/必然性は見えないのだが) 関数がもしobjectクラスから派生したオブジェクトになるとメンバーを持てることになるんだけど
A.B().ToString()のToStringが
B()というメソッド自体に係ってるのか
B()の返した戻り値にかかってるのかがよくわからないことになる Javaってstaticメソッドを関数インターフェースに渡すときは最適化してくれんの? 1+2*3
こんな計算式があったときに1+2をしてから3かけて答えは9
こうはならないだろ。それは優先順位を定めてるから。(1+2)*3のようにかけば期待通りになる
それと同じで関数がオブジェクトでメンバー持ててもそれに合わせた処理の優先順位を定めればいいだけ 理解しないのと誤解してるのではわかっていないという点では同じだけど
理解してない場合は理解していない前提で行動できる
一方の誤解してる場合は悲惨だ >>383
じゃあどういう風に記述したらオブジェクトである関数のプロパティやメソッドにアクセスできるかここに書いてもらいたいが >>382
お前は日本語を勉強しろ。
俺達は「理解しなくていい」=「完全に理解してはいないという自覚の元で使え」と言っているのであって、
それは「誤解」には繋がらない。
「誤解」ってのは、「理解してない馬鹿が理解しているつもりになっている」事を言う。
例えば、右結合と左結合を知らないお前みたいな馬鹿のことだ。 >>384
意味不明。何を書いて欲しいのか分からん。
> A.B().ToString()
これはAのメソッドB()を呼んでその戻り値に対してToString()を呼ぶ。
少なくともJavaScriptではそう。
で、何をしたい場合の記述が欲しいんだ? >>386
思い違いをしていた
A.B().ToString()とA.B.ToString()で区別できる
クラスにフィールドとメソッドを同名にできないから区別できる
右結合と左結合は関係なかったけど >>384
エスパーすると、言いたいことは分かった。
お前は「第一級オブジェクト」も理解しておらず、「誤解」している。ちゃんと勉強しろ。
「第一級オブジェクト」ってのは、通常のオブジェクトと関数オブジェクトを区別しない。
だから書式は当然同じだし、正しく理解していればこの点が疑問になりようもない。
>>387
なら日本語を勉強しろ
> B()というメソッド自体に係ってるのか
これで何を表現しようとしたか言ってみろ。それは
> A.B.ToString()
ではないだろ。 >>385
誤解は悲惨
delegateを削除しろと言って削除してみたらActionもFuncも使えませんでした
eventも使えませんでした
もちろん言語レベルで変数としてのデリゲートの代わりになるものもありません
>>388
> > A.B.ToString()
> ではないだろ。
いやいやそこはそのままであってるし普通にそう理解できないのか?
A.B.ToString()が正解
逆にどう勘違いしたのか聞きたい 本当にC#からdelegateを削除しろって言ってるんだったらどこかおかしい
何にも理解してない プロパティなんて関数オブジェクトみたいなもんだな
プロパティに引数渡してぇ >>389
日本語で言うと、
> B()というメソッド自体に係ってるのか
と理解したって事だよ。
>>390
お前がな。
他言語にはdelegateなんて無いが、何も問題ないだろ。
あれ?って思えないのか?
(今すぐ廃止していいかどうかはまた別だが)
>>387
> クラスにフィールドとメソッドを同名にできないから区別できる
これは先見の明があったかもな。
関数を「第一級オブジェクト」に昇格させるのに文法的制約がない。
Javaに対しての利点にはなり、生き残る道かも。 >>391
JavaScriptではオーバーライドすれば出来る。
フィールド/メソッドの区別がなく、名前だけだから。
C#的には派生クラスで「プロパティ」「を同名の「メソッド」でオーバーライドだが、
これが型チェック的に無理なのか?
しかし名前の重複を許していないのだから、今後の拡張は可能のはずだが。
JavaScriptのデタラメ文法はどうかという奴もいるが、慣れてしまうと、
型あり言語の「型が違うだけ」で色々制約されるのも相当な糞だと気づけるぞ。
型検査はエラーではなく警告に留めるべきで、
プログラマがOKすれば型が不一致でも通してくれた方がマジで楽。
一番近いのはCってことになってしまうが。 友人ゼロのキモオタオッサンは他にやることないのかい 他の言語はともかくC#はGUIのイベントの管理にデリゲートのマルチキャスト使ってるんだから無かったら困るだろ だからメソッドがオブジェクトかどうかなんて話はただの衒学趣味的な無益な話w
そんな話は「ではオブジェクトって何?」って不毛な議論になるだけでしょw
初心者がデリゲートを理解して使えるようになるための屁の役にも立たないよw
>>397
素直に考えればデリゲート自身にマルチキャストの機能を持たせるんじゃなく、
シングルキャストのデリゲートのリストとして実装する方法もあったはず
なんか理由があって「こういう」風になってるんだろうが俺には積極的理由はよくわからんね。
ジェネリックをデリゲートで制約できないことと関係があるのかもしれないが
なまじマルチキャストなんて機能があるせいで何だかわかりづらくなってる面は否定できないと思う >>397
GUIに関してはdelegateの導入は不要だったで決着してる。
GUIにはOOPよりMVCの方が数段マシで、WPFもそうなってるだろ。
onclickにthisがバインドされている意味がそもそも無いんだよ。
決着が付いてないのはデータフロープログラミングをするときだ。
JavaScriptではObject.observeの導入が計画され、一部フィーバーしていたが、ポシャった。
https://www.html5rocks.com/ja/tutorials/es7/observe/
以下によると、非同期なのが使えなかったらしい。
http://tech.nitoyon.com/ja/blog/2015/11/18/death-of-oo/
JavaScriptの非同期は最早宗教だが、
はっきり言って無駄に非同期すぎて、余計にやりにくくなっているケースもある。これもそう。
C#は独自eventを実装出来るし、そのためにdelegateが用意されているから、
「データフロープログラミング」を文法的にサポートしているとは言える。
ただ、それ以前に、「データフロープログラミング」が主流ではないが。
お前らも実際、やってないだろ。
関数型の次に来るって事もなさそうだし。
とはいえ、上記の通り、今のJavaScriptではデータフロープログラミングは面倒だし、
getter/setterを頑なに拒むC++ではものすごくウザくなって事実上無理だ。
次の波が来ればevent/delegateも再評価されるかもしれん。 >>398
> シングルキャストのデリゲートのリストとして実装する方法もあったはず
同感。 理解してなくても問題なく使えるからって、それを理解しようとするのは悪い事じゃないけど
もとの発端はなんだったんだこれ 誰かさんの大好きなLinqはdelegateの塊なんだけどdelegateなくなっていいのかな
他の実装ではdelegate使ってないけど今の.netではデリゲートで実装されている デリゲートにラムダ式にLinq大好きだ!
これ無くして生きてけない!
チームの誰も読めないから放置されて我が道を歩んでいる。
生産性と品質が高いから客には好評です。 >>405
チームの誰もが読めないという事は保守性に欠けると言う事ですね そうだね。
でも、Linqバリバリ使ったらそうなるよね。
みんなの勉強しろよってこと。 Linqが分からないってのはラムダ式を理解できないってことなの? 行列計算ライブラリ書いてるときに
おれ掛け算わからんからおれに合わせて全部足し算で実装して
おれはいまお前の案件に関わってないけど将来そのライブラリメンテするかもしれんからヨロシクな
とか言う同僚がいたらこいち頭おかしいのかなって思うじゃん
いやいや掛け算を勉強してからっていうか最低限の単位を取ってからメンテしろよってなるじゃん普通
これがLinqやλやデザインパターンになると当たり前のように底辺至上主義がまかり通る不思議な業界 LINQはC#にしかないからまだわかるけどラムダ式はいまどきの言語ならほぼ実装してるから知ってないとまずいよね Linqにも類似品あるよ
Javaのstreamやpythonのリスト内包表記など
というかそもそも単なるiterator patternでしかないからC#が起源ってわけでもない Linq以前にIEnumerableの意味が解らない人がいるからどうしようもない
.NET2.0から順に教えろってことかよ・・・ >>409
と、底辺至上主義がまかり通る所の意識高い系が申しております
>>412
どう見てもSQLが起源だろ >>414
クエリ形式の文法はSQLが起源かもしれんが
実装はSQLとは全く関係がないよ
C#などの実装はまさしくiterator patternだけど
SQLの実装をiterator patternでやろうとしたら遅すぎる そもそも書けない奴は論外として、使うなってのは同意できる
簡潔に判りやすいラムダ書いてくれりゃいいが、わざとやってんじゃねってぐらい難読化する奴いるからな
正規表現、SQ、掲示板の長文も同じだな Linqに限らず最近のソフトウェア技術は高度で生産性も高くなってる。
昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
理由出来ない人は辞めればいい。
生産性が飛躍的に上がってるので理解出来る奴だけで間に合うよ。 自称プログラマー(趣味)ならともかく職業プログラマーでLinqすら理解出来ないやついんの? Linqを十分に理解できても、可読性や保守性を大事にする人は
多少冗長でも他人が理解しやすい易しいコードを書くんじゃないの? Linqてそんな可読性悪くないと思うけどなぁ
コメント書いときゃ何となくわかるべ >>417
出来ない人にも生活あるから辞めろとは言えないけどチームは分けて欲しい
使えて使いたい人がどんどん流出して出来ない人だけの会社になると悲惨 >>419
圧倒的に生産性が高かったらどうなの。
最近の案件は短納期になってるし、昔のコボルみたいに何十年もメンテして使うシステムも少ないと思う。 LinqよりSQLの方が難しいぞ。
SQLは難しいから使うなって言うのか? 業務でいじるレベルのコードなんて知らないものでもグーグル先生いりゃ大抵なんとかならない?
linqも初めて見たときはとっつきにくくてわかりづらかったけど使ってりゃ嫌でも覚えちゃうよ
つっても当然すべてを使いこなしてるわけじゃなくて自分に必要な範囲のみ理解してる程度
業界によってだいぶ差はありそうだけど 生産性は保守運用まで含めてトータルで考えるべきで
保守性が損なわれればトータルコストも引き上がる >>423
あんたの書き込みがゴミだから。
オレらのやりとりがゴミだって言うなら、そう感じさせる様な高踏的な書き込み頼む。 保守性の低い Linq のコードってたとえばどんなの?
自分は他人のを読む場合でも特に困ったことないけどな〜。 >>415
イテレータの起源なら、C++(1983)は最初から持ってた。
C++のOOPはSimula発で、そっちが持ってたかは知らん。
いずれにしても、Java発の技術は存在しないぞ。
C#はLinqと、多分asyncもか?頑張ってる方だと思うが。
(あとちょっと違うがIDEのインテリセンスもC#が初のはず) クソカスの分際で人間様に話しかけてくるな
クソカスが引っ付くわ >>429
> (あとちょっと違うがIDEのインテリセンスもC#が初のはず)
インテリセンスはVB5.0の時代からあるんだが... >>425
> 自分に必要な範囲のみ理解してる程度
多分これくらいが適正で、これなら大して問題にならないんだよ。
問題は、意識高い系馬鹿の>>417
> 昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
みたいな、おかしな奴がいることだよ。
Linq自体でそんなに格差が出来るはずもない。
仮に、Linq部分を関数呼び出しに変えたところで、本体のコード構造は全く変わらないだろ。
便利機能だが、その程度でしかないんだよ。
逆に言うと、制御構造の違いで勝負出来ない、
新文法が読めることしか威張れない馬鹿がそこに無駄に拘っている気がする。 linq で Where と OrderBy 使ったところをチームリーダーから For と List<T>.Sort() に書き換えられたことはある。理由は「他と違うから」
他と書き方を合わせておくのが大事なのはわかるけど… >>433
他と違うからって理由で直すのは良くないと思うな
本来関係ないはずのクラスの間に存在しないはずの関係性を作りこんでしまう
その結果、必要ない作業や、縛りを生み出して生産性を下げることになる
俺が経験したものだと
すでに書き終えたforeachをすべてforに統一
テスト済のDAO、DTOのsnake_caseを他レイヤに合わせてCamelCaseに統一
この2つが最高にバカバカしかった カプセル化を知らない人が少なくないのかな
「publicメンバーはクラス間のコミュニケーション円滑化のために規約として形式化しましょう」ぐらいならまあ理解できるが
「Linqはやめてループにしてくれ」なんて内部実装の形式にまで踏み込んでくるなよな
クラススコープで違和感なければそれでいいだろ >>433
俺はC#erではないが…。
単発のLinqも認めてもらえないのならご愁傷様。あれは普通に読める範囲だ。
見た目、Linq自体にはサブクエリ無しか?ならそんな酷いことにはならないはずだが、
例えばSQLでは再帰呼び出しが出来たりして、
マンデルブロだパズル解くだとか、おかしな事になってる。
https://www.sqlite.org/lang_with.html
Linqでどこまで出来るか知らんが、こんなん書かれたら殴りたくもなるだろ。
基本的には関数呼び出しにしてその先は隠蔽、
つまりLinq実装かFor/List/Sort実装かは上位からは見えない、ってことにすれば関係ないはずだ。
ただ、その場にベタで「何を選択しているか」が書かれている方が読みやすいことは多々あり、
Linqもその局面で使われているとは思うので、全面書き直しだと余計に読みにくくなるとも思うが。 >>436
どうでもいい議論だけど、一言。
カプセル化っていうのは「メソッドの中は可読性考えなくてよい」って意味じゃないよw
LINQ(というかクエリ式)嫌いの大半は批判してる人間がそもそも理解してないだけだと思うが一理はある。
それは使い方によっては複数の処理が有機的につながった、適切に分割統治されてない、
可読性の低いコードになるからだ
実際、筋の悪いプログラマが好む100行オーバーのメソッドに近い物になりうる >>439
どう読んだら「メソッドの中の可読性は考えなくていいよ」になるんだろ
外部の都合を内部実装にまで持ち込むな
クラス内での可読性が十分ならそれでいいだろ
って主張な
正しく動いて綺麗なコードを他のクラスの都合で書き直す
俺はこれある意味カプセル化破壊と言っていいと思う
もちろん本来の意味でのカプセル化とは違うのはわかってる >>440
どう読んでもそうとしか読めません
自分で自分の書いてあることが理解できないのかw
「メソッドの中は可読性考えなくてよい」と言っているのでなければ
>>436の1行目と4行目はつながらない。
カプセル化を理解していてもメソッドの中の可読性、例えば
「Linqはやめてループにしてくれ」と言うことはあり得る。
なぜなら、カプセル化とは「メソッドの中の可読性は考えなくていいよ」という意味ではないからだ >>441
いきなり訂正
× >>436の1行目と4行目はつながらない。
〇 >>436の1行目と3行目はつながらない。 ランダムな指定回数オブジェクトを作成する方法ないですか
7時まで待つ >>441
横からだけど、そう思えるのはお前さんがLinq使ったら可読性悪くなるって決めつけてるからじゃないの? >>435
コーディング規約を読んでないお前か
コーディング規約を定めてないお前の組織がバカなだけ 変数を関数の先頭に書く
returnは1つまで
変数名の先頭に型の略字を書く
varは使ってはいけない
こういうひと昔前まで大衆が信じてたバカ規約
システム全体で統一感のあるコードを書くって規約もいずれその仲間入りするとおもう
いまはまだIT業界全体が未熟だからみんな気付いてないだけ ちょっといいですか、この関数100行超えてます。
規約違反で可読性なくなります!
レビューで積極的に発言するサル、何も知らないで自分は立派なプログラム書いてると思っている。
ちなみににLinqの方が可読性上がるよ。
Linqはやりたいことをズバッと書ける。
古いやり方だと、このforループなに?ってなる。
forループは実装手段であって目的じゃないから。
単に慣れ、新しいこと勉強したくない連中が可読性だの規約だの持ち出す。 分割すれば良いじゃん
それが出来ないことを相手のせいにするな 俺が知りたいのは、オブジェクトをx回作るやり方なんだよ for(var i=0;i<n;i++)Days[i]=new Day(i); linqで発狂してるジジイはSQL絡みでよくわからないエラーに出くわして理解できなかったんじゃないの 保守性の低い Linq を使ったコードの実例を見たいんだけど。 クエリ式を使ったのは単純なのはわかりやすいけど複雑になるとお手上げ
メソッド形式で使ったとしても逆にクエリ式のfromを二重の使ったほうがいいのにSelectManyを使ってるやつは非常に醜い
JoinやAggregateも可読性が以上に低い 意見は分かれると思うが、川俣大先生が連載記事で引用してた
このサンプルあたりがボーダーラインかね
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/linq/how-to-query-for-duplicate-files-in-a-directory-tree-linq
個人的にはこれも読みづらい
実にどうでもいい話だが、LINQは頭字語のはずなのでLinqって表記には違和感しか感じない。
あと、これもくどいが、LINQじゃなくてクエリ式の話をしてるんじゃないのかと >>463
これはだめな例じゃないかな?
何をやってるかがわからない これの事?
var queryDupNames =
from file in fileList
group file.FullName.Substring(charsToSkip) by file.Name into fileGroup
where fileGroup.Count() > 1
select fileGroup;
基礎的なものだけで構築されていて何をやっているか一目瞭然じゃん これがわかんないって言うならもうlinq禁止しか無いね
そんな人間がいるプロジェクトには関わりたくないけど 全員linq読めても将来読めない人がメンテするかもしれないから禁止
実際にあった話 ああこれが分からないってんなら確かに LINQ 禁止だわ。w
でもそんなのに付き合ってやる義理はないんじゃね? あとは規約の問題だな。 分からないなら勉強するなり聞くなりすればいいじゃんとは思うけどな
可読性あげるのは理解できるが便利な関数を規制するのはおかしいくない?
いつまでたっても個人の技術力上がらなくなるけどいいの?とは思う わからないって意味を誤解してるだろ
var queryDupNames = fileList.Groupby(f=>略, f=>略).Where(g=>g.Count>1);
メソッドだとほぼ一瞬で何をやってるかわかるだろ
わざわざ行数を割いて理解に時間のかかるクエリ式を使う意味はねえよ あークエリ式じゃなくてラムダで書いた方が見やすいって話?
それなら同意 リファクタリングするにもユニットテストで担保取れないレベルの酷いプログラム沢山あるからなあ 低レベルなプログラマに合わせたコードはテストしにくいひどいコードになりがち
インターフェース禁止だとか当たり前のように言ってくるからねあいつら 低レベルなプログラマとの話し合いは無駄だと言うことがよくわかった リファクタリングをリファクタ言うの非常に気持ち悪い
refactor は refactoring から派生した単語
refactor という動詞は使われだして日も浅く、まだ技術系のスラングの域でしかない
VS には「リファクター」としてリファクタリングを行うメニューが提供されているが
小洒落た動詞として使用される分には気にならないが、
日本人が「リファクタする」とか使ってると「カンパニーのコンプライアンスをガバナンスする」とかと同様に見える
いやもっとあれか「コンプラをガバーンする」とかと同じレベルかな? (govern は正しい動詞)
https://english.stackexchange.com/questions/57750/is-there-a-verb-refactor-meaning-doing-refactoring-in-english
……MSのスペルチェッカで引っかかってたのか(現在は知らんが) カタカナ表記する時点で英語のことなんて気にしてちゃやってられんよ 唐突に何なんだろうねw
まあ、某社のVS用のリファクタリングツールの旧名がRefactor !"だったね。 英語はよく知らんが 〜ing から派生して 〜 ができるとかあり得るのか? うん、そもそも refactoring が造語
初出が誰なのか不明(Martin Fowler ではない)だが、
1992年には論文で見られるっていうほんとに新しくできた単語なのよ 接頭辞と接尾辞を付けただけだから別に造語ってほどじゃ無いだろ? もとの言葉がfactor、factoringで、factorは動詞としても使われているのだから、
英語圏ならrefactoringという言葉が登場した時点でrefactorという言葉も同時発生的に生まれていると思うが… どうでもいい話だけど、派生した順番はたぶん
factor(名)→ factoring → re-factoring
なんだろう。
完全に想像で何の根拠もないけど、computingが動詞のcomputeの動名詞ではない(たぶん...)
ように、factoringも動詞のfactorの動名詞ではないような気がする >>447
factorizeはなぜ使われなかったんだろう こういうやつってC#に向いてるんだろうか
https://i.imgur.com/XbewmEQ.jpg
でもUnityとかでゲーム作りたいね思ってるのってこのタイプだろうなと思うし。 図面はやってたけど、なんでもアバウトで絵をかいてるんじゃないからとかボロカス言われた。 近年、そもそも右脳左脳自体がエセ科学だったんじゃないかって言われてるけどね。
ここのサイトのconsoleって書いてあるところに自分のrwitterアカウント打ち込むと、性格にマッチした言語がわかるよ。IBM製。
http://hello-new-world.mybluemix.net/top >>490
やーごめん。このスレ今日初めて見たの。ちゃちゃいれてもうしわけなす。 >>496
IBM製じゃなくてBluemix使ったアプリなだけやん 自分、ブックオフで買ってきたOS無しのPCにUbuntu入れてるんですが、
Pythonとか面白いので、C#もやってみたいと思っているんですが、
Mono入れれば、書店で売ってるVisualC#の本とか出来ますか・・? C#やるなら普通にWindows機でやったほうがいいと思うけど >>501
どうもありがとうございます。Windows機は父親のしかありません・・。強奪してこようかな・・。父親全然使っとらん。。
>>502
本のプログラムを打ち込んでみたいです。Pythonとか面白かったのでC#も挑戦してみたいという感じです。なんかいけそうっぽい >>504
本がVisual Studioを使う前提で書かれていたら無理 >>504
だから具体的に何をしたいの?(何を作りたいの?) 書いてある通りだろ
本を読んでその通りなぞりたいんだろ >>506
猫でもわかるシリーズならそんな心配はないな!
>>504
お父さんのPCで間違ってエロコレクションとか見つけたら鬱になるのでやめたほうがいい
ただVisual Studio(VScodeでもいいかも)使えない環境でC#やるのはめんどくさいと思うよ 猫でもわかるシリーズは今はもう古いと思う(※個人の感想です) >>510
※>>509はC#の本なんかまったく読んでいない無責任な個人の感想です >>512
本によるから実際にやりたいこと聞くことの何が悪いんかい? ここで聞くようなレベルの人が使うもんじゃないと思う ⇒ Mono 初心者がc#が何かよくわからないけど本を読んでなぞって体験したい
そんな感じだろ
それ以上何がある >>517
自分がプログラム入門者だとして何がしたいと答えるつもりだ? >>520
やっぱり答えられないじゃないか
pythonの本を読んでその通り打ち込んで楽しかった
次はc#だって感じだろ
何か作りたいものがあるならpythonでやるだろ >>521
ありすぎてひとつに絞る意味がない
おばかさん >>523
ぼくとりあえず簡単なWebアプリがつくりたいのー >>523
アンドロイドアプリモンスターズつくりたいなー >>524-527を作るための本を紹介するのか?
本をなぞると言ってるのに? .hstファイルを読み取りたいので質問です。
C#でやるのに参考になるサイトかコードはないかな? HSTファイル
調べた限りだとHiSTory fileでFXの履歴を記録したファイルで使われることが多いのかな?
自分が使いたいのはFXの履歴ではないくてカメラの履歴などの情報を取りたいです。C++などのコードで書いてるサイトはあるけどC#が見つからない .hst file format . . . Old and New (Jan 2014)
https://www.mql5.com/en/forum/149178
上のアドレスで説明されているフォーマットだったら普通にBinaryReaderで読み込めば良いんじゃないの
単純な構造だから苦労することも無いと思うよ >>537
> C++などのコードで書いてるサイトはある
ならそれ真似ればいいだけじゃねーの? HSTファイルもC++ほぼわからないので、参考になるのがあればと思ったんです。
BinaryReader使って試してみます。
ありがとうございました! そのC++ライブラリはそんな複雑なことしてんの?
数千行あるなら心折れるかもしれんが、自分で移植するほうが早い気がするけど
C#かけるなら余裕でしょ byte[]からstructにマーシャリングするのが簡単かな
あ、でも最近のC#はマルチプラットフォームだからバイトオーダーも気にしないとダメなのかな
地味にめんどくせえな 内容しっかり見てなかったけど100行なかったははず
C#もどこかあるだろで探してたけどC#だけまったく見当たらなかったので、結果的には自分で移植のほうが早かったかな どなたか助けてください
PaSoRiでFelicaのReadをしたいのです。
winscard.dllを利用し
ScardTransmitにてADPUを送信することで
非暗号化領域のREAD/WRITEをすることはできました
追加で、暗号化領域のREADをしてほしいと言われ、
Group Service KeyとUser Service Keyという2つの鍵を渡されました。
どうやらこの2つの鍵を使って暗号化領域のREADを行うようなのですが
それに該当する情報が見つかりません。
この2つの鍵と縮退鍵の関連もわかりません。
2つの鍵を使って縮退鍵を合成する???
合成したとしてどういうAPDUコマンドを送る???
ご存知の方がいらっしゃいましたらご教授ください。 >>545
ごめんなさい。C#で書いてるのでC#で質問しました。
他に適当なスレが見つからなかったもので。。。 ライセンス契約の無い奴にそこから先は教えられねーわ。 バイナリファイルをバイト配列に一気に読み込んでLINQでゴリゴリするなんてC#って言うか.netの醍醐味だね。
C、C++と歩んできて正直C#なめてたが、プログラムの書き方変わったよ。 バイナリファイルのバイト配列はストリーム(BinaryReader/Writer)経由でしか扱ったことないな
浅学ですまないが非常に興味があるので、何をする処理にLINQを使っているのか教えてほしい >>549
横レスだけど「読み込んでLINQ」だからパーサーの部分だろ スキップ.テイク.リバースでバイトオーダー反転してデータ取り込むとかだ。 テキストファイルを一行ずつ読み込むとか、バイナリファイルを1フレームずつ読み込むなんてのは時代遅れなんじゃねかと。
最近は一括読み込みしかしないな。
パフォーマンスはライブラリやOSが担保してくれる。 時代遅れかどうかは知らんけど(そういうネトウヨチックな「俺スゲー」という間抜けな自己陶酔、俺は大嫌いだがw)
富豪的であってもそれが一時的(たとえばメソッドの中だけ)なら何も問題ないね。
その方がより簡潔だったり可読的に書けるなら否定する理由は何もない 時系列データのリアルタイム処理とかどうやって一括で読み込むんだ?? 時系列的に増えていくファイルだとか、ソケット通信のバイトストリートだとかは順次読み込みするしかないよ。
だけどドライブにあるファイルは一括読み込みの方が簡単だよ。1ステップだからね。それをソートするなりデータ抽出するなりLINQ使えば簡単だよ。
それを知ってから逐次読み出しなんか面倒くさくアホらしくなったよ。 >>556
プログラム上に巨大な配列生成しても、それだけRAMに割り付けられると思うのは大間違いだよ。
メモリの階層化とかで勉強してね。 >>556には「高速RAMストレージ」って書いてあるけどw >>558
ストレージと書いてるだろw
外部記憶装置のアクセスの高速化しか考えてねーよw LINQのメリットの一つに IEnumerable<T>があるのになんで一括読み込みに拘るんや 一括読み込みしたものがアイエニュメラブルになるから。 >>560
最近のパソコンは速いぞ。
試しにやってみなよ。 まったく関係ないが、そういや、この手のデバイスって結局実用化せずに消えたのかね
まったく聞かないな
http://blog.livedoor.jp/dankogai/archives/50560934.html
読んだのずいぶん前とは思ったがもう12年前か... >>564
高速flash memoryでraid組んでもRAMの速度には負けるだろ。 >>565
PRAMのSSD版ならもう出てる
DIMMは今年度中にサンプル出荷のはず
STTやRe、Mは頑張ってるがまだ先だろうね Debug.Failのサンプルコードがこんなのなんですが
プログラムのバグでもない限りは絶対に訪れないような場所には
片っ端からDebug.Failを撒いておいたほうがいいんですか?
それともそれ専用のthrowすべき例外なりがあるんでしょうか?
Assert.Fail?
何も書かないのは気持ち悪いので指針を教えてください
switch (option) {
case Option.First:
result = 1.0;
break;
// Insert additional cases.
default:
Debug.Fail("Unknown Option " + option);
result = 1.0;
break;
} >>568
そういうのはフロー解析による不要なコンパイルエラーを回避するために throw する
例外の種類は状況やポリシーに応じて InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException あたりを使うのが普通 これは標準で例外欲しくなるよなぁ
いつも何を投げるか迷う そうかな
>>569が挙げてくれてるので十分でしょ。
少なくともメッセージは自由に設定できるし、本当に必要なら派生もできる。
そもそも例外をそんなに細かく分類する必要が本当にあるのかちょっと疑問 常識的にキャッチされない種類の例外なら何でもいいわな
InvalidOperationExceptionだけはキャッチされる場合があるから微妙だけど、慣習的にはわりと多数派な気がする
個人的には常に NotImplementedException にしたい NotImplementedException は↓の人の意見だと本当は実装すべきなのに何かの都合でまだ
未実装の場合に使うらしいね。正しいかどうかは知らない
http://yfakariya.blogspot.com/2011/07/blog-post.html
同じNotでもNotImplementedは「未」実装、NotSupportedは「非」サポートってのは分かりづらいっす 細かいけどコンパイルエラー回避のためにthrowする、ってのは違くない?
現実問題そんな感じになってしまうことはあるけど理想はコンパイラの都合に合わせたコードなんて無いほうがいいんだから >>569
>InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException
これらの例外は自クラスには非はなく、呼んだ側の使い方が間違っているといった感じの例外に見えますが
そんなにこだわらなくていいんでしょうか
public class MyClass
{
public class BugException: System.SystemException{}
public void buggedmethod() { ... throw new BugException(); }
}
これで良ければ1行で定義できて1番明快に思えますが
検索してもこんなことをやってる人は誰もいないっぽい… >>574
>>568のケースに限れば、defaultに来るのはenumにメンバを追加したのにcaseを追加していない「変更漏れ」であると考えることもできるから、
NotImplementedException でも意味的におかしくはない
NotSupportedExceptionは(継承の都合で)メンバ自体が使えないことを意味するからちょっと違う MissingCaseException
を自作でいいのでは? >>577
なるほどそうかも
関係ないけど、いつも思うけどあるインターフェイスを継承してるのに
そのインターフェイスのメソッド使ったらNotSupportedExceptionが飛んでくるって設計は
なんか不条理を感じるのは俺だけかなあw
インターフェイスって契約じゃなかったのかよw InvalidEnumArgumentExceptionは? >>569が挙げてる例外は各々意味あるから>>568のとはちょっと違う気がする
AssertExceptionとかLogicErrorExceptionとかが欲しい Debugクラスのメソッドはリリース版のとき消えます、素通りします
Debug.Fail() は起こりえない状況であり、かつ、素通りしても問題ない箇所、
またはリカバリ処理を行っている箇所にしか使用できません
基本は例外か Trace.Fail() を使用するべきです
Debug.Fail() を使用して問題ないのは具体的には下記の条件に当てはまるときぐらいだと思います
・『絶対』に起こらないことを目視や単体テストで確認した上で、後続のコードでリカバリ処理を行っている箇所で、
開発によってコードが壊れてないかチェックするためにコードに挿入する
(絶対に発生しないので単体テストを行う場合は #if で慎重にコードを切り替えてエラー状態を再現することになります)
つまり、リカバリ処理してるなら Debug.Fail() は入れなくても問題ないはずです 遅くなりましたが例外とログの使い方大変参考になりました。
ありがとうございます。 超初心者ですが
RectangleとかPointとかって、値型?
値型ってコンストラクタに引数渡せないって、さっき、読んだけど >>587
初心者ですが
そいつらは値型でつ
値型は無引数のコンストラクタにコードを書くことができないんでなかったかいな? 構造体は初期化が0フィルだから
フィールドが非null値の場合はどうなるのかはしらない Visual Studio 2017
合計 90 日間が過ぎました。
無料で使いたいんですが、どうすれば良いでしょうか? 90日ってことは有償版だろ
大人しく買えよ
もしくはCommunity版を検討する >>592
どうしても有償版を使い続けたいのなら期限が切れるたびにWindowsを再インストールすればOK Community版に移行する事にしました。
ありがとうございます Communityって登録しないと期限とかなかったっけ サブスクリプションで全シリーズ揃えてる俺に死角無し。 Entity Framework Coreについて質問です。
以下のように1対多の入れ子(left join)になったデータを取ってくる場合で、一番最下層のテーブルに取得条件を追加したいです。
どのようにしてwhereメソッドを書けばよいでしょうか。
.Include(x => x.Departments)
.ThenInclude(x => x.Groups)
.ThenInclude(x => x.SubGroups)
.ThenInclude(x => x.Employees)
.ThenInclude(x => x.Skills)
例えば以下のような感じです。
Skill.ExpireDate >= DateTime.Today
それぞれのプロパティはコレクションのため以下のようには書くことができません
Where(x => x.Departments.Groups.SubGroups.Employees.Skills.ExpireDate >= DateTime.Today)
ThenIncludeで指定しているプロパティがすべて列挙でなければ以下のように書けると思うのですが・・・
Where(x => x.Department.Group.SubGroup.Employee.Skill.ExpireDate >= DateTime.Today)
それぞれの階層のクラスは全プロパティ取得することを想定しています。
Entity Framework Coreで実現可能でしょうか。 その条件ならテーブルを上からたどる必要はないのかと >>602
辿らない場合、スキルクラス単位で条件絞り込みができるのでしょうか?
これができればとても楽なのですが、、、 どうしても上からたどりたいなら
WhereとAnyで掘り下げていくとか
SelectManyで平坦化するとかか いえ、辿りたいわけではなくて、辿らないとできないと勝手に思ってただけです
辿らなくて良いなら辿らないでやれればベストです。
ですがその方法がわからないので教えてもらえませんでしょうか。 var q = _context.Hoges.FromSql($@"
select H.* from Hoges H where exists (
select null from Departments D where H.DeptId = D.DeptId and exists (
select null from Groups G where D.DeptId = G.DeptId and exists (
select null from SubGroups SG where G.GrpId = SG.GrpId and exists (
select null from Employees E where SG.SGrpId = E.SGrpId and exists (
select null from Skills SK where E.EmpId = SK.EmpId and SK.ExpireDate >= {DateTime.Today}
)))))
");
var hoges = q.Include(x => x.Departments)
.ThenInclude(x => x.Groups)
.ThenInclude(x => x.SubGroups)
.ThenInclude(x => x.Employees)
.ThenInclude(x => x.Skills)
.ToList(); 以下のコードはどういう内容なのでしょうか?
public IList<float> Plus214_Output_0 { get; set; }
特に
<float>、 { get; set; }
が分かりませんでした
以下の一部になります
https://github.com/Microsoft/Windows-Machine-Learning/blob/master/Samples/UWP/MNIST/src/MNIST.cs >>607
前者は「ジェネリック」、後者は「自動実装プロパティ」でググれ >>608
ありがとうございます!めっちゃ助かりました! Linqでの書き方で質問なのですが
同じサイズのdataAとdataBのデータがあるとして
データが違う箇所のIndexを取り出すとしたらどう書けば良いでしょうか?
今は↓のようなコードになっています。
List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 };
bool resultAB = dataA.SequenceEqual( dataB);
if(resultAB = false)
{
foreach(var A in dataA)
{
比較処理
}
}
結果
2
3 >>610
ない頭絞って考えてみた。
Enumerable.Range(0, dataA.Count()).Where(p => dataA[p] != dataB[p]);
やら
dataA.Select((v, i) => new { value = v, index = i }).Where(p => p.value != dataB[p.index]).Select(p => p.index);
どっちも汚い。もっと賢いのおしえろください こういうのってforで一つずつ比較するのが一番読みやすくて楽じゃね? >>613
俺もそう思う。他の処理が入ってもすぐに組み込めるし
Linqは可読性がメリットなんだから、わかりにくくなったら本末転倒だし
あくまで個人の感想です dataAとdataBが1000件以上あるので、まず単純に変更してるのがあるか?で
SequenceEqualを使ってみた流れでLINQを調べていた流れで知りたかったです。
forで書くのがわかりやすいとは思うけど、LINQでもっとうまく書けるかなと思って
>>611参考になりました。ありがとうございます! for では、比較されるレコードが送られてくるけど、
LINQ では、答えしか送られてこないから、効率的 Linqのほうがわかりやすいし、ソースがランダムアクセスできるとも限らんだろ
シーケンスを束ねてインデックス振って比較して違うやつだけ取り出してインデックスを取り出す
Linqなら思ったことをそのまま書けばいい
IEnumerable<int> Hoge<T>(IEnumerable<T> a, IEnumerable<T> b) {
var comp = Comparer<T>.Default;
return a.Zip(b, (x, y) => (x, y)) // シーケンスを束ねて
.Select((e, i) => (i, e.x, e.y)) // インデックス振って
.Where(e => comp.Compare(e.x, e.y) != 0) // 比較して違うやつだけ取り出して
.Select(e => e.i); // インデックスを取り出す
}
ループじゃぱっとみ何やってるかわかんねえよ あくまで個人の感想だけど。
自分も >>619 みたいなのの方が分かりやすいなあ。
てか、そういう書き方をよくするというか。 LINQってEntityFrameworkでしか用途なくねえ? >>619
うーん、普通にこっちのほうが分かりやすいと思うけどw
別にLINQ否定派じゃないよ
IEnumerable<int> GetIndices()
{
List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 };
for (int i = 0; i < dataA.Count; i++)
if (dataA[i] != dataB[i]) yield return i;
} Zipしたものをforeachで回すのが一番自然
IEnumerable<int> Hoge(IEnumerable<int> A, IEnumerable<int> B)
{
var i = 0;
foreach (var eq in A.Zip(B, (a, b) => a == b))
{
if (!eq) yield return i;
i++;
}
}
自分はやらんけどLinqならこう
dataA.Zip(dataB, (a, b) => a == b).Select((eq, i) => eq ? -1 : i).Where(i => i >= 0); インデックスが必要な時、わざわざselect挟んでインデックス貼るの馬鹿らしい感じがして好きになれないんだけど仕方ないよね?
そんなにインデックスを参照することが多いなら生成時に一緒に貼っとけって話かもしれんが…
そもそもlinqマスターはインデックスを必要としない設計にいつもなるの?
自分もインデックスが無くて済むように考えるけど結果的に必要になる箇所が細部で出てくるんだよね どうしても必要な時はselect((value, index) => new {V = value, I = index})でインデックス引っ張ってるわ
それでもインデックス欲しい条件1行で書けるのが楽だからLinq便利派だけども >>628
俺もそれ、ちょくちょくするんだけどforで回したほうがよくね?って思っちゃうことがあるんだよね
もちろん処理によりけりと言ってしまえばそれまでなんだけど
比較するようなもんじゃないかもしれんがjavascriptなんかだと大抵インデックス取れるから、そっち触ったあとにC#に戻ると処理考えるときにインデックスありきで考えがちになっちゃう気がしてる 先に出てた課題でもzipしたあと、そのままlinqで処理を完結させるか、zip後にforで回すか
個人的にはzipがどちらにせよ入るなら最後までlinqの方が1つの処理を1つの手法で解決してる感じがして好き
だけどインデックスが処理に必要だからfor使いたいって気持ちもわかる >>629
まぁforのがいいと感じるならそれでもいいんじゃないかな
複雑な処理しない限りは大体Linqのがスッキリするからそうしてるだけだし こういう拡張メソッド作っておくのはたまにやる
public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> self, Func<T, bool> predicate)
{
var i = 0;
foreach(var s in self)
{
if(predicate(s)) yield return i;
i++;
}
}
dataA.Zip(dataB, (a, b) => a == b).WhereIndex(eq => !eq);
拡張メソッド嫌いな人もいるだろうけど一番読みやすい
わざわざSelectでインデックスつけてる冗長さもないし、添字アクセスもないし、使う時はすっきり意味がわかりやすい >>632
正直クソ分かりにくい
俺がレビューしたらリジェクトするわ
WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する
そもそもメソッド名以前に、LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
キーやインデックスの方を返すような操作については特に念入りにそれがわかるような明示的な表記になるように工夫したほうがいい SelectIndexWhere()ならどうか。英国紳士にも通じると思う SelectIndexFilteredByValue
これでもパッと見 ? となる人は多そう >>634
IndicesWhereで十分でしょ
Selectはいらんと思うw
メソッドなのに動詞じゃないのはおかしいって言ったって、組み込みのWhereだってそうだ
まあスレ違いだね。 >>633
>WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する
そんなのはWhereでできるし
>LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
>キーやインデックスの方を返すような操作については
それもSelectでできるし
だいたい要素の値を操作していくものっていう暗黙的了解があるならWhereIndexも要素の値が対象と思うんじゃない?
なんか矛盾してね? ほぼ同じ拡張メソッドでIndexWhereのが引っかかったわ
多分こっちの方が自然なんだろうな
一応候補だったんだが自分的にしっくりこなかったけど >>629
ランダムアクセスできるとは限らんしっていうかLinqだとほとんど出来ない >>641
ランダムアクセスできないコレクション扱うときにインデックスが欲しくなるケースってなかなか無いと思うけど >>643
それってインデックスつけることが一つの目的じゃない?
インデックスってかソートかな?
いろんなところでいろんな処理されるコレクションがあって、その処理の殆どにインデックスが不要だけどごく一部にインデックスがほしいとき、わざわざ1行追加するのスッキリしないなぁって感じ
たった1行なんだから書きゃいいんすよ?
それはわかってるけどなんか気持ち悪いなぁって気がするだけ ほとんど必要が無いインデックスだけど
ごく稀に必要になるから必要になるところでだけインデックスを追加するんだろ
ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん 何を言ってるのか意味が分からんけど、indexって言葉の意味を知ってて言ってるのかなそれw >>645
いや、linqでインデックスを付与しないけどランダムアクセスすることはあるよ?
前提変えたらそら意味通らんよ
コレクションをlinq以外で処理しちゃ駄目ルールでもあるの? >>647
なにいってんだ?
IEnumerable<T>にインデックスなんてない
ないからSelectで付与するんでしょ
そんなルールはないけどほとんどほとんどLinqで済むでしょ?
Linqでサクサク処理してるのに中に突然ループが紛れ込んできたらキモいって話をしてる
var tmp = list.Where(...).OrderBy(...).ToArray();
for (int i = 0; ...) {
...
}
var result = tmp.Where(...).Select(...); >>648
え?ずっとそういう話をしてたのになんで突然
>ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん
って書いたの?
インデックスのないlinq処理でそれが必要になったときわざわざselectで付与するのなんか気持ち悪いねーって話よ? >>649
気持ち悪いのはお前の感覚ではという話だろ
俺からすればToArrayやToListをかましてメモリとCPUを無駄にしたり余計なメソッドを追加するほうが嫌
メソッド化に関しては再利用性が高いかうまく抽象化されていて可読性が高まるというなら別だが
真にランダムアクセス性が必要なアルゴリズムならば変換せざるを得ないがそもそも今回の問題には必要がない >>650
うん、そうだよ
個人的に気持ち悪いなーってだけ
はじめからそういうふうにしか話ししてないつもりだけど
ランダムアクセスが不要だからあえてランダムアクセスできないコレクションを選択するの?
ランダムアクセスは不要だけどあったって使わないだけだからどっちでもいい、ってなるのが普通じゃないの?
パフォーマンス要求がシビアでランダムアクセスできるコレクションを選択することで、その要求から外れてしまう、とかいうならわかるけど >>651
ランダムアクセスが不要なアルゴリズムなら「当然」IEnumerable<T>(ランダムアクセスできないコレクション)を選択するだろう
まったくもって「あえて」と言う理由が分からん
もしもSelectやWhereの引数が配列だったら普通のプログラマなら「あえて配列にしたのはなぜか」と疑問を持つだろう
なんか逆なんだよね思考パターンが >>652
そういうもんかー
んじゃあ使うコレクションがランダムアクセスを提供しているか否かを把握しとかないと選択できないな… コレクションって言葉がダメだと思うぞ?
そもそもIEnumerableはシーケンシャルな列挙の機能しか提供しない
根本的に理解が間違ってる コレクションという表現はおかしいね
無限に乱数を返すものをソースにできるし マジレスするとメッセージ捕まえて
自力で描画すれば可能なんだけど
労力に見会わないのでお勧めしない
webやWPF, UWPならグラ弄るの簡単 のへこののけとこけノハケケノノネネサマを通り越しておりましたとが気になると7人 doxygenみたいなドキュメント生成ツールを使うとxaml部分がまともに解析出来ません。
bindingしているviewとviewmodelの関係なんかが分かるドキュメントにしたいんですが何か良い方法ないでしょうか? Func<string> func = () => { return "text"; };
var res = func();
これを一文で書くことはできますか。
ふと気になっただけではあるけれど、自分で解決できなくて気になって仕方がない。
基本的なことが分かってないような気がする。 本当はなにをしたかったんだろう
例題が悪い気がする ああ、そうか。w
パラメータに対してちょっと複雑な変換を掛けるのだけど、汎用性がないから専用関数作るのもなんだし、
だったらラムダ式で書けばいいんじゃね?→ ラムダ式は Func 型?だから戻り値とれねーじゃん ってところから進めなった。
他にやり方はあるので出来なくてもいいのだけど、気にはなって。 専用関数でいいんじゃない?
複雑な処理ならそれこそ括りだしておいてわかりやすくしたほうがバグ出にくいし簡単でしょ こんなのは嬉しくないね
var pi =
(
(Func<double>)
(
() =>
{
const int total = 1000000;
var inside = 0;
var rnd = new Random();
for (int i = 0; i < total; i++)
{
var x = rnd.NextDouble() * 2 - 1; var y = rnd.NextDouble() * 2 - 1;
if (x * x + y * y < 1) inside++;
}
return 4.0 * inside / total;
}
)
)(); これも却下だな
Func<Func<double>, double> invoke = (f) => f();
var pi = invoke
(
() =>
{
const int total = 1000000;
var inside = 0;
var rnd = new Random();
for (int i = 0; i < total; i++)
{
var x = rnd.NextDouble() * 2 - 1; var y = rnd.NextDouble() * 2 - 1;
if (x * x + y * y < 1) inside++;
}
return 4.0 * inside / total;
}
); 全然関係ないけど、Randomって[0, 1]とか(0, 1)の乱数は作れないのか
半開区間だと使いづらいような気がするけどそんなことないのかな 言葉の意味はよくわからんが
Randomは第二引数未満の乱数発生するんじゃ? docsにもあるけど
https://docs.microsoft.com/ja-jp/dotnet/api/system.random?redirectedfrom=MSDN&view=netframework-4.7.2
dobonの方が分かりやすいし読みやすいから
https://dobon.net/vb/dotnet/programing/random.html の
//0.0以上1.0未満の乱数を倍精度浮動小数点数で返す
Double d = r.NextDouble();
>>670こういう意味とは違うの?
整数範囲で出して割った方が範囲や有効桁も決められるからそっちの方がよさそうな気もする [0, 1]とか(0, 1)は数学の記号ね(多分高校1年ぐらいで習ってるはずw)
Random.DoubleNextの戻り値は[0, 1)(つまり0≦x<1)らしい
普段乱数使うようなコード書いてないからよく分からんけど、
0≦x≦1とか0<x<1でないと困る場面も多いんじゃないかなと思っただけ 有効桁区切るのと一緒で丸め、切り上げ、切り捨てしたらいいだけでは
Random自体C#で使う場面に出くわしたことないからあまり考えないな game engineだとか[]の乱数あったりするよ
()は見たことない
コーディングしてたらわかるけど利用場面は圧倒的に少ない >>665
> パラメータに対してちょっと複雑な変換を掛けるのだけど
と言うなら例もパラメーター使ってる例を書かなきゃ
>>668
俺もこれしか思いつかなかった
そもそも
var f = (string x) => { return "abc" + x; };
位は型推論してくれてもいいと思うんだけど難しいのかな? >>673
例えば0〜9の整数乱数がほしい時に[0,1)なら10倍して整数部分を取るだけだけど(0,1)とか[0,1]だとすごく面倒 面倒だったら擬似乱数生成器を自分で作ればいい
キミラ程度が使う程度の擬似乱数だったら数行コピペでできる程度のもんで十分だからな >>680
本来必要のない名前を考えるのが面倒
そもそもローカル関数にするぐらいなら>>661とたいして変わらんし やっぱり低学歴知恵遅れは
内側の擬似乱数生成器をかえるだけの話なのがわかってないわ
きっと擬似乱数がなんなのかすらわかってないわ
擬似乱数がなんなのかわからずに乱数()とかいって数字使ってる程度だからな つまり
コレがC#なんか使ってるヤツラのオツムの程度 >>673
(0,1)は[0,1)が0ならやりなおし、でいいんじゃないのと単純に思ったがそんなものじゃない? そもそも機械イプシロンのこと分かってて
ああいうレスしてるようにはまったく見えないからな >>686
発生側はそれでいいとしてそれを必要とする機会がどんだけあるの?
って話かと 気に掛けてくれた方々に。ありがとう。
>>668
ああ。なるほど。型を明示してあげたらよかったのか。
キャストを加えたら期待通りに書くことが出来ました。ありがとうございます。
これってラムダ式を var で宣言した変数に代入できなかったことがヒントになり得たんだな。頭が回ってなかった。
これくらいは型推論してくれても良さそうなのにとは原因が分かった後での負け惜しみ。
>>666,680
今回のはそういうことが出来そうなのに出来なくて悶々としてしまって。
実用性度外視で原因を知りたかったの。 今ならref/outがないならAction/Funcに型推論して
シグネチャが同じdelegate間の暗黙の型変換が行われる
初期化時に左辺とかキャストとかでdelegate型が明示されてたらそのdelegate型でnewされる
でいいと思うよな〜 Visual C#ってDelphiみたいに同じコードでWindows用とMac用にビルドできる?
マシンは両方用意できるとして Visual C#って具体的にはどのフレームワークを指してるのかい? >>691
コンソールアプリなら同じコードでどっちでも動くはずだけどGUIはよくわかんない
Xamarin Forms使えばいけるのかな? 多分ASP.NETを使ってGUIのWebSocketクライアントを作る予定です
ありがとうございます MacでWebSocket??????
ちょっと何言ってるかわかんないですね 下みたいなことって出来ます?
やりたいのは object 型の変数に代入したジェネリック系のインスタンスを、さらに元のジェネリックの型にキャストし直すってことなんですが。
void func( object dic )
{
var tmp = (Dictionary)dic; // ← これみたいなことをやる方法がないかなと
tmp.Add( "test", new object() );
}
var dic = new Dictionary< string, object >();
func( dic ); >>698
言葉が足りてなかった。申し訳ない。
例示のケースの場合は、
var tmp = (Dictionary<string,object>)dic;
と指定すれば出来るのだけど、Dictionary だけでキャストし直すみたいなコトできないかなって。
as でも Dictionary だけではキャストできないことは確認しました。 出来たとして何の意味があるのそれw
そもそもHoge<int>より大きなHoge<T>とかHogeって型が存在するわけじゃないでしょうw
根本的に勘違いしてないか genericsでないDictionaryは存在しないからでしょ。
genericsパッケージでないほうのHashtableならできると思うけど安全性を損ねるしやらんほうがいいんじゃね IDictionaryならあるよ
キャスト時にいちいち型引数を書くのが面倒ぐらいの意味しかないけど >>700
を読み直してみると、ひょっとして要するにジェネリックの型パラメータを書くのが面倒臭いから
省略できないか?、って言いたいのかな
それなら答えは「できないけど仮に出来たとしても絶対やるな」じゃないの?
もちろん、
using Dictionary = System.Collections.Generic.Dictionary<string, object>;
こういうエイリアスは書けるはずだと思うけど
何にしろ、質問は他人が読んで分かるように書いて欲しいよね 型安全性を無視していいならdynamic使え
そうじゃないなら出来てもやるな
つかジェネリックを勘違いしてるんじゃね それによって何がしたいのかを書いてくれないと何言ってるかわからんよな ありがと。
やっぱり dynamic 使うしかないかな。避けたかったのだけど。
なにが入ってるか分からない配列の中身を文字列化してログ出力したかったの。(最初は)
object[] の要素の中身が generic だったりしたときに ToString() だとクラス名?にしかならないから。 なんで何が入ってるかわからない配列なんてもんを触るんだ
静的型付け言語のメリット台無しやんけ 何が入っているかわからないものを扱いたいと言っていながら一方でdynamicは避けたいというのが
よくわからんなぁ。避けてどうしたかったんだろうか。 でもJSも実行時に型を判断できるし、逆の意味で大して変わらんと思う。 あれ? dynamic って推奨だったの?
おまえらがどういう場面で使ってるのか教えてくれ。 デシリアライズでもするつもりだったんじゃねの
クッソ面倒なんだよな実際 ん?
> なにが入ってるか分からない配列の中身を文字列化してログ出力したかったの。(最初は)
じゃねーの? もういいでしょw
たぶん何か勘違いしてるだけだと思うよ
俺もプログラミング初めて2,3年は静的/動的とかコンパイル時/実行時の違いとか
分かってるようでよく分かってなかった 結局なにがしたいのか伝わってこない上に
微妙にムカつく上から目線 そろそろ.NET標準でDDSのデコードできるようになってくれないかな
エクスプローラーでは普通に表示されるんだから
できればBC6と7までw >>694
あれ、C#って、マルチプラットフォームじゃなかったの?
Java は、Windows, Mac, Linux, iOS, Android, Chrome, Firefox, IE, どれでも
動いたよね、昔は。 Javaもクライアントアプリ分野から撤退したから今はクロスプラットフォーム度でいえばC#のほうが上なくらい(あくまでカタログスペック上は)
C#はWebかコンソールアプリなら.NET Core使えばLinuxやMacで動く
スマホやMac向けのGUIアプリならXamarinだな 普及度とかマルチプラットフォームとかどうでもいいけど
Windows使っていて個人的に何かちょっと作ろうと思ったときに、もうC#以外考えられない体になってしまった おれはpythonかなー
スクリプト言語はほんま楽やで
客先でインスト制限きつい時はC#とPowerShell
Microsoftさんは早くVSCodeとdotnet cliをWindows標準にしてPowerShellを強制アプデすべき >>727
個人で使ったけど、これを社内外で使わせるにはMVVMきっちり教えないと破綻確実だから諦めた >>726
確かに楽だな。 < python
Web API を叩くプログラムをこれで書いたけど、学習まで含めてすぐ出来た。w
VS 上でも書けるのが楽さに拍車を掛けてる。
>>727
うん。でも最近はやってないな。そーいえば。 >>727
使ってる。
チームとして採用するのは難しいかもね。 そうです。
XAMLとか慣れるまで大変だし、やっぱり簡単なFORMになるんじゃないかな。 レイアウトはFormよりWPFの方が楽だと思うんだけどな
Formばかりやってたチームだと学習コストが高くて難しいのはある XAMLはVS補佐がまだまだ足りない
昔の落ちまくりよりは格段に進歩はしたが formは過去の遺産だから、これからやるならWPFが正統だ。 >>735
Blendを使ってください、ってことなんだろうけどなぁ WPF自体は終わってるよね
次の本命が無いから使うしか無いだけで MSのイチオシはUWPだしコントロールは充実しているんだけどね
TreeViewは完成したし、後はDataGridの完成を待つだけだ 最近のMSはだいたい未完成
ちょうどGithubもやらかしたし、Azureのサービスなんかガチで世に出しちゃいけないレベルのものが大半 未完成の物をとりあえず出して、
バージョンアップで完成させてくのが昔からのビジネスモデルやろw >>747
どういうこともクソもWPFは5年くらい前にとっくに開発終了してメンテナンスモードだよ >>748
ソースは?
.NET Core3.0知らないの? >>749
ソースは.NET 4.5以降のリリースノートだよ
何か気になる新機能はありましたか? >>750
で、「終わってる」だなんてMicrosoftはリリースノートに書いてるのかい?
しかも.NET Coreは都合が悪いから無視ときたもんだ… Core3.0まで出てるんだ
なんか使いやすくなった? WPFが終わってるならFormは死んでる。
しかし、ゾンビ技術者がウヨウヨいるから需要はあるのかも。 >>751
CoreのWPF対応ってWPFをCore向けにビルドしてNuGetで入れられるようにするだけだぞ?
WPF自体の新機能ではないよ >>754
必死に調べて理解したのはそれだけ?
「終わっている」プロジェクトに対してそんなことしないだろ 平日に役に立たない言い争いしている奴らが終わってる WPFの機能追加は終わってる
なら正しいかもしれない >>752
せっかく切ったWPFとFormアプリ復活・・・ 業務系ならありがたいね
ランタイム依存なしでForms使えるんだろ
ブラウザ要らないじゃん >>759
デプロイどうすんの?アップデートの度に君が出向いて客のPCでZip解凍して回るの?
それが面倒だからWebなのに、それが.NET Coreになったところで何も解決しないよ
というかClick Onceが無くなる分だけ状況は悪くなるな >>760
>Click Onceが無くなる
ソース出してみ >>762
悪魔の証明を求められても困る
.NET CoreでClick Onceが使えるソースを出すのは君の仕事だ
当たり前だけど、FullFWのClick Onceを使うという本末転倒な方法は無しで頼むぞ >>763
断定してたからそんなアナウンスもうされたのかと思ったのに…思い込みが激しいと周りが苦労するね WPFが.net coreに対応したといってもlinaxで動くわけではないんだよね?
じゃあなんの意味があるの? 同じプログラムを2台のPCで動かしたら、スペックのいい方が断トツ実行速度が遅いんだけど、何かチューニングするとこある? 特に怪しいものなんか動いてないと思うんだけどなぁ
アンチウイルスの保護停止しても変わらない
こんなときに効果的なログの張り方ってある?
一部がネックなのではなく、もう全部が緩慢な感じ 例えばウィンドウズサーチとか重たいよね
リソース逼迫してないなら
ディスクI/OやネットワークI/Oや
ネットワーク構成が違うとかかね
全体的に緩慢となるとなあ
ヒント欲しいならもっと情報ださないとダメよ タスクマネージャーあけてぼーっと眺めておくとひょっとしたらと。
で、スペックはどんなもんなの? debugとreleaseてそんなに違うの?おれのfizzbuzz100までどっちも一瞬だったよ スレチかもしれんけど、まだサポートしてないバージョンのアセンブリで定義されてるクラスをリフレクションでもいいから使う方法ってないかな。
具体的にはフレームワークのバージョンが2.0しか許可されない職場でxdocumentを使う方法…
dllを隣に持ってきて参照しても、型自体を認識してくれない >>784
100万データ処理してから物言いなさい 64bitアプリから32bitアプリへ効率よく通信したいのですが、良い方法ありますか?
今はPostMessageを考えてますが型が合ってないので違う方法を探してます。 UWPだとreleaseとdebugでちがいそうだけど。デフォルトだとreleaseは.net nativeでコンパイル。debugは違う >>788
TCP使えば?
直接叩くのが嫌ならgRPCとか使えばいい
WCFや.NET Remotingという手もあるけど、どちらもレガシー扱いで.NET Coreからは廃止されたから新規に使うのはお勧めしないな Core世代のWCFや.NET Remotingの代替って何があるんだろ 普通にRESTか、クラウドプラットフォームが提供するメッセージキュー(SQSとか)などの外部サービスだよ
余計な囲い込みを廃して今時のWebシステムの構成要素として組み入れやすくするというのがCoreなんだから、今更.NET固有のRPCなんか要らん dllを修正する際にどの程度までの修正であれば問題ないかまとめてある
サイトってありますか?
dllのクラスの派生元に一つクラスを挟んだ修正では問題なく動いている
ようだったので・・・。 >>795
逆に使えなくなる場合は(マネージドdllで)厳密な名前付きアセンブリとして作ってある物が名前などが変わってしまった場合
厳密な名前付きアセンブリ
https://docs.microsoft.com/ja-jp/dotnet/framework/app-domains/strong-named-assemblies
>厳密な名前付きのアセンブリを参照すると、バージョン管理や名前の一意性を保護できるなどの利点を期待できます
それ以外は変更のないクラスやフィールドにアクセスする分には問題にならないはず >>797
情報ありがとう。
あまり厳密にはしたくないのですがリンク先を
よく読んでみます。 Monoの互換性についてなのですが、
Visual studio2017でWindowsクラシックデスクトップのWindowsフォームアプリケーション(.Net Framework)で書いたコードは
そのままMonoでコンパイルできるという認識であってますか? >>799
できるし、VisualStudioでコンパイルしたものをMonoでコンパイル直す必要すらない建前なんだけど・・・・
実際には対応状況にかなりの差があってGUIアプリケーションやら暗号やらが絡むものについてはうまくいかない事が多い >>800
そうだったんですね
ありがとうございます >>802
最近は条件付きでできるよ
C# in 引数 Javaのリモートデバッグは
1. 起動オプションでデバッグ用のリモートポートを指定
2. デバッガで同じポートを指定してアタッチ
でできますが
C#(DotNet Core 2.1)では同じような事は出来ませんか?
運用環境でしか発生しないバグのデバッグってどうやればいいんでしょうか? >>804
リモート側にリモートデバッガ入れるとか
運用環境ということだからそもそもデバッグビルド入れられるか知らんが
まぁ、ログ仕込め 同じLAN内ならプロセスアタッチで行けそうだが
試してないから知らん Unity って、Wikipedia によれば、600,000 (60万人) も、登録ユーザーがいて、
従業員が、2,000人以上、年間利上げが、100億円を超えるほどあるとされる。
ゲームエンジン Unity の使用料は、
・1,000万円までの売り上げなら、無料。
・2,000万円までの売り上げなら、年間5万円ほど。
・それ以上の売り上げなら、で年間18万円ほど。
とある。
でも、Wikipediaに載ってる Unity を使ったゲームのリストは、
100本あるかどうか程度しかない。
これだと、Unityには、年間2,000万円程度の収入にしかならないのでは
ないかと思う。
それに、アメリカですらプロのプログラマは、30万人くらいしかいない
とされることとも辻褄が合わないように思える。
なんかおかしくない? 基準がwikipediaなのが謎だけど
steamとか見てみなよ
それに×人数だから実際はもっと高い >>808
>それに×人数だから実際はもっと高い
探したけど出てこなかった。どこに書いてある? そもそもUntiyはプログラマ以外も使うから小さい会社でもアカウントはそこそこもってるようなこともあるよ 最近スマホアプリのtop100くらいまでの使用エンジン調査した記事あった気がしたんだけど見つからんかった
たぶん半分くらいがunity製だった気がする
PCでもUnity製増えてきてるしswitchにもそこそこ出てる
日々山ほどのゲームがリリースされてるのにwikipediaで全てを網羅できるわけないと思うんだけど、なんで自分がおかしいと思わなかったの? >>811
訪れる?利用するんじゃないの?
ディレクタやプランナがUnity上でプレイすることもあるし、CGデザイナやUIデザイナがUnity上で作業することもある
もちろん3Dモデリングなんかは専用のツールのほうが作業はしやすいけどね っていうか普通の企業なら間違いなく年間売上2000万なんて超えるよ?
安く済ませられるのなんて個人事業主か同人サークルだけ
社員が5人でもいたらまず年間売上で引っかかるんだから
大きい企業なら普通に100単位でアカウント持ってるし、小さいところでも10以上持ってるとこなんて山ほどある アカウントって、1つのゲームに対して、ひとつだけじゃないの?
開発者の人数分??? >>815
開発者分必要
ライセンス読んで
あとここUntyスレじゃないよ 年間売上2000万じゃ底辺3人雇うのが精一杯だな。 背理法で証明して見せたかっただけだよ。
つまり、矛盾を示す事で、間違い/捏造であることを証明する手法。
だから、ありえないような結論が出たということは、正しく証明できた
事になる。 Unityの登録だけなら自分でもやってるからなぁ
仕事でやってる人なんて会社用と個人用を別々に登録してるんじゃね
あとUnityはVRチャットで自キャラ作るのに使うから、
それも多いと思う >>822
やっぱり、そういう事もあるんだね。
どっちにしろ、Uniy のゲーム・ライブラリだけのライセンス料では、年間100億円
の売り上げにはならない気がする。
CADなども売っているので、そういう売り上げがかなりあるのかもしれない。 >>807
海外の人も Unity 発表の数値には疑問を抱いている。
ちなみに、日本のゲーム業界の開発者数(プログラマ、
デザイナ、企画含む) は、2万5,000任程度だとされ、
世界でも1チームの平均人数は5.5人程度。
Unityには、450万人もの開発者が登録されているとされる。
Unity発表の数値が正しければ、世界には、
ゲーム開発チームが、160万〜200万チームも
あることになってしまう。
「How many game developers existed in 2016?」
https://www.quora.com/How-many-game-developers-existed-in-2016
A cached version of Unity’s public relations page from July 2016 states that
Unity has 45% of the global market share and 4.5 million developers using the
platform, indicating an estimated total of 10 million individual game developers
(my guess is that “developers” means people working in game development,
including roles such as artists and game designers as well as engineers, who
could potentially use the tool).
From a 2013 Game Development Magazine survey of 1051 developers (republished by GamaSutra):
Studio size and type: 7% of respondents are individual independent devs,
19% are teams of 2-5 people, 14% on 6-10, 18% on 11-30 , 9% on 31-50,
7% on 51-80, 5% on 81-100, 8% on 101-150, 4.5% on 151-200,
5.5% on 201-300, and 3% on teams of 300+.
This indicates an average team size between 5 and 6 team members.
If each of these members falls under Unity’s classification of “developers,”
we can estimate 1,600,000 - 2,000,000 game development studios (including
individuals developing games alone as well as teams). 2017/01/27時点で、GooglePlay には、260万個、AppStore には、
200万個のアプリがある。そのうちの25%がゲームだとして、Android
には、60万ゲームある。1チーム当たり 5個のゲームを公開している
としても、12万「チーム」あることになる。日本のプロのゲーム開発者
が2万5,000人程度しかいないことを考えると、凄い人数では有る。
そもそもアプリ全体の個数もかなり多いので、アマチュアプログラマがかなり
多い事は多い。
------
There are currently over 2.6 million apps in the Google Play Store and over
2 million in the App Store. I can’t find anything to say how many of those
are games. Let’s assume 25% are games. Lets just focus on Android as
our estimation. That would mean more than 600,000 games on Google Play.
I would say the average developer has 5 games on the store. Lets use 10
to be conservative. That would mean there are 60,000 different developers.
That’s my best guesstimate. My gut tells me it’s probably more but who
knows. I know for one thing, I am a developer and I have 4 games released.
Feel free to check them out: GooglePlayやAppStoreのAppって、250万個もあれば、その中に本当に同一のものが
含まれてないか、または、250万個も本当にあるかを調べることは不可能に近い
かも知れない。
そもそも本当はそんなに無かったりして。そもそも、Vectorに登録されているアプリ
だってそこまで無い気もするし。 うちゲーム会社じゃなくて製造業(けっこう大手)だけど、VR絡みはUnity使ってるよ。
同業他社も使ってるのは意見交換会で聞いたし。
映像系でも使われ始めてるから、ゲーム業界から離れたほうがわかりやすいかも。 確かに、VRまで含めれば説明が付く気はするんだよ。
使う人の人数は作る人の人数より100倍程度は居るのが普通だから。
ただ、GooglePlayに登録されているアプリ数が本当に250万本もあるかどうか、
そのまま信じていいかについては注意すべき。
そもそも250万種類の一覧表をテキストファイルで見られるかどうか。
旧 nifty serve なんかも、「シェアウェアは儲かる」と言ってパソコン通信
加入者を増やそうとしたらしい。その際、「秀丸エディタ」が1億円の売り上げ
がある、とされたが、その作者が富士通社員だったことは公然の秘密。 >>830
レコード数250万のDBなんてざらにあるぞ >>831
そういう意味じゃなくって、GooglePlay から、全てアプリが載った一覧表を一度に
ダウンロードできるのかってこと。
検索するだけだったら、本当に250万種類もあるかは誰にも分からないじゃない
かと。 儲かってると思うけどな。Unity。
18万円はProだろ。
Enterpriseは別だよ。 ダウンロードできるか?ってできるだろ
1レコードがMB単位でデータあるんか?
1レコード1KBで2.5GB
最近のゲームなんて10GB超えのダウンロード当たり前みたいなとこあるじゃん
250万行のテキストはあんま開きたくはないが なんの根拠もない空想だけどゲームとVRの比率、VRが10%とかじゃない?
もちろん両方もそれなりにいるだろうけど
それでVRまで含めれば説明がつく、って意味がわからん あんまり詳しくは言えないけど、VR以外にも使ってるものもあるし、エンタープライズだとお値段時価だし、
企業ユースでは数人のチームなんてのはあり得なくて結構な人数分揃えるからね。
CADと連携したりなんやかんやで、ゲーム開発より金はかかるから、プロダクトの割合とは一致しないよ。 Unity用のスレはあるからそっちでやれよ
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】
https://mevius.5ch.net/test/read.cgi/tech/1478142101/
数レスならともかく赤いのまでいるし 質問いいでしょうか
webapiにて
var task = Task.Factory.StartNew
これで重い処理をバックグラウンドで処理させています。
このtask開始時にDBにProcessThread.IdとProcessThread.StartTimeを落として
別のwebapiでDBに落としたIdとStartTimeを使って
GetCurrentProcess().Threadsを検索して定期的に生きてるかのチェックを行っています。
これがけっこう不安定みたいで、バックグラウンドの処理が終わる前に
ProcessThreadが検索できなくなる場合があります。
最初にStartNewさせた際のProcessThreadが生きてる正しい確認方法はないでしょうか?
ブラウザを閉じた場合を考慮してProcessThreadで確認を行いたいです。 すいません。
変な質問ですね。
var taskを見るのではなく、その他の方法で
バックグラウンド処理が動いてるかの確認が行いたいです。 すいません。
自己解決です。
static public Task wkTaskを宣言しておいて
wkTask= Task.Factory.StartNewで作成したあと、ブラウザを閉じて
開き直してもwkTaskは生きてますね。
スレ汚しすいませんでした。 >>843
そのTaskが必ず1つしか動かないって保証があるならいいけどね。
ブラウザ閉じる->開くを繰り返したらどうなるんや ブラウザ閉じて開いて、サーバの同じスレッドに接続して同じタスク拾う保証どうやってるんだ Action.Invokeでvoidと比べてstatic voidの方が遅いのってC#7だと改善されたの? javaのtry-with-resouceみたいにusing書けるようにしてくれないかな
どうしてもネスト深くなるの辛い メソッドへのオブジェクト引数で、参照渡し(refをつける)、とオブジェクトの値渡し(refなしの値渡し。つまり、ポインター(アドレス)渡し)の違いがわかりません。
同じと思ってますが・・・・・。事実は違うようです。参照だと渡し元も変更される、っていう違いは分かります。
それ以外の違いはあるんでしょうか? >>850
オブジェクトの値渡しってどういうこと?
参照型なら全部参照渡しになると思うが refだと渡し元が変更されるって十分な違いだろ
どうあって欲しいんだよ一体 >>850
ここらへんを見てみればいいかと
https://dobon.net/vb/dotnet/beginner/byvalbyref.html#section3
かんたんに言うとどっちでも渡されたオブジェクトの中身は変えられるけど、ref付けないと新しいオブジェクトを設定して呼び出し元に返せないってこと 参照値でも、refつけない値渡しとref付ける参照渡しできる。
で、参照値以外の値...とりあえず非参照値と呼ぶと
非参照値でも、refつけない値渡しとref付ける参照渡しできる。
全部で4パターンあるってこと 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>850
簡単なので難しく考えてはだめ。すごくシンプルな話。
その型の値(その型の変数に格納される値)を渡すのが値渡し。
その型の変数の「場所」を渡すのが参照渡し。
さらっと書いたけど、「その型の値 = その型の変数に格納される値」なのはよく理解する必要がある。
つまり、参照型の変数に格納される値って何だったか要再考。
変数とはメモリ上に割り当てられた特定の領域のこと。
だからその領域のバイト列のコピーを渡すのが値渡しで、
領域の先頭アドレスを渡すのが参照渡しだと思えばいい。
参照渡しでメソッドが受け取る情報は「変数の」場所なので、参照渡しの引数に
リテラルや式を渡すことは出来ない。 多分だけど参照渡しと値渡しの挙動自体は理解しているものの、
デフォ参照型とデフォ値型の区別がついておらずにデフォ参照型で実験をしてrefでも素渡しでも変わらないやんってことじゃないか TryParseみたいなのだと成否と値がtupleで返って来てもifの中でめんどい メソッド内で中身を変更するって理由で参照型のもref渡ししてるのみてイラッとしたことはある。イランヤン それVB6からの移植とかじゃない?
オフショアが移植したコードがそんなんばっかし ref の使いどころってライブラリから複数の返値欲しい時だから
他の手段使えるならそっちでいいわな
未初期化変数指定できんのも地味にイラッと来るし >>861
そういう場合はrefではなくoutを使う >>861
> 未初期化変数指定できんのも地味にイラッと来るし
out使えよ 引数いじるの好きじゃないわ
返り値だけで判別させて まあ参照型はoutの制約で十分かつ安全なのでrefはほぼ出番ないんじゃねえのん
Swap関数を定義する時くらしか適切な例が思い付かねえ そのswapがな、MVVMでお決まりのBindableBaseなりのSetPropertyでプロパティの値交換するときに使いまくりで、
androidでもMVVM使いまくってるけどrefないkotlinやjavaでやると... プロパティの値交換するときってのが想像つかんが
どういうときにそれを使いまくるんだ? BindableBase SetPropertyとかでぐぐってみれ
有り体に言えば自身のプロパティ(のバックストア)を差し替えるジェネリックメソッドを基底クラスで定義するのに使うだけ WPFとかUWPとか使ってればBindableBaseのありがたさはよくわかる
関係ないけどstaticメソッドって呼び出すときにいちいちインスタンスを生成する必要がないって以外のメリットあるのかな? >>871
まあメリットって発想がそもそもおかしい。
例えばDouble.Parseがstaticなのはその方が意味的に自然だから
インスタンスメソッドである必然性がないし、インスタンスメソッドでは不自然だから dictionaryとかのcollection系が手抜きなのなんで?
特にdictionaryとか拡張必須だし
割とc#好きだけどこれはほんとアカン テンプレート系はデータが増えればC++にでも勝てるのに
何が問題? Collection系はJavaの方がしっかりしてるよね。 queueは空っぽの時取り出そうとすると落ちやがるの許せん勝田
今はTryあるからいいけど 例外が発生することを落ちるって表現する男の人って… 例外っていろんな種類あるけど具体的に何を使えばいいのかよくわからなくて
とりあえずcatch(Exception e)とかしちゃってるけど本来はこんなのダメだよな…… 別にいいと思うぞ。下位の呼び出しのどこかで失敗したということに対して適切に処置するなら。 >>883
> 例外っていろんな種類あるけど具体的に何を使えばいいのかよくわからなくて
投げる方で悩むのはわかるけど
> とりあえずcatch(Exception e)とかしちゃってる
受ける方はどれ受けるべきかはわかってるでしょ
最終手段としてよくわからんけどエラーが発生したから終了するね
って言うならcatch(Exception e)もありだと思うが 終了というのがプログラムの終了のことなら逆にcatchしちゃだめだろう。 >>887
catch { }ではw
>>888
例外一つでプログラム終了していたら大概困るw 例外はありえない事態なんだからプログラム終了しなきゃまずいだろう >>889
それは逆で、プログラマが想定してない例外が発生したら
プログラムは停止してもらわないと困る。これが正しい考え方。
そもそも例外機構というのはそのためにある 最近部活の後輩が黒魔術みたいなコードを書くようになって困ってるんだが対策ない?
こんな感じのコードを後輩が書いてくるんだよ↓
public interface IMessenger {
__public MessageReceived();
}
public abstract class Messenger : IMessenger{
__public abstract void MessageReceived();
__public abstract void Retry();
} public class Mail : Messenger {
__public override void MessageReceived(){
____//処理
__}
__public override void Retry(){
____//処理
__}
}
public class Alarm : Messenger {
__public override void MessageReceived(){
____//処理
__}
__public override void Retry(){
____//処理
__}
}
public class Communication {
__public void SendMessage(IMesssenger message){
____SendMessage(message);
__}
__public void Received(){
____var received = GetMessage() as IMessage;
____received?.MessageReceived();
__}
} こんなんだったから
public class Communication{
__public void SendMessage(string message){
____SendMessage(message);
__}
__public void Received(){
____var received = GetMessage();
______switch(received.First()){
_______case "0":
_________MailEvent(received);
_________break;
_______case "1":
_________AlermEvent(received);
_________break
____}
__}
}
こんな感じで書くように矯正しといた
CSVで2文字で分けるって言ってるんだから
何が起こってるかわかるように書くことを意識してもらわないと まあ例外でプログラムは終了させるべきだよな
ただ客は例外が起きてもcatchで握りつぶしてスルーした方が文句言わないんだよな…… >>892
酷いな
MediatoRを使うようにアドバイスしてあげなよ >>892
2chのシステムは先頭の半角スーペースは除去するけど全角スペースは除去しない。
だから字下げは後者で >>889
> catch { }ではw
ごめん、何を言いたいのかわかん
処理部分も当然必要だけど何を受けるかの話だから(Exception e)の方が重要だろ? >>891
ちょっとMSに例外じゃなくエラーコード戻す設計にするようお前から言ってきてくんね?
W32APIはそうなってんのにFrameworkの方そうなってないじゃん byte*からbyte[]にする方法ってない?
new byte[64];みたいに新規確保してコピーしか方法ないんだろうか
Unsafe.As等で新規確保無しで出来るかと思って色々試してみたけど上手くいかない 「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
全然別の型なんだしあるわけないでしょう。
そういう危なっかしい機能を排除してるのがC#の売りの一つだったはずなわけで
コピーする機能ならMarshalあたりにあるんじゃない? >>902
>「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
そういうことです
あるわけないと言いますが、その逆はあるので出来るかなと思い
(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能) >>903
>(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能)
具体的なコード希望 その逆がマネージドじゃ難しいからね
無理じゃないかなあ
やっぱこれからはSpanですよスパンスパン >>904
public struct MyStruct { public int Value1, Value2, Value3, Value4 };
byte[] data = new byte[16] { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 };
ref var myStruct = ref Unsafe.As<byte, MyStruct>(ref data[0]);
これでmyStruct .Value1は1、myStruct .Value2は2, myStruct .Value3は3, myStruct .Value4は4と余計なコピー無しに直接読み書きできる
byte[]からclassの場合はFieldOffset指定して各フィールドを4バイト後ろにづらないと出来ないから実用は難しいけど一応可能 fixed (byte* ptr = &data[0]) *(MyStruct*)ptr;
と大体同じではあります やっぱりこういうことやりたければC++に池ってことなのでしょうか
記憶力悪いのでVSがC#ほど助けてくれないC++に行くのは億劫なため質問させてもらいました byte[]も参照型だからね、オブジェクトヘッダが付いてなければ扱えない
Span<T>でなければ、具体的なシナリオにも依るけど元からbyte[]で作って
TypeHandleとlengthのsizeof(IntPtr)*2分ずらした所を使い回す方が賢明
結局fiexdと一緒な訳だが、P/Invokeならbyte[]渡してもゼロコピーの筈だし
abstract class Union<T> where T : struct {
internal readonly IntPtr length;
public T Value;
}
みたいなオレオレ実装をILキャストした事もあったな…後はSafeBufferとか self containedって完全に依存なしになるわけじゃないのね
alpine用にself containedでビルドしても動かなかった
libstdc++とか色々インストールしたら動いたけどさ
dotnetコマンド同梱と比較してコンテナサイズも殆ど変わらないし意味あるのかなこれ SCDは.NETのランタイムを別途インストールじゃなくて同梱するってだけの話だしね
公式ドキュメントにも注釈あるけどLinuxは仕様上完全に断ち切るのは難しいんじゃない?
Windowsだと同梱のファイルだけでそのまま動くけど >>913
Windows配布用と割り切った方がいいのかもしれない
Linuxだと管理下のサーバーかコンテナが多いからSCに拘る必要もない 最近のバッチはみんなSCDにしてる
らくちんらくちん ちょくちょくポインタ代替機能についての質問があるけどさ
どんな用途でポインタを使いたいのかわかんないけど、大抵の場合はストリームで代用できるんじゃないのかな ポインタなんかアンマネージとのやり取りとBitmapdataでしか使ったことないな
アンマネージとのやり取りだとrefとかoutにしとけばあとは何も考えなくていいから助かる 「変数aが1,4,5,7のいずれかである場合」
という論理式を書く場合
(a==1) || (a==4) || (a==5) || (a==7)
とswitch文以外でもっと手っ取り早く書く方法ありますか? >>923
その表現が一番端的でわかりやすいのではないですか? new [] {1, 4, 5, 7}.Contains(a) >>923
その程度ならその書き方が一番わかりやすいと思うが比較対象がもっと多いとか可変にしたいとかなら
var C = new HashSet<int>(){1, 4, 5. 7};
if(C.Contains(a)){ … }
とかもある >>924
数が少ないうちはいいんですが
>>925
カッコの上でShift+Ctrl+}すると
式部分を一発選択できるのであえてそうしてる
>>926
これがいい感じです
少しオーバーヘッドが気になりますが SQLみたく
a IN (1,4,5,7)
てかければいいなとおもうが、aが右側になっちゃうのが若干違和感 >>927以上の書き方ねーべ
オーバーヘッドなんぞ無きに等しい >>928
HashSetやDictionaryは要素の数に左右されない方法でアクセスを行うから
含まれてるか否かといったような検索用途に限定すれば1個だろうが1万個だろうが常に高速にアクセス出来る
Listや配列は要素数に比例してアクセス時間かかるようになるが なぜ要素数が増えることがある
という大前提を最初の質問時に明記しないのか >>926
これ、new[]の部分を()で括らなくていいのは何か直感に反するけど、
newもnew[]もドット演算子と同じ優先順位なのかw
キャスト演算子も同じ扱いにしてくれたらよかったのに >>932
もとの要素がどこにあるかよくわからんけどな
HashSet作成して要素セットするオーバーヘッドがあるだろう
格納時にハッシュ値計算するから比較のコストが低いわけで、その分格納にコストがかかるんだぜ 使い捨てなら配列のほうが安そうな気はするが
それが差となって現れるようなユースケースとも思えんしなあ 質問者ってそんなに偉いの?
そいつの質問に常に合致した話題じゃなきゃダメなの?
ひとつの質問があって、それを機会に派生してもいいし、あとは自由に意見しあえってもいい
どんだけ構ってほしいんだ 気にしてるの君じゃん
自由でいいと思うなら
かってにやってりゃいいじゃん
どんなけかまってほしいの? ROM専からすると多少横道にそれてもいろんな手法を見れるほうが面白い
正直これくらいの質問なら好きにしろって感じだろ >>935
だから検索用途ならって書いた訳だが
if ((a==1) || (a==4) || (a==5) || (a==7))って書けるってことはAddは頻繁に行わないと受け取ったわ 述語の部分が、
(1) 全要素を常に == で評価
(2) 全要素を同じ演算子で評価するが、==以外の演算子も使われる場合がある
(3) 要素ごとに個別の評価方法
で最適な答えが変わりそうなんでその辺ははっきりした方がよかったかもね。
質問者は
(a==1) || (a==4) || (a==5) || (a==7)
の代替案を聞いてるんだから普通に考えれば要素数はそんなに多くないはずで
パフォーマンス云々は風呂敷広げすぎだろうw 議論の途中で申し訳ないのですが
例えば独自クラスで、こんなのがある。
独自クラス{
string name {get; set;}
decimal num1 {get; set;}
decimal num2 {get; set;}
}
というのがあって、グリッドビューにList〈独自クラス〉をデータソースとして渡して表示させたいのですが
numは3,4,と増える可能性があります。(型はすべて同じ)
この場合にソースコードをメンテナンスすることなくnumの増減に対応するにはどのようにすれば良いでしょうか? decimal[] num {get; set;}
とか、
Dictionary<int,decimal> num { get; set; }
じゃダメなの?
なんか設計レベルで問題がありそうな気もするけど。 >>943
配列なりListなり使えばいいだけじゃねーの? 固定値でIFするのは好きじゃないな。
ソースの冒頭で定数を定義したい。 >>943
列が可変になるのならデータテーブル使うのが楽だと思う。クラスでやるとしたらexpandoで作るもなくはないと思うけど、それなら上にある通りDictionaryの方がシンプルではないかと。 >>942
質問者がオーバーヘッド気になるとか発言してるので、パフォーマンスを考慮することに意味はあるんじゃね
まあ、ずらずらと手書き出来る程度の要素数ならどれ使っても大差ないって言っとくべきではあるかもしれんが C#はセキュリティー的に問題があるので使わないほうがいい。 一発でソースコード復元されるからか?
それを言ったらJavaも同じだから泥アプリとか簡単に解析出来るけど 難読化しないとってほどのソースコードなんてそんなに無いような気がするけどな…
そもそもOSSが当たり前みたいなこんな時代に >>957
見せられない処理はAPIの向こう側だしね オリジナルソースがスパゲッティでも
ILSpyなんかを通すとオリジナルより見やすく逆コンパイルしてくれるからな。 そんなのあるんだ?ありがたいな。スパゲティにはほとほと手を焼いてたんだ。きれいにしてくれるなら使ってみようかなw メソッド単位は変わらないからプライベートやグローバル使いまくりのスパゲティはどうにもならないけどね 制御フロー難読化をやるとさらに汚くしてくれるからオススメ メソッドのローカル変数をきれいに整頓してくれるILSpy△
そろそろここも終わるけど
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
でいいよね。隔離スレをわざわざ新しく立てる必要もないし ライブラリレベルのオーバーヘッドを気にするのは止めましょう
ガベージコレクションが前提の言語を使ってる以上無駄な努力に終わります
性能絶対重視なら最初からCやASMで書いた方が良いし
よほどのスパーハカーでもない限りそんな努力が報われるほどの性能差にならないと思われます >>966
asm の教科書を書いていますが、「そのお題、asm で書く理由がない…」という深刻な問題に直面しています
asm で書くのに適したお題は何かありませんか? x86の機械語は知らんけど、CPUを汎用計算機ではなくHWとして使いたい場合は
直接機械語で書くしかないでしょう CPUを汎用計算機じゃなくてHWとして使いたいようなニーズなんてほとんどの人にはねえだろw だからASMなんて(今となっては)ニッチな需要しかないのでは? >>967
ブート部分とかかな
I/O命令とかを発行する部分もあるけどこっちはインラインアセンブラでもいいかな >>972
必要を無視すればBCD演算とか。
最終的にBCD演算命令に翻訳されるようなコードをC#では(Cでも)書けないはず。
まあx86ならマルチメディア系の命令とかが王道なんだろうけどね知らんけど。 ニッチな事には変わりないけど、
https://ufcpp.net/blog/2018/12/hdintrinsic/
hardware intrinsicとか入ってくるし 20年ぐらい前の1クロックが今より数十倍以上高価だった頃なら、
ASMによる人力高速化も(コスト的に見合うという点で)意味があった
Cコードで表現されてない知識も使ってちっちゃな関数でも結構簡単に数十クロック程度は高速化できた
Cコードで表現されてない部分を使えば、今もやろうとすれば高速化はできると思う(コストに見合わないだけで)
(変数aとbは実はいつも a<b なのでこのニーモニックが使えるとか、
ここの条件判定文は実は別の変数を計算したときのレジスタのフラグと同じ意味なので計算しなおす必要はないとか)
>>975 の話題に近いけど、
今ならASMの意味があるのはJITまわりとかかな? コンパイラはパイプラインでデータハザードが起きない様に計算して命令の組み替えしたりする。
人間がそこまでできるかな?
オレは20年ぐらい前にmemcpyを高速化するためにアセンブラで組んだ。
今思うとCで組んでコンパイラに最適化させるべきだったかもね。
若気の至りだ。 asmはコンピュータの仕組みを理解するにはうってつけの題材では有るね
最新の特殊命令なんか不要だが、68Kなんか最高の素材だと思うわ ERMSBなんかを考えるとコンパイラも小手先なんかね
実行ハードでスケールするか、安定的な最適化か
汎用性を考えれば普通は後者になるだろうけど
というかC#ならCILレベルに留めるべきではねか 今やIoT用でもメモリMBクラスだろ
アセンブラでハック必要な用途なんてないだろな >>980
wasmになる前のLLVMの段階で既に最適化が出来る。
あと、詳しくは分からないが、wasmになった後の最適化も、
Emscriptein の opt.exe で一応はできるらしい。
但し、asm.jsとの「グルー」が複雑に絡んでいるので、
何をやっているかを理解するのはかなり難しく、
wasmで最適化しているのか、asm.jsで最適化しているのかは
忘れてしまった。 スレ終わりなんだから内容気にせず埋めてしまえwここ即死判定もないし
GetFilesやGetDirectoriesのようなメソッドでエクスプローラーと同じ順に格納してくれるメソッドが欲しい
ソートし直すのたまに忘れてしまう >>984
自分でユーティリティライブラリ作っとけば >>984
こういうことじゃなくて?
var files = Directory.GetFiles(@"C:\hoge").OrderBy(name => name).ToArray(); エクスプローラーと同じ順って今のエクスプローラーにどれだけソート項目があるか知ってんのか・・・ IEEEでまだ規格化されてない多ビット長の四則演算や、超コンパクトに処理を書く方法とか >>988
普通の頭持ってりゃ名前のソートであることぐらいはわかりそうなもんだけどなw Visual Studioって2015と2017両方いれて、2015だけ綺麗にアンスコできる? >>993
ありがとう
そ、それは置いといて(笑)
どちらか片方だけアンスコしたときにもう片方に必要なもんを削除されたりはしない? VSに限らず明らかなNGは後から古いバージョンをインストールする行為だけのはず
アンインストールに関しては「意図としては」大丈夫なように作ってあるはず。
やってみたら?
最悪新しい方の修復インストールかOSの復元機能で何とかなるでしょ 試してみて欲しい
俺のPCにもVisual Studio 2010から全バージョンインストールされてるから参考にする 2015だけ削除したいって何がしたいんだろ
C#使う分には複数バージョンあって困ることないし >>998
使わないものを入れておいてもストレージ占有するだけ無駄じゃん
普通にある要求だと思うけど 2015の後に2017入れて2015アンインストールしたけど問題なかった
そのあとふと2015入れてみたら俺環だろうけど2015でビルド出来なくなった。2017の方は問題なし
そして問題のあった2015を再びアンインストールしたけど2017でずっと問題なし
>>995
2017だけ使う分には問題ないはず このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 697日 10時間 2分 52秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。