[表示 : 全て 最新50 1-99 101- 2ch.scのread.cgiへ]
Update time : 07/20 19:40 / Filesize : 50 KB / Number-of Response : 114
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

オブジェクト指向システムの設計 172



1 名前:uy ◆e6.oHu1j.o [2016/07/09(土) 00:35:13.95 ID:Mn3UGZ+O.net]
前スレ
オブジェクト指向システムの設計 171 [無断転載禁止]©2ch.net
echo.2ch.net/test/read.cgi/tech/1465636703/

86 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 09:37:32.17 ID:2JhFq5Nw.net]
>>84
> .Netにも例外を投げるInt32.Perseと投げないInt32.TryPersreの2種類があるし

名前が重要なんだよ。(ちなみにParseな)

例外を使ったときのメリットは、関数の名前通りの戻り値にできるってこと。

Parseはパースするんだよ。だから戻り値はパースした結果であり
エラーを戻すことはない。パースできなければ例外。

TryParseはパースすることをトライするんだよ。だから戻り値はトライした結果。
もしトライすることすらできなければ、それは当然例外。

その2つは、例外を投げるかどうかの違いじゃなくてやる処理の違い。
そしてどちらもやるべきことができなければ、例外を返す。

87 名前:デフォルトの名無しさん [2016/07/13(水) 19:05:13.08 ID:OE4fGXcq.net]
そんなに力説するほどの事か?w

88 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 21:38:19.72 ID:2JhFq5Nw.net]
>>87
これは力説するほどのことだよ。
なぜなら可読性の話だから。

英語わからんとか、ソースコードを命令の並びだとかしか
認識してないレベルの人にはわからないだろうけど、
ソースコードは読むもの。

読みやすさを大きく左右する要素の一つが、
適切な名前をつけているかどうかだから。

たまに適当な関数名つけてる人がいるけど、ほんとやめてほしい。
適当な単語を並べただけじゃソースコード読めないから。
名前から意味がわからないから、中の処理を読んで解析しないといけなくなる。

89 名前:デフォルトの名無しさん [2016/07/13(水) 21:54:55.05 ID:OE4fGXcq.net]
それなら問うが
Parseが返すパーズした結果とは何ぞや?
TryParseが返すトライした結果とは何ぞや?
俺には名前だけではさっぱり分からんのだが
これがお前の望む適切な名前とはとても思えんのだがw

90 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:01:55.88 ID:lnUCd6s/.net]
>>89
友情努力勝利に決まってるだろ

91 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:31:57.93 ID:oLxbX2RO.net]
正直TryParseで変換できちゃうのはちょっと気持ち悪い

92 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:44:01.74 ID:uq0wU9fp.net]
>>84
例外をエラー通知として使う分にはその辺は知らなくていいんだよ。
ただ、例外で復旧させようとするのなら、その辺を全て把握する必要がある。
そして彼等はそれにも耐えられるようにSTLを整備しようとしている。
それは無駄なコストを発生するから、それについて彼等も議論しているわけだ。

ただ、今見た限りはまだ環境が追いついていないね。(ドキュメントが出来ていない)
偶々このページを見ていただけだから、unordered_map自体に意味はないけど、
en.cppreference.com/w/cpp/container/unordered_map
個々のメソッドには例外発生時の動作が書いてあるけど、本体のページに纏まっていない。
だからunordered_mapを使ったらどの例外安全になるのかを確認する為には、
全部のメソッドを確認するしかない。
大半の奴は確認もせずに「例外を使った方が安全です」と信じているだけだろう。

例外を活用しようとなると、既に書いたように、大ジャンプを避けられない。
その場でいちいち判定するだけなら、余計に汚らしくなるだけだ。
ただしこれについては速度面ではtry/catchの方が上だと指摘されているし、
表面上のコード量では確かにそうだ。
とはいえ、x86に於いては分岐予測+投機実行なので、
ほぼ常に通らないパスのif-elseifについては、
気になるのなら1段目で切ってしまえば速度低下はしない。(if (result>0))

93 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:44:36.15 ID:uq0wU9fp.net]
> 必要があれば戻り値のエラー通知を部分的に使うのはかまわないと思うよ
個人的にはTryParseをよく使っている。それで十分だから。
必要性はない。try/catchでも書ける。

戻り値判定の場合は、その場での処理が強要される。
結果、65の上司型のコードしか書けない。
実際にあのコードを戻り値判定に変換するのも簡単だ。
この使い方をする場合は好みの問題でしかない。

一方、例外を用いれば、65がやろうとした「積極的にthrowして統合的に扱う」ことも出来る。
戻り値判定でこれをするのは大変なことになるので、これをしてこそ活用だと言える。
とはいえ、これがろくな事になる気配が全く感じられない。

ちなみに、言語的な例外復旧能力に必ずしも頼る必要はない。
上位レベルでの復旧も実は簡単だからだ。
例えばTryParse、ファイルから読むのならソースは保持する必要がない。
Seek出来ないネットワークストリーム等なら、MemoryStreamに一旦受ければいい。
JSONみたいに階層ありオブジェクトを丸々生成するのなら、成功した後に差し替えればいい。
これらの場合は、ロールバックを上位で行うことはほぼ自然に出来てしまうので、
結果的にSTLが実装した例外機構の為に無駄に税金を払う事にしかならない。
この点を修正しようというnoexceptはC++っぽくていいが、
なるほどこんな事をやっているうちは生Cを駆逐することは出来ないだろう。

94 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:45:05.83 ID:uq0wU9fp.net]
生Cはある意味世界がno-fail保証されている。
そして失敗した場合は上記のように自前で戻すか、諦めるしかない。単純な話だ。
ロールバックする気なら、この点については例外で処理した方がコード的には楽だ。
しかし実行効率ではどうやっても生Cの方が上になる。何もしてないコードだからだ。
生Cは世界が単純に出来ている。あまり気にしたことはないが、これは大きな利点だね。
言語がシンプルな結果、シンプルな記述を強要され、結果的に65のようなコードを記述出来ない。
65みたいな「考えすぎておかしくなっている奴」には生Cギプスが効くかもしれない。

> .NetだとSystem.Diagnostics.Contracts
以下を見る限り、型についてのTDDみたいな感じだな。
静的チェックが出来るのはいいね。ただ、流行るかと言われれば微妙かな。
https://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970

> C++ Either
以下でいいか?
faithandbrave.hateblo.jp/entry/2014/05/30/153325
つまりは例外を呼ばずに値として埋め込みたいだけか。
関数型で組んだ場合には個々の要素で例外呼ばれても困るから、そりゃこうなるだろう。
そういった意味ではC++の例外機構は「手続き型」にしか対応してないね。
そこですぐ呼ばれる前提だ。

他の関数型言語の例外機構ってどうなっているんだ?知ってたらよろしく。
Haskellがこの手で値埋め込み、後でユーザ側で確認するというのは分かった。
なおJavaScriptは0割は無限大になるというお気楽仕様だ。
当初は驚いたが、正直これで問題ないよなとも思う。



95 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 22:58:10.35 ID:2JhFq5Nw.net]
>>89
> Parseが返すパーズした結果とは何ぞや?

正しくはInt32.Parseなんだから当然Int32だろw
Int32に変換した結果を戻す
(変換できなければ戻さない)

> 俺には名前だけではさっぱり分からんのだが

あー、うん。クラス名が先に作ってことに
気づかなかったのねw
>>86で引用してる>>84にかいてあんだろ。
気づけよw

96 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:09:44.65 ID:jyyAd6hv.net]
Int32.Parse だからといって、必ずInt32が返るとは限らないだろ
おまえは、human.age()で必ずhumanが返ると考えるか?

97 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:11:23.52 ID:2JhFq5Nw.net]
>>94
> なおJavaScriptは0割は無限大になるというお気楽仕様だ。

いや、お前、例外っていったら0除算しか思いつかんのかよw
eval("{") とか実行してみろ。JavaScriptは例外を使う言語だ。

0以外の数値を0で割ったら無限大になるのは数学的に正しい。
JavaScriptが無限大を扱える言語ってだけだ。
もちろん数学的に正しいことをやっているから、 0 / 0 は NaN (非数)になる。
少なくともこの点は、お気楽ではなく高度な言語だと言える。

もっともJavaScriptに例外が搭載されたのはJavaScript 1.4(1999年あたり)からだけどな。
それ以前は(エラーを戻り値で返すのではなく)スクリプトが停止され
window.onerrorイベントが呼ばれたんだっけな?もう忘れたが。

98 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:11:30.03 ID:jyyAd6hv.net]
いっとくが、human.age()で必ずintが返るとは限らないからな
もしかしたらageオブジェクトが返るかもしれないからな

99 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:12:49.31 ID:2JhFq5Nw.net]
>>96
> Int32.Parse だからといって、必ずInt32が返るとは限らないだろ
> おまえは、human.age()で必ずhumanが返ると考えるか?

Parseとageで関数名が違ってるじゃんw
名前で返すものが決まるって言ってんだろ。

human.parseだったら、human返すんじゃねーの?

100 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:13:53.29 ID:jyyAd6hv.net]
>human.parseだったら、human返すんじゃねーの?

そんなの思い込みだろ
ヒューマンパーズオブジェクトが返るかもしれないだろ

101 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:18:25.58 ID:2JhFq5Nw.net]
>>94
> 他の関数型言語の例外機構ってどうなっているんだ?知ってたらよろしく。

関数型で戻り値でエラー情報なんか返したら
大混乱になるわw

関数呼び出しの中の、関数呼び出しの中の、関数呼び出しの中の、関数呼び出し で
エラー情報が返ってきたら、if式による分岐の嵐でもはや
関数型言語のように見えないだろうね。

102 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:22:40.62 ID:2JhFq5Nw.net]
>>100
> ヒューマンパーズオブジェクトが返るかもしれないだろ

ほらね? 何が返るか想像できてるじゃんw

Int32.Parseじゃ何を返すかさっぱりわからないって言ってるから
それが間違いだよって話。

なにも100%完全に返り値の情報がわかるなんて言ってないんだよw

103 名前:デフォルトの名無しさん mailto:sage [2016/07/13(水) 23:36:52.14 ID:C7S+nyqs.net]
型を見りゃいいだろ

まさかこのスレに居ながら、屁臭いペチプ〜やゴミのペールやペールの糞からひり出されたルビーや・・・そんな糞まみれのウンコ野郎はおるまいね?

104 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 00:31:59.76 ID:4Ps/X1K6.net]
>>102
いやお前それ苦しいだろ

>ほらね? 何が返るか想像できてるじゃんw

想像?
思い込みでしょ
ヒューマンパーズオブジェクトが返るかもしれない、とは書いたが
実際には何が返るかわからないから、そう書いただけであって
どうせ、仕様を調べなきゃならないんだよ



105 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 01:02:32.63 ID:9qkjMq+e.net]
>>104
言うと思ったw

でお前これから先仕様なんて調べるの?
調べないよね。もう覚えてしまったから。
あとは文字を見れば思い出すはずだ。

適切な名前があると覚やすいっていうのはこういうこと。

106 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 01:31:15.59 ID:rhZMoeJF.net]
>>101
>関数型で戻り値でエラー情報なんか返したら
>エラー情報が返ってきたら、if式による分岐の嵐でもはや

ifの分岐しないためにfunctorだのアプリカティブだのmonadだのtraverseがあるじゃん?
try1 >=> try2 >=> try3 >=> ... tryN
みたいので「成功するまで処理を続けて失敗したら例外情報をもって途中で抜ける関数」を作れるし
こういう合成力は関数型の強み

107 名前:デフォルトの名無しさん [2016/07/14(木) 06:27:39.21 ID:cfi8dg7p.net]
自分の思い込みの通りなら良い設計良いコードw

108 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 07:26:28.53 ID:xgZTwt3g.net]
正しく意図した通りに騙してくれるなら
明らかに良いコードだろ
頭のてっぺんからケツのシワまで数え上げてようやく読解できるコードが糞じゃなきゃ何なんだ

109 名前:デフォルトの名無しさん [2016/07/14(木) 07:44:38.40 ID:cfi8dg7p.net]
クソの主観によりクソ認定されたコード達w
本当は良い奴も沢山いただろうに不憫だわーw

110 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 08:31:57.85 ID:qme/E7bl.net]
車輪の再発明しか出来ない人がいると聞いて。

111 名前:デフォルトの名無しさん mailto:sage [2016/07/15(金) 23:14:34.82 ID:/IkQTUfk.net]
DAO とかDTO ってのが出てくるアーキテクチャは手続き型であって、オブジェクト指向ではない

ってのが解る人ここにいるか?

112 名前:デフォルトの名無しさん mailto:sage [2016/07/15(金) 23:20:25.90 ID:sS/v2c9e.net]
そんな嘘ついちゃいけないんだお

113 名前:デフォルトの名無しさん [2016/07/15(金) 23:39:15.88 ID:iR/HdeCl.net]
今の日本人は>>111みたいな馬鹿が普通なんだお






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<50KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef