練習 |
中級の段階に入っていますが、「練習」のコーナーを設けることにしました。 |
And と Or |
If 文で いろんな条件の判定ができること、2つ以上の条件は And や Or で続けて書けること、
は すでに皆様ご存知だと思います。
And だけの組み合わせ、または Or だけの組み合わせだと、問題はありません。 And と Or を組み合わせた場合に問題が発生します。 まず、例題を出しましょう。 例題1.月と日を入力させて、5月3日だったら「祝日です」とメッセージを出します。 これを、以下のようにコーディングしました。
月と日が別々の変数の中に入りますので、「5月3日」の判定は、「月が5、かつ日が3」の2つの条件の判定になります。 「月が5、かつ日が3」の部分は上記ソースの6行目です。 If tuki = 5 And hi = 3 Then 「月が5」と「日が3」を And でつないでいます。 では、次の例題はどうでしょうか? 例題2.月と日を入力させて、5月5日だったら「祝日です」とメッセージを出します。 例題1の後だと、ひどく簡単に見えるでしょ? 例題1.の6行目の数字を変えるだけですね。
続きまして、例題3です。
例題3.月と日を入力させて、5月3日または5月5日だったら「祝日です」とメッセージを出します。 「なんだ、簡単じゃないか」と思った人は、間違いを起こす可能性が高い人です。 ご注意ください。 例題3.のソースのサンプルをお見せします。
問題の6行目は、
If tuki = 5 And hi = 3 Or hi = 5 Then となっていますね。 「月が5」というのが共通なので、tuki = 5 を繰り返さずに、1つにまとめているのですね。 なかなかよく考えています。 これは、「5月で、3日か5日だったら」の意味です。 人間なら、これで解るでしょう。 しかし、悲しいかなコンピューターはアホです。 もっと正確に指示しないと、エラーが発生してしまいます。 さて、どういうエラーでしょうか? 実行してみるのが一番よいのですが・・・。 Reidai3_1 を実行してみます。
じつは、1月5日以外でも、同じエラーが発生します。
2月5日でも、3月5日でも、「祝日です」のメッセージが表示されます。 なぜかと言うと、VB は6行目の、 If tuki = 5 And hi = 3 Or hi = 5 Then を、次のように解釈しているのです。 (a) 月が5で日が3(つまり5月3日)だったら、If tuki = 5 And hi = 3 Then (b) あるいは、日が5(つまり何月でも5日)だったら、Or If hi = 5 Then これでは目的が果たせないことを、理解いただけるでしょうか? VB に解釈してほしいのは、こんな感じなのです。
If tuki = 5 And hi = 3 Then Or If tuki = 5 And hi = 5 Then 無論、これは構文エラーなので、ちゃんと VB の文法にそって書き直すと、 If tuki = 5 And (hi = 3 Or hi = 5) Then となります。 あるいは、次のようにしても構いません。 If (tuki = 5 And hi = 3) Or (tuki = 5 And hi = 5) Then こんな風に、And と Or が混じるとややっこしいことになります。 その為、And と Or は、別の If 文にしたほうが、すっきりすることが多いのです。 別の If 文にして書き直すと、
If tuki = 5 Then
となります。If hi = 3 Or hi = 5 Then If 文のネスト(階層)が深くなるのが難点ですが、わかりやすくなると思いませんか? では、練習問題を1つ出します。
練習問題.
月と日を入力させて、5月3日または5月5日または11月3日または11月23日だったら「祝日です」とメッセージを出します。 |