まぁ、実際にはもっといろいろ複雑な形になりますが、もっとも基本となる形はこうです。つまり「クラス」と呼ばれるものとしてプログラムは定義され、そのクラスの中に「メソッド」という形でさまざまなコードが置かれる、ということです。Public Class 《クラス名》
Inherits 《継承するクラスの指定》
Private Sub 《メソッド1》(《パラメータ》)
・・メソッドの処理・・
End Sub
Private Sub 《メソッド2》(《パラメータ》)
・・メソッドの処理・・
End Sub
・・以下、必要なだけメソッド定義が続く・・
End Class
難しそうな文法の前に、いきなり「コントロールのプロパティ」が登場したのにはわけがあります。変数など知らなくてもプログラムは書けるけど、コントロールの使い方を知らないとVB .Netのプログラムは書けないからです。VB .Netに関しては、何よりも重要なのは「どうやってコントロールを使うか」であると思うのです。
では、プロジェクトを作って実際に簡単なコントロールのプロパティを操作してみましょう。第1回講座の最後に作ったものをそのまま作り替えてもいいでしょう。
1.まず、コントロールを作成します。用意するのはButtonが1つと、TextBoxが1つです。TextBoxは、テキストを書き込むためのコントロールで、ツールボックスの「Windowsフォーム」の上から5列目にあるアイコンです。先に作ったプロジェクトを利用する場合は、ボタンはそのまま先ほどのを使って下さい。新たに作ることはありません。
2.コードウィンドウを開き、ボタンのコードを以下のように書き換えて下さい。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim str1 As String
str1 = TextBox1.Text
MsgBox("もうっ、" & str1 & "さんってばせっかちね。")
End Sub
いかがです、思ったより簡単にコントロールのテキストが利用できることがわかりますね? それというのも、TextBoxに書かれたテキストがプロパティとして簡単にコード内から利用できるようになっているからです。――今作成したサブルーチンのコードを見てみましょう。
Dim str1 As String
まず、テキストを取り出しておさめておくための変数を1つ用意します。後述しますが、変数というのは「Dim
変数名 As 変数のタイプ」という形で宣言します。ここでは、テキストの値をおさめるための「Stringタイプ」というタイプの変数str1を用意しました。
str1 = TextBox1.Text
次に、こんな命令を実行していますね。これは「TextBox1のTextプロパティを変数str1に入れる」という働きをしていたのです。VBでは、基本的にイコール記号を使うことで、右辺の値を左辺の変数などに代入できます。
この1行で、「コントロールの値の取り出し」と「変数への代入」という、プログラミングでもっとも重要なものが2つも使われています。
まず、コントロールのプロパティについて説明しましょう。ここで使われている「TextBox1.Text」というのが、TextBox1に書かれたテキストを示すプロパティだったのです。TextBox1は作成したTextBoxの名前、そして「Text」が書き込まれたテキストを示すプロパティというわけです。コントロールのプロパティを利用する場合には、このように、
《コントロール名》.《プロパティ名》
――という具合に、コントロールの名前とプロパティ名をピリオド(.)でつなげて記述します。
ちなみに、最初の内よく間違えてしまうのが「コントロールの名前」です。コントロールを作成すると、自動的にそれに名前が割り当てられます。作成したTextBoxをクリックし、プロパティウィンドウをよーく見て下さい。(Name)という名前のプロパティ項目があるはずです(「デザイン」という表示の下です)。これが、このコントロールの名前なのです。これは通常、作ったコントロールの名称と番号を組み合わせて割り振られます。Buttonなら「Button1」「Button2」という具合ですし、TextBoxなら「TextBox1」「TextBox2」という感じになるわけです。
もちろん、この(Name)という項目を書き換えてコントロール名を好きなものに変更することもできます。ただし、メソッドの中からコントロールを利用する場合、全てその名前で認識されますから、コードを書いた後で勝手にコントロールの名前を変更してしまうと、コントロールがわからずエラーになることもありますので注意して下さい。
この変数の使い方は、以下のような手順で行なうことになっています。
- Dimを使って使用する変数を宣言する。
- 変数に値を代入する。
従来のVBでは、単に変数に値を入れれば自動的に変数が作成され使えるようになりましたが、VB .Netでは「Dimで変数宣言をして使うのが基本」と考えた方がよいでしょう。例えば、「Xという変数に整数の100を入れる」ということを行ないたければ、以下のように実行することになります。
Dim X As Integer
X = 100
こんな具合に実行すると、Dim文でXという名前のInteger(整数)型の変数が作成され、その後イコールを使って100が代入されます。まぁ、これらは先ほど簡単に説明しましたからだいたいわかるでしょう。
しかし、なぜVB .Netでは、Dimというもので変数の宣言をしなければいけなくなってしまったのでしょう? 従来のVBではそんなことをしなくとも、単にイコールで代入するだけで済みました。Dimで宣言しないといけないなんて面倒くさいし、それにいちいち「変数のタイプ」なんてものも覚えないといけません。
これは、従来のVBでは「バリアント」と呼ばれる変数が多用されていたことによる違いなのです。バリアントというのは「どんな型の値でも収められる万能変数」といえばよいでしょうか。実をいえば、従来のVBにもちゃんと変数の型があったのです。ところが、いきなり値を変数に代入して変数を作ると、それは「バリアント型」という特別な型の変数になるような仕掛けになっていたのです。
多くのプログラミング言語では、変数に「型(タイプ)」が用意されています。プログラミング言語では、様々な種類の値を利用します。例えば、整数だとか、テキストなどですね。これらは、プログラミング言語の中では別のものとして明確に区別されています。例えば、整数の値をテキスト型の変数に収めたりはできませんし、小数の変数と整数の変数をいっしょに計算したりできなかったりすることが多いのです。この「変数の型」というのが、実に厄介なんですね。
このバリアントのおかげで、旧VBでは実に簡単に変数を扱うことができました。——が、バリアントには落とし穴もあります。まず、「速度が遅い」ということ。バリアントというのは、要するに「必要に応じてVB自身が型をチェックしたり必要な型に変換するような処理を絶えず行なっている」のです。コンピュータの世界にに「型のない変数」なんてものは存在しません。型がないというのは、要するに内部で一所懸命に型の処理を行なっているからなのです。
そしてもう1つ、「この便利な機能のおかげで誰も真面目に変数の型を明確にしたプログラムを書こうとしなくなってしまった」ということもいえるかも知れません。実際、ある程度プログラミングをやっていけば、変数の型というものの理解なしには先に進めなくなることがわかります。が、バリアントに慣れていると、どうしてもその部分を避けてしまい、レベルアップの障害となってしまう、という面があるでしょう。
単に「入り口の敷居だけ下げればいい」という考え方から、「若干敷居は高くなっても、先々、楽になるようにしたほうがいい」という考え方にシフトした——それがVB
.Netの基本理念といえるでしょう。
さて、それでは話を先に進めましょう。——次に、変数で計算などをする場合についてです。これも実は単純で、イコールで値を代入するとき、右辺に式をそのまま書いてやればいいのです。
X = 123 + 456 * 7
例えばこんな具合にすれば、「123 + 456 * 7」という計算式の答え(ええと、いくつだ?)が変数Xに収められます。
「ところで、この変数の名前はどうやってきめるんだ?」と思う人もいるでしょう。名前は、とりあえず半角の英数字による1単語であればなんでもかまいません。が、VB .Netで使われるコントロール名や命令、プロパティ名などは使わないようにしましょう。といっても最初の内はよくわからないでしょうが…。
これはあくまで私個人のやりかたですが、収める値がわかるような名前をつけるのがいいでしょう。文字を入れるのであれば「Str1,Str2,Str3…」というように(StrはStringの略)、数字であれば「Num1,Num2,Num3…」(NumはNumberの略)なんて具合にしておくといいでしょう。また、重要な変数などは、日本語をそのままローマ字にしたものを使うとよいです。「KOTAE」「GOUKEI」「KAISUU」なんて具合ですね。
演算に使える記号は、四則演算は「+−*/」となります。テンキーにある記号そのままですね。ただし、ちょっと注意したいのは割算です。/記号だと、小数以下まで計算した値になります。もし「端数は切り捨てたい」という場合には、¥記号を使って下さい。例えば、「X = 10 \ 3」とすれば「3」が代入されるわけです。
また、余りだけを得たいという場合もあるでしょう。その場合には、「mod」というものを使います。例えば、「X = 10 mod 3」とすると「1」が得られるのです。ちょっと面白いですね?
以上は数字の計算ですが、文字の場合も計算(?)記号があります。それは「&」というものです。この&を使うと、2つの文字を1つにつなげることができます。例えば、「X = "ABC" & "XYZ"」とすると、Xには「ABCXYZ」というテキストが収められます。——先のサブルーチンのMsgBox命令を思い出してみましょう。
MsgBox("もうっ、" & str1 & "さんってばせっかちね。")
こんな具合になっていましたね? これはつまり、テキストと変数Str1を1つにつなげてMsgBoxで表示していたというわけなのです。このように&を使えば、いくつもの文字をひとまとめにして扱えるのです。
さて、変数についてもう1つ知っておかないといけないのは「どんなタイプ(型)があるか?」でしょう。これを知らないと、Dimで変数宣言ができません。変数のタイプというのはたくさんのものが用意されていますので、まずは主立ったものだけ覚えておくとよいでしょう。
・整数のタイプ
これは「Integer」というものが基本です。この他にLongやShort、Byteというものがありますが、とりあえず「整数はIntegerを使う」と考えましょう。
・実数のタイプ
プログラミングでは「浮動小数」と呼ばれますが、これは「Double」というものが基本です。この他に「Single」というものもあります。
・文字列(テキスト)のタイプ
一般的なテキストを扱う場合には「String」というものを使います。
・文字(キャラクタ)のタイプ
Stringの他に「1文字だけの文字」を扱う型もあります。それは「Char」というものです。まぁ、これは実際に使うようになってから覚えればいいでしょう。
・真偽値のタイプ
真偽値というのは「成立するか、しないか」「正しいか、否か」といった二者択一の値です。これは「boolean」というものを使います。これも実際に使うようにならないと働きがわからないでしょうから「そういうのがある」とだけ理解しておきましょう。
ざっと紹介しましたが、これ以外のも値のタイプはあります。とりあえず「Integer」「String」ぐらいがわかれば、最初の内は十分でしょう。後は、必要に応じて覚えていけばいいでしょう。
制御構文には大きく2つのものがあります。「条件分岐」と「繰り返し」です。まずは条件分岐から説明しましょう。
条件分岐とは、その名の通り、条件に応じて命令を分岐させ、別の命令を実行させる機能のことです。このもっとも代表的なものは「IF文」というものです。これは、条件として設定されている式をチェックし、それが正しい場合と正しくない場合で別の命令を実行する構文です。
この構文は、いろいろな書き方ができますので、一通りの書き方をあげておきましょう。
●式が正しいとき、命令を1つだけ実行する●
If 《条件式》 Then 《実行する命令》
●式が正しいときとそうでないときでそれぞれ1つだけ命令を実行する●
If 《条件式》 Then 《正しい時の命令》 Else 《そうでない時の命令》
●式が正しいとき、複数の命令を実行する●
If 《条件式》 Then
《実行する命令1》
《実行する命令2》
……
End If
●式が正しいときとそうでないときでそれぞれ複数の命令を実行する●
If 《条件式》 Then
《正しい時の命令1》
《正しい時の命令2》
……
Else
《そうでない時の命令1》
《そうでない時の命令2》
……
End If
なんかややこしそうになってきましたねえ。まあ、実行する命令はわかるとしても、「条件式」って何だ?と思っている人もいることでしょう。この条件式が、If文を使いこなすポイントなのです。
条件式は、「正しいか正しくないか」をチェックするための式です。これは、基本的には等号/不等号を使って2つの値を比べる式だと考えて下さい。
例えば、「If X = 10 Then …」などという具合にすれば、変数Xが10のときとそうでないときで異なる命令が実行できるようになります。「If Y > 0 Then…」とすれば、変数Yが0より大きいか、それとも0以下かで別の命令が実行できます。このように、等号や不等号を使って正しいかどうかの式は書かれます。
この他にも、「正しいかそうでないか」を示す「真偽値」という値を利用した式が使われることもあります。先に登場した「Boolean」というやつですね。これは、まぁそういう値が登場したら改めて触れましょう。
では、簡単な例をあげておきましょう。先に作成したプロジェクトをそのまま利用することにします。コードウィンドウを開き、ボタンのメソッドを以下のように書き換えてみて下さい。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles Button1.Click
Dim str1 As String
str1 = TextBox1.Text
If str1 = "" Then
MsgBox("何か書いてよ!")
Else
MsgBox("あんたは「" & str1 & "」と書いたね?")
End If
End Sub
For 《変数》=《初期値》To《終了値》
……繰り返し実行する命令……
Next
なんかこれもまた複雑そうですねえ(笑)。このForによる繰り返し構文は、変数を使って何回目から何回まで繰り返すかチェックしながら動くようになっているのです。この初期値と終了値に繰り返し始めと終りの値を入力すると、その値をチェックしながら繰り返します。例えば、
For i = 1 to 5
このようなFor構文を考えてみましょう。この場合、まず最初にVisual Cafeは変数iに1を代入して繰り返しに突入します。そして終りまでいくと再び繰り返しの最初に戻り、変数iを1増やします。そして繰り返し部分を実行して最後までいくとまた最初に戻ってiを1増やします。…そして何回かの繰り返しの後、iが5になったら、そのまま構文を抜けてNextの先へと進むのです。
このForで使う変数は、慣例的に「i」からのアルファベット1文字とするのが一般的です。最初が「i」で、またForが出てきたら「j」「k」…という具合に使うんですね。別に他の変数でもいいんですが、「この構文で使う変数はこれだ」と決めてしまった方がコードもわかりやすくなりますから、なるべく慣例通りにしましょう。
なんかこのFor構文はややこしくて直感的にわかりにくいかも知れません。まあこういうややこしい構文は実際にコードを書いて試してみないとうまくイメージできないものです。さっそくサンプルを作ってみましょう。――先のプロジェクトで、ボタンに書いたサブルーチンをまたまたこんな具合に書き換えてみましょう。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles Button1.Click
Dim num1, Total, i As Integer
num1 = TextBox1.Text
Total = 0
For i = 1 To num1
Total = Total + i
Next
MsgBox("合計は……" & Total)
End Sub
この例を見ると、いくつか面白いことに気がつきます。まず変数の宣言ですが、こんな具合に行なっていることがわかりますね?
Dim num1, Total, i As Integer
同じタイプの値を複数使う場合、このようにカンマで区切って記述することでまとめて宣言することができます。これは便利なので覚えておきましょう。——また、TextBox1に入力された数字を取り出すのに、こんなことをしていますね。
num1 = TextBox1.Text
これ、ちょっと変ですよね? なぜって、num1はIntegerの変数なのですから。つまり、Textのテキストを整数の変数におさめていることになります。VB
.Netでは、タイプの異なる変数に値を代入すると、自動的に型の変換を行ってくれます。それでこういうことが可能だったのですね。(※ただし設定によってはこれを禁止することもできます)
もう1つ、Forで使っている変数もDimで宣言していますね。こういう構文で使うようなものでも、ちゃんとDimで宣言しておかないといけません。でないとエラーになるので注意して下さい。
さて、これで一応、プログラミングの基本文法はおしまいです。「えっ、たったこれだけ?」と思うかも知れません。けれど、コントロールのプロパティ、変数、条件分岐、繰り返しがわかれば、これだけでちょっとしたプログラムは作れるようになってしまうんですよ。後は、いろいろと試しながら少しずつ覚えていけばいいんです。まずは、とにかく何か作れるようになったほうが楽しいでしょ?