GO BACK

Visual Basic .Net教室 その2


「基本文法を覚える」


■基本ソースコードを考える

 では、前回作成したサンプルのソースコードについて、改めて考えてみましょう。——前回作ったものでは、Private Sub Button1_Clickというメソッドがありました。が、これは単にメソッドだけがあるのではなく、他にもいろいろと書かれていましたね。それらを整理すると、VB .Netのソースコードはざっと以下のような形になっていることがわかります。

Public Class 《クラス名》
Inherits 《継承するクラスの指定》

Private Sub 《メソッド1》(《パラメータ》)
・・メソッドの処理・・
End Sub

Private Sub 《メソッド2》(《パラメータ》)
・・メソッドの処理・・
End Sub

・・以下、必要なだけメソッド定義が続く・・

End Class

 まぁ、実際にはもっといろいろ複雑な形になりますが、もっとも基本となる形はこうです。つまり「クラス」と呼ばれるものとしてプログラムは定義され、そのクラスの中に「メソッド」という形でさまざまなコードが置かれる、ということです。

●クラスについて●
 クラスというのは、オブジェクト指向における「プログラムの最小単位となるもの」といえばいいでしょうか。オブジェクト指向では、プログラムというのは「必要な要素をすべてひとまとめにした部品のようなもの」の集合体として考えられます。例えばWindowsのアプリケーション、ウィンドウとなる部品、メニューとなる部品、その中に配置するボタンなどの部品・・といったものが使われていますね? これらが「ウィンドウのクラス」「メニューのクラス」「ボタンのクラス」というようにそれぞれクラスという形で用意されている、と想像するといいでしょう。

 クラスは、その部品で必要な値や機能などをすべてクラス自身の中に持っています。クラスを操作するのに、クラス以外のものはいらないのです。独立性が高いので、クラスを他のプログラムで使えるようにしたり、新しいクラスに入れ替えたりといったことも簡単に行なえます。

 このように独立性の高い形でプログラムをまとめることで、開発の効率をぐっとアップできるのです。例えば、ウィンドウの機能を改良しようと思ったら、ウィンドウのクラスだけを修正し新しいものに置き換えれば、プログラムで使われるウィンドウが自動的に新しくなるわけです。今までのように、ずら〜〜〜っと長い長いソースコードをチェックする必要もなくなります。

●継承について●
 さて、作成したForm1.vbのソースコードを見て下さい。ここでは「Public Class Form1」というようにしてクラス定義がされています。つまりこのForm1のソースコードは「Form1という名前のクラスを定義するもの」だったわけです。

 その次に、「 Inherits System.Windows.Forms.Form」というものがありますね? これは「System.Windows.Forms.Formというクラスを継承して新しいクラスを定義する」ということを示しています。継承とは、既にあるクラスをそのまま利用し新たなクラスを作るために用いられる機能です。

 現在のパソコンのプログラムというのは非常に難解な代物になっています。例えば「ウィンドウを表示する」といっても、一体どうやってウィンドウを作ればいいんでしょう? それにマウスでドラッグしたりクリックしたりする処理も必要です。こんなもの、全部自分で書けといわれたら卒倒してしまいます。

 しかし、考えてみれば「ウィンドウのクラス」なんてものは、どんなプログラムでも必ず必要となるわけです。ならば、あらかじめ「ウィンドウとしての基本的な機能をすべて持ったクラス」というのを用意しておいて、それをうまく際利用できるようにした方が効率的です。このための仕組みが「継承」というものです。

 継承とは、あるクラスに用意されているすべてのものを受け継いで新たなクラスを作成するためのものです。これは「Inherits 《クラスの指定》」というようにして宣言します。ここでは「System.Windows.Forms.Form」というように書かれていますが、これが一般的なWindowsのウィンドウのクラスです。これを継承することで、このForm1はウィンドウとしての基本機能をすべてもった形で作成されるのです。

 この「System.Windows.Forms.Form」というのは、「System.Windows.Forms」がライブラリの場所を示すもので、最後の「Form」が継承クラス名になります。.Netフレームワークには、最初から膨大な数のクラスが用意されています。それらは種類ごとに階層的に分類整理されているのです。そこで、Inheritsでクラスを指定する時には、「どこそこのライブラリの○○の中の××の中の△△というクラス」というようにして指定しないといけません。それで、こういう長ったらしい記述になっているんですね。

 まぁ、.Netフレームワークのライブラリがどうなっているかなど今は詳しく知る必要はありません。ここでは「 Inherits System.Windows.Forms.Formと書けばウィンドウを継承したクラスが作れる」ということだけ知っておけばいいでしょう。


■コントロールのプロパティを利用する


 では、VB .Netの基本的な文法というか、言語の基本を少しずつ覚えていくことにしましょう。まずは「コントロールのプロパティの使い方」から。

 難しそうな文法の前に、いきなり「コントロールのプロパティ」が登場したのにはわけがあります。変数など知らなくてもプログラムは書けるけど、コントロールの使い方を知らないと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


 長いので、最初の部分(Private 〜 Handles Button1.Click)は見かけの改行をして掲載してあります(オリジナルでは1行で表示されます)。VBでは、長すぎる文は、このように途中でアンダースコアをつけて改行して書くと、1行の文とみなしてくれます。
 以上を記述して完成したら、プロジェクトを実行してみましょう。そしてTextBoxをクリックして、あなたの名前を書き込んでからボタンを押してみて下さい。画面にメッセージが現れますよ。

 いかがです、思ったより簡単にコントロールのテキストが利用できることがわかりますね? それというのも、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)という項目を書き換えてコントロール名を好きなものに変更することもできます。ただし、メソッドの中からコントロールを利用する場合、全てその名前で認識されますから、コードを書いた後で勝手にコントロールの名前を変更してしまうと、コントロールがわからずエラーになることもありますので注意して下さい。


■変数と演算記号について


  さて、もう一つの「変数」についても覚えておきましょう。変数とは、「値を一時的に収めておく入れ物」です。プログラミング言語では、必要な値をまず変数に収め、変数同士を計算したりして使います。

 この変数の使い方は、以下のような手順で行なうことになっています。

  1. Dimを使って使用する変数を宣言する。
  2. 変数に値を代入する。

 従来の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


 これは、TextBoxにテキストが何も書かれていないときには文句をいうようにしたサブルーチンです。何か書いてあれば従来と同じようにメッセージが現れますが、何も書いてないとお小言をちょうだいします。




■繰り返し構文について


 次に、繰り返し構文について説明しましょう。この構文はいくつかの種類がありますが、もっとも多用されるのは「For 〜 Next …」構文というものでしょう。これは、以下のような形をしたものです。


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


 そしてプロジェクトを実行します。これは1から任意の数字までの合計を計算するサブルーチンです。TextBoxに適当な整数を入力してボタンを押してみて下さい。1からその数字までの総和が計算されますよ。例えば「5」と入力すると、1+2+3+4+5=15が表示されます。いろいろと数字を入力して確かめてみましょう。

 この例を見ると、いくつか面白いことに気がつきます。まず変数の宣言ですが、こんな具合に行なっていることがわかりますね?

Dim num1, Total, i As Integer

 同じタイプの値を複数使う場合、このようにカンマで区切って記述することでまとめて宣言することができます。これは便利なので覚えておきましょう。——また、TextBox1に入力された数字を取り出すのに、こんなことをしていますね。

num1 = TextBox1.Text

 これ、ちょっと変ですよね? なぜって、num1はIntegerの変数なのですから。つまり、Textのテキストを整数の変数におさめていることになります。VB .Netでは、タイプの異なる変数に値を代入すると、自動的に型の変換を行ってくれます。それでこういうことが可能だったのですね。(※ただし設定によってはこれを禁止することもできます)

 もう1つ、Forで使っている変数もDimで宣言していますね。こういう構文で使うようなものでも、ちゃんとDimで宣言しておかないといけません。でないとエラーになるので注意して下さい。

 さて、これで一応、プログラミングの基本文法はおしまいです。「えっ、たったこれだけ?」と思うかも知れません。けれど、コントロールのプロパティ、変数、条件分岐、繰り返しがわかれば、これだけでちょっとしたプログラムは作れるようになってしまうんですよ。後は、いろいろと試しながら少しずつ覚えていけばいいんです。まずは、とにかく何か作れるようになったほうが楽しいでしょ?


GO NEXT


GO HOME