C#, C♯, C#相談室 Part93©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/06/09(土) 21:07:34.76ID:4W3gH+0Ua
そもそも書けない奴は論外として、使うなってのは同意できる
簡潔に判りやすいラムダ書いてくれりゃいいが、わざとやってんじゃねってぐらい難読化する奴いるからな
正規表現、SQ、掲示板の長文も同じだな
2018/06/09(土) 21:12:52.02ID:0oARoVrcM
Linqに限らず最近のソフトウェア技術は高度で生産性も高くなってる。
昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
理由出来ない人は辞めればいい。
生産性が飛躍的に上がってるので理解出来る奴だけで間に合うよ。
418デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/09(土) 21:17:22.22ID:ekScYlKMa
自称プログラマー(趣味)ならともかく職業プログラマーでLinqすら理解出来ないやついんの?
2018/06/09(土) 21:23:52.36ID:7jH+OfQ/0
Linqを十分に理解できても、可読性や保守性を大事にする人は
多少冗長でも他人が理解しやすい易しいコードを書くんじゃないの?
2018/06/09(土) 21:25:54.76ID:2splWvty0
Linqてそんな可読性悪くないと思うけどなぁ
コメント書いときゃ何となくわかるべ
2018/06/09(土) 21:26:49.03ID:v7FNkyrH0
>>417
出来ない人にも生活あるから辞めろとは言えないけどチームは分けて欲しい
使えて使いたい人がどんどん流出して出来ない人だけの会社になると悲惨
2018/06/09(土) 21:30:02.70ID:0oARoVrcM
>>419
圧倒的に生産性が高かったらどうなの。
最近の案件は短納期になってるし、昔のコボルみたいに何十年もメンテして使うシステムも少ないと思う。
2018/06/09(土) 21:32:37.20ID:VrCE6n6GM
ゴミのようなやりとり
いや、ゴミに失礼だな
2018/06/09(土) 21:33:12.66ID:0oARoVrcM
LinqよりSQLの方が難しいぞ。
SQLは難しいから使うなって言うのか?
2018/06/09(土) 21:35:27.62ID:ZDY9COOVd
業務でいじるレベルのコードなんて知らないものでもグーグル先生いりゃ大抵なんとかならない?
linqも初めて見たときはとっつきにくくてわかりづらかったけど使ってりゃ嫌でも覚えちゃうよ
つっても当然すべてを使いこなしてるわけじゃなくて自分に必要な範囲のみ理解してる程度
業界によってだいぶ差はありそうだけど
2018/06/09(土) 21:35:56.65ID:7jH+OfQ/0
生産性は保守運用まで含めてトータルで考えるべきで
保守性が損なわれればトータルコストも引き上がる
2018/06/09(土) 21:36:22.73ID:0oARoVrcM
>>423
あんたの書き込みがゴミだから。
オレらのやりとりがゴミだって言うなら、そう感じさせる様な高踏的な書き込み頼む。
2018/06/09(土) 21:51:21.02ID:lCnNI9uz0
保守性の低い Linq のコードってたとえばどんなの?
自分は他人のを読む場合でも特に困ったことないけどな〜。
2018/06/09(土) 22:13:44.82ID:MhKfyDgC0
>>415
イテレータの起源なら、C++(1983)は最初から持ってた。
C++のOOPはSimula発で、そっちが持ってたかは知らん。

いずれにしても、Java発の技術は存在しないぞ。
C#はLinqと、多分asyncもか?頑張ってる方だと思うが。
(あとちょっと違うがIDEのインテリセンスもC#が初のはず)
2018/06/09(土) 22:18:01.39ID:a58WBe6r0
クソカスの分際で人間様に話しかけてくるな
クソカスが引っ付くわ
2018/06/09(土) 22:36:24.46ID:d5fCz/GJ0
>>429
> (あとちょっと違うがIDEのインテリセンスもC#が初のはず)
インテリセンスはVB5.0の時代からあるんだが...
2018/06/09(土) 22:41:24.00ID:MhKfyDgC0
>>425
> 自分に必要な範囲のみ理解してる程度
多分これくらいが適正で、これなら大して問題にならないんだよ。

問題は、意識高い系馬鹿の>>417
> 昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
みたいな、おかしな奴がいることだよ。

Linq自体でそんなに格差が出来るはずもない。
仮に、Linq部分を関数呼び出しに変えたところで、本体のコード構造は全く変わらないだろ。
便利機能だが、その程度でしかないんだよ。
逆に言うと、制御構造の違いで勝負出来ない、
新文法が読めることしか威張れない馬鹿がそこに無駄に拘っている気がする。
2018/06/09(土) 23:00:28.94ID:0BGOlb7W0
linq で Where と OrderBy 使ったところをチームリーダーから For と List<T>.Sort() に書き換えられたことはある。理由は「他と違うから」
他と書き方を合わせておくのが大事なのはわかるけど…
2018/06/09(土) 23:10:59.82ID:1jan2CXL0
コーディング規約があるのならそれに合わせろよ
2018/06/09(土) 23:45:05.02ID:v7FNkyrH0
>>433
他と違うからって理由で直すのは良くないと思うな
本来関係ないはずのクラスの間に存在しないはずの関係性を作りこんでしまう
その結果、必要ない作業や、縛りを生み出して生産性を下げることになる
俺が経験したものだと
すでに書き終えたforeachをすべてforに統一
テスト済のDAO、DTOのsnake_caseを他レイヤに合わせてCamelCaseに統一
この2つが最高にバカバカしかった
2018/06/09(土) 23:56:36.61ID:wFjp4I59M
カプセル化を知らない人が少なくないのかな
「publicメンバーはクラス間のコミュニケーション円滑化のために規約として形式化しましょう」ぐらいならまあ理解できるが
「Linqはやめてループにしてくれ」なんて内部実装の形式にまで踏み込んでくるなよな
クラススコープで違和感なければそれでいいだろ
2018/06/09(土) 23:59:33.29ID:MhKfyDgC0
>>433
俺はC#erではないが…。

単発のLinqも認めてもらえないのならご愁傷様。あれは普通に読める範囲だ。
見た目、Linq自体にはサブクエリ無しか?ならそんな酷いことにはならないはずだが、
例えばSQLでは再帰呼び出しが出来たりして、
マンデルブロだパズル解くだとか、おかしな事になってる。
https://www.sqlite.org/lang_with.html
Linqでどこまで出来るか知らんが、こんなん書かれたら殴りたくもなるだろ。

基本的には関数呼び出しにしてその先は隠蔽、
つまりLinq実装かFor/List/Sort実装かは上位からは見えない、ってことにすれば関係ないはずだ。
ただ、その場にベタで「何を選択しているか」が書かれている方が読みやすいことは多々あり、
Linqもその局面で使われているとは思うので、全面書き直しだと余計に読みにくくなるとも思うが。
2018/06/10(日) 00:07:12.73ID:wNo6w9bX0
LINQってCube扱えるんだっけ?
2018/06/10(日) 00:11:20.35ID:FNJYuW1ra
>>436
どうでもいい議論だけど、一言。
カプセル化っていうのは「メソッドの中は可読性考えなくてよい」って意味じゃないよw

LINQ(というかクエリ式)嫌いの大半は批判してる人間がそもそも理解してないだけだと思うが一理はある。
それは使い方によっては複数の処理が有機的につながった、適切に分割統治されてない、
可読性の低いコードになるからだ

実際、筋の悪いプログラマが好む100行オーバーのメソッドに近い物になりうる
2018/06/10(日) 00:20:43.11ID:kZ6+r7gZM
>>439
どう読んだら「メソッドの中の可読性は考えなくていいよ」になるんだろ
外部の都合を内部実装にまで持ち込むな
クラス内での可読性が十分ならそれでいいだろ
って主張な
正しく動いて綺麗なコードを他のクラスの都合で書き直す
俺はこれある意味カプセル化破壊と言っていいと思う
もちろん本来の意味でのカプセル化とは違うのはわかってる
2018/06/10(日) 02:00:10.36ID:gGHljlXMa
>>440
どう読んでもそうとしか読めません
自分で自分の書いてあることが理解できないのかw

「メソッドの中は可読性考えなくてよい」と言っているのでなければ
>>436の1行目と4行目はつながらない。

カプセル化を理解していてもメソッドの中の可読性、例えば
「Linqはやめてループにしてくれ」と言うことはあり得る。

なぜなら、カプセル化とは「メソッドの中の可読性は考えなくていいよ」という意味ではないからだ
2018/06/10(日) 02:01:02.37ID:gGHljlXMa
>>441
いきなり訂正

× >>436の1行目と4行目はつながらない。
>>436の1行目と3行目はつながらない。
2018/06/10(日) 05:17:43.99ID:4PiVyKtW0
ランダムな指定回数オブジェクトを作成する方法ないですか
7時まで待つ
2018/06/10(日) 06:46:45.50ID:Kj8YEAmO0
>>441
横からだけど、そう思えるのはお前さんがLinq使ったら可読性悪くなるって決めつけてるからじゃないの?
2018/06/10(日) 06:46:55.66ID:CFkipoua0
Random
2018/06/10(日) 08:32:28.14ID:RI4Vnlqm0
>>435
コーディング規約を読んでないお前か
コーディング規約を定めてないお前の組織がバカなだけ
2018/06/10(日) 08:41:39.38ID:HMOXZXoS0
この話いつまでやるの?
2018/06/10(日) 08:43:37.52ID:kZ6+r7gZM
>>446
コーディング規約がバカなんだよ
2018/06/10(日) 09:22:16.29ID:z8uYskXvM
就職できるように頑張れ
450デフォルトの名無しさん (ワッチョイ 13e3-LHz9)
垢版 |
2018/06/10(日) 09:35:53.15ID:0WF1gq+N0
スレにも規約作って変な奴は矯正しないといかんな。
2018/06/10(日) 09:58:39.22ID:kZ6+r7gZM
変数を関数の先頭に書く
returnは1つまで
変数名の先頭に型の略字を書く
varは使ってはいけない

こういうひと昔前まで大衆が信じてたバカ規約
システム全体で統一感のあるコードを書くって規約もいずれその仲間入りするとおもう
いまはまだIT業界全体が未熟だからみんな気付いてないだけ
2018/06/10(日) 10:22:35.79ID:YCs8n+CmM
ちょっといいですか、この関数100行超えてます。
規約違反で可読性なくなります!
レビューで積極的に発言するサル、何も知らないで自分は立派なプログラム書いてると思っている。
ちなみににLinqの方が可読性上がるよ。
Linqはやりたいことをズバッと書ける。
古いやり方だと、このforループなに?ってなる。
forループは実装手段であって目的じゃないから。
単に慣れ、新しいこと勉強したくない連中が可読性だの規約だの持ち出す。
2018/06/10(日) 10:39:02.74ID:0nkwjY0q0
分割すれば良いじゃん
それが出来ないことを相手のせいにするな
2018/06/10(日) 11:01:43.43ID:wNo6w9bX0
魔板でやれや
2018/06/10(日) 12:09:56.40ID:ycwHE1rSa
>>444
どこが決めつけてる>>439
456デフォルトの名無しさん (ブーイモ MM05-UL3Q)
垢版 |
2018/06/10(日) 13:05:02.68ID:fXHYwG6AM
C#のLinqを使っているのならPythonの方が2倍速くなる
https://qiita.com/yniji/items/6585011633289a257888

C# の Linq が python の2倍遅い、は嘘
https://qiita.com/Akira_Kido_N/items/d9519b05ccee6a67158f
2018/06/10(日) 13:22:36.14ID:8jSf3er6M
俺が知りたいのは、オブジェクトをx回作るやり方なんだよ
2018/06/10(日) 13:47:05.85ID:FyF+mujLM
for(var i=0;i<n;i++)Days[i]=new Day(i);
2018/06/10(日) 14:27:51.17ID:A9qrJ+Er0
linqで発狂してるジジイはSQL絡みでよくわからないエラーに出くわして理解できなかったんじゃないの
2018/06/10(日) 17:59:54.77ID:Nj3/us+lM
もう全部varでええやろ
2018/06/10(日) 18:16:30.94ID:Ve8EHXbu0
保守性の低い Linq を使ったコードの実例を見たいんだけど。
2018/06/10(日) 18:55:50.21ID:FyF+mujLM
クエリ式を使ったのは単純なのはわかりやすいけど複雑になるとお手上げ
メソッド形式で使ったとしても逆にクエリ式のfromを二重の使ったほうがいいのにSelectManyを使ってるやつは非常に醜い
JoinやAggregateも可読性が以上に低い
2018/06/10(日) 18:58:38.79ID:0FFsGNUEa
意見は分かれると思うが、川俣大先生が連載記事で引用してた
このサンプルあたりがボーダーラインかね
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じゃなくてクエリ式の話をしてるんじゃないのかと
2018/06/10(日) 19:04:29.50ID:FyF+mujLM
>>463
これはだめな例じゃないかな?
何をやってるかがわからない
2018/06/10(日) 19:22:31.41ID:0nkwjY0q0
これの事?
var queryDupNames =
  from file in fileList
  group file.FullName.Substring(charsToSkip) by file.Name into fileGroup
  where fileGroup.Count() > 1
  select fileGroup;

基礎的なものだけで構築されていて何をやっているか一目瞭然じゃん
2018/06/10(日) 19:59:10.70ID:7XGbwrsW0
これがわかんないって言うならもうlinq禁止しか無いね
そんな人間がいるプロジェクトには関わりたくないけど
2018/06/10(日) 20:06:35.03ID:kZ6+r7gZM
全員linq読めても将来読めない人がメンテするかもしれないから禁止
実際にあった話
2018/06/10(日) 20:19:14.72ID:Ve8EHXbu0
ああこれが分からないってんなら確かに LINQ 禁止だわ。w
でもそんなのに付き合ってやる義理はないんじゃね? あとは規約の問題だな。
2018/06/10(日) 20:29:40.62ID:FyF+mujLM
自分ならメソッド構文で書く
2018/06/10(日) 21:47:34.28ID:WVhS1nfV0
分からないなら勉強するなり聞くなりすればいいじゃんとは思うけどな
可読性あげるのは理解できるが便利な関数を規制するのはおかしいくない?
いつまでたっても個人の技術力上がらなくなるけどいいの?とは思う
2018/06/10(日) 21:54:10.88ID:FyF+mujLM
わからないって意味を誤解してるだろ

var queryDupNames = fileList.Groupby(f=>略, f=>略).Where(g=>g.Count>1);

メソッドだとほぼ一瞬で何をやってるかわかるだろ
わざわざ行数を割いて理解に時間のかかるクエリ式を使う意味はねえよ
2018/06/10(日) 22:13:28.91ID:WVhS1nfV0
あークエリ式じゃなくてラムダで書いた方が見やすいって話?
それなら同意
2018/06/10(日) 22:39:32.51ID:7XGbwrsW0
そんなんリファクタすりゃ済む話じゃん
2018/06/10(日) 22:43:36.88ID:mLmPdblh0
リファクタリングするにもユニットテストで担保取れないレベルの酷いプログラム沢山あるからなあ
2018/06/10(日) 22:53:21.31ID:kZ6+r7gZM
低レベルなプログラマに合わせたコードはテストしにくいひどいコードになりがち
インターフェース禁止だとか当たり前のように言ってくるからねあいつら
2018/06/10(日) 22:54:32.29ID:SjjA9sVt0
今日も自閉症の見本市
2018/06/10(日) 23:06:57.39ID:0nkwjY0q0
低レベルなプログラマとの話し合いは無駄だと言うことがよくわかった
2018/06/11(月) 14:37:15.67ID:dC6OTsii0
リファクタリングをリファクタ言うの非常に気持ち悪い
refactor は refactoring から派生した単語
refactor という動詞は使われだして日も浅く、まだ技術系のスラングの域でしかない

VS には「リファクター」としてリファクタリングを行うメニューが提供されているが
小洒落た動詞として使用される分には気にならないが、
日本人が「リファクタする」とか使ってると「カンパニーのコンプライアンスをガバナンスする」とかと同様に見える
いやもっとあれか「コンプラをガバーンする」とかと同じレベルかな? (govern は正しい動詞)

https://english.stackexchange.com/questions/57750/is-there-a-verb-refactor-meaning-doing-refactoring-in-english

……MSのスペルチェッカで引っかかってたのか(現在は知らんが)
2018/06/11(月) 17:24:57.86ID:FO+2sVJQ0
カタカナ表記する時点で英語のことなんて気にしてちゃやってられんよ
2018/06/11(月) 17:36:15.53ID:xa0hP702a
唐突に何なんだろうねw
まあ、某社のVS用のリファクタリングツールの旧名がRefactor !"だったね。
2018/06/11(月) 19:40:48.77ID:IrI/gpw8M
英語はよく知らんが 〜ing から派生して 〜 ができるとかあり得るのか?
2018/06/11(月) 22:30:32.76ID:dC6OTsii0
うん、そもそも refactoring が造語

初出が誰なのか不明(Martin Fowler ではない)だが、
1992年には論文で見られるっていうほんとに新しくできた単語なのよ
2018/06/11(月) 22:53:53.28ID:ziXMMRuaa
新しい(26年前)
2018/06/12(火) 11:25:19.10ID:XfLFdaMYp
接頭辞と接尾辞を付けただけだから別に造語ってほどじゃ無いだろ?
2018/06/12(火) 13:31:08.41ID:l5O6ZBmRM
もとの言葉がfactor、factoringで、factorは動詞としても使われているのだから、
英語圏ならrefactoringという言葉が登場した時点でrefactorという言葉も同時発生的に生まれていると思うが…
2018/06/12(火) 14:20:48.56ID:O2DKnY7ra
どうでもいい話だけど、派生した順番はたぶん

factor(名)→ factoring → re-factoring

なんだろう。

完全に想像で何の根拠もないけど、computingが動詞のcomputeの動名詞ではない(たぶん...)
ように、factoringも動詞のfactorの動名詞ではないような気がする
2018/06/12(火) 21:59:47.02ID:tBKs/ecm0
>>447
factorizeはなぜ使われなかったんだろう
2018/06/12(火) 23:00:33.34ID:KC1Yqp3NM
まずは英英辞書引こうよ…
2018/06/13(水) 07:49:48.39ID:GuprKmCG0
英英辞書ってやっぱりエイッエイッて引くのなのかな
2018/06/13(水) 08:29:12.19ID:o1Fw+zabM
一晩考えてそれか。。
491デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:13:37.26ID:LyYtEKg40
こういうやつってC#に向いてるんだろうか
https://i.imgur.com/XbewmEQ.jpg
でもUnityとかでゲーム作りたいね思ってるのってこのタイプだろうなと思うし。
492デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:14:09.95ID:LyYtEKg40
これな
https://www.arealme.com/left-right-brain/ja/?ag
2018/06/13(水) 17:20:21.24ID:yGCmXdsAM
C#より丸鋸とか旋盤の方が向いているんじゃね?
494デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:22:01.32ID:LyYtEKg40
3DCGはうまいけどなw
495デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:24:47.33ID:LyYtEKg40
図面はやってたけど、なんでもアバウトで絵をかいてるんじゃないからとかボロカス言われた。
2018/06/13(水) 19:08:31.55ID:TJmxm3LHM
近年、そもそも右脳左脳自体がエセ科学だったんじゃないかって言われてるけどね。

ここのサイトのconsoleって書いてあるところに自分のrwitterアカウント打ち込むと、性格にマッチした言語がわかるよ。IBM製。
http://hello-new-world.mybluemix.net/top
2018/06/13(水) 19:10:58.93ID:tfOKWYs/0
>>490
やーごめん。このスレ今日初めて見たの。ちゃちゃいれてもうしわけなす。
2018/06/13(水) 23:36:14.69ID:AGR+xSSx0
>>496
IBM製じゃなくてBluemix使ったアプリなだけやん
2018/06/14(木) 08:07:40.99ID:TG8lbF0sM
>>498
いんや、公開したのは日本IBMだよ
500デフォルトの名無しさん (ワッチョイ c21b-U+xr)
垢版 |
2018/06/14(木) 12:02:14.52ID:ZrVl35qK0
自分、ブックオフで買ってきたOS無しのPCにUbuntu入れてるんですが、
Pythonとか面白いので、C#もやってみたいと思っているんですが、

Mono入れれば、書店で売ってるVisualC#の本とか出来ますか・・?
501デフォルトの名無しさん (アウアウカー Sa69-qcd4)
垢版 |
2018/06/14(木) 12:26:43.19ID:ZNAi3suja
C#やるなら普通にWindows機でやったほうがいいと思うけど
2018/06/14(木) 12:28:45.35ID:IAs3lrtOd
>>500
C#で何がしたいの?
2018/06/14(木) 13:05:26.16ID:PJ7Fj3C3a
左は約30年前の 稲川会 三日月一家 小原忠悦組長
https://imgur.com/a/MlKixgw
504500 (ワッチョイ c21b-CUAo)
垢版 |
2018/06/14(木) 17:14:29.50ID:ZrVl35qK0
>>501
どうもありがとうございます。Windows機は父親のしかありません・・。強奪してこようかな・・。父親全然使っとらん。。

>>502
本のプログラムを打ち込んでみたいです。Pythonとか面白かったのでC#も挑戦してみたいという感じです。なんかいけそうっぽい
2018/06/14(木) 17:17:13.41ID:cv3CkBmoM
>>499
あら、そうなのか
すまんかった
2018/06/14(木) 17:27:33.62ID:im2Z0uooa
>>504
本がVisual Studioを使う前提で書かれていたら無理
2018/06/14(木) 17:59:42.71ID:IAs3lrtOd
>>504
だから具体的に何をしたいの?(何を作りたいの?)
2018/06/14(木) 18:14:23.58ID:im2Z0uooa
書いてある通りだろ

本を読んでその通りなぞりたいんだろ
2018/06/14(木) 18:19:58.04ID:T0JMmz9y0
>>506
猫でもわかるシリーズならそんな心配はないな!
>>504
お父さんのPCで間違ってエロコレクションとか見つけたら鬱になるのでやめたほうがいい
ただVisual Studio(VScodeでもいいかも)使えない環境でC#やるのはめんどくさいと思うよ
2018/06/14(木) 18:22:09.50ID:im2Z0uooa
猫でもわかるシリーズは今はもう古いと思う(※個人の感想です)
2018/06/14(木) 18:22:19.44ID:IAs3lrtOd
>>508
本によるやろそんなもん
2018/06/14(木) 18:23:22.66ID:im2Z0uooa
>>511
だから馬鹿な質問するのはやめとけよ
2018/06/14(木) 18:23:51.86ID:T0JMmz9y0
>>510
>>509はC#の本なんかまったく読んでいない無責任な個人の感想です
2018/06/14(木) 18:28:25.08ID:IAs3lrtOd
>>512
本によるから実際にやりたいこと聞くことの何が悪いんかい?
2018/06/14(木) 18:30:41.94ID:Cw52iYDwM
ここで聞くようなレベルの人が使うもんじゃないと思う ⇒ Mono
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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