- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
671 :デフォルトの名無しさん[sage]:2016/10/02(日) 12:07:04.04 ID:aauDOAhV - >>667
それって記法上のメリットしかないだろ? だってベタに書こうと思えば書けるし、大した手間でもない。 だからそういう糞ユーザーの「俺カッケー」を出来なくしてあるのがC#だよ。 inline f f1(f2(3)) 3*f2(3) 3*f1(3)+2*f2(3) そのコードはテンプレート部(40行目以前)が完全に動くならそれでいい。 ただしそれが保証出来ないのなら、いちいち見ないといけなくなる。 つまり糞ユーザーの「俺カッケー」に付き合わされることになる。 そういうのが開発効率を落とすと判断し、C#は出来なくしてある。 そういうのも含めて全部出来るようにしているのがC++。 C#の判断も一理ある。だから賛同するならC#を使えばいい。 いやならC++を使えばいいだけ。 このケースに関しては、やっていることはOOPスレの10と同じ。 http://echo.2ch.net/test/read.cgi/tech/1467992113/10 便利なことをしているつもりが余計に手間を増やしている。 初心者はこの判断が付かないんだよ。だから1行/1文字でも減らそうとする。 なお俺はその記法について文句を言っているわけではない。 それがシステム側で「バグのない物」として提供されていれば、使えばいい。 ただ、オレオレ記法をしたいだけの為にバグがあるかもしれない物を出されたらウザイだけ。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
676 :デフォルトの名無しさん[sage]:2016/10/02(日) 12:57:57.60 ID:aauDOAhV - >>673
数学の合成関数は f(g(x)) だろ。アホなのか?
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
677 :デフォルトの名無しさん[sage]:2016/10/02(日) 13:07:15.54 ID:aauDOAhV - >>673
なお俺はトリッキーだとは言ってない。 バグを誘発する糞コードを読まされる手間が増えるだけだからウザイと言っている。 その件に関してはベタで書いた方が「全体的には」楽だろ。それだけ。 初心者はこの「全体的」が分からないから局所的な最適化コードに異様にこだわるだけ。 それだけで済んでいればいいけど、通常はそれだけじゃ済まないんだよ。 そして泥沼化するから、C#では最初から禁止している。それだけ。 まあ妥当だと思うよ。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
680 :デフォルトの名無しさん[sage]:2016/10/02(日) 13:34:10.10 ID:aauDOAhV - ちなみにC#からの見方に変えると、
C#の開発時には既にC++があったわけだから、 templateの有効性や演算子オーバーロードの利便性を知らなかったわけではない。 ただ、馬鹿が調子こいて余計に手間が増えることの方が多いと判断したから、落とした。それだけ。 「出来る」ことと「便利になる」は別なんだよ。だから結局の所プログラマ次第。 そして「自前クラス」まで禁止するとstaticおじさんになるというわけさ。 これについてはJava側からの視点で批判的な物が多いけど、 おかしなクラス構成ばかり見せられたら自前クラスも禁止したくなるだろ。 実際、OOPスレ10に対してなら 「お前がクラスを作ることは禁止、どうしても欲しければ相談しろ」というのも現実的な線だよ。 要するにメタプログラミング系は本来は熟練者しか使っちゃいけないのさ。 初心者が「template使える俺カッケー」をするからおかしな事になる。 それってtemplateを使うこと、或いは短く書くことが目的になってるだろ。 手間を減らすこと、コンパクトに書いて規模の限界を緩和することを目的にしろって事だよ。 (クラスも程度は軽いけど結果的に自前フレームワークを用意するという点でメタプログラミングと似ている)
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
682 :デフォルトの名無しさん[sage]:2016/10/02(日) 13:41:46.38 ID:aauDOAhV - >>681
てかお前数学知らないだろ? ○って何?ドットなら関数内積で、合成関数ではないぞ。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
683 :デフォルトの名無しさん[sage]:2016/10/02(日) 13:43:56.45 ID:aauDOAhV - あ、2chで表示できないのだろうからunicodeで頼むわ。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
686 :デフォルトの名無しさん[sage]:2016/10/02(日) 14:03:39.03 ID:aauDOAhV - >>684
ああこちらでも確認した。そういう表記をすることもあるようだ。 俺は知らんが。 ただ、そういうのを | で代用するようなことをするから演算子オーバーロードは駄目なんだよ。 それが欲しければ、そのコードをそのまま使わないといけない。 そうじゃないと、お前のオレオレクソコードを全員が読まないといけなくなるだろ。 例えばJavaScriptなら、ソースコードはunicodeなのでそれが出来る。 function ○(func0, func1){} だからその件に関する正しいやり方は、unicode版C++で○を演算子としてサポートすることだ。 ただ、f(g(x))と書けばいいだけのことを新しい演算子を定義するのは無駄だ。 だから現実的にはunicode版C++で○をマクロ等で合成関数に置換することだろう。 (unicode版C++があるかどうかは知らん)
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
691 :デフォルトの名無しさん[sage]:2016/10/02(日) 14:25:11.07 ID:aauDOAhV - >>687
なんかC++の奴らは「選民思想」を持っているようだけど、それは違うと思うんだよ。 そのコードを書いた時点で、バグがある可能性が残ってしまう。 だから見ないといけない。俺はこれが嫌なんだよ。 コード自体は「打ち間違いがない」という前提でなら10-30秒程度だよ。中身は何もやってないから。 だからそれが既に実績のあるライブラリとして提供されていて、その中身の確認ならまあいい。 ただしそれを自前で書かれたら、詳しく確認しなければならないし、全てに当てる検証も必要になる。 そして得られるメリットはちょっと短く書けるだけ。 これは明らかに手間が増えているだろ。 .NET公式で関数合成の演算子として提供されていれば、それを使うことに問題はない。 仮にバグがあったとしても公式側が修正してくれる。(中身の実装について見る必要がない) 自前で書いたら上記の通り手間が増えるだけ。だったらベタで書いた方がマシ。 基本的にC#は「馬鹿が使う」ではなく「ここら辺まででいいよね」という思想だとおもうし、 その判断自体も割と妥当だとは思う。ちょっと窮屈な点はあるけど、致し方なし。 なお俺はC#派ではなくかなりC寄りのC++派ね。(お前らがbetter-Cと言っている奴) これとは別に、「馬鹿でも使える言語」として使っている奴もいるし、 そいつらが調子こいているのも事実だけど、それは別問題。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
693 :デフォルトの名無しさん[sage]:2016/10/02(日) 14:28:49.54 ID:aauDOAhV - >>689
関数ポインタを返せばいいだけだろ。 いずれにしてもtemplateは静的展開なんだから、ベタに書けない処理はないだろ。 ベタに書くのがいいか、テンプレートを使うか、 これを検証まで含めた「手間」基準で判断しろというのが俺の意見。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
696 :デフォルトの名無しさん[sage]:2016/10/02(日) 15:00:21.56 ID:aauDOAhV - >>694
お前がそう思うのならそれでいいじゃん。 俺は「手間」がかからない方を選ぶ。それだけ。 関数の線形結合なんて普通のプログラミング(例えばブラウザ等の製作)では不要だろ。 だから俺はそれにオーバーロードなんてしないし、必要ならベタに書く。 普通のプログラミングで、その線形結合って何回使うと思っているの? 余程数学的なことをするのであれば関数の線形結合も必要になるのかもしれないけど、 そういうところは既にライブラリなりフレームワークが用意してあり、 演算子も既にオーバーロード済みだったりすると思うよ。 とはいえ、俺とお前は特に何の関係もないわけで、別にお前がそうすることを止めはしない。 それをOSSとして公開してあれば、「馬鹿がいきがってるな」と思うだけ。 そういう俺に対してお前が「馬鹿だな」と思うのも自由だよ。 そういう意味ではいい時代になったね。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
697 :デフォルトの名無しさん[sage]:2016/10/02(日) 15:08:10.02 ID:aauDOAhV - >>695
間違ってない。 > 関数を合成する (>>689) に対して「関数ポインタを返せばいいだけ」 俺が671で > 関数の評価 つまり値を算出したのが気に入らなかったんだろ? Cでも「関数ポインタを返す関数」というのは普通に定義出来る。 関数合成ってのは別に難しい話でも新しい話でもない。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
699 :デフォルトの名無しさん[sage]:2016/10/02(日) 15:30:13.53 ID:aauDOAhV - ああすまん、696はレス相手を勘違いしていた。
>>694向けに再度書き直す。 >>694 それは単にDRYなりOAOOだし、基本中の基本だろ。 今更何を言っているんだ? 俺は無駄なコードを書くなと言っているだけ。 使いもしない演算子オーバーロードのコードとかね。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
702 :デフォルトの名無しさん[sage]:2016/10/02(日) 15:46:00.43 ID:aauDOAhV - >>700
> 関数ポインタを使ってf(g(x))の表記でfとgを合成するにはどう書けば良いんだろうね それが>>595だろ。 > 関数合成の例だってまともに仕事してるcppプログラマならなんの苦もなくよめる(>>687) 流に言えば、まともに仕事してるCプログラマなら何の苦もなく読める。 > 当然だけど|を使った表記より実装がシンプルになってバグがなくなるんだよね はい。 上記の通り、君の定義の「まともなCプログラマ」なら一瞬で読めるし、 少なくとも | を使っている時点で他の人と組み合わせたらバグを誘発するからアウトだよ。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
704 :デフォルトの名無しさん[sage]:2016/10/02(日) 15:54:11.92 ID:aauDOAhV - >>701
君と俺は反対ではないけども、補足をすると、俺が思うに、 「直感的に見たとおりの演算子/メソッドじゃないとオーバーロードしてはいけない。」 いちいち確認する必要があるのなら、そこにベタで書いてあった方がすぐに辿れていい。
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
707 :デフォルトの名無しさん[sage]:2016/10/02(日) 16:10:13.27 ID:aauDOAhV - >>703
いや先にIDを読み間違えたのはこちらの方だ。 これは俺が悪かった。 > Boost.Lambda 見てみたが、一覧表がないから使えるものかどうかはよく分からん。 ただ俺はこういうのを使うのは賛成、自前で用意するのは反対。理由は、 ・バグがない。あったとしても向こうが勝手に直してくれる。 ・「普通」の仕様になっているはず。オレオレ演算子アサインはない。 >>706 「まともなCプログラマ」ならそれも一瞬で書けるって事だよ。 ただし見た目は>>595的になる。それを「汚い」とするかはその人次第。
|