【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
基礎解説
チェック式 WSH入門 第5回

4.暗黙の型変換

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

 ある型から別の型に値を変換することを型変換という。型変換には関数を用いた明示的な型変換と、VBScriptが値を判断して行われる暗黙の型変換が存在する。

 数値同士の型変換は、数値演算するときに暗黙的に行われることが多い。「整数値を扱うデータ型」の項で説明したサンプルは、本来ならInteger同士の足し算の結果はIntegerとして返されるのだが、Integerの範囲を超えたため、自動的にLongに変換され変数に格納されている。

 また、例えばIntegerとDoubleという異なった型を組み合わせて数値演算すると、結果はDoubleになる。これは、計算する型が異なる場合は、よりカバーする範囲の広い型(Integerに比べてDoubleは広い範囲をカバーする)に型変換されてから計算されるためである。以下のサンプルを実行してもらいたい。

Dim intNumber, dblNumber, dblResult
intNumber = 1 'Integerの値
dblNumber = 1.35 'Doubleの値
dblResult = intNumber + dblNumber
MsgBox "変数名:dblResult " & vbCrLf & _
"値:" & dblResult & vbCrLf & _
"型:" & TypeName(dblResult)

 結果は次のようになる。

数値演算中に発生する暗黙の型変換
異なった数値型同士の演算は、よりカバーする範囲の広い型に合わせて行われる。

 数値から文字列の暗黙の型変換についてはこれまでにも何度か登場してきた。例えば、

Option Explicit
Dim lngNumber, strMessage
lngNumber = 838861
strMessage = lngNumber & "枚のコインを購入する。"
MsgBox strMessage

のように、Longの値とStringの値を文字列連結演算子&で結合すると、Longの値がStringに型変換され、結果として1つのStringの値になる。

 また逆に、文字列から数値への型変換も暗黙的に行われる場合がある。

Option Explicit
Dim strNumber, numPrice, strMessage
strNumber = InputBox("購入するコインの枚数を入力してください。(コインは1枚20円です)")
numPrice = strNumber * 20
strMessage = strNumber & "枚のコインは、" & numPrice & "円です。"
MsgBox strMessage

 この例では、InputBox関数で数値を入力すると、その値を20倍するという数値演算を行っているが、その際、StringからLongやIntegerなどに型変換が行われ、適切に処理される(もちろん、InputBoxに適切な数値を入力する必要がある)。

 文字列から数値への型変換には1つ注意点がある。それは、数値が含まれたString値の足し算をする場合である。実は、VBScriptの+演算子には2つの意味がある。1つは数値の足し算を意味する算術演算子で、もう1つは文字列の連結を意味する文字列連結演算子なのである(&と同等)。次の例を見てもらいたい。

Option Explicit
Dim strX, strY, numSum
strX = InputBox("Xの値を入力してください。")
strY = InputBox("Yの値を入力してください。")
numSum = strX + strY
MsgBox strX & "+" & strY & "=" & numSum

 このサンプルを実行すると次のようになる。

暗黙の型変換がうまくいかない例
文字列が数値に型変換されず、文字列同士の連結になっている。

 この例だと、100+50なのだから、結果は150となるべきなのに、100と50が文字列のまま扱われ、“10050”という文字列が返されてしまっている。これは、+算子は文字列同士を扱う場合は文字列を連結するという特性を持っているためである(ただし、片方が数値で、片方が数値の含まれた文字列の場合だと、数値同士の足し算になる)。これは文字列型がうまく数値型に変換されない例である。


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

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

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

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

RSSフィード

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

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

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

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

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

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています