エスケープシーケンスや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
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:xYP7RvSv258デフォルトの名無しさん
2019/01/21(月) 02:42:47.97ID:sP4gcHu6 例外でイベント発生させて、イベントハンドラで受けるのはど?
259デフォルトの名無しさん
2019/01/21(月) 06:13:04.33ID:NbFzEAOW260デフォルトの名無しさん
2019/01/21(月) 07:28:30.34ID:sP4gcHu6 swith caseで分岐する場合もあれば、
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?
C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?
C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?
261デフォルトの名無しさん
2019/01/21(月) 08:25:41.60ID:vJCo0PxF >保証は言語側でやってくれるから言及する必要がないだけのこと
保証なんてしないよね?catch忘れたらそのまま上まですっ飛んでいくだけ。
Javaのような検査例外ならそこに差異があることを意識されられるかもしれないけど。
>そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。
保証なんてしないよね?catch忘れたらそのまま上まですっ飛んでいくだけ。
Javaのような検査例外ならそこに差異があることを意識されられるかもしれないけど。
>そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。
262デフォルトの名無しさん
2019/01/21(月) 08:37:50.82ID:Kndge7xV 大前提が間違ってる
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない
263デフォルトの名無しさん
2019/01/21(月) 08:55:24.27ID:NbFzEAOW264デフォルトの名無しさん
2019/01/21(月) 08:56:49.38ID:vJCo0PxF >>262
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 石井ちゃんです!
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 今から北海道行く
- お前らは“スカイマイルタワー”建設計画を知っているか?
- これ誰か分かるか?
- エプシュタインファイルの公開、決定 [805596214]
