【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
基礎解説
チェック式 WSH入門 第5回

3.ブール・データ型

Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2006/09/22

 そのほかのデータ型として、日付(時刻)型(Date)、文字列型(String)、ブール型(Boolean)、エラー型(Error)、オブジェクト型(Object)がある。このうち、エラー型については、VBScriptで用いることはほとんどないと思われるので割愛する。また、オブジェクト型については、後の回で詳しく説明するのでここでは省略する。日付型と文字列型については、連載第4回「4.日付処理関数を使いこなす」でそれらを扱う関数とともに使用例を紹介した。残る型としてはブール型があるが、これは今回初登場なのでこれから解説する。

 ブール型とは、True(真)かFalse(偽)かのどちらかを格納する最も単純なデータ型である。二者択一の情報を格納するときに用いられる。例えば、後述するIs〜といった関数の戻り値はブール型である。

 実は、ブール型の値は比較演算子を使うときにも扱っている。第3回「3.WSHで条件分岐処理をする」で登場したコードを一部修正して再掲する。

Option Explicit
Dim intX, intY
intX = 5
intY = 3

If intX > intY Then
       MsgBox intX & "は" & intY & "より大きい。"
Else
       MsgBox intX & "は" & intY & "以下だ。"
End If

 このようなコードは、ブール値を扱っていることを明確にすると、次のように書き換えられる。なお、コードの後半に変数の内容と型を表示するコードを追加している。

Option Explicit
Dim intX, intY, blnCondition
intX = 5
intY = 3

blnCondition = intX > intY

If blnCondition Then
       MsgBox intX & "は" & intY & "より大きい。"
Else
       MsgBox intX & "は" & intY & "以下だ。"
End If

MsgBox "変数名:blnCondition " & vbCrLf & _
"値:" & blnCondition & vbCrLf & _
"型:" & TypeName(blnCondition)

 If〜Then〜ElseステートメントではIfの後に条件を書くが、それがブール型のTrueならThenの後が実行されるということである。Falseの場合はElse以下が実行される。intXとintYの値を入れ替えて試してもらいたい。なお、If blnCondition = True Thenと記述しても同じことである。Trueであることを強調したい場合はこちらの記述をするのがよい。

 ブール型は「条件Aまたは条件B」や「条件Aかつ条件B」や「条件Aでない」などを表すのに便利である。これらを「論理演算」といい、論理演算を行う演算子を論理演算子という。例えば、「18以上、30以下」という数値の範囲を表すには、「条件Aかつ条件B」(条件Aと条件Bの論理積)を意味するAnd演算子を用いる。次の例ではIf〜Then〜Elseステートメント中でAnd演算子を用いている。

Option Explicit
Dim intX
intX = 28
If intX >= 18 And intX <= 30 Then
        MsgBox intX & "は、18以上30以下です。"
Else
        MsgBox intX & "は、18未満か、30より大きいです。"
End If

 これは、intX >= 18(18以上)というブール型の条件Aと、intX <= 30(30以下)というブール型の条件Bの論理積を求めている。結果はやはりブール型で返され、範囲内だとTrueを返す。

 ほかによく用いる演算子としては、「条件Aまたは条件B」を表す論理和(Or演算子)、「条件Aでない」を表す論理否定(Not演算子)がある。これらの論理演算子は数値演算子と同様、( )を用いたりして組み合わせて利用することが可能である。

 論理演算は下図のような「ベン図」を用いると分かりやすい。論理積は2つの条件の円が交わる部分を表している。

18以上30以下の範囲を示すベン図
斜線部分が2つの条件の論理積を示す。

 ここで1つ論理演算にまつわる例題を出そう。「うるう年」は1年が366日ある年のことだが、ある年がうるう年であるためには3つの条件がある。

(1)うるう年は西暦が4で割り切れる年とする。
(2)(1)のうち、100で割り切れる年は平年とする。
(3)(2)のうち、400で割り切れる年はうるう年とする。

 これを一文で書くと、うるう年とは、「『西暦が4で割り切れ、かつ100で割り切れない年』または『西暦が400で割り切れる年』」となる。この条件を論理演算子の組み合わせで表現し、任意の年がうるう年かどうかを判定するスクリプトを書いてみよう。割り切れるかどうかはMod演算子(割り算の余りを求める)を用いて0になるかどうかで判定する。

マーカーで隠れたところを、1つずつクリックしてチェックしてみよう。 マーカーで隠れたところを、1つずつクリックしてチェックしてみよう。
Option Explicit
Dim intYear, blnLeapYear
intYear = 2112 '判定したい西暦を指定

If blnLeapYear Then
        MsgBox intYear & "年は、うるう年です。"
Else
        MsgBox intYear & "年は、うるう年ではありません。"
End If

 演算子を複雑に組み合わせるので少し難しかったかもしれないが、お分かりいただけただろうか? まず、「西暦が4で割り切れ」なのでintYear Mod 4 = 0というブール値を書く。「かつ100で割り切れない」ので、先ほどの値とintYear Mod 100 <> 0をAnd演算子で論理積を取る。「または400で割り切れる年」なので、先ほどまでで計算したブール値と、intYear Mod 400 = 0の論理和をOr演算子で取る。ベン図で描くと分かりやすいだろう。

うるう年の条件を示すベン図
赤い斜線で示した部分がうるう年を示す。
 

 INDEX
  [基礎解説]チェック式 WSH入門
  第5回 データ型について理解を深めよう
    1.VBScriptのデータ型
    2.形名の調査と数値データ型
  3.ブール・データ型
    4.暗黙の型変換
    5.明示的な型変換と特殊な値
 
 基礎解説

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?