
教本ではtry catchのExceptionは全てのエラーを拾えるみたいに書いてあり、例えのコードであるStringの変数をIntに変換するような事態には実際に対応できます。
しかしStringの変数を四則演算するようなエラーだと対応できません。
Exceptionで対応できないコードの例:
fun main() {
var test = "inu"
try {
println(test * 3)
}catch(e: Exception){
println("エラーです")
}
}
Exceptionも実際には万能ではないということでよいのでしょうか。
また、そうだとすると万能なエラー対応の方法はありますか。
No.2ベストアンサー
- 回答日時:
補足について
> println(test * 3)
> を
> println(test.toInt())
後者だと、プログラムには静的に(すなわちコンパイル時に)チェックできる間違いはなくなります。toIntが"inu"を整数値に変換できないことはコンパイラは知る由もないことですから。
従って、この場合はプログラムが実行され、実行時にtoIntが"inu"を整数値に変換できないということを例外を発生させて報告します。それがcatchで捕捉されて『エラーです』を表示するわけです。
一方で前者だと test * 3 が間違っていることをコンパイラが検知します。これは前の文 var test = "inu" からtestが文字列型であることを推論し、string * int の演算が定義されていないからです。この場合コンパイルエラーになってプログラムは実行されず、従ってExceptionは発生しません。
Exceptionの機能はコンパイルで静的にはチェックできない間違いをプログラムの実行時に検出するもので、コンパイル時に捕捉されるエラーは対象外です。
調べてみるとコンパイルエラーと実行時エラーというものがあるんですね。
なるほど。Exceptionはコンパイルエラーには対応できないということですね。
No.3
- 回答日時:
コンパイル出来なくて実行不能なプログラムで
実行時にエラーを捕捉出来ないのは、そもそも実行出来ない
のだからあたりまえだけど
exceptionに何を期待しているのでしょう。
コンパイル出来ない、つまり何をどう実行すべきか不明なプログラム
の実行時エラ―というもの考える事自体
奇妙奇天烈だと思います。
No.1
- 回答日時:
Kotlinは使ったことないけど静的型付け言語だよね。
質問に記載のコードだとException以前にコンパイル段階でエラーになると思うけど。
Exceptionは実行時のエラーを捉えるので実行まで行かないなら話にならない。
あるいは string * int の演算が定義されていてエラーにならず実行できる?
『Exceptionで対応できない』というのがどういう状況かで話が変わるね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
python プログラミング vim
-
C言語のプログラムが実行できま...
-
教えて下さい
-
配列数式の解除
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
UserForm1.Showでエラーになり...
-
エクセルで特定の列が0表示の場...
-
ExcelVBAでPDFを閉じるソース
-
一つのTeratermのマクロで複数...
-
【エクセル】測定時間がバラバ...
-
Excel_マクロ_現在開いているシ...
-
エクセルの改ページを行ごとに...
-
特定文字のある行の前に空白行...
-
String""から型'Double'への変...
-
On ErrorでエラーNoが0
-
Excelのセル値に基づいて図形の...
-
エクセルVBAでApplication.Sum...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
VBでエラー'ActiveX component ...
-
他クラスからForm1内コントロル...
-
対応する関数ヘッダーがありません
-
intel fortranのエラーで困って...
-
フォートラン(fortran)のエラー...
-
クラスに volatile は必要?
-
Excel VABについて 下記記述が...
-
Delphiでif文がうまく書けないです
-
ラズパイ上の、pythonのエラー...
-
Excel VBA: UserForm.Show で実...
-
コンパイルエラー
-
ISLispのsetq関数について教え...
-
C# IEnumerable が IEnumerable...
-
typedef による2重定義
-
構造体のポインタ参照
-
C2065: 'EnumDisplayDevices' :...
-
STL mapでアクセス違反
-
43:syntax error at end of input
おすすめ情報
補足です。
例えば
println(test * 3)
を
println(test.toInt())
にするとここは間違っていますがコードそのものは実行可能です。
実行可能、つまりExceptionが働いてくれたイコール対応できる、です。
文字列のInt型への変換という間違いには対応(強制的に無視して代わりの処理を)できていますが、文字列を四則演算するような間違いにすると対応できていません。
ということはExceptionは万能ではない、あるいはそれ以外の問題なのか、がこちらの意図です。