ASPの論理演算子

2014-03-22

久々に ASP で書いているのだが、ASP ってこんなに変な言語だったっけ??
ASP に限った話ではないのだが、まず対象となる変数が有効であることを確認し、その後、その変数の値を元に分岐する、、、なんてことはよくあると思うのだが、そういうのって普通こんな感じに書くよね。

 If Not AAA IS Nothing AND AAA(1) = 1 Then ...


上記の例だと、AAA が Nothing な場合には、NOT AAA IS Nothing を満たさないので、AND 以降の条件はそもそも判定する必要がない。
つまり、AAA(1) を判定しようとする際には、AAA は必ず何らかの有効な値、配列、オブジェクト等々を持っているので、いわゆる undefined 的なエラーは発生しないということが担保される。

 If AAA IS Nothing OR AAA(1) = 1 Then ...


OR でも同じ事が言えて、上記の例だと、AAA が Nothing な場合には、AAA(1) を判定しなくても If 文の条件を満たすので、AAA(1) は実際には判定されない。
AAA(1) が判定されるのは、AAA が Nothing ではない時だけなので、こちらも、いわゆる undefined 的なエラーが発生しないということが担保される。

こんなのはたいていの言語の論理演算子を使う上で常識だと思っていたのだが、、、、なんと!!
ASP ではこの常識が通用しない( ̄□ ̄;)!!

ASP の場合には、論理演算子の左辺の条件に関わらず、右辺も必ず判定されるらしい。
つまり、

 If Not AAA IS Nothing AND AAA(1) = 1 Then ...


この場合だと、AAA が Nothing であれば、必ず If 文中の条件は否定されるのだが、それでも AAA(1) は必ず判定されるみたい。
従って、AAA が Nothing なら、AAA(1) なんてものは undefined 的なエラーとなる。マジで!?

そういった記述は特に見つけていないのだが、実際に書いて動かした結果、そうとしか思えないので、念のため記録。
というか、こんな変な言語ホント捨て去って欲しいのだが。。。。(-_-#

2014
2