【初心者歓迎】C/C++室 Ver.104【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
2019/01/17(木) 09:09:21.72ID:4hvMH0x4
>>164
は?業務と趣味でやってる奴が一番最強
2019/01/17(木) 10:35:25.89ID:iQ0t94Qh
>>159
optionalの理解間違ってるよ
2019/01/17(木) 10:39:29.94ID:iQ0t94Qh
>>163
例外禁止されるのは業務の方だろ
一見汚くなるがそちらの方がバグが少なくメンテしやすいという判断で
トップダウンで強制される
趣味なら最新の機能ばんばん使って自由にやりゃいい
2019/01/17(木) 12:13:15.88ID:oU9OMPiG
実際には例外を禁止するとバグが増えてメンテしにくくなるんだけどな
2019/01/17(木) 13:51:39.37ID:l+wuAult
そのソフトが気に入らないなら、
そのソフトを使わなきゃ良いだけだし。
そんなことも、いい年になって、わからないのか。
170デフォルトの名無しさん
垢版 |
2019/01/17(木) 14:34:02.57ID:DbtLCT5r
このスレ卒業死体
2019/01/17(木) 14:43:25.66ID:n6FY+cyG
スレばいいじゃない
2019/01/17(木) 15:55:58.66ID:K5aWd8xj
setjmp 使えばよろし
2019/01/17(木) 17:20:21.35
遂に中級者になるのか……
2019/01/17(木) 20:25:15.31ID:e9w/TFC0
>>173
なんでID消えてるの?
2019/01/17(木) 20:47:04.58ID:iJuNblTy
浪人で消してるんでっしゃろ
2019/01/17(木) 21:54:16.18ID:yb/OKoP7
単なるエラーを返すのに例外機構みたいな大域脱出って牛刀感あるよな。
2019/01/17(木) 22:25:28.97ID:zQ8cL02f
エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
スローすれば僅かな労力で安全に済むところをわざわざ戻り値にするのは事を大げさにするだけ
2019/01/17(木) 23:05:50.61ID:K5aWd8xj
つ errno
2019/01/17(木) 23:24:18.46ID:yb/OKoP7
なあに、例外のcatch漏れや例外安全を欠いていないか注意するのと比べたら
たいてい局所的に判断できるから大したことない。

>エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業

検査例外じゃない例外機構でそれを保証するのも簡単じゃないと思うがな。
まぁ、一人開発で投げるのもcatchするのも全部把握しているという前提ならわからんでもないが。
2019/01/18(金) 00:32:34.20ID:ZqjXe4yq
>>179
そのへんはチェックするツールとかあったりしない?
知らんけど。
2019/01/18(金) 00:49:25.33ID:HmTdANXo
実はキャッチ漏れは戻り値処理漏れよりはるかに少ない
戻り値処理はその場でエラー処理したくない場合にも一度変数に受け取って分岐を入れて呼び元に返すということを繰り返さなければならない
なので処理漏れを起こしうる確率が呼び出し箇所の数に比例して増えていくことになる
そして本当のエラー処理をしたい場所が隠れてしまいコードの可読性が低下する
可読性が低下すればミスがさらに増える
例外なら処理したくない場合は何も書かなくていいので間違えようがないので安心
またエラー処理をしたいまさにその箇所だけに処理を書けばいいのでコードの見通しが非常に良くなりミスも激減する

エラーコード戻し安全なコードを書くことは実は非常に難しい
エラーコードチェックのせいで無駄な変数と分岐が大増殖するので正確にシステムの状態を追うことが困難になりミスが増える
例外を使えばフローが非常に単調で綺麗になるので安全なコードを書くのも簡単になる
2019/01/18(金) 01:03:26.14ID:0w3MYNkW
同じ理由で、忌み嫌われてるgoto文も、実はけっこう便利だと思う
2019/01/18(金) 01:11:53.91ID:ZqjXe4yq
正しく使えば何だって便利だし、
駄目な使い方をすれば何だって駄目だっていう
すごく当たり前すぎる話
2019/01/18(金) 08:10:56.74ID:VfzPRVfV
>>183
>>180
プログラミング辞めてツールでチェックしてもらえば?
2019/01/18(金) 08:14:02.62ID:BmxrQ6cX
>>180
それが検査例外じゃないかな。
いろいろ批判もあるけど、例外の内容に応じてそれぞれ異なるリカバリを確実に行うことを
保証する手段としては今のところそれ以外無いかなと思う。
まぁ、erlang/swiftあるいはgoのpanicのように、エラーの種類なんて気にせず「この下の
処理が失敗した」とだけ捉えるのが例外の扱いとして妥当なところかも。
2019/01/18(金) 09:51:47.22ID:LyFbxqMk
>>181
使い捨てでないまともなプログラムはいたるところにエラーリカバリー処理が入る
つまり例外だといたるところにtry catchかつ外に投げる例外は誰がcatchするのか仕様が複雑
仕事で大規模なプロジェクトに関わったことない人はこういうのが理解できていない
2019/01/18(金) 10:01:53.52ID:LyFbxqMk
例外押しのやつはどうせほとんどcatchせずにそのままexitさせてるだろ
exitするぐらいなら異常が発生した場所でabortする方がはるかにいい
確実にスタックダンプが残せる
2019/01/18(金) 10:41:00.50ID:cHsPUmRi
例外が有用なのってネットワークとストレージのioぐらいという認識
それ以外で必要性を感じない
配列外アクセスとかで例外とばすなと思う
2019/01/18(金) 11:40:22.57ID:6lA8mErY
>>188
そういうバグが原因の例外はcatchしなければいいんでは?
2019/01/18(金) 13:31:14.01ID:cHsPUmRi
>>189
だから現実的にそういうのに例外をなげる仕様にありがたみがないでしょ
2019/01/18(金) 13:49:33.80ID:6lA8mErY
>>190
なんで?SEGVも起こさずに潜在的なバグとして残り続けるよりよくない?
2019/01/18(金) 13:57:52.52ID:cHsPUmRi
>>191
自分でcatchするならtry catchがうざい
バグ扱いでcatchしないならそもそも例外投げずにpanicされた方が調査が楽
また下手にどこかでcatchされたらバグに気づかない危険性がある

以上の理由により
2019/01/18(金) 16:42:12.57ID:MrHOaa15
gotoなんか品質チェックに問答無用で引っ掛かる
2019/01/18(金) 16:50:08.01ID:e8mi14LA
お間抜けな品質チェックだこと
2019/01/18(金) 17:34:28.42ID:dGgLcYHd
ID:cHsPUmRi ってcatchで全ての例外がキャッチされると思ってるのか?
2019/01/18(金) 17:42:49.84ID:e8mi14LA
例外が発生しました

「このPCの電源が入っていません」
2019/01/18(金) 17:59:44.06
例外機構は誰がキャッチするのか別の問題を作った
問題先送りで日本人らしい
結局本質的には何の解決ももたらさなかった
例外機構はオカルトだったんだ。占いの類
2019/01/18(金) 18:01:08.56ID:eisM0hGT
例外なくしてOS作れるか?
2019/01/18(金) 18:48:44.03ID:ZqjXe4yq
>>197
エラーを返却値で返すことにしたところでそれは同じでしょ。
どこまで上に (返却値によって) 伝播すべきかってのは
どこでキャッチすべきかと問題は同じだよ。
2019/01/18(金) 18:57:17.35ID:X3ceYQ3H
ダウソファイルのファイル名置換する簡単なプログラムをC++とC#で書いてみた(C++で作って、それ見ながらC#に変換した)
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。
2019/01/18(金) 19:12:22.57ID:seZYByET
if文使うな。
ということか?
2019/01/18(金) 20:07:49.64ID:BPWAMvDw
リターンコードスタイルにすると


無駄な変数が増える
無駄な分岐が増える
エラーコード追加時に全ての呼び出し元を精査しなければならない
エラーに付随する情報を伝達する標準的な規則が存在しない
全ての正常系の処理にコードチェックのオーバーヘッドが追加される
ライブラリ内部で発生する例外への対処が困難(例外を基本としていれば容易に対処可能)
参照透過性が壊滅する

デメリットだらけ
2019/01/18(金) 20:59:01.43ID:BmxrQ6cX
>エラーコード追加時に全ての呼び出し元を精査しなければならない
>参照透過性が壊滅する

例外ならそれが解決すると考えているならちょっとやばい。
2019/01/18(金) 23:06:15.78ID:BPWAMvDw
>>203
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ
2019/01/19(土) 01:49:00.66ID:gJ7zJmkH
参照透過性ってそういう意味だっけ?w
最近例外ない言語増えてる事実はどう考える?
2019/01/19(土) 07:07:12.07ID:+IqL7b8U
>>203
リターンコード方式や例外と参照透過性になんの関係があるんだろう…

>>205
> 最近例外ない言語増えてる事実はどう考える?
Go以外にあったっけ?
2019/01/19(土) 07:37:40.03ID:FscMnE/k
まぁ、実際関係ないね。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。
2019/01/19(土) 07:43:37.22ID:WVD5Mi4y
「呼び出し元を精査」とかプログラム内のデバッグに例外使ってるような書き方やね
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな
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); }
2019/01/19(土) 09:21:20.09ID:XwZdf3Vk
Real Programmers Don't Use Exception.
2019/01/19(土) 12:10:48.67ID:gJ7zJmkH
>>206
rust
swiftは最初なくて後で追加
積極的に使うスタンスでない
2019/01/19(土) 12:13:26.40ID:gJ7zJmkH
>>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
2019/01/19(土) 13:16:34.67ID:+IqL7b8U
>>211
それってやっぱりいるじゃん
ってことだよね w

>>212
え?
何言ってるの?
エラー処理ってなんのこと?
具体的に書いてみて
2019/01/19(土) 14:04:33.44ID:gJ7zJmkH
>>213
エラー処理って言ったらまぎらわしかった
異常系の対応ってこと
2019/01/19(土) 14:08:49.01ID:fPDnzLoP
何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい
2019/01/19(土) 14:30:15.46ID:+IqL7b8U
>>214
エラー処理でも異常系の対応でもいいから具体的に書いてくれよ
>>209程度ならたいしたことないだろ
2019/01/19(土) 14:50:30.01ID:FscMnE/k
案の定、参照透過性は関係ない話だった。
2019/01/19(土) 16:58:07.69ID:gJ7zJmkH
>>216
具体的にするには前提がいるでしょ

f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある

製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?

おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
2019/01/19(土) 17:14:14.89ID:+IqL7b8U
>>218
> p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
意味わからん
2019/01/19(土) 17:16:52.76ID:fPDnzLoP
コード書けないならそう言えば?
長文で言い訳してないでさ
2019/01/19(土) 17:33:46.39ID:XYN5JTgF
普通は馬鹿に割く時間がもったいないからコード書けません
2019/01/19(土) 17:53:36.92ID:+IqL7b8U
そう言ういいわけ要らんし
2019/01/19(土) 18:31:39.45ID:fPDnzLoP
信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
2019/01/19(土) 20:10:32.29ID:XwZdf3Vk
普通signalで実装するよね〜
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);
  }

だとより複雑になる
じゃあこれ次の人やってみて
2019/01/19(土) 20:34:58.74ID:DlKBTFO2
天狗だ天狗が出たぞぉ
2019/01/19(土) 21:39:06.68
やっぱり例外機構はオカルトだった。皆が長い間この迷信に惑わされ疲弊した
2019/01/19(土) 22:11:28.98ID:+IqL7b8U
疲弊してるのは君みたいだけど w
2019/01/19(土) 22:15:24.45ID:wCv/sLww
>>227
少し休め
人生は長いぞ
2019/01/20(日) 09:40:39.15ID:GKseTsKF
>>225
例外の使い方知らないのか
2019/01/20(日) 10:17:17.63ID:0AQxsU+K
具体的に書いてくれよ
2019/01/20(日) 10:50:52.46ID:mVpLWWyp
>>231
まさかと思うけど>>225でcatch書かなきゃf()やg()で発生した例外はそのままh()の呼び出し側に伝搬すること知らんのか?
あと、例えば引数がおかしいと言う例外なら例外情報に引数の値などを含めて一番外側でログを採るとかするから
>   Z h2(P const & p, Q const & q0, Q const & q1) {
>     return f(p) * g(q0) * g(q1);
>   }
> だとより複雑になる
なんてことはない
2019/01/20(日) 11:19:55.89ID:GKseTsKF
ほらな言った通りになった

戻り値スタイルはただ異常処理を上位に委ねるだけでも多量のコードを書かなければならない
だから本当に処理すべき異常や正常系の処理が異常伝達に埋もれてしまいコードの可読性が著しく低下してしまう
>>225>>209のサンプルコードの意図を誤解した理由がこれだ
>>225が間違えたのは予想された事だったんだ

>>225が例外スタイルでは必要ない障害伝達を書いてしまった理由も根は同じ
戻り値スタイルを書き続ける事によって関数コールの周りに障害伝達を書くのは当たり前の事なんだと頭の中に刷り込まれて思考停止してしまった
結果として例外スタイルを書く際にもいつもの癖で不要な障害伝達を書いてしまった

そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね
2019/01/20(日) 11:22:27.27ID:GKseTsKF
ちなみに言った通りのレスは>>181のことな
2019/01/20(日) 13:52:10.31ID:Y8m3wOFq
>>232
> > だとより複雑になる
> なんてことはない

具体的にコードで書けよw
要件は >>218
h()が異常処理の責任を持つ前提でな
上に例外伝搬させてるだけでは問題は何も解決しねーから
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() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前
2019/01/20(日) 14:24:17.92ID:mVpLWWyp
とりあえず戻り値スタイルでコード書いてくれよ
例外版に直してあげるからさ
2019/01/20(日) 14:29:19.26ID:GKseTsKF
>>235
ほら何もわかってない
エラー発生箇所でなんでも解決しなきゃならないと洗脳されてんだね
何もなくてもエラー処理コードを書かなければならない戻り値スタイルの書きすぎで感覚がおかしくなってる
239デフォルトの名無しさん
垢版 |
2019/01/20(日) 14:32:48.63ID:Q8jHF7yk
printfの戻り値もチェックしろよ
2019/01/20(日) 14:40:21.16ID:GKseTsKF
>>236
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな
2019/01/20(日) 17:06:39.20ID:z2xvgkTe
戻り値って何?
2019/01/20(日) 17:27:50.05ID:wW/QZhoY
戻り値を使う例

printf("%d\n",printf("1+2+3="));
2019/01/20(日) 17:45:51.48ID:Q2ecPa0m
配列・ポインタ・構造体・クラス→「プログラミング楽勝ンゴwwwwww」

スレッド・コルーチン・テンプレート→「あばばばば・・・」
2019/01/20(日) 21:20:28.02ID:Y8m3wOFq
はい誰もコード書かないw
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
2019/01/20(日) 21:31:17.80
やっぱり例外機構はオカルトだった。皆が長い間この銀の弾丸を装った迷信に惑わされ疲弊した
2019/01/20(日) 21:52:33.91ID:mVpLWWyp
>>244
だから後出し条件出されると困るから戻り値スタイルでコード書いてくれ
って書いてあるだろ
例外とあまり変わらないんだから書けるよね?
2019/01/20(日) 22:13:54.05ID:GKseTsKF
>>244
>>209
2019/01/20(日) 22:17:29.98ID:/TyOXJfP
あのなぁ、俺は他の機能についての話で何度か書いてるけど、
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。

どうせ回復できない異常ならちまちまと返却値をとりまわして
上まで運ぶのはクソ面倒くせぇし、
その場で対処する必要があるようなものは
try/catch よりも if で書いた方が短くて簡単だし取りこぼしにくいってのはわかる。

どちらにするべきか判断を付けるコストの方がデカいわっていう場面なら
各プロジェクトのポリシーで一方に決めつけたって別にかまわん。

当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。
2019/01/20(日) 22:18:21.76ID:GKseTsKF
異常系の処理がシビアになればなるほど例外が有利になる
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい
2019/01/20(日) 22:25:39.40ID:GTDVzsz1
>>248
中身のない長文は要らんよ
2019/01/20(日) 22:33:30.46ID:ps+hJNCY
例外はその機構が重いから極端な異常系にしか使わないようにしてるのも今は昔の考え方なのかな
2019/01/20(日) 22:36:51.24ID:XHg9p3tl
>>250
ここ数10レスほど続いていた中身のない不毛なやり取りより>>248の1レスの方が有意義だと思うぞ
2019/01/20(日) 22:39:23.56ID:GTDVzsz1
>>252
お前もな〜
2019/01/20(日) 22:55:26.02ID:GKseTsKF
>>251
そもそも正常系では例外の方が速い
2019/01/20(日) 23:31:58.94ID:PO2ZqArQ
>戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな

レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。
2019/01/21(月) 00:00:25.72ID:seIeK7lJ
>>251
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。

ただ、 SJLJ 以外の方法というのはデバッグ情報を使うためにツールチェインとの連携が必須だとか、
ハードウェアの機能を使うとかいった制約があって移植性に難があったりもするので、 SJLJ も滅びずに残ってる。

要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)
2019/01/21(月) 00:16:50.05ID:xYP7RvSv
>>255
リターンコードスタイルはレイヤ境界どころか体系的にエラー処理を考えるということをしないからなぁ
例外スタイルの人はじゃあどこで処理すんのということもちゃんと考えてる
2019/01/21(月) 02:42:47.97ID:sP4gcHu6
例外でイベント発生させて、イベントハンドラで受けるのはど?
2019/01/21(月) 06:13:04.33ID:NbFzEAOW
>>255
> この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
> 言及してた人いないでしょ。
保証は言語側でやってくれるから言及する必要がないだけのこと
そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
2019/01/21(月) 07:28:30.34ID:sP4gcHu6
swith caseで分岐する場合もあれば、
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?

C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?
2019/01/21(月) 08:25:41.60ID:vJCo0PxF
>保証は言語側でやってくれるから言及する必要がないだけのこと

保証なんてしないよね?catch忘れたらそのまま上まですっ飛んでいくだけ。
Javaのような検査例外ならそこに差異があることを意識されられるかもしれないけど。

>そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ

そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。
2019/01/21(月) 08:37:50.82ID:Kndge7xV
大前提が間違ってる
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない
2019/01/21(月) 08:55:24.27ID:NbFzEAOW
>>261
> catch忘れたらそのまま上まですっ飛んでいくだけ。
闇雲にキャッチしたいならcatch(...)ってやればいいだけ w
> そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
本来キャッチが必要な例外を漏らしているならそれはバグ
それは戻り値スタイルでも同じ話
違うのは例外はキャッチする必要の無い例外についてはそこで考慮する必要はない、自動的に上位に渡されるから上位の然るべき場所で考慮すればいいから
それが>>249の言う
> 例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
ってこと
2019/01/21(月) 08:56:49.38ID:vJCo0PxF
>>262
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況