- ベストアンサー
if文の条件式の書き方
If intTemp <= intTemp2 <= intTemp3 Then というif文があります。このif文の意味とどの時にifの中に入るのでしょうか? intTemp = 1 intTemp2 = 2 intTemp3 = 3 の時には通る intTemp = 5 intTemp2 = 4 intTemp3 = 3 のときも通る intTemp = 5 intTemp2 = 8 intTemp3 = 3 の時も通ってしまいます。 本当はコンパイルエラーだと思ってのですが・・・ 全然わからないのでわかりやすくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 If intTemp <= intTemp2 <= intTemp3 Then では、まず intTemp <= intTemp2 が評価されます。 この時、結果は論理値(True Or False)が返されます。 次に、 (intTemp <= intTemp2の評価結果の論理値) <= intTemp3 が評価されます。 ここで、論理値は True = -1 False = 0 という数値に換算されて評価されます。 したがって、「intTemp <= intTemp2」がTrueなら、 -1 <= intTemp3 Falseなら、 0 <= intTemp3 が評価されることになります。 質問の3つの例は、全てintTemp3が3であるため、「intTemp <= intTemp2」の結果がTrue(-1)であろうと、False(0)であろうと必ず、Trueになります。 言い換えると、intTemp3の値が0以上の場合は、必ずTrueになるわけです。 例えば、intTemp3を-1にすれば、1つ目と3つ目はTrueになり、2つ目のみFalseになります。
その他の回答 (3)
- PAPA0427
- ベストアンサー率22% (559/2488)
私もその辺の動きはわかりません。推測で良いでしょうか? たぶんなんですが、最初のintTemp <= intTempの結果はは「False」か「Ture」で帰ってきますね。 Ture = -1 で False = 0 と見なせば <= iTure3の結果は常に「True」になるからではないでしょうか?
- mfuku
- ベストアンサー率50% (173/345)
If ~ Then は ~ がTrue(=0以外の時)の時成立し、False(=0の時)の時成立しません。 ですから、こういった書き方もできます(必ずしも、等号・不等号を使う必要はありません)。 If intTemp Then このばあい、intTempが0以外の場合成立します。 また、 intTemp <= intTemp2 は?といいますと・・これは1つの「計算」と解釈します。 どういった計算かと言いますと、 成立している場合True(=0以外ですが、ここでは-1が計算されます)、成立しない場合False(=0)が計算されます。 そこで、 If intTemp <= intTemp2 <= intTemp3 Then ですが、まず intTemp <= intTemp2 が計算されて、-1か0のどちらかが計算されます。 同じように、 -1 <= intTemp3 あるいは 0 <= intTemp3 が計算されて、すべて3以下ですので、この計算は、Trueが返ってきます。 そこで、 If intTemp <= intTemp2 <= intTemp3 Then の条件式が成立することになるのです。 構文エラーではありません。 試しに、intTemp3 = -3 としてみて下さい これは成立しないと思います。
- PAPA0427
- ベストアンサー率22% (559/2488)
記述に誤りがあります。 If intTemp <= intTemp2 And intTemp2 <= intTemp3 Then としてください。
補足
少し言葉が足り無かったようですみません。 他の人が書いたソース中で If intTemp <= intTemp2 <= intTemp3 Then という記述を見つけましたのですが、私も If intTemp <= intTemp2 And intTemp2 <= intTemp3 Then が正しいと思うのですが、 If intTemp <= intTemp2 <= intTemp3 Then という記述が通ってしまう意味がわからないのと、 If intTemp <= intTemp2 And intTemp2 <= intTemp3 Then と書いた時と同じような動きをする時としない時があるのでその違いが知りたかったのですがわかりますでしょうか?
お礼
ありがとうございます。 If intTemp <= intTemp2 = False Then とかと同じ意味なんですね。 やっとわかりました(感謝)