ONERRORとかTRAPERRORなどのエラースキップ処理命令
変数の型をチェックする命令・方法ってありますか?
標準命令を探したのですが無い様なので良い方法があれば教えてください。
'Dim ii as Long
' TRAPERROR :ii="A" :If CheckError Then ii=-1
'Dim ii as Long
'ONERROR(Sub()) :ii="A"
'Function Sub()
' ONERROR()
'End Function
'isLong(ii) :isString("A")
ONERROR・TRAP・型チェック用命令ってありますか。
コンパイラ型言語という性質上,そのような命令はありません。uhsp さんが書きました: ONERRORとかTRAPERRORなどのエラースキップ処理命令
変数の型をチェックする命令・方法ってありますか?
標準命令を探したのですが無い様なので良い方法があれば教えてください。
特にuhspさんがおっしゃる「型違いエラー」については,コンパイル時に
エラーがチェックされるのでそもそも必要ありません。
「ファイルが開けない」とか,実行時にしか分からないエラーについては,
関数の返り値とかでエラーかどうかが判断できるのが普通です。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
> 「ファイルが開けない」とか,実行時にしか分からないエラーについては,
> 関数の返り値とかでエラーかどうかが判断できるのが普通です。
確かに実行時エラーについては、API関数の戻り値などに十分に気を払っていれば対処できます。
しかし、厳密な異常系の処理を記述するのは相当の困難が伴いますし、プログラムの本当の流れを見失いやすくしてしまいます。
API系統で発生したエラーはともかくとして、ゼロ除算など、実行時に自動検出が出来るエラーというのは少なくないものです。
オーバーフローの場合、コードによる検出は困難です。
このようなエラーが発生したときに自動的に対処してもらいたいものですが、現状のABではそれが出来ません。
ABがエラーに弱い言語であることは否めないのです。
ちなみに、C言語ではゼロ除算エラーがトラップされなかったとき、OSによってプログラムが止められます。
ABでは、何事もなかったかのように処理を継続します。
もしエラー検査を怠っていれば、深刻な大惨事に至るのは必至です。
しかし、ABが自動的にエラーを検出してくれれば、その分すっきりとしたコードが書けるのではないでしょうか。
> 特にuhspさんがおっしゃる「型違いエラー」については,コンパイル時に
> エラーがチェックされるのでそもそも必要ありません。
本当に必要ないでしょうか。
実は、実行時型チェックの考え方は既に存在します。
C++のRTTIなどを調べてみてください。
AB4からはオブジェクト指向プログラミングをサポートしますから、考える余地はあるはずです。
> 関数の返り値とかでエラーかどうかが判断できるのが普通です。
確かに実行時エラーについては、API関数の戻り値などに十分に気を払っていれば対処できます。
しかし、厳密な異常系の処理を記述するのは相当の困難が伴いますし、プログラムの本当の流れを見失いやすくしてしまいます。
API系統で発生したエラーはともかくとして、ゼロ除算など、実行時に自動検出が出来るエラーというのは少なくないものです。
オーバーフローの場合、コードによる検出は困難です。
このようなエラーが発生したときに自動的に対処してもらいたいものですが、現状のABではそれが出来ません。
ABがエラーに弱い言語であることは否めないのです。
ちなみに、C言語ではゼロ除算エラーがトラップされなかったとき、OSによってプログラムが止められます。
ABでは、何事もなかったかのように処理を継続します。
もしエラー検査を怠っていれば、深刻な大惨事に至るのは必至です。
しかし、ABが自動的にエラーを検出してくれれば、その分すっきりとしたコードが書けるのではないでしょうか。
> 特にuhspさんがおっしゃる「型違いエラー」については,コンパイル時に
> エラーがチェックされるのでそもそも必要ありません。
本当に必要ないでしょうか。
実は、実行時型チェックの考え方は既に存在します。
C++のRTTIなどを調べてみてください。
AB4からはオブジェクト指向プログラミングをサポートしますから、考える余地はあるはずです。
考え方自体が必要ないというよりは,(現状の)ABの性質上必要ないということです。tak さんが書きました:> 特にuhspさんがおっしゃる「型違いエラー」については,コンパイル時に
> エラーがチェックされるのでそもそも必要ありません。
本当に必要ないでしょうか。
実は、実行時型チェックの考え方は既に存在します。
C++のRTTIなどを調べてみてください。
AB4からはオブジェクト指向プログラミングをサポートしますから、考える余地はあるはずです。
確かにABでも出来ると面白いかもしれませんが,(私は・いまのところ)ABにそこまでは求めませんね(^^;)
※テンプレートとかはあってもいいかもしれませんが
※とりあえずオーバーロードは欲しいです(笑)
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
Sinryow・takさん早速の回答ありがとうございます。
言語仕様の問題なのは理解できましたが
宣言された変数のタイプすらコンパイル時にしか判読できないのでしょう?。
(バリアント型の変数が扱えると変数の型が判読できる気がするのですが)
コンパイル時にエラーをトラップする手段は言語仕様に依存してしまい
別の方法での処理も不可能なのでしょうか?。
#ActiveBasicの利点はBASIC感覚でネイティブコンパイルが出来て
ランタイムが不要に魅せられて学習を始めましたが
従来のBASICの感覚では扱いずらいですね。
#しかしネイティブコンパイルなBASICは
殆どこんな感じかGTKを使用してますね。(FreeBasic Bcx etc)
言語仕様の問題なのは理解できましたが
宣言された変数のタイプすらコンパイル時にしか判読できないのでしょう?。
(バリアント型の変数が扱えると変数の型が判読できる気がするのですが)
コンパイル時にエラーをトラップする手段は言語仕様に依存してしまい
別の方法での処理も不可能なのでしょうか?。
#ActiveBasicの利点はBASIC感覚でネイティブコンパイルが出来て
ランタイムが不要に魅せられて学習を始めましたが
従来のBASICの感覚では扱いずらいですね。
#しかしネイティブコンパイルなBASICは
殆どこんな感じかGTKを使用してますね。(FreeBasic Bcx etc)
もともとAB(3~4)は言語のシステムがCに近いこともあり,難しいと思います。uhsp さんが書きました: 言語仕様の問題なのは理解できましたが
宣言された変数のタイプすらコンパイル時にしか判読できないのでしょう?。
(バリアント型の変数が扱えると変数の型が判読できる気がするのですが)
もしやるとすればAB自体にそのシステムを導入するか自分で実装することになると思いますが
自分で実装するとすれば最低でも(?)テンプレートが必要になるでしょうから・・・。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================