1 名前:デフォルトの名無しさん [2019/12/11(水) 22:12:11.28 ID:d09CciDz0.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part145 https://mevius.5ch.net/test/read.cgi/tech/1570446977/ ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://docs.microsoft.com/en-us/dotnet/standard/class-libraries referencesource.microsoft.com/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2 名前:デフォルトの名無しさん [2019/12/11(水) 22:32:15.34 ID:mMKqVbip0.net] C#
3 名前:デフォルトの名無しさん (ワイーワ2 FFfa-uKDx) [2019/12/12(Thu) 09:41:18 ID:a67Hqgb2F.net] O2
4 名前:デフォルトの名無しさん [2019/12/12(木) 14:29:42.64 ID:56xY8w560.net] ひらがな文字列をヘボン式ローマ字に変換するプログラム作りたいのですが やっぱ正攻法でswitch-caseで123個くらい分岐させますか? でも長音や促音の例外処理とか難しそうだなあ・・・
5 名前:デフォルトの名無しさん [2019/12/12(木) 14:47:29.26 ID:b3wcvAqBF.net] 変換テーブルと検索
6 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 17:38:52.89 ID:OYDho7HG0.net] UNIXのShellのソースでコマンドを切り分ける場所では思いっきりswitch文の嵐だったな 1文字目でまず切り分けで、次にに文字目ってな具合で 速度なら圧倒的にswitch分だと思うが、作りやすかったり保守が簡単なのはDictionary使ったパターンだと思う
7 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 17:42:49.22 ID:NIaj3T140.net] 要素数が多くなれば多くなる程switch文よりDictionaryの方が速度的にも早くなるのでは?
8 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 17:52:34.02 ID:VQC2yHD50.net] つ libstree
9 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 18:32:36.61 ID:Ijd1d2r8M.net] >>7 C#コンパイラは多数の分岐先を持つswitchの場合には二分探索を行うコードを生成したりする 基本的に人間が最適化するより速い
10 名前:デフォルトの名無しさん [2019/12/12(木) 19:09:09.93 ID:56xY8w560.net] >>4 です ありがとうございます switchでコツウコツやることにします 要素の数え漏れでもっと増えそうだし 例外を拾う処理も考えなきゃww
11 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 19:47:35.25 ID:XSG0K+ND0.net] vs2017ExpressでC#のフォームを使ってSQLiteのデータをDataGridViewに表示させたいです セキュリティの関係でSystem.data.SQLiteを使うには申請が必要でMicrosoft.data.SQLiteを使っています SQLiteをデータソース欄に追加する方法を教えてもらえないでしょうか?
12 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 21:16:54.09 ID:XSG0K+ND0.net] ソース貼り忘れました https://dotnetfiddle.net/DXwCTe よろしくお願いします
13 名前:デフォルトの名無しさん [2019/12/13(金) 10:16:06.63 ID:V90d9jYdF.net] いくら払えますか
14 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 11:41:55.37 ID:D/hLKfPDd.net] >>13 自宅でSystem.data.SQLiteをインストールして同じコードを書いたらデータベースに接続出来ました 恐らくSQLiteConnection等の参照が足りずにエラーなっていると思いますが、解決策が思い浮かばなかったのでSQL Serverを使って試したいと思います 申し訳ありません
15 名前:デフォルトの名無しさん [2019/12/13(金) 12:10:09.33 ID:SSw9bcJtd.net] Microsoft Visual Studio International Feature Pack を使うんだ! KanaConversion クラスだったかに RomajiToHiragana メソッドがあったと思う
16 名前:デフォルトの名無しさん [2019/12/13(金) 17:23:20.97 ID:f86+e1mZM.net] >>10 亀レスで申し訳ないが、正規表現と Dictionary と LINQ を使えば 5 行くらいで書けるよ。 var kana = “あ|い|う|え|お|か|き|く|け|こ”; var roman = “A|I|U|E|O|Ka|Ki|Ku|Ke|Ko”; var dic = kana.Split(‘|’).Zip(roman.Split(‘|’), (l, r) => new { Key = l, Value = r}).ToDictionary( x => x.Key, x => x.Value ); Console.WriteLine(Regex.Replace(original_string, $”({kana})”, match => dic[match.Value]));
17 名前:デフォルトの名無しさん [2019/12/13(金) 17:33:03.63 ID:f86+e1mZM.net] あとは 50 音を全パターン書いてね。 ただし注意点があって、長いワードは短いワードよりも (例えば「ちょ」は「ち」よりも) 先に並べるんだ。 そうしないと短いワードが先に部分マッチしてしまう。
18 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 17:47:39.93 ID:s9cNxHbdd.net] テーブル作る前提なら始めからdictionary作ればよくね?
19 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 17:49:41.61 ID:s9cNxHbdd.net] 一文字ずつ正規表現でマッチしてたらとんでもなく時間食いそうだな 姓名の変換くらいならどうとでもなるだろうけど
20 名前:デフォルトの名無しさん [2019/12/13(金) 18:16:48.88 ID:RrhzxBUdM.net] >>18 作っているのはテーブルだけではないし、このように書くとスッキリ書ける。 >>19 処理の重さの本質はワード比較による分岐であって、switch 分岐もそれに引きずられるから、C# で比較するならどちらも大差ないと思う。 正規表現の方が、むしろ、最適化がかかることに期待できる。
21 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:33:49.64 ID:KAf60mjk0.net] まったくスッキリしてない 圧倒的にswitchが早い
22 名前:デフォルトの名無しさん [2019/12/13(金) 18:44:01.44 ID:8Ub64SZCM.net] >21 それは感情論だな。計時してみてくれよ。 Perl, JavaScript, Java, C# で正規表現を使うこと 30 年弱になるけど、パターンの複雑さによらず、正規表現が目に見えて遅いということはなかったな。 アセンブラでゴリゴリに最適化したものと比べたら遅いだろうが、同じ言語のユーザー定義関数より目に見えて遅いことはまあないと思うよ。
23 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:48:06.09 ID:04gYwNVod.net] これならDictionary作るわ
24 名前:デフォルトの名無しさん [2019/12/13(金) 18:51:56.74 ID:8Ub64SZCM.net] >>23 何か勘違いしてないか? こっちも Dictionary つくっているが。
25 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 19:49:57.23 ID:KAf60mjk0.net] 2文字置換を考慮したらスッキリは書けなかった すまんこ こんなクソみたいなコードでもregexよりは数倍早い https://ideone.com/c7ILX4 頭良い人がもっとスッキリしたコード書いてくれそう 長文のほうがreplaceは不利だろうから数千文字にしたけどそれでも余裕 速度気にしないならregexで良いと思う
26 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 19:58:53.60 ID:KAf60mjk0.net] 最終文字が2文字置換対象じゃないときにsubstringで範囲外例外出るわ 条件1個追加しといて
27 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 20:57:05.81 ID:9t702OJgd.net] 小さい「っ」が未対応なことに気付いた これ正規表現でもめんどいね 正規表現ならっを無視してreplaceした後に1個ずつ置換かなぁ
28 名前:デフォルトの名無しさん [2019/12/13(金) 21:07:14.03 ID:M1n71JyZ0.net] 多少簡略化したロジックで計測してみた。 マッチ文字列が 1 文字固定なら、ユーザー定義関数の方が正規表現より 8 倍速かったが、1 〜 2 文字可変なら所要時間は同じ。 パターンマッチの文字列長が可変・複雑になるとそれをハンドルするための分岐が増えるせいでユーザー定義関数は遅くなる。 もちろん置換をかけるオリジナル文字列の文字出現パターン&確率にもよる。 チューニングするなら C やアセンブラで書くべきだし、C# で書くなら正規表現で簡潔に書けるほうがよいのでは?
29 名前:デフォルトの名無しさん [2019/12/13(金) 21:12:22.88 ID:M1n71JyZ0.net] >>27 おもしろいところに気づいたね。 例えば仮文字 $ とかに変換しておいて、最後に直後の子音字に変換。 ちゃっと => cha $ to => cha t to
30 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:22:02.14 ID:VulPdUq80.net] どうあがいてもregexは遅くないという結論にしたいみたいだけど string単体で見ても遅いのにregexが遅くないわけがない 簡潔に書くならregexがスマートなパターンが多いのは分かってるよw 処理速度求められるパーサーなんかではまずregexなんか使わない 遅いと言っても数万文字の処理が何万回も必要とかでなければ気にするようなレベルではないので問題ないなら素直にregex使ったほうが良いよ 25ですでにそう言ってるしね
31 名前:デフォルトの名無しさん [2019/12/13(金) 21:26:23.93 ID:M1n71JyZ0.net] あるいはワンショットで置換するなら、下記のようなパターンを使って後方参照し、第1マッチ文字列が空でないなら、第2マッチ文字列の置換先の1文字目に置換するとか。 (っ?)(あ|い|う|え|お|か|き|く|け|こ)
32 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:26:56.26 ID:yXJ+I/RUa.net] 「ンョ゛ハー ゛」みたいなのが来た時の対応とか考え出すと仕様肥大化するだろうなあ ひらがなカタカナ両対応とか、半角カナとか、 長音の代わりにハイフン使いだした場合とか 「ヴァッソ」とか テストパターン考えるのも厄介そうだね
33 名前:デフォルトの名無しさん [2019/12/13(金) 21:30:11.16 ID:0IHjBlJG0.net] LALRを受理するジェネレータ書いたことがあるんだけど、状態表の大きさは字句解析のほうが遥かに大きくなるのが普通みたいですよ。 字句解析と構文解析は一つの表にまとめられるのに、なぜ分けるのかというのが最初の疑問だけど、なぜか答えが載ってる本が無い。 実際にやってみると表の大きさが爆発的に大きくなるからでした。 状態機械は分けられる箇所があるなら積極的に分けたほうが効率的になるようです。
34 名前:デフォルトの名無しさん [2019/12/13(金) 21:30:12.87 ID:M1n71JyZ0.net] >>30 文字列操作だからもちろん絶対的には遅いよ。 C# で書いたユーザー定義関数と比べたときに正規表現が相対的にそんなに不利かといったらそうではないだろうという予想を立てただけで。実際測ったら同等だったわけだけど。
35 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:30:26.83 ID:7oWhly6q0.net] 日経だったか「むかっっ」という促音が 重なる文章というか記事があったな
36 名前:デフォルトの名無しさん [2019/12/13(金) 21:33:36.65 ID:0IHjBlJG0.net] 字句解析におけるNFA対DFAというのも最初に気になる部分です。 結論から言うと、NFAの選択は十分に考慮できるはずです。 僕も最初はDFAにこだわっていました。 でも、字句解析は表が大きくなりがちです。 特にregex並みの便利機能を組み込もうとすると、とても大きくなります。 たいていはNFAで十分かと思います。
37 名前:デフォルトの名無しさん [2019/12/13(金) 21:37:02.69 ID:0IHjBlJG0.net] ちなみに、DFAにこだわる理由は、多くの本がDFAのほうが効率的と述べているからです。 みんなそうだと思います。 最悪のケースではその通りですし、最悪のケースを考慮するのはセキュリティにも関わります。 でも最悪のケースはめったになく、たいていはNFAで十分で、たいていは効率的だと思います。
38 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:39:05.74 ID:VulPdUq80.net] >>34 その同等だったっていうコード貼ってくれない? 25で貼ったコードで1文字2文字の比率変えてもregex側が常に3〜4倍くらい遅いんだよね 古い.NETだとsubstringが遅いとかあった気がするんだけどその影響じゃないよね?
39 名前:デフォルトの名無しさん [2019/12/13(金) 21:42:16.88 ID:M1n71JyZ0.net] >>38 コード書いてくれてたんだね。 25 があぼーんで読めない。。。
40 名前:デフォルトの名無しさん [2019/12/13(金) 21:42:32.85 ID:f+S2ArPq0.net] >>4 でーす >>16 以降、何書いてるのかサッパリ分かりません! なんせまだifとforとswitchと文字列操作のメソッドくらいしか知らないもんでww 半年くらい後に読みに来まーす
41 名前:デフォルトの名無しさん [2019/12/13(金) 21:51:25.19 ID:M1n71JyZ0.net] >>38 コードは長すぎて多分アップできないと思う。 やっていることは switch 式を2 文字マッチの場合と 1 文字マッチの場合で 2 種類つくり、残文字列が 2 文字以上あるなら前者にかける (破棄パターン _ => で後者を呼び出す)、1文字なら後者にかけ、インデックスを進めるだけ。 置換後文字列の連結には StringBuilder 使っているし、メソッド呼び出しは AggressiveInlining している。ユーザー定義関数を意図的に遅くするようなことはしていない。 1文字あるいは2文字の切り出しに Substring 使っているけど、それが遅いのかな?
42 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:52:27.04 ID:yXJ+I/RUa.net] ローマ字変換でばっとググってみた お勉強用ならJavaScriptで書かれてるこれを理解しながらC#に移植するのがよさそうかな ソースコードも簡潔だし悪くなさそう https://www.pandanoir.info/entry/2016/03/29/190000 とにかく動けばいいというならMicrosoftが配ってるらしい「Japanese Kana Conversion Library」?でもこんなの使ったことないや
43 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 22:00:14.44 ID:+9OE4qBy0.net] ンボマはmboma ンバッペはmbappe だからね 練習用なんだろうけど 簡単に見えても文字変換を自力でやるのはかなり面倒くさい
44 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 22:10:51.66 ID:+9OE4qBy0.net] 正規表現のほうが単純文字列比較より遅いのは当たり前 1文字比較の場合に単純比較と同等になるような 最適化が施されてるエンジン積んでれば数倍とかの差はつかない 少し古いバージョンのブラウザのJSのなら平気で10倍近い差が出てた でもその差がUXに影響を与えるようなユースケースはそう多くはない ちなみにstringのswitch caseは数が増えると .NET Core以前は内部的にDictionary使うみたいよ .NET Coreもhash比較するのは同じだけどDictionaryをアロケートしない方法にしてるらしい
45 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 22:12:49.12 ID:VulPdUq80.net] >>39 これで見えるかね ttps://ideone.com/c7ILX4 このコードはswitchじゃなくDictionaryでやった おそらくswitchのほうがこれより早くなるか最適化で同程度になるはず switch版までは作るのめんどい 配列の境界値チェックも遅い要因なのでできるだけチェックが発生しないのが望ましい このコードでは2文字変換したときに境界値チェックが入ってしまうので2文字変換比率が高いと性能が悪くなる 2文字変換ばかりにしてもregexよりは早い
46 名前:デフォルトの名無しさん [2019/12/13(金) 22:38:36.62 ID:M1n71JyZ0.net] >>45 ありがとう。週末に評価してみる。 switch より Dictionary の方が処理性能がぶれない気がする。ハッシュで検索がワンショットに決まるから。switch は if カスケードを通ることで前スレで議論したパイプライン処理の影響を受けるため、処理速度がデータに強く依存する。 そんなわけでこの件の性能はコードの書き方 (チューニング含む)、データ、環境にかなり依存すると思う。 これは価値観の問題なのでみなが同じように考えるとは思わないが、正規表現で 3 - 4 倍程度の性能悪化なら、ユーザー定義関数よりチューニングより正規表現を私は採用する。 10 倍の悪化なら用途によっては考える。(パターンが複雑・多岐の場合) 正規表現は開発効率と保守性が 10 倍よいと思うので。
47 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 22:59:26.50 ID:x4Cvv/aS0.net] >>46 switchとdicの関連は44が説明してくれてる 最適化次第でいい感じにしてくれるはずだからどっちもたいさない感じになると思う 個人的には性能差が10倍だろうが1000倍だろうが許容できるケースなら可読性を取る 今どき文字→数値変換でc-'0'なんて書かずに大体int.Parse使うのと同じ UIに入力された氏名のローマ字変換みたいな1ユーザー1回で済むような処理に速度なんて無意味 GB単位のログデータをいじるなら数倍の差でも考慮すべき なんなら入力データの傾向に応じてチューニングしやすい単純処理のほうが更に高性能にしやすい
48 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 23:21:38.26 ID:Lnvxq+5t0.net] 俺なら、ひらがな小文字の変換は、変換元「ちゃ」とか「ぱっ」のパターンを文字数降順で優先的に置き換えるかな。 配列で変換パターンを保持して、それにない文字パターンは先頭から徐々に削っていく。 それなら「ぱ」と「は゜」なんかも判りやすく対応できると思うよ。
49 名前:デフォルトの名無しさん [2019/12/13(金) 23:36:31.48 ID:M1n71JyZ0.net] >>44 , 45, 47 みんな有益な考察をしてくれるのでありがたい。感謝。 今まで正規表現が際立って遅いと体感することなかったけど、利用目的を想定した評価をきちんとしたことなかったので一連の議論はとても参考になりました。
50 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 23:57:37.29 ID:+9OE4qBy0.net] オリジナルの文字列を1文字ずらしでzipして 2文字ずつ取得するイテレータでやるのがいいかなとか思ってたが 多少非効率でも↓ここの実装みたいに繰り返し変換していく方が 条件分岐が少なくて読みやすいかも https://tools.m-bsys.com/original_tooles/romaji.php https://tools.m-bsys.com/js/romaji.js function hebonG(s) { s = s.replace(/ん([aiueoy])/g, "n$1"); s = s.replace(/ん/g, "n"); s = s.replace(/n([bpm])/g, "m$1"); … var hebonGMap = { "kuぁ": "kua", "kuぃ": "kui", "kuぇ": "kue", "kuぉ": "kuo", … } … s = s.replace(/っch/g, "tch"); s = s.replace(/っ([kstnhmyrwgzdbp])/g, "$1$1");
51 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 11:11:39.02 ID:8NRAnTxB0.net] >>49 正規表現が遅いのは、コンパイルだろ 実行時ではなく、初期化時にコンパイルするようにと、Go の本には書いてある
52 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 11:24:37.56 ID:8NRAnTxB0.net] >>4 Ruby では、条件分岐しなくても、変換用の辞書で書ける >>16 も、これに似ている hash = { 'ab' => 'あ', 'xy' => 'ん' } p re = Regexp.union( hash.keys ) #=> /ab|xy/ p "9xy9ab9xyx".gsub( re, hash ) #=> 9ん9あ9んx
53 名前:デフォルトの名無しさん [2019/12/14(土) 16:02:25.78 ID:BZ704rid0.net] >>51 まあね。ただ、C# の Match Evaluator 付き Regex.Replace は事前コンパイルできないと思う。 ちなみにあの後何度か測り直したのだが、switch より事前コンパイルなし正規表現は 2 倍遅かった。同等ではなかった、すまん。 45 によると Dictionary & ユーザー定義文字列操作は正規表現より 3-4 倍良かったそうだから、今回のケースでは Dictionary : switch : 事前コンパイルなし正規表現 = 3-4 : 2 : 1 くらいの性能比かと考えられる。 switch はカスケードがさらに増えると内部で Dictionary 化して最適化されるから、一般論としては 正規表現は事前コンパイルすれば switch に肉薄する、あるいは、多少超えるかもしれないが switch に Dictionary 最適化がかかったらまた離されるかもって感じではないかと。 >>52 ありがとう。Match Evaluator 正規表現でハッシュ置換するのはもう四半世紀も使っているテクだけど他で見たことなかったから、Ruby の例は参考になる。
54 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 00:27:58.57 ID:x+hGNtUDa.net] このスレにいる人たちで C#を日本語で記述ってのを実際にやってる人、どれくらいいるかな https://togetter.com/li/1441951 を読んで試してみてもいいかなと思ったんだけど VisualStudioのコード補完が利く環境ならIME切替の手間もさほどかからない気もするし 何か致命的なデメリットとかあるんだろうか
55 名前:デフォルトの名無しさん [2019/12/15(日) 02:49:23.51 ID:SZPXyEbKa.net] >>54 ほとんどいないのでは?w デメリットはインテリセンスとの相性の悪さに尽きるね。 どうでもいいけど「C#を日本語で記述」の是非というより識別子に日本語を使うことの是非だよね 論より証拠、やってみたらいかに非合理な試みか分かると思うよ
56 名前:デフォルトの名無しさん (ワッチョイ e22c-3siJ) mailto:sage [2019/12/15(日) 05:39:16 ID:fpSJINfx0.net] Ruby では、RSpec(BDD)のユニットテストで、 日本語の関数名を付ける人はいるけど まあ、テストだからね
57 名前:デフォルトの名無しさん (ワッチョイ 62ad-zBV4) mailto:sage [2019/12/15(日) 05:45:38 ID:cmnyuAvp0.net] テストのメソッド名とかなら使っちゃうかな
58 名前:デフォルトの名無しさん (ワッチョイ e242-xO71) mailto:sage [2019/12/15(日) 06:17:17 ID:6XATZvNs0.net] enumの要素で使うと便利 どうせ数はないからインテリセンスも問題なし
59 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:41:49.81 ID:TLgol4W/0.net] >>54 補完のために半角英数+日本語が便利 これなら最初だけだしIME切り替えは
60 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 14:56:15.21 ID:pFDibfNW0.net] 補完はomnisharp + migemoで解決できる 他言語で変数名に日本語使うのはよくやってるけど扱う対象の用語が固まってる場合は便利 そうじゃない場合は結構厳格に命名ルールを決めないと逆にわかりにくくなったりする
61 名前:デフォルトの名無しさん [2019/12/15(日) 16:18:24.21 ID:QBANyAHK0.net] 俺が英語ができなかったり、デザインパターンの理解が足りなかったりするせいだとは思うけどさ どうしてもファイル名=ネームスペース名=クラス名=主なメソッド名になりがちなんだわ 単一責任の原則に合わせた時、ファイル名〜メソッド名まで決める簡単な基準とかあったら教えて欲しいな
62 名前:デフォルトの名無しさん [2019/12/15(日) 16:21:28.32 ID:NIombkpjF.net] Javaやりすぎると後遺症でそうなることがあるな
63 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:49:35.38 ID:pFDibfNW0.net] ファイル名=publicクラス名.csは一般的 ネームスペース名はそのクラスが属するレイヤーとかコンポーネントの名前 アーキテクチャが整理されてればあんまり迷わないと思う クラス名=主なメソッド名は状況による FormatterクラスにFormatメソッドがあるのは自然 Utilitiies > Formatter > Format
64 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 17:58:43.69 ID:LwtoOKkQd.net] 日本語を使った感想 メリット 名称に悩まない(重要) 比較的読みやすい デメリット インテリセンスと相性が悪い imeの切り替えが面倒 大文字小文字がないから名称が被りやすい システムハンガリアン推奨 他にも何かあった気がする
65 名前:デフォルトの名無しさん [2019/12/15(日) 18:23:34.11 ID:yHa/r3w4a.net] プロパティーやフィールドはいいけど、メソッドやイベントの名前は馬鹿っぽくはなるねw
66 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 18:24:56.51 ID:ltDbPg3S0.net] プロパティはいいとしてメソッドは動詞(+名詞)の形にするの 日本語だと不自然だけどどうしてるのかな
67 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 18:30:01.27 ID:cmnyuAvp0.net] >>58 中点使ってるせいでC#6.0対応時にエラー吐いたプロジェクトあったわ
68 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 18:49:58.62 ID:yNhbn0Xna.net] >>54 DBテーブル名/カラム名が日本語名のWindows業務システムで、 Entityクラスや画面コントロールの命名をDBそのまんまの日本語にしたら ソースが滅茶苦茶読みやすくとても良い感じになった 以後、積極的に日本語で命名するようにしてる 自分の書き方だと、 日本語を使うのは画面項目や業務用語の名詞のみ、動詞は英語 英語とチャンポンして Update利用情報()、Is有効期限内 みたいなメソッド/ブロパティをよく作る ローカル変数はiとかsとかtとか適当なプレフィクスをつけて無理やりcamelにする フィールドは_始まり とかかな 日本語で書くコメントが大幅に減らせてメリット大だと思う デメリットは…C#関係ないけど postgresだとテーブル名が日本語だとテーブルエクスポートが出来なくて不便、 多分ASP.NETみたいなWebシステムだと日本語名を使うのはリスク高い、 とか
69 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:10:28.99 ID:KTmzWILYa.net] 訳のわからん不具合踏みそう 日本語使ってると
70 名前:デフォルトの名無しさん [2019/12/15(日) 21:16:07.17 ID:eTsOryw+0.net] Listについて質問なのですが BindingList<T>にはToList()では代入できないのでしょうか? LINQの結果をToListで代入しようと思ってたのですが 型が違うとか出るんです(自作クラスによるListです) 普通のList<T>へならできるのでBindingList固有の問題かと思います 仕方なくforeachで一つずつ代入して一応目的は達成してるんですが LINQでforeach使わず抽出しておきながら 最後に代入でforeach使うのはバカらしいなあ・・・と思いまして どうすれば直接LINQの結果をBindingListに入れられるのでしょう?
71 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:26:38.59 ID:ltDbPg3S0.net] new BindingList<Hoge>(fuga.ToList())
72 名前:デフォルトの名無しさん [2019/12/15(日) 22:05:28.60 ID:eTsOryw+0.net] >>71 おお!何かわからんけど、できた 初期化したらキャストできるの? でもdataGridViewのDataSorceプロパティに入れてたのも外れるから もう一度入れ直さないといけないけど・・・
73 名前:デフォルトの名無しさん (ワッチョイ 57da-boqi) [2019/12/16(月) 05:42:00 ID:cXUrIyKd0.net] razor page のコーディングについてなんですが、 1ページのデータ量が多くなれば必然的にソースも長くなりますが、2000行とかになるとごちゃっとして「目に優しくない」ソースになっちゃいます。 目に優しいコーディング方法やら規約やら法則があれば教えてください。
74 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 07:41:26.07 ID:v/vzDWBs0.net] >>73 1メソッド300行以内っていう社内ローカルルール
75 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 15:28:44.50 ID:+KWK+mzK0.net] >>73 Partial ViewとかView Component使って分割する 再利用しなくても分割する 個人的には200行超えると黄色信号 >>74 1メソッド300行ってすごいな
76 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 17:57:20.50 ID:I8DdFnIZ0.net] 200も300も大差無いような…
77 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:05:28.74 ID:FR/i0CTk0.net] やっと会社の環境がvisualstudio2010から2019になったわ、これで非同期無双できるw
78 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:08:09.24 ID:X2KrPzv7M.net] そんな環境で2019なんか入れて大丈夫か? アップデートで不具合引いてダウングレードさせられないように、不用意なアップデートはやめとけよ
79 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:09:20.42 ID:J5g2Edewd.net] 2010とかサポート切れ直前やな
80 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 21:08:24.24 ID:LIM2IbDka.net] 2010だとNuGetすら使えないんじゃ 54だけどレスありがとう>ALL 実践してる人もそこそこいるのね テーブルやカラムを日本語で命名できるのってAccessに限らないのか・・・・ 不具合の事例も知りたいけど、具体的に出てきたのは>>67 くらい? C#に閉じた範囲で使うぶんには大丈夫そうかな・・・・今度試してみるよ
81 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 21:33:12.54 ID:+KWK+mzK0.net] >>76 viewの行数とメソッドの行数の違い
82 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 09:59:27.04 ID:GVP8bqm50.net] >>80 全角ピリオドとか&とかヤバそうに思えるのは使わないのが無難 date前月末とか昔から使ってます 昔々のACCESSで一部の通常全角文字が使えないとかありましたが、今はもう大丈夫と思ってます 将来的にトラブル可能性はゼロではないとしても、可読性のメリットのほうが遥かに大きい 例えば「要介護認定等基準時間」みたいなのを英字変数にするとかアホにもほどがある
83 名前:ダーク王鍬大使 mailto:sage [2019/12/17(火) 18:03:06.99 ID:9VuoOKjt0.net] 質問でふ(^^ Unityのアセットとか覗いたりするとifは使われてまふよね(^^ Switchが使われているの見たことないんでふが(^^ あれって使っちゃいけないとかってあるんでふか?(^^ ボッキング!(^^
84 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 18:30:01.62 ID:I793zFiP0.net] 最適化すると数行のswitch文はifに自動変換されるんじゃなかったっけ
85 名前:ダーク王鍬大使 mailto:sage [2019/12/17(火) 18:39:07.95 ID:9VuoOKjt0.net] そうだったんでふか(^^ 教えていただき感謝感謝のボッキング!(^^
86 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 19:40:18.25 ID:vR4SZ06Rd.net] class Hoge{ int Id ICollection<Hoge> Hoges } ってクラスをEntityFramework使ってテーブルにしたんだけど無理だったりする? Hogeテーブル(Id)と、Gehoテーブル(id、HogeId、HogeId2)後ろ二つ外部キーみたいなイメージなんだけどこういうパターンが調べても出てこない
87 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:34:43.72 ID:bmnVQ6Qnd.net] >>86 この構成じゃ出来ないことが分かったので質問を取り下げます
88 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 00:36:26.71 ID:TZyBuNxJS] APIでTokenを取得するため、以下のコードを書きましたが、デバッグすら出来ずに摘んでいます。 (ちなみにスクレイピングではなく、正式なAPIサービスです) 先輩方、アドバイスをいただけないでしょうか var parameters = new Dictionary<string, string>() { { "id", "user" }, { "pass", "password" }, }; const string method = "PUT"; const string endpoint = "https://apitest/v1"; const string path = "/token"; using (var request = new HttpRequestMessage(new HttpMethod(method), endpoint + path)) using (var content = new FormUrlEncodedContent(parameters)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); request.Content = content; ↓↓ここのresponseがみたいのですが、ステップインできない(プログラム '[12345] 〇〇.exe' はコード 0 (0x0) で終了しました。 var response = await HttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); return await response.Content.ReadAsStringAsync(); }
89 名前:デフォルトの名無しさん (オイコラミネオ MMab-7F0B) mailto:sage [2019/12/19(Thu) 01:57:08 ID:Ty/KdhcjM.net] webview使ってブラウザ操作してるんですけど、相手がASP使ったサイトだとボタン押したりテキストボックスに文字入れたりって操作は無理ですかね?
90 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 12:09:36.23 ID:WCM9NoNV0.net] jsonファイルを読んで、木構造を編集して、jsonファイルに出力する ファイルの入出力はJson.NETを使用 この場合内部のデータ構造はどう持つのがいいでしょうか? Json.NETのJTokenを使うか、自作するか考えてますが、 標準的な手法は有りますか?
91 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 12:13:14.10 ID:+iaW+uMUM.net] ちゃんと型を付けてデシリアライズ→加工→シリアライズする 型を付けるまでもないアドホックな処理ならそもそもC#なんか使わずに他のスクリプト言語を使う
92 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 18:39:36.79 ID:IsJpyVgV0.net] 質問なのですが エンティクラスを配列に入れて使うようなことはできないでしょうか? 数が多いのでループでコードをすっきりさせたいです。 こんな感じなのを public class test() { using (var context = new MyContext(connection)) { var datalist1 = context.MyEntities1.ToList(); 〜 var datalist100 = context.MyEntities100.ToList(); } //以下 共通処理 } こんな感じで使いたい string[] MyEntitiesList = new string[100]; MyEntitiesList[0] = "MyEntities1"; MyEntitiesList[1] = "MyEntities2"; 〜 MyEntitiesList[99] = "MyEntities100"; for(var i =0;i<100;i++) { var datalist1 = context.MyEntitiesList[i].ToList(); }
93 名前:デフォルトの名無しさん [2019/12/19(木) 19:11:55.40 ID:aq+5Nz0cF.net] var datalist1 = 上書きで良いなら最後のだけ入れろ
94 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 19:54:28.09 ID:IsJpyVgV0.net] >>93 すまないよくわからないのでもう少し説明をお願いしたい >>92 こんな感じで使いたいを修正してみました。 string[] MyList = new string[100]; MyList[0] = "MyEntities1"; MyList[1] = "MyEntities2"; 〜 MyList[99] = "MyEntities100"; public class test(int i) { for(var i =0;i<100;i++) { using (var context = new MyContext(connection)) { var datalist1 = context.MyList[i].ToList(); //以下 共通処理 } } }
95 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:10:40.73 ID:AGyCFxKvM.net] >>94 92 は for ブロック内部の代入式の左辺が変わってないよ、というツッコミ。 やりたいことは、抽出対象プロパティをテキストで指定してシステマティックにデータ抽出したいってことでしょ? Dictionary やインデクサで、テキスト => 対象プロパティ or 抽出メソッド、のマップを作って、Reflection か何かで呼び出せばできそうな気がするけど、LINQ to Entities でワークするかどうかは試してみないとわからないな。
96 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:25:17.21 ID:qKbwpXVq0.net] >>94 有益な回答を得るためにもう少し説明が必要かも。 なぜ抽出対象プロパティをテキストで指定する必要があるの? 1 カラムごとに 100 回抽出しようとしているけど、まとめて 100 カラムをワンショットで抽出してから加工するのではなぜダメなの? また環境が EF6 なのか EF Core なのかも言及した方がいいかもね。
97 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:38:12.29 ID:qKbwpXVq0.net] ごめん、勘違いしていた。 テキストで指定したいのはカラムじゃなくてテーブルなんだね。
98 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:58:33.77 ID:IsJpyVgV0.net] そうですそうです。 データを取り出すところ以外はほぼ変わらないのに ↑のコードだけでも1テーブルの数が多い場合余裕で1万行超えてしまうので public bool test1() { } public bool test2() { } 〜〜〜〜 public bool test1000() { } と用意して test1(); test2(); 〜〜 test100(); を public bool test() { } for(var i =0;i<100;i++) { test( iLop ); } だけにできないかと思っています。
99 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 21:00:56.21 ID:IsJpyVgV0.net] >>96 環境はEF Core3.1 です。
100 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 21:11:26.20 ID:qKbwpXVq0.net] 抽出テーブルを動的に指定したいなら、DbSet<T> を返すプロパティが DbContext の派生クラスに定義されていると思います。 型引数 T にテキストは直接指定できないので、その DbSet<T> 型のプロパティをラップするメソッドを定義して、テキストを引数で渡してやればよいのではないでしょうか。こんな感じで。 class MyDbContext : DbContext { DbSet<MyEntityDataModel1> MyEntity1 { get; set; } DbSet<T> GetTable<T>(string table) where T : CommonBaseClassOfMyEntityDataModels => this.GetType().GetProperty(table) as IQueryable<T>; } // 呼び出し側 context.GetTable(“MyEntity1”).ToList();
101 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 21:54:02.04 ID:qKbwpXVq0.net] >>98 そういう目的ならテーブル名をテキストで指定する必要もなくて、 foreach (var prop in context.GetProperties()) { var table = (prop as IQueryable<CommonBaseClass>).ToList(); // table に対するテスト処理 } でよいかもしれない。 ただし下準備として、DbContext の全プロパティのデータコンテナを共通で受ける基底クラス CommonBaseClass を定義する必要がある。 似たようなことはやったことあるのだけど、このコードが手直しなく動くかどうかはわからない。 テスト処理もラムダ式のリストで用意しておいて、各テーブルと Zip() して適用するなど、LINQ を活用するとよいと思うよ。
102 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 21:59:04.37 ID:WCM9NoNV0.net] >>91 説明が稚拙で申し訳ないです プログラムはフォームで、木構造の編集とはノードのコピーや削除、値の編集などをGUIで行います GUIの理由はJSONファイルはあるスマートウォッチのカスタムフェイス用で配置などを確認するためです 自分が知りたい事はc#でよく使われる木構造を扱うライブラリです
103 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 22:24:53.20 ID:IsJpyVgV0.net] >>100 >>101 ありがとうございます。 まだうまく動いていなくて返事遅れました。 100参考にして試してみます。
104 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 23:07:37.09 ID:IsJpyVgV0.net] >>100 >>101 さっぱり動かせそうにない CommonBaseClassOfMyEntityDataModels CommonBaseClass の説明をもう少しお願いできませんか?
105 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 23:56:40.46 ID:qKbwpXVq0.net] プロパティ DbSet<EntityModel1> MyEntity1 や DbSet<EntityModel2> MyEntity2 の型引数 EntityModel1, EntityModel2 があるとすると、その共通基底クラス BaseEntityModel を定義する必要があります。 class EntityModel1 : BaseEntityModel {} というように。BaseEntityModel は抽象クラスでも可。 そうすると、.GetProperty() の返り値の型が、DbSet<EntityModel1> だったり DbSet<EntityModel2> だったりするのだけど、これが IQueryable<BaseEntityModel> という型で共通的に受けられるということを想定しています。
106 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 23:58:37.24 ID:qKbwpXVq0.net] 訂正。 .GetProperty() ではなく .GetProperties() でした。
107 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 00:14:57.12 ID:wMdfjBuG0.net] >>105 明日また試してみます。 丁寧に説明ありがとうございます。
108 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 02:04:01.33 ID:aZ9V3LMHa.net] >>102 よく分からん理屈だなあ そのスマートウォッチの設定に限らず、世の中のアプリが扱うデータなんて大半は木構造なわけだが、 そいつらがみんな木構造を明示的に扱うようなGUIを持ってるか? 断言するが、明示的に木構造を扱うようなUIが必要なのはフォルダツリーのように再帰的な構造を扱う必要がある場合だけだ それ以外は必ずもっと適したUIがある
109 名前:デフォルトの名無しさん (ワッチョイ 972d-vnDE) [2019/12/20(金) 02:21:20 ID:oj5hMkFq0.net] while文がネストしていた時、階層の奥から一番外側のwhileループまでブレイクするにはどうするのが正しいのでしょうか? while(true){ while(true){ if(true) 外側のwhileまでbreak; }} よろしくお願いします
110 名前:デフォルトの名無しさん (ワッチョイ b763-CWbB) mailto:sage [2019/12/20(金) 02:23:20 ID:qHTdS2+z0.net] goto
111 名前:デフォルトの名無しさん (ワッチョイ 9fad-WY45) mailto:sage [2019/12/20(金) 03:01:50 ID:1digpYZT0.net] ここでいいのか分からないんですが質問させて下さい。 macでのvisual studioないしはC#の解説の載っているサイト、もしくは操作方法などを教えてください。 つい先日3Dモデリングやゲーム開発に憧れてC#の本を手に取りました。情報系の知識はないに等しく、せいぜい中学の授業レベルです。 「やさしいC# 第3版」を手に進めようとしたのですが、当方macで作業しようとしていたため、本の内容と実際の動きが異なり、四苦八苦しています。 現状なんとかhello worldはできましたが手順が理解できておらず困惑しています。 よろしくお願いします。
112 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 05:17:47.97 ID:GjFm0fld0.net] >>108 漏れてて申し訳ないです そのスマートウォッチではノードの記述順によって表示順が決まるので木構造の順番を入れ替えたい 入れ替える枝の深さもまちまちですので木構造を直接編集できた方が良いと思った訳です また、全てを木構造で扱うのではなく、末端部は類型化されてますのでクラスにして編集の予定です
113 名前:デフォルトの名無しさん (ワッチョイ 1752-R6SS) mailto:sage [2019/12/20(金) 07:23:20 ID:NMJ3uqPu0.net] >>107 当初は利用目的がわからなかったため、.GetProperties() やジェネリックで対象を動的に指定して DbSet<T> 型プロパティを呼び出す方法を提案しましたが、 DbContext に MyEntiyty1, MyEntity2, ... と 100 個のテーブルがあり、個々のテーブルに対応した Test1, Test2 ... というテスト関数を地の文で定義しており、 これをシステマティックに対応させたいというのが課題の本質であるなら、実はジェネリックとか使わなくてもできます。 テスト関数 Test1 は DbSet<MyEntityDataModel1> が入力で bool が出力として bool result1 = context.MyEntiti1.Test1() or Test1(context.MyEntity1) と記述できるように定義されていると思いますが、これを下記のように変形すればよいと思います。 1. MyDbContext を入力として bool result1 = context.Test1() or Test1(context) と記述できるようにテスト関数を書き換える (Test1 内部の冒頭で context.MyEntity1 と対象を指定する) 2. テスト関数をラムダ式にし、地の文で定義している Test1, Test2 ... というメソッド群をリストオブジェクトにする List<Func<MyDbContext, bool>> TestList = new [] { context => { context.MyEntity1 /* ... */ }, context => { context.MyEntity2 /* ... */ }, ... }; 3. using ブロック内 for/foreach 文でリストオブジェクトをキックする using (var context = new MyDbContext()) { bool result[100]; for (var i = 0; i < 100; i++) { result[i] = TestList[i](context); } }
114 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 08:59:06.48 ID:aZ9V3LMHa.net] >>111 ゲーム開発がしたいならUnityを使う Unityの本を買え Mac版のVisual Studioは一応あるけど誰も使ってないから本は存在しない
115 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 19:28:07.00 ID:laM9bMPJM.net] >>111 まずMACを捨てましょう プログラミングはwindowsでないと、今は良くても後々面倒だと思います 私がゲーム開発してた頃はDirectX使ってました 3Dプログラミングはサインコサインタンジェント使いまくりなので数学の知識がいります 2Dは足し算引き算ぐらいなので初心者でもできると思います 画面にドット絵表示までが鬼門ですがそこ乗り越えられたら楽しい世界が待ってるのでがんばってください!
116 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 20:00:27.38 ID:FDXklgq8d.net] >>115 MacでもWindowsが動かせるから捨てる必要なし
117 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 20:09:06.50 ID:wMdfjBuG0.net] >>113 こんな書き方もできるのか勉強になりました。 色々調べて試してみて>>101 をベースにして思ってたように動かせました。 コードすっきりになりました!ありがとうございます。
118 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:29:38.47 ID:qHTdS2+z0.net] そもそもweb周りなんかだとはMacかなり多いのにプログラミングはWinで!なんて発想はどこから来るんでしょうか 2Dであろうと三角関数くらいはガンガン使います
119 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:41:47.69 ID:Vbt2Sjhj0.net] webは簿給でMacのお布施を払っていると 儲けが減ってしまうからですよ 血の繋がりの無いパパさんが見つかると良いですね
120 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:47:02.02 ID:qHTdS2+z0.net] webが薄給ってどこの世界の話?
121 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:22:52.66 ID:tNG2om7pd.net] >>120 ここの世界だよこの世界
122 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:31:48.04 ID:qHTdS2+z0.net] >>121 まじか 同じ世界に住んでるようで違う世界なんだな 金融医療なんかと比べりゃ薄給かもしれんが世間の平均以上はあるでしょ そら平均ないとこもいっぱいあるし中間搾取が多い部類だとは思うが… 日本は世界的に見てweb系、というかプログラマ自体が安いってのはあるけどそれでも他業種に比べりゃ全然マシだと思うよ
123 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 23:14:05.81 ID:F92JDOtZ0.net] web系と一括りにしているが>>119 が経験した狭い範囲でのことだろう
124 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 23:56:36.17 ID:laM9bMPJM.net] webは金になるよ プログラマーの花形だから 求められるスキルは最下位だけども 組み込みプログラマーとゲームプログラマーが最上位 前者はハードの知識も求められるし、後者はプログラムの真髄まで知っとかないといけない ゲームプログラマー経験してたら、他の分野のプログラマーの仕事はほんと簡単だもん 若い時はムチャやって良かったと心の底から思う
125 名前:デフォルトの名無しさん (ワッチョイ b763-CWbB) mailto:sage [2019/12/21(土) 00:37:36 ID:4yldtPmm0.net] webのスキルが最下位ってどこの世界の話?
126 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 01:32:51.93 ID:Mk9xcjQY0.net] 110の者です。反応してくださった方々ありがとうございます。 ひとまずUnityのガイドで勉強してみます。 C#を勉強するなら、現状手元にはmac book airしかないためWindowsを入れるしかないみたいですね…(スペックギリギリですが…) 一応理系なので三角関数自体は大丈夫です。 ちなみにプログラミングの初心者がまず勉強すべきもの、もしくは買うべき本などありませんでしょうか? 場違いの質問で申し訳ありませんが、教えていただけると嬉しいです。
127 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 01:46:23.53 ID:tKqa0Mcd0.net] 最初に読むべきなのは公式チュートリアル https://docs.microsoft.com/en-us/dotnet/core/ https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/
128 名前:デフォルトの名無しさん (アウアウウー Sa5b-kT4h) [2019/12/21(土) 02:36:40 ID:zyAIfpOSa.net] ゲームは知らんけど、組み込みはほんとピンキリだよw 学者みたいに何でも知ってる人もいるけど、狭い範囲のことしか知らないくせに コード書かせたら構造化以前なんて人もゴロゴロいる web系は仕事内容は良く知らんけどストレス度は高そうだよねw なんか俺は最先端のとんがったことやってるんだぞ的な自己陶酔系の人が多いように感じるのは、 そうでも思わないとたぶんやってられないんだろうなと想像
129 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 05:00:47.48 ID:biYUElkB0.net] >>126 Unityならmacで十分だよ Windowsでないと後々面倒というのは、会社で使うのはWindowsがほとんどだから もし仕事にするなら、今から使い慣れてた方がいいということ 開発行為自体だと、unix系のアプリケーションならmacの方が色々揃ってるからやりやすいし Windowsのアプリケーションなら、当然Windowsがやりやすいよ
130 名前:デフォルトの名無しさん (ブーイモ MMbf-70ba) mailto:sage [2019/12/21(土) 08:35:24 ID:elCUYmNmM.net] >>124 オプションとなるスキルが違うだけでプログラミングスキルはどの分野でもピンキリ
131 名前:デフォルトの名無しさん (ワッチョイ 9f52-1WEo) mailto:sage [2019/12/21(土) 09:37:34 ID:k+w4ikT00.net] >>124 2Dなら足し算引き算だけなんていってる人が"プログラムの真髄"なんて言っても、自分がやったことある範囲の知識がすべてなんだなって感じで説得力ゼロだぞw
132 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 12:32:00.35 ID:W85y2T7QM.net] 2Dでも三角関数使うしな
133 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 12:58:47.60 ID:jr0+pgES0.net] プログラムかじった事ない人にいきなり三角関数必要とか言って作れると思う? 3Dは数学の知識が最低減ないと作れないけど、2Dは三角関数知らなくても作れる 分かったような口聞くな
134 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 13:15:08.24 ID:W85y2T7QM.net] 三角関数をなんだと思ってるんだよ 中学生なら習ってないからしょうがないけどさ
135 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 13:17:44.87 ID:tKqa0Mcd0.net] >>133 >プログラムかじった事ない人にいきなり三角関数必要とか言って作れると思う? この文章だけで頭の悪さがよく分かる 自然言語でまともな文章書けないやつに まともなプログラム書けるやつはいない
136 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 13:31:19.22 ID:B9cNmAcsd.net] 三角関数なしに2Dゲームを作ることはできる 数学知識なしに3Dゲームも作れる 流石に加減乗除くらいは必要だが 無くても何かは作れると何を作るにも不要かどうかは別の話
137 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 17:01:18.37 ID:jr0+pgES0.net] >>136 ほうー 3D空間を数学の計算以外でどうやって動かすのかな? キャラクター動かないゲームかな?
138 名前:デフォルトの名無しさん [2019/12/21(土) 17:06:21.58 ID:ToibKenqa.net] 下らない話はそのぐらいにしておいたら? 中学生じみてるよw
139 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 17:12:20.47 ID:3iZbeqQ/0.net] Unityなんかに任せるとか? 結局使うことになるとは思うけど、使わずに済まそうと思えばなんとかなると思う。
140 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 17:20:19.27 ID:722GI/wM0.net] テンプレ読んでください オイコラミネオ MMab-7F0B ワッチョイ 7707-7F0B NG
141 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 18:47:28.86 ID:BGAOi6L9M.net] オレのミネオはどう表示されるんだろ…
142 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 19:03:45.63 ID:qQirr//DM.net] おれもテスト
143 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 21:45:23.13 ID:/91O1xjY0.net] C#でコルモゴロフスミノフ検定した上で、単回帰分析とかするライブラリってありますか? 統計解析するならテキストファイルにデータ書き出して、 PythonとかRにわたすほうがいい?
144 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 21:47:47.94 ID:q7cBKLSTd.net] >>143 そこはRubyでしょw
145 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 22:46:57.61 ID:jv2HuDh00.net] >>143 R.NET
146 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 00:25:07.44 ID:7hF/cDg80.net] byte[]として受け取ったmp3をファイル化せずにそのままmp3tagの読み書きを行えるライブラリはないでしょうか? 出来る限り通信のやり取りだけで済ませたいため、受け取ったmp3バイナリをそのまま処理して受け流したいと考えています。 taglibは試してみましたが、FileStreamとして渡さないと上手く機能しないようでした
147 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 00:38:07.26 ID:GX5OjjKF0.net] Streamクラスとして抽象化されてるんじゃないの? taglibは入力にStreamを受け入れんじゃなくて、FileStreamというより具象的な入力を受け入れるような馬鹿な設計になってるの? byte[]をMemoryStreamでラップして渡せないの?
148 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 00:58:17.93 ID:GX5OjjKF0.net] 俺が馬鹿だったかも。書き込みも必要か。 https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream.-ctor?view=netframework-4.8 リサイズ可能なメモリストリーム作れるかこれ? 作れないなら、変更できるようなインメモリの独自ストリームクラス作るとか。
149 名前:デフォルトの名無しさん [2019/12/22(日) 02:10:14.34 ID:LPMS/GLqa.net] ビットマップを編集するライブラリがFileStrem前提になってたら馬鹿設計だけど Exifを編集するライブラリがそうでも別に馬鹿とは思わないなあ
150 名前:デフォルトの名無しさん (ワッチョイ 7790-MEwc) mailto:sage [2019/12/22(日) 04:41:32 ID:GX5OjjKF0.net] まじで言ってる? 例えば、カメラで撮影したローカルにあるJPEG画像を投稿サイトにアップロードする機能つくるとき、EXIFを消してアップロードしたいありがちな機能。 MemoryStreamを渡せれば、元のファイル変更せずにメモリ上で修正してアップロードして破棄できる。 同じことをやるにはFileStreamだと一々コピーしないといけない。
151 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 05:57:32.35 ID:R0LOzgYE0.net] タグ部分と同じ構造体作って該当部分のバイト配列を構造体に変換すりゃ済むんじゃないの
152 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 08:25:01.65 ID:/NGpR+eY0.net] TaglibSharpの.net Standard版をUWPから使っているが TagLib.File.IFileAbstractionってのを使ってストリームを操作している 自分でこのインターフェースを実装すれば割と簡単に行けると思うよ 実装してクラスをTagLib.File.Createに渡せば問題ない
153 名前:デフォルトの名無しさん [2019/12/22(日) 12:48:45.77 ID:d/zyo53Ma.net] >>150 それ、別にFileStreamを受け取ってStreamを吐く仕様で何も困らないのでは?
154 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 13:18:15.55 ID:7hF/cDg80.net] >>147 >>152 ありがとうございます。 IFileAbstractionを実装したクラスでCreateしていましたが、CloseStreamで内部のMemoryStreamをDisposeしてしまっていたため、挙動がおかしくなっていただけでした TagLib.File.Save()を行うことで初めて内部のstreamにTag情報が書き込まれ、同時にCloseStreamも呼ばれるためそこでは内部のstreamを閉じずに自前の後処理を行ってから閉じることで希望の動作になりました
155 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 16:13:05.02 ID:thbQEK090.net] ヽ(・ω・)/ズコー まあ、バグ調べてて「俺ってバカ?」って思うことはよくあることだ バグ作り込む気は全く無いのに、毎度あるのは何でか不思議でならない (まあ最近は熟知してない言語で作ることが増えてきたのもあるが、COBOLごときでも一緒だったな…)
156 名前:デフォルトの名無しさん [2019/12/22(日) 22:16:50.41 ID:TCqgMSVE0.net] ライブラリを作ろうかと思うのですが あるクラスをライブラリ内ではインスタンス化できるようにしたいけど ライブラリを使う人はインスタンス化できないようにする というようなことは可能ですか? 参考になるサイトなどありますか? クラスのプロパティは基本的にすべて読み出しだけ可能にする予定です。
157 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 22:22:55.94 ID:CUDsNTIh0.net] コンストラクタをinternalにする
158 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 22:28:00.73 ID:t9cAONDx0.net] >>153 じゃあさあ。ネットワークから受け取った画像をファイルに保存せずに、そのまんまEXIF修正して別のサーバーに送り返す場合、どうするの? と、使う方次第で色んな用件があるわけ。 実装コスト増えるならまだしも、今回のケースでは読み書きできてシークできるStreamであれば良さそうなのに、それをFileStreamに限定するの意味がわからない。
159 名前:デフォルトの名無しさん [2019/12/22(日) 22:37:29.12 ID:b8EKEEl60.net] この動画の人がVisual StudioでやっているAuthenticatonをオンにする設定は、dotnetコマンドではどうやるのですか? https://youtu.be/RUZLIh4Vo20?t=63
160 名前:158 [2019/12/22(日) 22:45:45.81 ID:b8EKEEl60.net] すまん 自己解決しました https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-3.1&tabs=netcore-cli
161 名前:デフォルトの名無しさん (ワッチョイ 7f0d-9COd) mailto:sage [2019/12/23(月) 02:14:36 ID:CbUt8X2i0.net] c#からpythonのmatplotlibを呼んでみたらグラフ描画に10秒くらいかかった・・・ めんどくさい数値演算とかをPythonライブラリに丸投げしたかったけど厳しい グラフ描画はwinformでやるにしても描画するための連続データを戻り値として受け渡しするのなぁ
162 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 06:05:21.41 ID:n/5EZXjd0.net] >>161 chartじゃだめか?
163 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 06:33:23.54 ID:TTdlQikFd.net] >>157 ありがとうございます。 難しく考えすぎてました。
164 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 08:20:32.39 ID:AV2OtNnH0.net] >>161 その程度の何が障害なの? ナメてるのか?
165 名前:デフォルトの名無しさん [2019/12/23(月) 09:06:54.33 ID:5ISBodU5M.net] >>164 食ってかかるなよ >>161 ふーん。日記ならママにでも聞かせとけよ
166 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 14:12:00.92 ID:CVji7Zdt0.net] 自分で使う用のWinデスクトップアプリケーションを作ってみたいのですが VScodeにC#の拡張をインストールしたところ、".net Coreが無い"というメッセージが出ました .net frameworkを後から入れるつもりだったのですが 現在はframeworkではなくCoreを使用するのでしょうか? 軽くしらべたところ、Coreはサーバサイ用、frameworkはデスクトプ用っぽいんですが Coreでデスクトップアプリを作成するチュートリアルもあるようでした
167 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 14:29:00.57 ID:FZMFlrDL0.net] coreはサーバー用ではないよ 今ならデスクトップアプリでもcoreで作るけど別にframework使えないってわけでもない 古い環境への配慮とか考えなくていいならcoreでいいんじゃない?
168 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 15:12:57.52 ID:Gp3oh3j2M.net] そして System.Drawing の移植性の無さで 泣ける。
169 名前:デフォルトの名無しさん [2019/12/23(月) 15:38:13.00 ID:Wyd1VJ4y0.net] WebBrowserでカスタムHeaderの送信とResponse Headerの取得ができません .net core 3.1を使っています。バグでしょうか?
170 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 15:46:22.84 ID:CVji7Zdt0.net] >>167 ありがとうございます Core入れてきます
171 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 17:45:51.26 ID:eQmrU5ERd.net] >>170 そのレベルだと、VSCodeでxaml手書きはキツいんじゃない?素直にVisual Studio使いな
172 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 18:05:28.45 ID:oBvZW+b7M.net] 今ならBlazorが簡単で良いよ 一般常識レベルのHtmlがわかってれば後は直感で作れる
173 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 18:16:31.10 ID:+KUE/8IiM.net] C#使いたがる人ってWebに苦手意識がある人が多い印象だなあ 最初からrazor使えるような奴はそもそもC#(というかWindows開発)を選ばないと思うよ
174 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 18:22:36.62 ID:P6gAM1Rw0.net] 嫌ぁCAD+画像処理屋なので、webじゃ やっとれんだけですよ。 SPIDERがwebに乗って実用化されたら 考える。
175 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 18:28:43.48 ID:+KUE/8IiM.net] ほらね
176 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 18:44:33.92 ID:kZpvALBe0.net] >>173 お前はC#スレに来て何がしたいんだ?
177 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 19:08:35.91 ID:kDR2U+EyM.net] なにがほらねなんだろ
178 名前:デフォルトの名無しさん mailto:sage [2019/12/23(月) 19:10:12.11 ID:P6gAM1Rw0.net] 法螺ね
179 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 11:17:43.39 ID:pJ4JfZbNd.net] prism の質問もここでいいですか?
180 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 11:23:10.23 ID:rY4O3lLw0.net] 許すん
181 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 11:27:15.31 ID:4hGbK3LLM.net] 今のprismはMSとは無関係な単なる野良ライブラリの一つだからダメ
182 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 12:29:36.63 ID:2vtH2tiGd.net] >>179 C#で使うならOK
183 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 12:45:35.02 ID:+zwswjcb0.net] skiasharp Microsoftの純正ライブラリー 扱いなのに(nugetでは) 情報が少なくて笑える 人脈が無いとこういう扱いなのかw
184 名前:ャfフォルトの名末ウしさん mailto:sage [2019/12/24(火) 13:55:17.48 ID:rY4O3lLw0.net] 流れ読まずに。 private int hoge(){ using(/* なんか入る */){ /* ひたすら処理 */ return nanka; } } こういうreturnの書き方は一般的なのでしょうか? usingの中カッコの外にreturn文がないと値の返し損ねがないか心配なのですが VisualStudioの警告は出ないしアリなのかナシなのか諸兄のご意見をいただきたく。
185 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 14:15:20.75 ID:4hGbK3LLM.net] >>184 普通にアリ メソッドから戻る直前にDisposeが実行される なお、C#8以降では以下のように書けるため、従来のusingブロックはほとんどの場合必要なくなった using var x = new Hoge("Arial", 10.0f); x.Foo(); // メソッドを抜けるときに自動的に x.Dispose が呼ばれる
186 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 14:42:06.62 ID:JGZzQNV20.net] >>184 returnが無いパスがあったら警告出るよ 警告が出ないということは必ずreturnが呼ばれている
187 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 16:17:46.84 ID:pJ4JfZbNd.net] >>182 ,180 ありがとう。DIコンテナにUnityを使ってて、App.xaml の RegisterTypes で RegisterSingleton で登録する共用クラスがあるんだけど、このコンストラクタに引数を渡したいです UnityContainerの中で生成するタイミングがわからなくて渡し方がわかりません
188 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 16:20:01.66 ID:pJ4JfZbNd.net] あ、引数はユーザーコンフィグから取得したいです
189 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 17:24:40.68 ID:rY4O3lLw0.net] >>185 ,186 ありがとうございますm(_ _)m usingの中カッコの中で変数宣言してそれを返せて終われたらいいなと思ってたのでこの書き方でやってみます
190 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 19:00:31.16 ID:yk68HN8sM.net] >>188 コンフィグクラスかコンフィグ読み込みクラスを注入すればいいよ
191 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 19:05:38.59 ID:0ojb25IiM.net] >>185 まじ?C#は洗練されてるね
192 名前:デフォルトの名無しさん mailto:sage [2019/12/25(水) 00:57:35.17 ID:BOYk9T8B0.net] >>190 ああそりゃそうか。DIコンテナがあるんだからインジェクションすればいいだけなんだねありがとう
193 名前:デフォルトの名無しさん mailto:sage [2019/12/25(水) 21:07:41.04 ID:nysCvhr10.net] .netライブラリでかすぎじゃね?
194 名前:デフォルトの名無しさん (ワッチョイ f12d-vQnI) [2019/12/26(Thu) 03:51:48 ID:bzjIw0U90.net] 作ったプログラムをUbuntuのバックグラウンドで動かし続けたいんだけどさあ nohup dotnet run & だと、動かないのかすぐ終わっちゃうのかわかんないけどダメだったぜ どうすればよかんべえな?
195 名前:デフォルトの名無しさん [2019/12/26(木) 09:37:04.58 ID:qmNoWNu8F.net] >>193 既にライブラリじゃないですね
196 名前:デフォルトの名無しさん mailto:sage [2019/12/26(木) 10:09:04.01 ID:Wx+k6OqqM.net] >>194 Docker使うのが簡単だしスキル的にも得るものが大きい
197 名前:デフォルトの名無しさん mailto:sage [2019/12/26(木) 22:14:19.89 ID:z0a0esehd.net] >185 1000行近い関数が沢山あるクソコードだと以前の方が便利だな(涙目)
198 名前:デフォルトの名無しさん mailto:sage [2019/12/26(木) 22:19:53.43 ID:YRIJALUmM.net] メソッド内にラノベでも書いてんのか?
199 名前:デフォルトの名無しさん mailto:sage [2019/12/27(金) 23:38:38.82 ID:rZaePzzs0.net] 頻出パターンだと思うんだけど、 ツリービューとかデータグリッドを選択したら詳細を表示する画面で、詳細部分のリジョンにナビゲーションで登録する時って、 詳細のビューのコードビハインドに書くしかないのかね。 サンプルがそうなってるけど、コードビハインドに書くのに抵抗がある
200 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 00:09:08.65 ID:L8M+Vbvra.net] React等の仮想DOMを使ったモダンなMVVM系Webフレームワークでは、コンポーネントとしてVMを階層化する。 この場合、親VMが子VMとしてツリービューVMと詳細VMを持つ形になるだろう。 そして、ツリービューの選択項目が変更されたらツリービューVMがそれを受けて親VMに通知し、親VMが詳細VMの表示対象データのプロパティを更新する。 WPFの原始的なMVVMではそのへんはあまり洗練されていないし、そもそもWPF自体誰も使ってないから特にベストプラクティスのようなものも無い。 WebのMVVMを真似するのもコードビハインドを書くのも君の自由だ。
201 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 02:11:10.25 ID:n5/LKlnD0.net] 「リジョンのナビゲーションで登録」 意味不明
202 名前:デフォルトの名無しさん (ワッチョイ 3538-n2a0) mailto:sage [2019/12/28(土) 04:17:29 ID:j+kocMTA0.net] 「詳細部分のregion(領域)」までは何とか…
203 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 11:25:47.63 ID:aAyiCa3V0.net] >>201 ごめんなさい。モジュールでレジスタービューウィズリジョンじゃなくて、レジスターフォーナビゲーションを使って登録するとこのことです 公式サンプルのベーシックリジョンナビゲーションの書き方をみての質問です
204 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 11:47:20.50 ID:j+kocMTA0.net] クソワロタ
205 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 11:53:28.80 ID:mKsVnGCZ0.net] そうか、よくわからないけど解決したなら良かった