Visual Basic 初級講座 |
Visual Basic 中学校 > 初級講座 >
第4回 変数と型
今回は「電卓」を作ります。電卓といってもWindowsに付属しているようなちゃんとしたものではありませんが、電卓つくりを通してVBにおける変数の取り扱いが理解いただけることと思います。
この回の要約 ・変数を使うと、一時的に値を保存しておこうことができる。 ・変数を使うには Dim などを使って宣言する。
・変数には変数の表す値に応じて「数値型」や「文字列型」などの種類がある。 |
1.練習
まずは練習して腕だめしをしましょう。TextBox(テキストボックス)に 4×9 の答えを表示させるプログラムを作ります。
新規プロジェクトを作成してフォームにTextBox(テキストボックス)とButton(ボタン)を配置してください。
TextBoxとButtonのアイコンがわからない人は下の画像1を参考にしてください。
■画像1:ツールボックスの一部
そしたらButtonをダブルクリックします。この時点でClickイベントのコードが次のよう に自動的に生成されます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub |
■コード1:自動生成されるコード
もちろんこれより上にはさらにごちゃごちゃといろいろ生成されていますがそちらは今回は一切いじらないでください。
さて、これにTextBoxに 4×9 を表示させるコードを書くと次のようになります。
Private
Sub Button1_Click(ByVal sender
As System.Object, ByVal
e As System.EventArgs)
Handles Button1.Click
TextBox1.Text = 4 * 9 End Sub |
■コード2:4×9を表示する
実行してButtonをクリックすると確かにTextBoxに 36 と表示されるのが確認できるでしょう。
ここでのポイントは2つです。
1.TextBoxに表示される文字は Textプロパティ(テキスト)で設定できる。
2.VBでは掛け算の記号は × ではなく * である。
どちらも一度知ってしまえば「そうかそうか」という具合に2度目以降は特に悩むこともないでしょう(忘れることはあるかもしれませんが)。
2.四則演算
では、いよいよ +−×÷ の四則演算が計算できるようにします。
次の表の様に7つのコントロールをフォームにはりつけてください。
名前 種類 Textプロパティ 用途 txtValue1 TextBox (空白) 1つ目の数値を入力する txtValue2 TextBox (空白) 2つ目の数値を入力する lblAnswer Label (空白) 答えを表示する btnPlus Button + 足し算を行う btnMinus Button − 引き算を行う btnMulti Button × 掛け算を行う btnDiv Button ÷ 割り算を行う ■表1:電卓プログラムで使うコントロールの設定
貼り付ける位置は皆さんのセンスにおまかせします。前回までの知識を生かして色をつけたりして楽しんでもかまいません。
■プログラム1:私はこんな感じに貼り付けました。
さて、まずは足し算を装備しましょう。btnPlusをダブルクリックして次のように記述してください。
Private
Sub btnPlus_Click(ByVal sender
As System.Object, ByVal
e As System.EventArgs)
Handles btnPlus.Click
Dim
X As
Decimal Dim Y As Decimal X = txtValue1.Text lblAnswer.Text = X + Y End Sub |
■コード3
少し解説が必要でしょう。2行目、3行目が今回のテーマである「変数」の宣言です。 この部分が今回のメインテーマの1つです。この部分以外のコードは直感的に何が書いてあるか分かると思います。
この例では変数Xと変数Yが登場していますが、 6行目で X + Y という計算をするために使っています。この6行目は変数を使わないで次のように書くこともできます。
lblAnswer.Text = txtValue1.Text + txtValue2.Text
今回は変数を解説するのであえてコード3のように書きました。変数のメリットはなんといっても値をとっておけることです。txtValue1.Textはテキストボックスに入力されている内容が変われば変わってしまいますが、変数の値は自分でセットしない限り変わることはありません。
変数に値をセットするには4行目、5行目のように記号 = を使います。また変数に値をセットすることを代入(だいにゅう)といいます。以降この講座でも代入という言葉を使うので注意してください。
変数は使用する前にDim (ディム)などで宣言する必要があります。繰り返しになりますがそれが2行目と3行目の部分です。この宣言はコンピュータに変数の準備をさせるために行います。また後々わかってくることですが人間のプログラムミスを防ぐ重要な役割もあります。
「使う前に宣言する必要がある」というのは人間の感覚からはしっくり来ないかもしれませんが最初は深く追求しないようにしましょう。使ってるうちになれてきます。
Dim X, Dim Yに続く As Decimal (アズ デシマル)の部分は 変数Xと変数Yが整数または小数であることを表しています。整数だけですむ場合は As Integer (アズ インテジャー)としておけばいいのですが、小数の計算もしたいので今回は As Decimalとしました。 As Decimalにしておけば 整数と小数と両方がOKなのです。
だったら数字は全部Decimalで宣言すれば便利なようにも思えますがそうはいかないのです。というのもDecimalで宣言された変数の計算はIntegerで宣言された変数の計算よりも遅く、メモリも使います。
なお、Decimalのことを日本語で「十進型(じゅっしんがた)」といいます。
このIntegerとかDecimalとかを型(かた)といいます。今回の もうひとつのテーマはこの「型」です。型は今説明したように「小数」だとか「整数」だとかを表現するものです。この他の型の種類についてはすぐ後で説明します。
4行目、5行目はtxtValue1とtxtValue2から数値を取得するためのものです。 もし、txtValue1やtxtValue2に数値じゃないもの(たとえば ABC)を入力した場合はここでエラーが発生してプログラムが止まってしまいます。
最後のlblAnswer.Text = X + Y はもうお分かりでしょう。日本語に訳すと「X+Y を計算して lblAnswerに表示しろ」というような意味になります。 直訳すると次のようになります。「lblAnswerの表示文字列 に X+Y を文字列型に変換したもの を代入せよ。」
結構説明が長くなりましたがこの部分の説明が今回のメインですからよく消化してください。
それでは、足し算を参考に「引き算」と「掛け算」と「割り算」を自分でプログラムしてみてください!ここまできたらもう簡単ですよね。後の方に全コードを掲載しているのでできたら照らし合わせてみてください。
ちなみにVBでは割り算の記号は / です。くれぐれも X ÷ Y などとプログラムしないように気をつけてください。
書き忘れましたが、大きすぎる値や文字列などを入力して足し算などを実行するとエラーになります。これはプログラムが悪いのではありません。これらの回避方法は後ほど説明します。
3.型
ここでいったん電卓からはなれて「型」についてもう少し詳しく説明します。
すでにでてきたように変数は使う前にDimなどを使って宣言しなければなりません。さらに宣言するときには同時に As で数字だとか文字列だとかいう「型」も指定しなければなりません。
たとえば、数値型の変数Xの宣言は次のようになります。
Dim X As Integer
Integerは数値を表す型(正確に言うと「データ型」)です。この他に既に小数までも表現できるDecimalが登場していますね。他にどんな型があるのでしょうか。表にまとめて見ました。
型 | 読み方 | 日本語名 | 説明 |
Boolean | ブール | 論理型 | True, False |
Byte | バイト | バイト型 | 0 〜 255 |
Char | キャラ | 文字型 | 0 〜 65535 |
Date | デイト | 日付型 | 1年1月1日〜9999年12月31日 |
Decimal | デシマル | 十進型(固定小数点型) | ±79,228,162,514,264,337,593,543,950,335 同じ桁数内で小数点使用可能。分解能0.0000000000000000000000000001 |
Double | ダブル | 倍精度浮動小数点型 | Long程度の桁数の小数 |
Integer | インテジャー | 整数型 | -2,147,483,648 〜 2,147,483,647 |
Long | ロング | 長整数型 | -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807 |
Object | オブジェクト | オブジェクト型 | |
Short | ショート | 整数型 | -32,768 〜 32,767 |
Single | シングル | 単精度浮動小数点型 | Integer程度の桁数の小数 |
String | ストリング | 文字列型 | 文字列 |
■表2:変数の型
まとめてみると書くべきことがたくさんあってはじめてみる人にはわかりにくい表になってしまいました。ここは「初級編」ですから、この表の内容の全てを理解する必要はありません。
ざっと見ていただくとわかるのですが、同じ「整数型」でもいくつかあることに気が付くでしょう。整数型の違いは表現できる範囲です。たとえば As Byteで宣言した変数に 256 以上の数値を代入することはできません。また、As Byte, As Charで宣言した変数にはマイナスの数値は代入できません。
小数を使うにはAs Decimal かAs Double, As Singleで変数を宣言する必要があります。このうち、DoubleとSingleは浮動小数点型を呼ばれ計算に誤差が発生します。この「誤差」についてはそのうち解説します。誤差が発生して困る場合はDecimalを使うとよいでしょう。
他に重要なのは文字列型のStringです。文字列を変数に代入したいときにはほとんどの場合このStringを使います。
「変数」という名前から数字ばかりを想像してしまいそうですが、このように文字列をも変数に格納することができるのです。
さらに進んで、Object型には数字、文字はもちろん他のあらゆるものを代入することができます。他の型とはだいぶ違って特殊なものです。
4.エラーを回避する
電卓に話を戻します。
大きすぎる値を入力したり、文字列を入力したり、何も入力していないのに計算を実行するとエラーになりますね。確認してみましたか?
実はこのエラーはたったの一行で防げます。On Error Resume Nextです。この1行の意味は「もしこれ以降にエラーが発生しても無視して続行しなさい」です。
もちろん、場合によっては無視し続行してはいけないような状況も考えられますが、今回の電卓のような単純なプログラムの場合は問題ありません。このOn Error Resume Nextを追加した足し算のコードは次のようになります。
Private
Sub btnPlus_Click(ByVal sender
As System.Object, ByVal
e As System.EventArgs)
Handles btnPlus.Click
On
Error
Resume
Next
Dim X
As
Decimal X = txtValue1.Text lblAnswer.Text = X + Y End Sub |
■コード4:エラーを無視する
以上では基本的なDimの使い方を説明しましたが、Dimでは上で紹介した型以外にもさまざまなクラスのインスタンスや構造体を宣言することができます。
というより、本来Dimはクラスのインスタンスや構造体を宣言するものであって、「変数を宣言する」という表現の方が実は特殊なのです。
今回出てきたDecimalをはじめ、表で紹介したIntegerやStringはすべて クラスや構造体の一種です。
そこで、前回までにでてきたようにPenクラスやBrushクラス等のインスタンスもDimで宣言するわけです。以前説明したPenクラスのインスタンスの宣言の中に次のようなものがあったことを思い出してください。
Dim p As Pen |
まさしく、今回の変数の宣言と同じです。そこで、この場合「変数pはPen型である」のような表現をする場合もあります。
このようにしてクラスのインスタンスを宣言していく方法はこれからもどんどんでてきます。
6.その他
これで今回の解説はほとんど終わりです。最後に解説できなかった2つの項目を説明します。
まず、変数は宣言と同時に値を代入(セット)することもできます。今回の電卓の例では次のようにして変数Xの宣言と変数XへのtxtValue1.Textの代入(セット)を一行で書くことができます。
Dim X As Decimal = txtValue1.Text
別に難しいことありませんね。
次に変数の名前ですが今回は電卓という数学っぽいテーマだったこともあり X と Y という名前にしましたがこの名前は他と重複しないならば自由につけることができます。ですからできるだけわかりやすい名前をつけるべきです。
「わかりやすい名前をつける」ということはとても大切です。これによって後になってプログラムを見直したときにそのプログラムがどういうプログラムであったか理解しやすくなります。また他人にプログラムを見せるときにもそのプログラムを理解してもらいやすくなります。
たとえば、身体検査のプログラムを作るとしたら身長をあらわす変数にはXやYではなくTallやHeightなどと名づけるべきです。このときSinchouなどとローマ字にしてももちろんかまいませんがローマ字は書き方にゆれがあるのでお勧めできません。例をあげると身長と読めるローマ字はSinchouの他にShinchou, Sintyou, Shintyou, Sincho, Shincho, Sintyo, Shintyo, Sincyo, Shincyo, Sincyou, Shincyouなどがあります。これでは書く人によって混乱してしまいますね。
とはいっても私は別に変数には英語の名前をつけろといっているのではありません。たとえば桁数を表す変数はKetaでいいと思います。英語でFigureと書いたところで何人の人が理解できるでしょうか?(私も今辞書で調べました…。)あくまでも「わかりやすく」というのが私のいいたいことです。
7.全コード
完成版の全コードを示します。参考のために、引き算やかけ算のコードはたし算とは少し変えてあります。引き算のコードは変数を宣言と同時に代入しています。かけ算のコードは変数を使わないで計算しています。
VB2005とVB.NET2002, VB.NET2003はInheritsおよび「Windowsフォームデザイナで生成されたコード」があるかないかだけです。
Public Class Form1 Inherits System.Windows.Forms.Form
Private Sub btnDiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDiv.Click On Error Resume Next Dim
X As
Decimal X = txtValue1.Text lblAnswer.Text = X / Y End Sub |
|
Private Sub btnMulti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMulti.ClickOn Error Resume Next lblAnswer.Text = txtValue1.Text * txtValue2.Text End Sub |
|
Private Sub btnMinus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMinus.ClickOn Error Resume Next Dim X As Decimal = txtValue1.TextDim Y As Decimal = txtValue2.Text lblAnswer.Text = X - Y End Sub |
|
Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.ClickOn Error Resume Next Dim X As DecimalDim Y As Decimal X = txtValue1.Text lblAnswer.Text = X + Y End Sub End Class |
■コード5:電卓プログラムの全コード(VB.NET 2002, VB.NET 2003)
Public Class Form1
Dim
X As Decimal X = txtValue1.Text lblAnswer.Text = X / Y End Sub |
Private Sub btnMulti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMulti.ClickOn Error Resume Next lblAnswer.Text = txtValue1.Text * txtValue2.Text End Sub |
Private Sub btnMinus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMinus.ClickOn Error Resume Next Dim X As Decimal = txtValue1.TextDim Y As Decimal = txtValue2.Text lblAnswer.Text = X - Y End Sub |
Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.ClickOn Error Resume Next Dim X As DecimalDim Y As Decimal X = txtValue1.Text lblAnswer.Text = X + Y End Sub End Class |
■コード6:電卓プログラムの全コード(VB2005)
7.最後に
いかがでしたでしょうか。この変数と「型」の部分はプログラミング入門者にはいつも壁になるところです。というのは人間はコンピュータのような区別をしないからです。
この初級講座ではだんだんと高度な説明に移っていく予定ですので1回1回を大切に消化してください。
それでは失礼します。