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 が建てる事。 建てられない場合は他を指定する事。
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みたいなライブラリの一部として組み込まれてるならともかくね
728 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:54:11.92 ID:aauDOAhV.net] >>701 君と俺は反対ではないけども、補足をすると、俺が思うに、 「直感的に見たとおりの演算子/メソッドじゃないとオーバーロードしてはいけない。」 いちいち確認する必要があるのなら、そこにベタで書いてあった方がすぐに辿れていい。
729 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:57:16.07 ID:wePFQlkp.net] 捨て台詞吐くぐらいなら絡んでこなきゃいいのに...
730 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:57:23.23 ID:FGg7v3h+.net] >>702 それ合成してないじゃん 関数f,gを合成して名前はなんでも良いけどhを作ろうって話してんの
731 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 16:10:13.27 ID:aauDOAhV.net] >>703 いや先にIDを読み間違えたのはこちらの方だ。 これは俺が悪かった。 > Boost.Lambda 見てみたが、一覧表がないから使えるものかどうかはよく分からん。 ただ俺はこういうのを使うのは賛成、自前で用意するのは反対。理由は、 ・バグがない。あったとしても向こうが勝手に直してくれる。 ・「普通」の仕様になっているはず。オレオレ演算子アサインはない。 >>706 「まともなCプログラマ」ならそれも一瞬で書けるって事だよ。 ただし見た目は>>595 的になる。それを「汚い」とするかはその人次第。
732 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 16:28:44.65 ID:FGg7v3h+.net] >>707 すまない 関数ポインタの件がよくわからないのだけどサンプルコードはないだろうか typedef int (*p_func_t)(int); とあったときに p_func_t f = ...; p_func_t g = ...; int x; p_func_t h = f(g(x)); と表記してfとgを合成できるような方法があるってことだよね?
733 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 16:53:20.94 ID:jkLbSgMw.net] 俺は関数オブジェクトを使うのによい例を具体的なコードを示して挙げたつもりなわけだが その例がクソだというなら同じ題材で「まともなCプログラマ」ならどう書くのか プログラマらしく俺と同じようにideoneにでもコードをあげてほしいよね いいかげんそうしないと利点欠点の議論ができない そもそも彼の言っていることがプログラムで実現できるのかも分からないのが現状だしね
734 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 17:41:34.45 ID:ROqN57Sm.net] レガシーな話は別の場所で。
735 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:37:00.85 ID:4fupdPv1.net] そろそろc++スレへ
736 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 20:32:46.30 ID:ruQ48W5a.net] >>682 ちいさな中空の○のことだろ 数学でよ〜く使う奴
737 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 21:54:50.86 ID:QFl4EKwL.net] f∘g
738 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 04:19:54.47 ID:uOsaIQNY.net] 何時もfまるgって読んでるけど正式な読み方は何なの?
739 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 06:05:41.66 ID:70nww6OY.net] この手の話題に電話越し実験とかというのがあったと思う 自分の思っている事を電話越しに話すことを想定して、 相手に伝わらない記号や概念が思い当たったら使うなって話
740 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 07:58:56.85 ID:K13Pj3xV.net] >>714 それで正しいみたい izumi-math.jp/sanae/report/suusiki/suusiki.htm www.comp.tmu.ac.jp/yosihiro/teaching/how-to-read.pdf
741 名前:デフォルトの名無しさん [2016/10/04(火) 10:32:58.48 ID:7zrfyEQB.net] みんなUIフォントを何にしてる? メイリオがいいよね?メイリオがいいよね?
742 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 10:34:40.02 ID:reFXN9x4.net] 理由がないかぎりデフォのまま
743 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 10:53:11.92 ID:6+Zayg+b.net] ふらっととマルチとか他人に共感してもらわないと不安になる病気か
744 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 10:58:30.13 ID:s22xkPru.net] 901 名前:デフォルトの名無しさん (アウアウ Sa17-RPp1)[sage] 投稿日:2016/10/04(火) 10:32:30.59 ID:2uMugtE2a みんなUIフォントを何にしてる? メイリオがいいよね?メイリオがいいよね?
745 名前:デフォルトの名無しさん [2016/10/05(水) 23:55:13.72 ID:+0VoUMKr.net] C#勉強始めたんですが、初心者がだいたいつまづくポイントってどこだと思いますか?
746 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 00:04:15.38 ID:7nh5q1fN.net] デリゲートかなあ
747 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 00:15:35.85 ID:4kR5N43K.net] プログラミング経験ないなら参照型と値型で必ず絶望する 経験あるならデリゲートかな
748 名前:デフォルトの名無しさん [2016/10/06(木) 00:32:29.25 ID:zO3yIj3z.net] >>722-723 ありがとうございます 今まさにデリケートでハマってます。。 使い方?使いどころ?を共感できないとうやむやでしょうがないです
749 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 00:39:52.90 ID:rwN2Tml/.net] デリゲートとかめったに使わないコールバックでしか使ったことがないな 代入かと思っていたら参照だったで面倒なことになった事はある
750 名前:デフォルトの名無しさん [2016/10/06(木) 00:45:11.41 ID:TGE1GIM6.net] 今時は直接delegateで宣言するようなことはなくなったから 概念は知っておいて、ラムダ式と Action<T>とかFunc<T>の実用例覚えとけばいいんじゃないですかね
751 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 00:49:47.22 ID:4V0JRI8n.net] GDI+の機能にかなり頼っていていろいろハマったw >>726 他の人のソースを参考にしようとしてネットで調べているとdelegateは割と見かける そのときに解釈するのにハマるかもw
752 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 01:27:48.67 ID:fMQ+lBRM.net] デリゲートとラムダを滅多に使わないって珍しいね C#1.0とか2.0の現場なのかな