- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
772 :デフォルトの名無しさん[]:2018/04/08(日) 01:12:25.64 ID:DdcJdhQn - >>766
問題って書いたのが誤解を招いてしまったかな… 別に上記の全てが無いとダメって言ってるわけじゃないよ。あったら嬉しいなくらいにしか思ってない けど、例外なんて邪魔にしかならん機能を欲しがるくらいなら他に欲しいものがいくらでもあるだろと思って… あと、揚げ足取って悪いけど、100徳ナイフを欲しがってるなら例外も欲しがってるはずだろ… 例外と継承を捨てたのはGoの英断
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
775 :デフォルトの名無しさん[]:2018/04/08(日) 02:00:48.53 ID:DdcJdhQn - >>771
>例えばこの関数は例外を上げる可能性があるからtryブロック内に書かないとコンパイルエラーになる言語ってある? Javaの検査例外とSwiftの例外はtry必須だよ。 けど、try必須だと書くのが面倒なんだよね。実際、Javaでは非検査例外のほうが主に使われてるし… 検査例外と非検査例外を場合によって書き分けるのがJavaの理想なんだろうけど、現実はそうじゃない… Swiftの例外はtryの書き方が何種類かあるからJavaより使い易くはなってるんだけど Rustと同じでタグ付きユニオン(enum型)あるから別に必要なくない?ってなる Rustはエラー処理にenumのResult型を使うけど、Swiftでは例外を使うのがマナーなのかな?
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
781 :デフォルトの名無しさん[sage]:2018/04/08(日) 03:49:10.38 ID:DdcJdhQn - >>780
例外の一番の問題は予想外の場所で例外が不必要にキャッチされて、その上で 握りつぶされてしまった場合、握りつぶされた場所を特定するのがかなり面倒臭いこと。 そんなコード書くヤツが悪いと言いたいが実際にいるんだからしょうがない… どこで握りつぶされるか分からんリスクを背負うくらいならその場で握りつぶされた方がまだいい 因みに、エラーハンドリングに関してはRustのResult型が最も筋が良いと思ってる Result型なら故意に握りつぶそうとでもしない限りは簡単には握りつぶせない
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
792 :デフォルトの名無しさん[]:2018/04/08(日) 13:50:33.26 ID:DdcJdhQn - >>782
なんか会話が噛み合わないなと思ってたがやっと理由が分かった気がする。 >>782の言う"どこ"はGoのエラー(戻り値)は握りつぶしがしやすいから 誰が"どこ"でエラーを握りつぶすコードを書くか分からないって意味の"どこ"だよね。 俺の言う"どこ"は例外がスローされた場所に対して キャッチされる場所が"どこ"か分からないって意味の"どこ"なんだよ。 キャッチされる場所が分からないとデバッグ時に探すのが面倒なんだよ。 Goみたいに戻り値としてエラーが返されるとエラーの発生場所と 握り潰した場所は必ず一致するからデバッグしやすい。 結局、従来の例外はgoto文と同じでフローが飛ぶから気持ち悪いってのが俺の意見。
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
794 :デフォルトの名無しさん[]:2018/04/08(日) 14:12:58.97 ID:DdcJdhQn - >>791
でも、次世代言語って間違った使い方(プログラマによるミス)をさせないように 制限をかける意味合いが強くない?Null安全とかその典型だと思うんだけど。 オレは絶対に使い方を間違えないって言うんならC++, C#とかを使ってろよってなるし…
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
797 :デフォルトの名無しさん[]:2018/04/08(日) 14:23:41.21 ID:DdcJdhQn - >>795
すまん。よく考えると確かにデバッグはどっちも面倒なことに変わりないわ。 ただ、個人的にはtry-catchも,_もどっちも見つけづらさは大して変わらないと思ってる。 デバッグ時じゃなくて、普通にコードを読むときに戻り値でやったほうがフローを把握しやすいってことが言いたかった。
|
- 次世代言語9[Haskell Rust Kotlin TypeScript Dart]
802 :デフォルトの名無しさん[]:2018/04/08(日) 14:37:23.36 ID:DdcJdhQn - >>799
タグ付きユニオンがある言語ならそれが一番だと思う。 前にも言ったけど、エラーハンドリングに関してはRustのResult型が一番筋がいいと思ってる でも、Goにはタグ付きユニオンがないからなあ…
|