- 1 名前:デフォルトの名無しさん [2016/06/29(水) 04:39:09.19 ID:sT3gw8va.net]
- ■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part88 [転載禁止]©2ch.net peace.2ch.net/test/read.cgi/tech/1437808445/ C#, C♯, C#相談室 Part89 peace.2ch.net/test/read.cgi/tech/1443271409/ C#, C♯, C#相談室 Part90 echo.2ch.net/test/read.cgi/tech/1455160063/ ■次スレは>>970が建てる事。 建てられない場合は他を指定する事。
- 627 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:05:00.53 ID:Js+ntQYt.net]
- ああ、0コピーしたらダメな場合は使えないのかw
ボケてるな
- 628 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:37:37.49 ID:o/Z16MWz.net]
- >>604
ああよく見ればそうだな。てかスペース見えんかった。 俺はプログラミングは固定ピッチフォントでやる派なので。 つか脱線でさらにスレチだがC++の開祖がプロポーショナル派で、 「プログラミング言語C++」もそれで印刷されているのだが、読みにくくてかなわん。 >>605 俺は余り詳しくないのだが、その範囲で話をすると、 K&R第2版P129には、そういう場合は while (*dst++ = *src++) にしろと書いてあるわけだが、実際はこの書き方はwarinigが出る環境の方が多いと思う。 したがっておそらく最適化はやってもらえる(はず。volataileでない限り。) >>595も本来はtypedefやマクロを使えばもっと綺麗に書けるし、多分それが普通。 悪い例を出しても言語間の比較にはならないよ。 どの言語でも糞な書き方は出来るから。(比較的C#はそうなりにくいのは認めるが)
- 629 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:39:05.84 ID:o/Z16MWz.net]
- >>607
すまんセミコロン抜けてた。 while (*dst++ = *src++);
- 630 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 23:01:59.93 ID:AR+VWIbJ.net]
- なんのスレなんだここ
- 631 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 23:05:32.42 ID:URePwP35.net]
- Swiftでも++は削除されたし、考え方次第なんだよなー
近代的な文法がないCではしょうがないんだろうが
- 632 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 23:40:01.94 ID:o/Z16MWz.net]
- >>610
マジ?と思って調べたら、どうやらそのようだ。つか、Pyshonも無いんかよ。 https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md Cとは生まれた時期も目的も異なるからどちらがいいという問題ではないが、 Cで問題だった箇所を一つずつ潰すのも新しい言語のやるべき事だよ。 主張はそこに書いてある。同意するわけではないが、まあそういう見方もあるわなくらいには思う。 ただCは何だかんだで多分生き残る。 あれはほぼアセンブラで、限界までチューニングするにはあの記法が必要だから。 対してC#やSwiftやPythonは生産性/可読性重視だから、 おそらく次の新しい言語が出てきたら取って代わられる。 「近代的」っていうのはそういうこと。時間が経つにつれて「前近代的」になる。 これは近代的言語の宿命だね。 そしてCは「前近代的」でも生き残る価値があるから現存している。 ただ、++で問題を感じたことはないんだけどな。 そこの例に挙げられている > foo(++a, a++) をやる奴は死ねでいいけど、 これは引数の評価順を規定してないのが問題で、別問題。
- 633 名前:デフォルトの名無しさん [2016/09/30(金) 00:10:14.41 ID:cU7plTv4.net]
- Pyshonて何だよ?と思ってggったら、ホントにあるのな。
- 634 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 00:22:32.29 ID:WN9yrU4I.net]
- Cがわかりにくいのって記号が物理的に見にくいだけだろ
概念的な難易度はC#と変わらん
- 635 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 00:51:09.49 ID:27JQ5kO2.net]
- Perl「特に見にくくなんて無いよ」
- 636 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 03:34:02.05 ID:gTc+8iAX.net]
- >>595
調子こいたラムダ式とかもだめだよな!
- 637 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 06:37:26.14 ID:4hxo3I+i.net]
- 結局プログラマの能力の問題
現状だと調子こいたラムダ式書ける奴は比較的スキルが高いからコード綺麗だよ
- 638 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 06:55:45.86 ID:Y6l190wq.net]
- c#でウオッチ1には表示されるのですが、
ウオッチ2や3のウインドウにもウオッチさせる方法を教えてください
- 639 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 08:30:41.85 ID:2XfoFLHG.net]
- コードのキレイ汚いは感覚論だから議論しても仕方がない
でもラムダを使ったコードはコードの重複が少なく結合が弱いから誰が扱っても保守しやすいプログラムになるのは確かだね
- 640 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 09:34:42.41 ID:2XfoFLHG.net]
- 何より言語やライブラリ、フレームワークがラムダを当たり前の存在として扱っている以上使わないという選択肢はない
キレイ汚いという個人的感情によるワガママは通じないのだ
- 641 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 09:50:48.57 ID:XrkqBYg2.net]
- ○○を使ってたら汚いコードになるってことじゃないんだよな
そういうことがわかってないと汚いコードになる
- 642 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 10:10:00.28 ID:Ik8fs/0i.net]
- それより審美眼の足りない奴を蹴り出した方が効果的
- 643 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:45:54.67 ID:0SPCdJff.net]
- 審美眼でコードを書くやつはプロジェクトから追い出したほうがいいって
20年前から言われてる K&Rのコードはさんざん批判されてる ここは20年前のスレか 保守性の高いだれでも理解しやすいコードを書ける奴が優秀
- 644 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:00:54.25 ID:bXY+Fxkm.net]
- × > 保守性の高いだれでも理解しやすいコードを書ける奴が優秀
○ 馬鹿な俺でも読めるコードを書ける奴が優秀なことにしたい K&Rのコードが「汚い」という批判はないと思うが。あれはあれで美しい。 勘違いした馬鹿が闇雲にトリッキーなコードを書いたり、 (今まさに関数型()の奴らが同じ事をやっているが) 或いはタイプミスなのか意図的なのか分かりにくかったりするのが問題なだけ。 これらは色々warning等を出して対応されてきた。もちろん最初からSyntaxErrorならそれでよい。 そして「コードが汚い」ってのは今言っているようなせいぜい10数行の局所区画のことではなく、 もっと大きな上位区画での話だろ。意味不明なクラス構成とか。 というか、10行程度のコードなら多少汚くても読めるし、 正しく抽象化されて階層が分かれていれば、 そういうローレベルコード(何かのメソッド等)は一度読んで動くのが分かればそれでおしまいだろ。 問題はそれらを駆使するミドルレベルコードがグダグダな方だと思うし、 それを「コードが汚い」と表現するのだと思うが。
- 645 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:01:33.75 ID:bXY+Fxkm.net]
- というか多分お前らは「自分が読めるコードが綺麗なコード」とする初心者に近い奴が多いのだと思うが、
実際の所、腕のいい奴は「書ける範囲で綺麗なコード」にしているわけで、 結果的に綺麗なだけなコードならいくらでも綺麗にかけるし、 高速化が必要なら多少汚くなっても最適化を施していく。 だから「汚い」と批判するのはそれ以上の物を自分で記述できるときだけにした方がいい。 K&Rに関しては実行速度/リソースについて最適化を施されているわけだから、 それよりも少ないリソースで速く動くソースが書けないのなら、「汚い」とは言うべきではない。 それが読めないのはお前が馬鹿だから。 少なくともそれを書いた奴はお前よりも腕前は上なわけで、 お前でも読めるようなコードを彼等が書くことは可能なわけだし。 例えばソートとか。 APIとして呼ぶ分には中身がどうであれ正しく速く動いてくれればそれでよし。 それが非常に読みにくい物でも、正しく動く限り、速い方が選ばれる。 それを読み
- 646 名前:ノくいだけの理由で「汚い」とするのはナンセンスでしょ。
K&Rのトリッキーなコードは本来はこういう区画にしか現れないものだよ。 そしてそれは「ソート」として分離されるから、その中身がどんなに汚くても、開発の障害にはならない。 「コードが汚い」ってのは、つまり「これじゃあ今後手を付けられません」って意味だろ。 ソートみたいな局所区画でこれがあてはまることはない。 (実際「汚い」=「読みにくい」のと、 「コードが汚い」との批判=「開発の障害になる」との意見は別物のはず) 問題は、例えば、「ラムダを使うべき場所でラムダを使ってない」とか、逆に、 「ラムダを使うべきでない場所でラムダを使っている」とか、だろ。 要するに簡単な方を使えばいいだけなのだけど、 意識高い奴は「○○の方がいい(キリッ」とか言って無理に使うからおかしな事になる。 [] - [ここ壊れてます]
- 647 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:05:31.58 ID:GrCnAQwz.net]
- ポエマーきもっ、まで読んだ。
- 648 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:08:03.45 ID:Fmt1sBQd.net]
- コードだけでなく2chレスも読みにくいわw
- 649 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:08:46.30 ID:IoizK4x5.net]
- もちろん昔と同じように考える分野もあるけど、多くの場面じゃ昔と今は考え方が違うのよ
- 650 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:10:25.66 ID:GrCnAQwz.net]
- っていうか、説明的な文章を簡潔かつ過不足なく書く能力と
可読的なコードを書く能力はおそらく無関係じゃないと思う 何が言いたいかはお察しくださいw
- 651 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:13:28.59 ID:EbLE8W48.net]
- ・ソースが汚いとはクラス構成が変などの大きな区間の事であり10行程度なら問題ない
・多少汚くても速い方がいい ・新機能を無理に使うと汚くなるからやめろ でおk?
- 652 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:15:30.37 ID:OobEUz+z.net]
- むしろこんなに書き込めるんだな
あれか?最新に出てくる画面に1レスだけで全部埋めたりできるのか?
- 653 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:28:51.36 ID:IoizK4x5.net]
- >>629
行数の問題じゃない。1行でも汚いのはあるし、変数名一つとっても汚らしいのがある 今は遅くても可読性、拡張性、保守性を重んじるケースの方が多い 新機能は汚いわけじゃない。互換性とかそれまで認知されてなかったトラブルを産む原因になるだけ
- 654 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:41:02.45 ID:bXY+Fxkm.net]
- >>629
・「ソースが汚い」と批判される場合は 全体的にナンセンスか必要のない箇所で最適化をしている場合。 必要な箇所での最適化で結果的に著しく可読性が落ちたとしても 「ソースが汚い」と批判されることはない。 ・速さが必要ない箇所では最適化せずに、一番単純な記述にしろ。 ・新機能は便利だから追加されたのだから、積極的に使えばいい。 ただし使えばいいって物ではない。
- 655 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:44:22.04 ID:Mpnnp+Nc.net]
- 仕様上どうしても実行速度が必要な部分を除いては、可読性の高さは実行速度より優先されるべき
- 656 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:56:07.59 ID:bXY+Fxkm.net]
- >>633
同意。 なんか早すぎる最適化はうんたんってのがあるんだろ。 コードの9割以上は速度はどうでもいい箇所なので、可読性をとるべき。 糞どうでもいい箇所をこねくり回してワケワカメなコードにする奴はハゲろ。 (言っちゃあ悪いが関数型()な奴はこれをやっている気がものすごくする) あと言語のポリシーにもよるでしょ。 C#はC程のチューニングをする為の言語じゃない。 それこそ、C#なら全箇所で(速度は全く気にせず)可読性重視というのもありだと思うよ。 そもそもどうしても速度が必要ならCでDLL書いた方が速いし早い。
- 657 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 01:11:38.55 ID:TCy40dPy.net]
- コードの綺麗さは実は定量化できる
わかりやすいので言えば重複するコードがどれぐらいあるかとかな
- 658 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 01:26:55.75 ID:5I4x+GEM.net]
- 関数型は親の仇、まで読んだ。
いつの間にか老害になってた、ってのもよくある話。
- 659 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 02:28:35.54 ID:tNbhSEQ7.net]
- >>623,624の可読性は定量的に表すといくつですか?
- 660 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 02:48:45.62 ID:MIaIeT8n.net]
- 3
- 661 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 04:34:25.08 ID:Cx/cD9Km.net]
- 評価に価しない
- 662 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 07:03:52.26 ID:aUiPvlDm.net]
- 要するにアンチパターン
- 663 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 13:30:51.56 ID:b8SZy0Th.net]
- >>623
コードに審美眼とかうるさい奴は死にかけのPerlに行けよ 死ぬ程美しいコードだらけだぞ 副作用だらけの可読性や保守性が全然ない糞みたいな世界にいけばいい
- 664 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:32:33.06 ID:YSehcX6B.net]
- >>615
調子こいたラムダ式ってどの程度のものを指していますか?具体例を教えて下さい。
- 665 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:44:54.07 ID:uFiZxscE.net]
- たぶん「調子こいた『ラムダ式』」では。
- 666 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:45:58.08 ID:j4WTV/sN.net]
- ラムダ式の中でも特に調子こいてる物、って事でなくて
ラムダ式自体が調子こいた代物だ、って事かい
- 667 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:49:57.84 ID:oe6ViUtA.net]
- 匿名メソッドはOKなんですねよかった
- 668 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:53:16.74 ID:aSQFFfFE.net]
- >>644
ひでーww
- 669 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:08:55.65 ID:j4WTV/sN.net]
- 俺の意見じゃなく、>>643を噛み砕いただけだからね
まあ俺も酷いと思うわw
- 670 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:13:22.35 ID:r6T55aIp.net]
- ラムダ式「今夜はザキンでシースーよ」
ということですね
- 671 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:27:04.12 ID:uFiZxscE.net]
- ザンギにソース?(北海道民感)
>>647 その言い方だと俺が酷いようにみえるんだけどw
- 672 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:27:22.17 ID:73eR6yvK.net]
- 牛乳を買ってきて卵があったら6個買ってきてね
これで牛乳を6個買ってきた話のようだ。プログラマーってのはめんどくせーなw
- 673 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:36:06.66 ID:uFiZxscE.net]
- それは解釈の違いの問題じゃなく、
単なる勘違いというか記憶ミスの話じゃないのか
- 674 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:47:50.99 ID:MIaIeT8n.net]
- 変なパーサー使ってるんだな
- 675 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 19:02:47.22 ID:hMWB8YVJ.net]
- 最後の買ってはコンパイルエラーにしてほしいな
- 676 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:25:31.09 ID:YSehcX6B.net]
- ラムダ式使うと調子こいてるヤツと思われるのはit業界の常識ですか?
- 677 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:27:03.31 ID:R05VqS28.net]
- >>654
うんにゃ
- 678 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:34:55.43 ID:roKi/w2g.net]
- コードの流れに唐突にラムダ式入ってくると邪魔だなって思う
長い奴はメソッドにしてにラムダ式で呼べって思う
- 679 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:35:59.82 ID:rH9xy5Nb.net]
- >>654
イテレーター業界?
- 680 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:38:04.48 ID:roKi/w2g.net]
- メソッド書かないで引数内で追加できてよかったと思う人もいるんだろうか?
- 681 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:41:46.11 ID:rH9xy5Nb.net]
- ラムダ式なしでWhere()とかSelect()使うの苦痛だわw
- 682 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:44:48.07 ID:wmtSdepv.net]
- >>650
それとぃってrで見た
- 683 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 20:52:06.40 ID:roKi/w2g.net]
- >>659
そういうのは調子乗ってると思わないけどw
- 684 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 22:32:32.05 ID:uFiZxscE.net]
- 普通にメソッド書いたほうが見通しスッキリするんじゃねー?
と思うコードはある、かな……
- 685 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 00:04:13.32 ID:ROqN57Sm.net]
- delegateの演算子オーバーロードは出来ない?
例えば Func<string, int> f1 f2 な時に f = f1 | f2; stringの値によって、f1またはf2を呼び出すfをつくる みたいな事がしたい。
- 686 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 00:31:44.31 ID:jkLbSgMw.net]
- デリゲートはクラスじゃないから無理でしょうね
c#は関数呼び出し演算子()のオーバーロードもできないからクラスで実装するのも無理 c++なら出来るんだがね
- 687 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 04:26:34.74 ID:jWIE31Om.net]
- トリッキーな脱出条件の再帰コードを見た事がある
見た目はスッキリしてるけどバグを誘発しそうで怖い
- 688 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 06:52:07.42 ID:2n6hXS15.net]
- >>664
そんなトリッキーなことするバカが出ないようにってこと
- 689 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 10:05:52.02 ID:jkLbSgMw.net]
- 個人的には別にトリッキーだとは思わないけど
むしろ美しい https://ideone.com/N9aycD
- 690 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 10:54:34.82 ID:eq6TYNRH.net]
- >>667
"個人的"だね、ほんと
- 691 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 11:55:26.61 ID:O3UtDhl/.net]
- 個人的だねとの判断も明らかに個人的なものであるが、これいかに
- 692 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:01:52.13 ID:RfLsthU9.net]
- >>667
分かりやすくて良いと思う この辺りをどう感じるかは文理学歴の差が大きいと思う
- 693 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:07:04.04 ID:aauDOAhV.net]
- >>667
それって記法上のメリットしかないだろ? だってベタに書こうと思えば書けるし、大した手間でもない。 だからそういう糞ユーザーの「俺カッケー」を出来なくしてあるのがC#だよ。 inline f f1(f2(3)) 3*f2(3) 3*f1(3)+2*f2(3) そのコードはテンプレート部(40行目以前)が完全に動くならそれでいい。 ただしそれが保証出来ないのなら、いちいち見ないといけなくなる。 つまり糞ユーザーの「俺カッケー」に付き合わされることになる。 そういうのが開発効率を落とすと判断し、C#は出来なくしてある。 そういうのも含めて全部出来るようにしているのがC++。 C#の判断も一理ある。
- 694 名前:だから賛同するならC#を使えばいい。
いやならC++を使えばいいだけ。 このケースに関しては、やっていることはOOPスレの10と同じ。 http://echo.2ch.net/test/read.cgi/tech/1467992113/10 便利なことをしているつもりが余計に手間を増やしている。 初心者はこの判断が付かないんだよ。だから1行/1文字でも減らそうとする。 なお俺はその記法について文句を言っているわけではない。 それがシステム側で「バグのない物」として提供されていれば、使えばいい。 ただ、オレオレ記法をしたいだけの為にバグがあるかもしれない物を出されたらウザイだけ。 [] - [ここ壊れてます]
- 695 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:25:34.26 ID:OGpfvvty.net]
- こういう流れを見るとやっぱ文理学歴の差って大きいんだなって実感する
- 696 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:42:14.69 ID:jkLbSgMw.net]
- オレオレ記法じゃなくて数学的な記法をプログラムに持ち込んだだけなんだけどね
後バグがあるならやめてほしいと言うけど特にc++規格に明示されてない文法を使ってるってわけでもないし 関数オブジェクトとか(この場合可変長テンプレートとか)を見慣れない人にはトリッキーに見えるだけだと思うな
- 697 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:52:17.12 ID:+f7TOXbf.net]
- 分かりにくいというか曖昧すぎて理解のしようがない
関数の和や合成と言われても、引数適用や合成の仕方は無数に考えられる 全てがオレオレのフィーリングに基づいた暗黙脳内ルールじゃん むしろ理系こそ拒否反応起こすわ
- 698 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:54:43.75 ID:I2UZY42b.net]
- そう言うことを頻繁にやるならアリだと思うが過去そう言うことをやったことない俺にはできてもできなくてもあまり変わらん
バグまで持ち出して反論してる >>671 はちょっと頭弱い子だと思う
- 699 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 12:57:57.60 ID:aauDOAhV.net]
- >>673
数学の合成関数は f(g(x)) だろ。アホなのか?
- 700 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:07:15.54 ID:aauDOAhV.net]
- >>673
なお俺はトリッキーだとは言ってない。 バグを誘発する糞コードを読まされる手間が増えるだけだからウザイと言っている。 その件に関してはベタで書いた方が「全体的には」楽だろ。それだけ。 初心者はこの「全体的」が分からないから局所的な最適化コードに異様にこだわるだけ。 それだけで済んでいればいいけど、通常はそれだけじゃ済まないんだよ。 そして泥沼化するから、C#では最初から禁止している。それだけ。 まあ妥当だと思うよ。
- 701 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:08:59.70 ID:FGg7v3h+.net]
- まあラムダがあれば簡単な関数合成する上で特に不便はないな
C++はラムダがない時代が長かったからオペレーターオーバーロードなどを駆使して表記の簡略化、統一化を考える必要があった
- 702 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:17:42.00 ID:+f7TOXbf.net]
- 演算子オーバーロードの濫用の問題は、全く一般的でないオレオレルールが+などの非常に一般的な表現でコードに撒き散らされることだよ
少なくとも俺には f=f1+f2 と書かれても何のことかさっぱり分からん うまいこと空気読んで共感してあげるという高度な文系的センスが求められる
- 703 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:34:10.10 ID:aauDOAhV.net]
- ちなみにC#からの見方に変えると、
C#の開発時には既にC++があったわけだから、 templateの有効性や演算子オーバーロードの利便性を知らなかったわけではない。 ただ、馬鹿が調子こいて余計に手間が増えることの方が多いと判断したから、落とした。それだけ。 「出来る」ことと「便利になる」は別なんだよ。だから結局の所プログラマ次第。 そして「自前クラス」まで禁止するとstaticおじさんになるというわけさ。 これについてはJava側からの視点で批判的な物が多いけど、 おかしなクラス構成ばかり見せられたら自前クラスも禁止したくなるだろ。 実際、OOPスレ10に対してなら 「お前がクラスを作ることは禁止、どうしても欲しければ相談しろ」というのも現実的な線だよ。 要するにメタプログラミング系は本来は熟練者しか使っちゃいけないのさ。 初心者が「template使える俺カッケー」をするからおかしな事になる。 それってtemplateを使うこと、或いは短く書くことが目的になってるだろ。 手間を減らすこと、コンパクトに書いて規模の限界を緩和することを目的にしろって事だよ。 (クラスも程度は軽いけど結果的に自前フレームワークを用意するという点でメタプログラミングと似ている)
- 704 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:39:28.09 ID:jkLbSgMw.net]
- 関数の合成といえば(f◯g)(t)=f(g(t))だし
「線形結合できる関数」クラスの例で 関数の和といえば(f+g)(t)=f(t)+g(t)だし数学的にこれ以外ないでしょ 合成はc++に◯記号がないから|を代わりにしただけ あとあのコードがまるで「普通」のコードよりもバグを誘発しやすいみたいな言い方してるけどなぜそう思うの? 単に見たことない書き方だからそう思ってるんじゃないの? 数学についても、プログラムについても単に知らない人が拒否反応を起こしたり分かりにくいといっているように感じるんだが
- 705 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:41:46.38 ID:aauDOAhV.net]
- >>681
てかお前数学知らないだろ? ○って何?ドットなら関数内積で、合成関数ではないぞ。
- 706 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:43:56.45 ID:aauDOAhV.net]
- あ、2chで表示できないのだろうからunicodeで頼むわ。
- 707 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:49:48.57 ID:jkLbSgMw.net]
- U+2218
www.fileformat.info/info/unicode/char/2218/index.htm
- 708 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:56:01.58 ID:Tg5OdweU.net]
- コードの細かい記述方法であれこれルール作りたがるとかチラ裏でやってほしいわ
他人から見たら全く役に立たない
- 709 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:03:39.03 ID:aauDOAhV.net]
- >>684
ああこちらでも確認した。そういう表記をすることもあるようだ。 俺は知らんが。 ただ、そういうのを | で代用するようなことをするから演算子オーバーロードは駄目なんだよ。 それが欲しければ、そのコードをそのまま使わないといけない。 そうじゃないと、お前のオレオレクソコードを全員が読まないといけなくなるだろ。 例えばJavaScriptなら、ソースコードはunicodeなのでそれが出来る。 function ○(func0, func1){} だからその件に関する正しいやり方は、unicode版C++で○を演算子としてサポートすることだ。 ただ、f(g(x))と書けばいいだけのことを新しい演算子を定義するのは無駄だ。 だから現実的にはunicode版C++で○をマクロ等で合成関数に置換することだろう。 (unicode版C++があるかどうかは知らん)
- 710 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:04:19.38 ID:FGg7v3h+.net]
- >>680
cppからcsへの変遷の際に危険だが柔軟性の高い機能が取り除かれた理由は、調子こいたバカが増えるからではなく、基本的なスキルのないプログラマが使うことを前提にしたってだけだろう 上で出た関数合成の例だってまともに仕事してるcppプログラマならなんの苦もなくよめる おや、数値型以外の型に+演算子が定義されているぞ ああ、オーバーロードしたのね まっ、文脈から関数合成で、よほどひねくれてなきゃ線形結合だろう いちお、確認するか…仕様書は…ない ならソースみよか…(10秒ほど定義を眺める)…うん、さっきの解釈で良いみたいだね よし、じゃあ楽に見やすくなるならガンガン使おう cppが出来るレベルではこれが普通の反応であって、読めないという泣き言はプロである以上通じない csだと逆に、Linqとかあたらしいのわたしよくわからないので禁止!といったようにバカがわからないというだけで、自作の便利なライブラリどころか、標準的なライブラリすら使えなくなってしまう 世間的には同じプログラマとして分類されるけど生きる世界が違うんだよ
- 711 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:06:04.74 ID:ROqN57Sm.net]
- 自己が見慣れないものを、一見汎用性のありそうな
- 712 名前:ウ知な屁理屈つけて拒否しるのって、老化の始まりなのかな。
自戒の意味も込めて。 [] - [ここ壊れてます]
- 713 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:09:00.42 ID:FGg7v3h+.net]
- >>686
さっきからちょっと気になってたんだが 関数を合成するのと関数の評価を続けて行うのは全く別の処理だぞ どの記号を使うべきか、そもそもオバロすんなとかいう議論以前の話で間違ってる
- 714 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:20:35.82 ID:+f7TOXbf.net]
- >>687
そういう考えは規模が大きくなると破綻する 関数合成をする操作があっちゃいけないとは思わないが、定義を思い出すのに十分なラベルを付けるべき 1,2文字の記号と、離れた場所にある型宣言だけではあまりにもヒントが少なすぎるし、演算子は名前空間が小さすぎる
- 715 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:25:11.07 ID:aauDOAhV.net]
- >>687
なんかC++の奴らは「選民思想」を持っているようだけど、それは違うと思うんだよ。 そのコードを書いた時点で、バグがある可能性が残ってしまう。 だから見ないといけない。俺はこれが嫌なんだよ。 コード自体は「打ち間違いがない」という前提でなら10-30秒程度だよ。中身は何もやってないから。 だからそれが既に実績のあるライブラリとして提供されていて、その中身の確認ならまあいい。 ただしそれを自前で書かれたら、詳しく確認しなければならないし、全てに当てる検証も必要になる。 そして得られるメリットはちょっと短く書けるだけ。 これは明らかに手間が増えているだろ。 .NET公式で関数合成の演算子として提供されていれば、それを使うことに問題はない。 仮にバグがあったとしても公式側が修正してくれる。(中身の実装について見る必要がない) 自前で書いたら上記の通り手間が増えるだけ。だったらベタで書いた方がマシ。 基本的にC#は「馬鹿が使う」ではなく「ここら辺まででいいよね」という思想だとおもうし、 その判断自体も割と妥当だとは思う。ちょっと窮屈な点はあるけど、致し方なし。 なお俺はC#派ではなくかなりC寄りのC++派ね。(お前らがbetter-Cと言っている奴) これとは別に、「馬鹿でも使える言語」として使っている奴もいるし、 そいつらが調子こいているのも事実だけど、それは別問題。
- 716 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:27:32.07 ID:FGg7v3h+.net]
- >>690
まあ別に俺も演算子を積極的に推奨するわけじゃないけどな ちゃんとしたcppプログラマなら標準の型に対する演算子の挙動に準ずる動作で演算子を定義するのが良い習慣だってのが常識として知っているわけだし
- 717 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:28:49.54 ID:aauDOAhV.net]
- >>689
関数ポインタを返せばいいだけだろ。 いずれにしてもtemplateは静的展開なんだから、ベタに書けない処理はないだろ。 ベタに書くのがいいか、テンプレートを使うか、 これを検証まで含めた「手間」基準で判断しろというのが俺の意見。
- 718 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:40:47.92 ID:FGg7v3h+.net]
- >>691
依存先にバグがあるかも〜とかそんなんでプログラマやっていけるのか? 演算子使おうが使わないが、やりたいことが関数合成だろうが何か別の処理だろうが、プログラミングするなら、関数やメソッドを定義してモジュール化するのは当たり前の事だろう むしろ同じ処理をモジュール化しないで、同じようなコピペコードを大量生産するほうが圧倒的に悪じゃん? この悪を突き詰めるとUIのイベントハンドラに全ての処理をぐっちゃぐちゃに詰め込むようなキングオブバカになるんだよ そんなものは誰も望んでいない 処理の重複があればモジュール化するのが当たり前 モジュールにバグがあるのも当たり前でモジュールの保守をするのも仕事のうちだ 演算子がどうのこうのってレベルじゃねえぞ
- 719 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:42:08.34 ID:FGg7v3h+.net]
- >>693
レス番間違ってないか?
- 720 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:00:21.56 ID:aauDOAhV.net]
- >>694
お前がそう思うのならそれでいいじゃん。 俺は「手間」がかからない方を選ぶ。それだけ。 関数の線形結合なんて普通のプログラミング(例えばブラウザ等の製作)では不要だろ。 だから俺はそれにオーバーロードなんてしないし、必要ならベタに書く。 普通のプログラミングで、その線形結合って何回使うと思っているの? 余程数学的なことをするのであれば関数の線形結合も必要になるのかもしれないけど、 そういうところは既にライブラリなりフレームワークが用意してあり、 演算子も既にオーバーロード済みだったりすると思うよ。 とはいえ、俺とお前は特に何の関係もないわけで、別にお前がそうすることを止めはしない。 それをOSSとして公開してあれば、「馬鹿がいきがってるな」と思うだけ。 そういう俺に対してお前が「馬鹿だな」と思うのも自由だよ。 そういう意味ではいい時代になったね。
- 721 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:08:10.02 ID:aauDOAhV.net]
- >>695
間違ってない。 > 関数を合成する (>>689) に対して「関数ポインタを返せばいいだけ」 俺が671で > 関数の評価 つまり値を算出したのが気に入らなかったんだろ? Cでも「関数ポインタを返す関数」というのは普通に定義出来る。 関数合成ってのは別に難しい話でも新しい話でもない。
- 722 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:25:03.83 ID:FGg7v3h+.net]
- >>696
なるほどそっちの認識では線形結合のみかつ再利用の機会も少ないという前提の話題だと思っているのね 関数合成や線形結合はあくまで一例であってもっと一般論的な話をしてるつもりなんだが>>694読んでわかんなかったかな?
- 723 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:30:13.53 ID:aauDOAhV.net]
- ああすまん、696はレス相手を勘違いしていた。
>>694向けに再度書き直す。 >>694 それは単にDRYなりOAOOだし、基本中の基本だろ。 今更何を言っているんだ? 俺は無駄なコードを書くなと言っているだけ。 使いもしない演算子オーバーロードのコードとかね。
- 724 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:36:24.07 ID:FGg7v3h+.net]
- >>697
わからなくなってきたな 君は関数合成をカスタム演算子を使う方法ではなくf(g(x))と表記出来ると言っている これは関数合成ではなくg(x)を評価した結果を引数にしてfを評価しているだけであって関数を合成する処理ではないよと返した さらにその返しとして関数ポインタを使えば良いというよくわからない返事が来たのでレス番間違ってないか?って聞いたの 関数ポインタを使ってf(g(x))の表記でfとgを合成するにはどう書けば良いんだろうね 当然だけど|を使った表記より実装がシンプルになってバグがなくなるんだよね君のポリシーからすると
- 725 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:41:08.17 ID:aAAtYBE2.net]
- >いちお、確認するか…仕様書は…ない
>ならソースみよか…(10秒ほど定義を眺める)…うん、さっきの解釈で良いみたいだね ドキュメントがそろってない場合、実際にはオーバーロード関数の実体を見つけるだけでも 一苦労で、10秒どころじゃ済まなかったりするけどな。 初見のコードだと結局デバッガで追いかけるのが一番早かったということも。
- 726 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:46:00.43 ID:aauDOAhV.net]
- >>700
> 関数ポインタを使ってf(g(x))の表記でfとgを合成するにはどう書けば良いんだろうね それが>>595だろ。 > 関数合成の例だってまともに仕事してるcppプログラマならなんの苦もなくよめる(>>687) 流に言えば、まともに仕事してるCプログラマなら何の苦もなく読める。 > 当然だけど|を使った表記より実装がシンプルになってバグがなくなるんだよね はい。 上記の通り、君の定義の「まともなCプログラマ」なら一瞬で読めるし、 少なくとも | を使っている時点で他の人と組み合わせたらバグを誘発するからアウトだよ。
- 727 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:51:44.43 ID:FGg7v3h+.net]
- >>699
すまない わかってるならいいんだ 君の書いた線形結合かつ再利用の機会の少ない場合に限定したレスを読んでこっちが勝手に一般的な話に拡大してしまっただけだから 線形結合だけできてもまあ確かにそんなに嬉しくはないよね Boost.Lambdaみたいなライブラリの一部として組み込まれてるならともかくね
|

|