エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
探検
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
158デフォルトの名無しさん
2019/01/17(木) 02:01:31.97ID:l+wuAult このスレ、初心者を見下す者ばかりだし、
何が 【初心者歓迎】だよ。
【初心者歓迎】はずせ。
そう言うと、「何にもそんなことしてないよ」
とか、レスが来る。
子供スレ。
何が 【初心者歓迎】だよ。
【初心者歓迎】はずせ。
そう言うと、「何にもそんなことしてないよ」
とか、レスが来る。
子供スレ。
159デフォルトの名無しさん
2019/01/17(木) 08:10:37.95ID:qOfK2eXQ optionalはヒープ使わないだけでnullと大差ない
せっかく静的にnot nulが保証されてるとこを壊してしまう
ほとんどアンチパターン
せっかく静的にnot nulが保証されてるとこを壊してしまう
ほとんどアンチパターン
160デフォルトの名無しさん
2019/01/17(木) 08:21:29.72ID:4hvMH0x4 業務でC++使ってない雑魚の意見なんて無視しろ
161デフォルトの名無しさん
2019/01/17(木) 08:22:23.19ID:4hvMH0x4 趣味でC++齧ってるやつと本気で仕事としてやってるやつじゃ格が違うんだよ
162デフォルトの名無しさん
2019/01/17(木) 08:22:55.36 C++では好きなだけ効率を犠牲にして安全を手にすることができる
効率を犠牲にして安全を手にすることを余儀なくされている言語とは区別すべきだ
効率を犠牲にして安全を手にすることを余儀なくされている言語とは区別すべきだ
163デフォルトの名無しさん
2019/01/17(木) 08:47:23.41ID:qOfK2eXQ 業務で使ってない素人は平気で例外禁則とか言って返り値チェックで死ぬほど汚いコード書くんだよな
164デフォルトの名無しさん
2019/01/17(木) 09:07:15.76ID:CHgbqTPA まぁ業務と違って趣味は時間を無駄につぎ込めるから
人によっては素人の方がレベル高かったりするけどな
そういうのと比較するのはホントやめて欲しい
人によっては素人の方がレベル高かったりするけどな
そういうのと比較するのはホントやめて欲しい
165デフォルトの名無しさん
2019/01/17(木) 09:09:21.72ID:4hvMH0x4 >>164
は?業務と趣味でやってる奴が一番最強
は?業務と趣味でやってる奴が一番最強
166デフォルトの名無しさん
2019/01/17(木) 10:35:25.89ID:iQ0t94Qh >>159
optionalの理解間違ってるよ
optionalの理解間違ってるよ
167デフォルトの名無しさん
2019/01/17(木) 10:39:29.94ID:iQ0t94Qh168デフォルトの名無しさん
2019/01/17(木) 12:13:15.88ID:oU9OMPiG 実際には例外を禁止するとバグが増えてメンテしにくくなるんだけどな
169デフォルトの名無しさん
2019/01/17(木) 13:51:39.37ID:l+wuAult そのソフトが気に入らないなら、
そのソフトを使わなきゃ良いだけだし。
そんなことも、いい年になって、わからないのか。
そのソフトを使わなきゃ良いだけだし。
そんなことも、いい年になって、わからないのか。
170デフォルトの名無しさん
2019/01/17(木) 14:34:02.57ID:DbtLCT5r このスレ卒業死体
171デフォルトの名無しさん
2019/01/17(木) 14:43:25.66ID:n6FY+cyG スレばいいじゃない
172デフォルトの名無しさん
2019/01/17(木) 15:55:58.66ID:K5aWd8xj setjmp 使えばよろし
173デフォルトの名無しさん
2019/01/17(木) 17:20:21.35 遂に中級者になるのか……
175デフォルトの名無しさん
2019/01/17(木) 20:47:04.58ID:iJuNblTy 浪人で消してるんでっしゃろ
176デフォルトの名無しさん
2019/01/17(木) 21:54:16.18ID:yb/OKoP7 単なるエラーを返すのに例外機構みたいな大域脱出って牛刀感あるよな。
177デフォルトの名無しさん
2019/01/17(木) 22:25:28.97ID:zQ8cL02f エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
スローすれば僅かな労力で安全に済むところをわざわざ戻り値にするのは事を大げさにするだけ
スローすれば僅かな労力で安全に済むところをわざわざ戻り値にするのは事を大げさにするだけ
178デフォルトの名無しさん
2019/01/17(木) 23:05:50.61ID:K5aWd8xj つ errno
179デフォルトの名無しさん
2019/01/17(木) 23:24:18.46ID:yb/OKoP7 なあに、例外のcatch漏れや例外安全を欠いていないか注意するのと比べたら
たいてい局所的に判断できるから大したことない。
>エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
検査例外じゃない例外機構でそれを保証するのも簡単じゃないと思うがな。
まぁ、一人開発で投げるのもcatchするのも全部把握しているという前提ならわからんでもないが。
たいてい局所的に判断できるから大したことない。
>エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
検査例外じゃない例外機構でそれを保証するのも簡単じゃないと思うがな。
まぁ、一人開発で投げるのもcatchするのも全部把握しているという前提ならわからんでもないが。
181デフォルトの名無しさん
2019/01/18(金) 00:49:25.33ID:HmTdANXo 実はキャッチ漏れは戻り値処理漏れよりはるかに少ない
戻り値処理はその場でエラー処理したくない場合にも一度変数に受け取って分岐を入れて呼び元に返すということを繰り返さなければならない
なので処理漏れを起こしうる確率が呼び出し箇所の数に比例して増えていくことになる
そして本当のエラー処理をしたい場所が隠れてしまいコードの可読性が低下する
可読性が低下すればミスがさらに増える
例外なら処理したくない場合は何も書かなくていいので間違えようがないので安心
またエラー処理をしたいまさにその箇所だけに処理を書けばいいのでコードの見通しが非常に良くなりミスも激減する
エラーコード戻し安全なコードを書くことは実は非常に難しい
エラーコードチェックのせいで無駄な変数と分岐が大増殖するので正確にシステムの状態を追うことが困難になりミスが増える
例外を使えばフローが非常に単調で綺麗になるので安全なコードを書くのも簡単になる
戻り値処理はその場でエラー処理したくない場合にも一度変数に受け取って分岐を入れて呼び元に返すということを繰り返さなければならない
なので処理漏れを起こしうる確率が呼び出し箇所の数に比例して増えていくことになる
そして本当のエラー処理をしたい場所が隠れてしまいコードの可読性が低下する
可読性が低下すればミスがさらに増える
例外なら処理したくない場合は何も書かなくていいので間違えようがないので安心
またエラー処理をしたいまさにその箇所だけに処理を書けばいいのでコードの見通しが非常に良くなりミスも激減する
エラーコード戻し安全なコードを書くことは実は非常に難しい
エラーコードチェックのせいで無駄な変数と分岐が大増殖するので正確にシステムの状態を追うことが困難になりミスが増える
例外を使えばフローが非常に単調で綺麗になるので安全なコードを書くのも簡単になる
182デフォルトの名無しさん
2019/01/18(金) 01:03:26.14ID:0w3MYNkW 同じ理由で、忌み嫌われてるgoto文も、実はけっこう便利だと思う
183はちみつ餃子 ◆8X2XSCHEME
2019/01/18(金) 01:11:53.91ID:ZqjXe4yq 正しく使えば何だって便利だし、
駄目な使い方をすれば何だって駄目だっていう
すごく当たり前すぎる話
駄目な使い方をすれば何だって駄目だっていう
すごく当たり前すぎる話
184デフォルトの名無しさん
2019/01/18(金) 08:10:56.74ID:VfzPRVfV185デフォルトの名無しさん
2019/01/18(金) 08:14:02.62ID:BmxrQ6cX >>180
それが検査例外じゃないかな。
いろいろ批判もあるけど、例外の内容に応じてそれぞれ異なるリカバリを確実に行うことを
保証する手段としては今のところそれ以外無いかなと思う。
まぁ、erlang/swiftあるいはgoのpanicのように、エラーの種類なんて気にせず「この下の
処理が失敗した」とだけ捉えるのが例外の扱いとして妥当なところかも。
それが検査例外じゃないかな。
いろいろ批判もあるけど、例外の内容に応じてそれぞれ異なるリカバリを確実に行うことを
保証する手段としては今のところそれ以外無いかなと思う。
まぁ、erlang/swiftあるいはgoのpanicのように、エラーの種類なんて気にせず「この下の
処理が失敗した」とだけ捉えるのが例外の扱いとして妥当なところかも。
186デフォルトの名無しさん
2019/01/18(金) 09:51:47.22ID:LyFbxqMk >>181
使い捨てでないまともなプログラムはいたるところにエラーリカバリー処理が入る
つまり例外だといたるところにtry catchかつ外に投げる例外は誰がcatchするのか仕様が複雑
仕事で大規模なプロジェクトに関わったことない人はこういうのが理解できていない
使い捨てでないまともなプログラムはいたるところにエラーリカバリー処理が入る
つまり例外だといたるところにtry catchかつ外に投げる例外は誰がcatchするのか仕様が複雑
仕事で大規模なプロジェクトに関わったことない人はこういうのが理解できていない
187デフォルトの名無しさん
2019/01/18(金) 10:01:53.52ID:LyFbxqMk 例外押しのやつはどうせほとんどcatchせずにそのままexitさせてるだろ
exitするぐらいなら異常が発生した場所でabortする方がはるかにいい
確実にスタックダンプが残せる
exitするぐらいなら異常が発生した場所でabortする方がはるかにいい
確実にスタックダンプが残せる
188デフォルトの名無しさん
2019/01/18(金) 10:41:00.50ID:cHsPUmRi 例外が有用なのってネットワークとストレージのioぐらいという認識
それ以外で必要性を感じない
配列外アクセスとかで例外とばすなと思う
それ以外で必要性を感じない
配列外アクセスとかで例外とばすなと思う
189デフォルトの名無しさん
2019/01/18(金) 11:40:22.57ID:6lA8mErY >>188
そういうバグが原因の例外はcatchしなければいいんでは?
そういうバグが原因の例外はcatchしなければいいんでは?
190デフォルトの名無しさん
2019/01/18(金) 13:31:14.01ID:cHsPUmRi >>189
だから現実的にそういうのに例外をなげる仕様にありがたみがないでしょ
だから現実的にそういうのに例外をなげる仕様にありがたみがないでしょ
191デフォルトの名無しさん
2019/01/18(金) 13:49:33.80ID:6lA8mErY >>190
なんで?SEGVも起こさずに潜在的なバグとして残り続けるよりよくない?
なんで?SEGVも起こさずに潜在的なバグとして残り続けるよりよくない?
192デフォルトの名無しさん
2019/01/18(金) 13:57:52.52ID:cHsPUmRi >>191
自分でcatchするならtry catchがうざい
バグ扱いでcatchしないならそもそも例外投げずにpanicされた方が調査が楽
また下手にどこかでcatchされたらバグに気づかない危険性がある
以上の理由により
自分でcatchするならtry catchがうざい
バグ扱いでcatchしないならそもそも例外投げずにpanicされた方が調査が楽
また下手にどこかでcatchされたらバグに気づかない危険性がある
以上の理由により
193デフォルトの名無しさん
2019/01/18(金) 16:42:12.57ID:MrHOaa15 gotoなんか品質チェックに問答無用で引っ掛かる
194デフォルトの名無しさん
2019/01/18(金) 16:50:08.01ID:e8mi14LA お間抜けな品質チェックだこと
195デフォルトの名無しさん
2019/01/18(金) 17:34:28.42ID:dGgLcYHd ID:cHsPUmRi ってcatchで全ての例外がキャッチされると思ってるのか?
196デフォルトの名無しさん
2019/01/18(金) 17:42:49.84ID:e8mi14LA 例外が発生しました
「このPCの電源が入っていません」
「このPCの電源が入っていません」
197デフォルトの名無しさん
2019/01/18(金) 17:59:44.06 例外機構は誰がキャッチするのか別の問題を作った
問題先送りで日本人らしい
結局本質的には何の解決ももたらさなかった
例外機構はオカルトだったんだ。占いの類
問題先送りで日本人らしい
結局本質的には何の解決ももたらさなかった
例外機構はオカルトだったんだ。占いの類
198さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/01/18(金) 18:01:08.56ID:eisM0hGT 例外なくしてOS作れるか?
199はちみつ餃子 ◆8X2XSCHEME
2019/01/18(金) 18:48:44.03ID:ZqjXe4yq200デフォルトの名無しさん
2019/01/18(金) 18:57:17.35ID:X3ceYQ3H ダウソファイルのファイル名置換する簡単なプログラムをC++とC#で書いてみた(C++で作って、それ見ながらC#に変換した)
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。
201デフォルトの名無しさん
2019/01/18(金) 19:12:22.57ID:seZYByET if文使うな。
ということか?
ということか?
202デフォルトの名無しさん
2019/01/18(金) 20:07:49.64ID:BPWAMvDw リターンコードスタイルにすると
無駄な変数が増える
無駄な分岐が増える
エラーコード追加時に全ての呼び出し元を精査しなければならない
エラーに付随する情報を伝達する標準的な規則が存在しない
全ての正常系の処理にコードチェックのオーバーヘッドが追加される
ライブラリ内部で発生する例外への対処が困難(例外を基本としていれば容易に対処可能)
参照透過性が壊滅する
デメリットだらけ
無駄な変数が増える
無駄な分岐が増える
エラーコード追加時に全ての呼び出し元を精査しなければならない
エラーに付随する情報を伝達する標準的な規則が存在しない
全ての正常系の処理にコードチェックのオーバーヘッドが追加される
ライブラリ内部で発生する例外への対処が困難(例外を基本としていれば容易に対処可能)
参照透過性が壊滅する
デメリットだらけ
203デフォルトの名無しさん
2019/01/18(金) 20:59:01.43ID:BmxrQ6cX >エラーコード追加時に全ての呼び出し元を精査しなければならない
>参照透過性が壊滅する
例外ならそれが解決すると考えているならちょっとやばい。
>参照透過性が壊滅する
例外ならそれが解決すると考えているならちょっとやばい。
204デフォルトの名無しさん
2019/01/18(金) 23:06:15.78ID:BPWAMvDw >>203
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ
205デフォルトの名無しさん
2019/01/19(土) 01:49:00.66ID:gJ7zJmkH 参照透過性ってそういう意味だっけ?w
最近例外ない言語増えてる事実はどう考える?
最近例外ない言語増えてる事実はどう考える?
206デフォルトの名無しさん
2019/01/19(土) 07:07:12.07ID:+IqL7b8U207デフォルトの名無しさん
2019/01/19(土) 07:37:40.03ID:FscMnE/k まぁ、実際関係ないね。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。
208デフォルトの名無しさん
2019/01/19(土) 07:43:37.22ID:WVD5Mi4y 「呼び出し元を精査」とかプログラム内のデバッグに例外使ってるような書き方やね
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな
209デフォルトの名無しさん
2019/01/19(土) 08:51:08.36ID:fPDnzLoP 戻り値形式ではそもそも式として書けないから参照透過性もクソもないということをまずは理解しろ
int h(P const & p, Q const & q, Z & out_z) {
X x;
Int ret_f = f(p, x); // out ref x
if (is_error(ret_f)) return ret_f;
Y y;
int ret_g = g(q, y); // out ref y
if (is_error(ret_g)) return ret_g;
z = x * y;
return RET_OK;
}
↑例外を使わない下品すぎるコード
↓例外を使ったスーパーエレガントなコード
Z h(P const & p, Q const & q) { return f(p) * g(q); }
int h(P const & p, Q const & q, Z & out_z) {
X x;
Int ret_f = f(p, x); // out ref x
if (is_error(ret_f)) return ret_f;
Y y;
int ret_g = g(q, y); // out ref y
if (is_error(ret_g)) return ret_g;
z = x * y;
return RET_OK;
}
↑例外を使わない下品すぎるコード
↓例外を使ったスーパーエレガントなコード
Z h(P const & p, Q const & q) { return f(p) * g(q); }
210デフォルトの名無しさん
2019/01/19(土) 09:21:20.09ID:XwZdf3Vk Real Programmers Don't Use Exception.
211デフォルトの名無しさん
2019/01/19(土) 12:10:48.67ID:gJ7zJmkH212デフォルトの名無しさん
2019/01/19(土) 12:13:26.40ID:gJ7zJmkH >>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
213デフォルトの名無しさん
2019/01/19(土) 13:16:34.67ID:+IqL7b8U214デフォルトの名無しさん
2019/01/19(土) 14:04:33.44ID:gJ7zJmkH215デフォルトの名無しさん
2019/01/19(土) 14:08:49.01ID:fPDnzLoP 何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい
丹念なエラー処理も例外の方がやりやすい
216デフォルトの名無しさん
2019/01/19(土) 14:30:15.46ID:+IqL7b8U217デフォルトの名無しさん
2019/01/19(土) 14:50:30.01ID:FscMnE/k 案の定、参照透過性は関係ない話だった。
218デフォルトの名無しさん
2019/01/19(土) 16:58:07.69ID:gJ7zJmkH >>216
具体的にするには前提がいるでしょ
f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある
製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?
おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
具体的にするには前提がいるでしょ
f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある
製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?
おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
219デフォルトの名無しさん
2019/01/19(土) 17:14:14.89ID:+IqL7b8U220デフォルトの名無しさん
2019/01/19(土) 17:16:52.76ID:fPDnzLoP コード書けないならそう言えば?
長文で言い訳してないでさ
長文で言い訳してないでさ
221デフォルトの名無しさん
2019/01/19(土) 17:33:46.39ID:XYN5JTgF 普通は馬鹿に割く時間がもったいないからコード書けません
222デフォルトの名無しさん
2019/01/19(土) 17:53:36.92ID:+IqL7b8U そう言ういいわけ要らんし
223デフォルトの名無しさん
2019/01/19(土) 18:31:39.45ID:fPDnzLoP 信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
224デフォルトの名無しさん
2019/01/19(土) 20:10:32.29ID:XwZdf3Vk 普通signalで実装するよね〜
225デフォルトの名無しさん
2019/01/19(土) 20:17:23.95ID:gJ7zJmkH 勝利宣言の後で申し訳ないけど
h()でハンドルするとしたら単に
Z h(P const & p, Q const & q) {
try {
return f(p) * g(q)
} catch (exception_invalid_arg_f e) {
throw exception_invalid_arg("arg p is invalid");
} catch (exception_invalid_arg_g e) {
throw exception_invalid_arg("arg q is invalid");
}
}
みたいにリアス海岸になるわけでしょ
でもこれはpとqの異常の区別が下からあがってくる例外で区別できてしまう特殊例
Z h2(P const & p, Q const & q0, Q const & q1) {
return f(p) * g(q0) * g(q1);
}
だとより複雑になる
じゃあこれ次の人やってみて
h()でハンドルするとしたら単に
Z h(P const & p, Q const & q) {
try {
return f(p) * g(q)
} catch (exception_invalid_arg_f e) {
throw exception_invalid_arg("arg p is invalid");
} catch (exception_invalid_arg_g e) {
throw exception_invalid_arg("arg q is invalid");
}
}
みたいにリアス海岸になるわけでしょ
でもこれはpとqの異常の区別が下からあがってくる例外で区別できてしまう特殊例
Z h2(P const & p, Q const & q0, Q const & q1) {
return f(p) * g(q0) * g(q1);
}
だとより複雑になる
じゃあこれ次の人やってみて
226デフォルトの名無しさん
2019/01/19(土) 20:34:58.74ID:DlKBTFO2 天狗だ天狗が出たぞぉ
227デフォルトの名無しさん
2019/01/19(土) 21:39:06.68 やっぱり例外機構はオカルトだった。皆が長い間この迷信に惑わされ疲弊した
228デフォルトの名無しさん
2019/01/19(土) 22:11:28.98ID:+IqL7b8U 疲弊してるのは君みたいだけど w
229デフォルトの名無しさん
2019/01/19(土) 22:15:24.45ID:wCv/sLww230デフォルトの名無しさん
2019/01/20(日) 09:40:39.15ID:GKseTsKF >>225
例外の使い方知らないのか
例外の使い方知らないのか
231デフォルトの名無しさん
2019/01/20(日) 10:17:17.63ID:0AQxsU+K 具体的に書いてくれよ
232デフォルトの名無しさん
2019/01/20(日) 10:50:52.46ID:mVpLWWyp233デフォルトの名無しさん
2019/01/20(日) 11:19:55.89ID:GKseTsKF ほらな言った通りになった
戻り値スタイルはただ異常処理を上位に委ねるだけでも多量のコードを書かなければならない
だから本当に処理すべき異常や正常系の処理が異常伝達に埋もれてしまいコードの可読性が著しく低下してしまう
>>225が>>209のサンプルコードの意図を誤解した理由がこれだ
>>225が間違えたのは予想された事だったんだ
>>225が例外スタイルでは必要ない障害伝達を書いてしまった理由も根は同じ
戻り値スタイルを書き続ける事によって関数コールの周りに障害伝達を書くのは当たり前の事なんだと頭の中に刷り込まれて思考停止してしまった
結果として例外スタイルを書く際にもいつもの癖で不要な障害伝達を書いてしまった
そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね
戻り値スタイルはただ異常処理を上位に委ねるだけでも多量のコードを書かなければならない
だから本当に処理すべき異常や正常系の処理が異常伝達に埋もれてしまいコードの可読性が著しく低下してしまう
>>225が>>209のサンプルコードの意図を誤解した理由がこれだ
>>225が間違えたのは予想された事だったんだ
>>225が例外スタイルでは必要ない障害伝達を書いてしまった理由も根は同じ
戻り値スタイルを書き続ける事によって関数コールの周りに障害伝達を書くのは当たり前の事なんだと頭の中に刷り込まれて思考停止してしまった
結果として例外スタイルを書く際にもいつもの癖で不要な障害伝達を書いてしまった
そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね
234デフォルトの名無しさん
2019/01/20(日) 11:22:27.27ID:GKseTsKF ちなみに言った通りのレスは>>181のことな
235デフォルトの名無しさん
2019/01/20(日) 13:52:10.31ID:Y8m3wOFq236デフォルトの名無しさん
2019/01/20(日) 14:06:11.05ID:Y8m3wOFq あと
>>225
で例外投げなおしてるのは本質じゃない
単にそこでなにかしら異常系の対応をするという意味合い
人間にリトライさせることを考えると h()を呼び出したのがUIのフレームワークで
呼び出し側が "arg p is invalid" というメッセージでどっちの間違いが判定するなど
(現実には文字列で判定させる実装にしないだろうが、例な)
そこをそのまま exception_invalid_arg_f を上に伝搬させればいいだろと思うのはど素人
h() から外部ライブラリの exception_invalid_arg_f、exception_invalid_arg_g がそのまま
あがってくるというのは一般的にソフトウェアのレイヤー構造を崩してる
もちろん自分が担当している範囲ならありだが、
h() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前
>>225
で例外投げなおしてるのは本質じゃない
単にそこでなにかしら異常系の対応をするという意味合い
人間にリトライさせることを考えると h()を呼び出したのがUIのフレームワークで
呼び出し側が "arg p is invalid" というメッセージでどっちの間違いが判定するなど
(現実には文字列で判定させる実装にしないだろうが、例な)
そこをそのまま exception_invalid_arg_f を上に伝搬させればいいだろと思うのはど素人
h() から外部ライブラリの exception_invalid_arg_f、exception_invalid_arg_g がそのまま
あがってくるというのは一般的にソフトウェアのレイヤー構造を崩してる
もちろん自分が担当している範囲ならありだが、
h() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前
237デフォルトの名無しさん
2019/01/20(日) 14:24:17.92ID:mVpLWWyp とりあえず戻り値スタイルでコード書いてくれよ
例外版に直してあげるからさ
例外版に直してあげるからさ
238デフォルトの名無しさん
2019/01/20(日) 14:29:19.26ID:GKseTsKF239デフォルトの名無しさん
2019/01/20(日) 14:32:48.63ID:Q8jHF7yk printfの戻り値もチェックしろよ
240デフォルトの名無しさん
2019/01/20(日) 14:40:21.16ID:GKseTsKF >>236
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな
241デフォルトの名無しさん
2019/01/20(日) 17:06:39.20ID:z2xvgkTe 戻り値って何?
242デフォルトの名無しさん
2019/01/20(日) 17:27:50.05ID:wW/QZhoY 戻り値を使う例
printf("%d\n",printf("1+2+3="));
printf("%d\n",printf("1+2+3="));
243デフォルトの名無しさん
2019/01/20(日) 17:45:51.48ID:Q2ecPa0m 配列・ポインタ・構造体・クラス→「プログラミング楽勝ンゴwwwwww」
スレッド・コルーチン・テンプレート→「あばばばば・・・」
スレッド・コルーチン・テンプレート→「あばばばば・・・」
244デフォルトの名無しさん
2019/01/20(日) 21:20:28.02ID:Y8m3wOFq はい誰もコード書かないw
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
245デフォルトの名無しさん
2019/01/20(日) 21:31:17.80 やっぱり例外機構はオカルトだった。皆が長い間この銀の弾丸を装った迷信に惑わされ疲弊した
246デフォルトの名無しさん
2019/01/20(日) 21:52:33.91ID:mVpLWWyp247デフォルトの名無しさん
2019/01/20(日) 22:13:54.05ID:GKseTsKF248はちみつ餃子 ◆8X2XSCHEME
2019/01/20(日) 22:17:29.98ID:/TyOXJfP あのなぁ、俺は他の機能についての話で何度か書いてるけど、
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。
どうせ回復できない異常ならちまちまと返却値をとりまわして
上まで運ぶのはクソ面倒くせぇし、
その場で対処する必要があるようなものは
try/catch よりも if で書いた方が短くて簡単だし取りこぼしにくいってのはわかる。
どちらにするべきか判断を付けるコストの方がデカいわっていう場面なら
各プロジェクトのポリシーで一方に決めつけたって別にかまわん。
当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。
どうせ回復できない異常ならちまちまと返却値をとりまわして
上まで運ぶのはクソ面倒くせぇし、
その場で対処する必要があるようなものは
try/catch よりも if で書いた方が短くて簡単だし取りこぼしにくいってのはわかる。
どちらにするべきか判断を付けるコストの方がデカいわっていう場面なら
各プロジェクトのポリシーで一方に決めつけたって別にかまわん。
当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。
249デフォルトの名無しさん
2019/01/20(日) 22:18:21.76ID:GKseTsKF 異常系の処理がシビアになればなるほど例外が有利になる
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい
250デフォルトの名無しさん
2019/01/20(日) 22:25:39.40ID:GTDVzsz1 >>248
中身のない長文は要らんよ
中身のない長文は要らんよ
251デフォルトの名無しさん
2019/01/20(日) 22:33:30.46ID:ps+hJNCY 例外はその機構が重いから極端な異常系にしか使わないようにしてるのも今は昔の考え方なのかな
252デフォルトの名無しさん
2019/01/20(日) 22:36:51.24ID:XHg9p3tl253デフォルトの名無しさん
2019/01/20(日) 22:39:23.56ID:GTDVzsz1 >>252
お前もな〜
お前もな〜
254デフォルトの名無しさん
2019/01/20(日) 22:55:26.02ID:GKseTsKF >>251
そもそも正常系では例外の方が速い
そもそも正常系では例外の方が速い
255デフォルトの名無しさん
2019/01/20(日) 23:31:58.94ID:PO2ZqArQ >戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。
レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。
256はちみつ餃子 ◆8X2XSCHEME
2019/01/21(月) 00:00:25.72ID:seIeK7lJ >>251
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。
ただ、 SJLJ 以外の方法というのはデバッグ情報を使うためにツールチェインとの連携が必須だとか、
ハードウェアの機能を使うとかいった制約があって移植性に難があったりもするので、 SJLJ も滅びずに残ってる。
要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。
ただ、 SJLJ 以外の方法というのはデバッグ情報を使うためにツールチェインとの連携が必須だとか、
ハードウェアの機能を使うとかいった制約があって移植性に難があったりもするので、 SJLJ も滅びずに残ってる。
要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)
257デフォルトの名無しさん
2019/01/21(月) 00:16:50.05ID:xYP7RvSv■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 日本政府に [おっさん友の会★]
- 中国側が首相答弁の撤回要求、日本側拒否★6 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★3 [蚤の市★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★5 [蚤の市★]
- 高市総理はもっと暴れて自民党を分裂、もしくは解体して欲しい [633746646]
- 【速報】中国、水産物輸入停止 [527893826]
- 高い国産米はいらない😤主食用輸入米(無関税)が最速で完売※1kg556円 [993451824]
- 【緊急】高市早苗 月内辞任か [695089791]
- 逆にお前が統一ネトウヨだったら質問した野党が悪い以外に高市早苗を擁護するパッケージ作れるの?無理だろ? [517791167]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
