-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
エラー処理について #304
Comments
このエラー型の概念って他の言語にあったりしますか? |
Either? |
エラーを関数の返り値として表現している点ではEitherと似ていると思います。 |
|
型エラーだと原因が分かりにくいので… |
|
「null以外の何かを返す」が目的ならエラーチェックしないのはnull参照と同じで自己責任だと思う |
普通の |
それはその通りです |
ごめんなさい、これよく分かってないです。解説希望です |
|
次回参照された時にエラーメッセージを出す機能の話でしたら、まあ無くてもいいかもしれませんがあったほうが便利かなと思っています。 |
とりあえずはモナドのように失敗可能性のある処理にだけErrorを返させようと思っています。 |
復帰可能( |
のような複合のエラーメッセージを出すのはどうでしょうか? |
基本的にはその場でエラーを発生させて、ユーザーの選択(専用の構文を使うなどして)でError型の値を返すようにするのはどうでしょう try catchのように呼び出し元でのエラーキャッチができないと思います。これが少し気になりました |
でやりたいことは基本的に
で出来るはずなのでその問題はないと思います。 |
できないは違いました |
エラーを例外ではなく返り値の型で表すことの利点の一つは(静的型チェックを行うシステムであれば)エラーの種類まで含めて型システムが働くことであり、try-catch文が混ざるとこの利点が消えてしまいます。 また、もう一つの利点は(静的型チェックがあれば)プログラマにエラーの処理を強制出来ることなので
これがむしろ利点になります。 (現状は静的型チェックがないのでただ面倒になっているだけですが…) |
せめて
みたいなシンタックスシュガーは用意すべきかも…? |
これについてはどうですかね? |
throw-catchの話ではなく、基本的にはその場で実行を停止するようにしたいという話ですか? |
エラー処理するまでもなくとりあえず動けば良いというようなスクリプトの使い方もあると思ってます。 |
エラーを型で表す方式は厳格な型システムを前提としているので、「とりあえず動けば良いというようなスクリプトの使い方」とは思想が真っ向から対立するんですよね… |
現状の使い方からするとメッセージ付きの |
専用構文でエラー処理を宣言するだけで厳密なエラー処理しようとしている書き手の意図は確認できますね |
話を遡りますが、 @saki-lere さんの言っていた「復帰不可能な」エラーとは、「事前回避可能な」エラーをそう呼んでいるという認識で正しいでしょうか? |
@marihachi という訳で、エラーを「即時停止するエラー」と「処理すべきエラー」に分けようと思うのですが、どうでしょうか? |
例えば、以下のような2種類を分けるということですかね これについては賛成です |
それでなんですが、そもそも入力の違いや外部要因によって起きるエラーだけを処理可能にするのであれば、そのようなエラーに即時停止のオプションをつける旨味は小さいと思うのですが、いかがでしょうか? |
処理に失敗した時の値ってことですよね Rustだったら、Resultって仕組みがあって成功失敗を返すとかあったり これまでの話で概ね理解できました |
普通にthrow catchを実装してもいいですが、「エラー型」の実装ができそうなので提案します。
エラー型について
次のようなものを考えています。
e
が発生したとき、通常の値の代わりにこの「エラー型」の値Error(e)
を返す。e
である。Core:type
を使用して見分けることができる。これにより例外処理を行う。#11 で @syuilo さんが言っていたことを、既存のAiscriptコードの動作を壊さない範囲で実装する案です。
The text was updated successfully, but these errors were encountered: