エスケープシーケンスや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
144135
2019/01/16(水) 17:16:27.25ID:Cj0f6L/5 >>138 回文には気づかなかった。
「なるな」「人間に」がそれぞれ反転同一で、
それらフレーズを反転同一になるように並べて作成した回文か。
「人間になるな人間に」でも構造的には同じね。
いくらかPPAPな感じがしないでもない。
あと、正規表現のパズルっぽくもある。
「なるな」「人間に」がそれぞれ反転同一で、
それらフレーズを反転同一になるように並べて作成した回文か。
「人間になるな人間に」でも構造的には同じね。
いくらかPPAPな感じがしないでもない。
あと、正規表現のパズルっぽくもある。
145はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 17:26:40.42ID:kJO3cJ8H 酢にピリッとした風味を足すのに使えます
_人人人人人人_
> スピリタス <
 ̄Y^Y^Y^Y^Y^Y ̄
_人人人人人人_
> スピリタス <
 ̄Y^Y^Y^Y^Y^Y ̄
147デフォルトの名無しさん
2019/01/16(水) 17:58:49.69ID:Cj0f6L/5 はちみつと関係ないと思ったけど、餃子の方には関係ありそう。
しかし、C++スレッドでの真摯な態度と裏腹に、
他所ではどういうキャラクタなんだろ、と思わせる投稿ね。
しかし、C++スレッドでの真摯な態度と裏腹に、
他所ではどういうキャラクタなんだろ、と思わせる投稿ね。
148デフォルトの名無しさん
2019/01/16(水) 18:12:30.55ID:mUX6kDFm 真摯かねぇ・・・・希望的観測で詳しくないことに首突っ込んだり
自分の間違いや認識の誤りは絶対に認めないクソコテなのに
まぁそれも俺の主観だから他の人がどう思うかは知らんけど。
自分の間違いや認識の誤りは絶対に認めないクソコテなのに
まぁそれも俺の主観だから他の人がどう思うかは知らんけど。
149デフォルトの名無しさん
2019/01/16(水) 18:41:54.90ID:YdXHJCw6 >>145
風味って鼻から空気が出る時に感じる食べ物の香りかと思ってたわ
風味って鼻から空気が出る時に感じる食べ物の香りかと思ってたわ
150デフォルトの名無しさん
2019/01/16(水) 20:40:09.12ID:iaQOejPk c++が対象にしてる現実問題って何だ?
c++使う大規模プロジェクトってゲームがまずあると思うけど
例外禁止未だに普通だし標準ライブラリも限定的にしか使わないよ
c++使う大規模プロジェクトってゲームがまずあると思うけど
例外禁止未だに普通だし標準ライブラリも限定的にしか使わないよ
151デフォルトの名無しさん
2019/01/16(水) 20:47:01.61ID:Tucl/crz c++で書かれたc++のコンパイラのことだろ
ここが0.001%早くなるだけで世界から年間100000時間くらいが節約できるんじゃねえの
ここが0.001%早くなるだけで世界から年間100000時間くらいが節約できるんじゃねえの
152デフォルトの名無しさん
2019/01/16(水) 21:54:11.46ID:gQtWsPR9 じゃあLLVMのコーディングスタンダードこれな
https://llvm.org/docs/CodingStandards.html
例外、RTTI、iostream使わない
現実に使えるソフトってのはこういう制約で作るわけだ
C++の標準化やってる連中はメタプログラミングで遊んでるだけ
現実問題なんて何もわかってない
https://llvm.org/docs/CodingStandards.html
例外、RTTI、iostream使わない
現実に使えるソフトってのはこういう制約で作るわけだ
C++の標準化やってる連中はメタプログラミングで遊んでるだけ
現実問題なんて何もわかってない
153デフォルトの名無しさん
2019/01/16(水) 23:10:45.86ID:4t4UncJr 例外使わないとかないわー
初心者かよ
初心者かよ
154デフォルトの名無しさん
2019/01/16(水) 23:12:36.63ID:Xh3PQjx5 だから、ブラウザ、ロケット射的距離のシミュレーション、機械学習
155デフォルトの名無しさん
2019/01/16(水) 23:36:41.52ID:gQtWsPR9 >>153
初心者ってのはC++の例外のバイナリモデル説明できねーやつのことな
初心者ってのはC++の例外のバイナリモデル説明できねーやつのことな
156デフォルトの名無しさん
2019/01/16(水) 23:44:05.56ID:gQtWsPR9 >>154
でC++がそれらに対してどんな問題解決してくれたんだ?
でC++がそれらに対してどんな問題解決してくれたんだ?
157はちみつ餃子 ◆8X2XSCHEME
2019/01/17(木) 01:07:41.88ID:/VOhvfFp >>152
そこらへんはしゃーない。 便利な機能も害悪な場面は有るし、
ある時点では有用だったものが後には足を引っ張ることもある。
あるプロジェクトで縛りを設けるからといって
それが現実の全てというわけではない。
ただ、例外を使わない方向というのは大きなプロジェクトでは
そこそこあるかも?
>>153
例外が忌避されるのは他の言語と接続したときに、
呼出した側が例外を捕捉できないというのが致命的で、
つまりはそういった場面が想定されるようなライブラリでの一般的な規則。
外へ出る前に例外を全部キャッチしてしまうってのでも、
まあなんとかならんことはないが、
近頃では std::optional を活用した方がいいという雰囲気はある気がするね。
Go や Rust は最初からそういう方向だし。
そこらへんはしゃーない。 便利な機能も害悪な場面は有るし、
ある時点では有用だったものが後には足を引っ張ることもある。
あるプロジェクトで縛りを設けるからといって
それが現実の全てというわけではない。
ただ、例外を使わない方向というのは大きなプロジェクトでは
そこそこあるかも?
>>153
例外が忌避されるのは他の言語と接続したときに、
呼出した側が例外を捕捉できないというのが致命的で、
つまりはそういった場面が想定されるようなライブラリでの一般的な規則。
外へ出る前に例外を全部キャッチしてしまうってのでも、
まあなんとかならんことはないが、
近頃では std::optional を活用した方がいいという雰囲気はある気がするね。
Go や Rust は最初からそういう方向だし。
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
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
