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 が建てる事。 建てられない場合は他を指定する事。
610 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 11:10:40.15 ID:RDlboUCA.net] Cって静的言語だから型は同じじゃないの?
611 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:45:21.87 ID:wFbSwOZd.net] 汎用デリゲートのEventHandlerを使用した場合のメリットについて教えてほしいのですが、これを使用するとデリゲート定義の1行を省けることを超えるメリットはあるのでしょうか?
612 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:43:08.72 ID:t2Y8uX7u.net] >>590 発想が逆立ちしてるよ。 普通は、標準で用意された方法を超えるメリットがないのであれば あえて独自のデリゲートを使う理由はないと考えるんじゃないの?w それって車輪の再発明そのものだよねw
613 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 18:34:02.96 ID:1e7C4OQD.net] いやまて、イベント以外のデリゲートに使おうとしてるのかもしれんぞw
614 名前:デフォルトの名無しさん [2016/09/28(水) 18:55:03.29 ID:wFbSwOZd.net] そうか、標準のもので済めばそれを使うのが当然なのか 根本が間違ってた ありがとう
615 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 15:45:21.13 ID:GKXbaAQ5.net] >>569 それを汚ないと感じる人と 美しいと感じる人もいるんじゃないか?
616 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 18:05:53.95 ID:42KzZhvK.net] >>594 void (*signal(int sig, void (*func)(int)))(int); 美しいかどうかは美的感覚の問題だから人それぞれとしか言えないが、 少なくとも俺は上みたいな宣言を見せられたとき、これが何を意味しているのか 瞬時には理解できない。 「汚い」っていうのはそういうことを表現したつもり。
617 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:40:25.50 ID:wDlER99I.net] kmaebashi.com/programmer/pointer.html これを読んだうえでCのポインタの文法が美しいと感じる奴がいたら逆に凄い
618 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:54:22.23 ID:iqK/HxMj.net] コード見たときにそれが何を指してるのか分かりやすいのはCの方だな
619 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 20:14:20.56 ID:/kH+f7Ja.net] >>595 ああああああ なつかしいいいいい UNIXもしくはLinuxか何かでみたぞおおおおおお もう絶対こんな仕事に戻りたくないぃいいいいいい
620 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 20:22:33.12 ID:1Mz/tgYS.net] コードの動作が分かりやすいのはC コードの意図が分かりやすいのはC# 言語の差というより、コードをマシンへの命令と考えるかプログラマの意図を表現するものと考えるかという意識の違いが大きいと思う do if (*src != ' ') *(dest++) = *src; while (*(src++)); Cはこういうの平気で書き散らす基地外が多い
621 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 20:29:29.53 ID:/kH+f7Ja.net] K&Rの時代は終わったんだよ
622 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 21:34:42.13 ID:IEWEZKBK.net] 20年前にFM-TOWNS()でCから入ったが今の時代にガキだったらCだのC++だのは一切触らなかっただろうなーと思う かといってphpやjavascriptから入るのはアレだしc#最高^^
623 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 21:37:33.67 ID:o/Z16MWz.net] >>599 いやそのコードはおかしいけどな。多分以下。 while (*src!=0) *dest++ = *src++; それをキチガイというのは自由だが、Cならこれを読めない奴は馬鹿扱いだよ。 初心者は常に「自分の読めないコードは、コードが悪い」としか言わないのだけど、 実際はその初心者の技術レベルに問題がある場合の方が多い。 599はこれだね。
624 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 21:57:51.11 ID:iqK/HxMj.net] 読めないのは馬鹿ってのは同感 そういうのを書き散らすのは基地外ってのも同感
625 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:01:24.13 ID:1Mz/tgYS.net] >>602 いや599はスペースを除去してるんだけどな 正直わざと分かりにくく書いたから602の技術レベルを疑うつもりはないけど、 分かり難さを証明してくれてどうもありがとう
626 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:02:54.74 ID:Js+ntQYt.net] >>602 完全にスレ違いだけど、そういう同じポインタを2回手繰ってるのって コンパイラは最適化してくれるのかな。 っていうか while ((*dest++ = *src++) != 0); って書いても読みやすさは変わらないと思うんだけど
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とかあたらしいのわたしよくわからないので禁止!といったようにバカがわからないというだけで、自作の便利なライブラリどころか、標準的なライブラリすら使えなくなってしまう 世間的には同じプログラマとして分類されるけど生きる世界が違うんだよ