Visual Basic.netの宣言について調べてみた。
VB.net超初心者の高木です、こんにちは。
先日、Visual Basic.netを使ってストップウォッチを作ってみました。
新人の研修用のネタをストップウォッチにしようということになって、私が見本を作ることになったからです。
手っ取り早く戦力になってもらうため、まずはC#で以下の内容を習得してもらおうということになりました。
- オブジェクト指向の基礎
- 周期処理
- Disposeパターンと例外安全
- グラフィック描画
- イベント処理
これだけを見せると反論が出そうですね。
とくに3.のDisposeパターンと例外安全については、ちょっと難度が高すぎるという意見も出てくることでしょう。
しかし、これについては、今まさに現場で重要な課題になっていることでもあり、最初の段階でしっかり身につけておいて欲しいのです。
1.については、ある程度座学で体系立った説明が必要になると思います。
その手のことは弊社代表である杉山の出番です。
3.も座学での説明が不可欠だと思いますので、これは私が引き受けることになるでしょう。
座学ばかりだと辛いので、実際に何かを作ってみるための題材がストップウォッチです。
テキストだけなら簡単ですが、文字盤や秒針を描画しようと思うと、先ほどの5項目をかなりの割合で網羅することができます。
そこまでやれば、かなり手も動くようになるでしょうしね。
もし、座標系計算や三角関数に不安があるようなら、それも座学で何とかしなければなりません。
弊社でプログラマーをやっていくためには、その手の簡単な数学は不可欠ですので。
というわけで、前置きはこれぐらいにして本題に入ることにしましょう。
先日の「C#ができるとVB.netもできるの?」でも少し触れましたが、オブジェクトを宣言する際の型推論の振る舞いがよくわかりませんでした。
そこで、今回実験コードを書いて自分で調べてみることにしました。
1 2 | Dim ByEqual = new String("ByEqual") Dim ByAs As new String("ByAs") |
のように、オブジェクトの宣言時に「=」と「As」のどちらかを使うことができます。
最初、超初心者故の無知蒙昧さを発揮してしまった私は、何も考えずに「=」を使ってしまっていました。
Dimで宣言するときに、「As」で型を指定することは知っていたんです。
昔は宣言と同時に初期値を指定できなかったような(不確かな)記憶があったのですが、「=」で初期値を指定できることがわかったので、何も考えずにそうしていました。
最初、それで何も問題なく動いていたのです。
ところが、ときどきインテリセンスが期待通りに働かないとか、「As」を使わなければ宣言できない事案に遭遇しました。
この辺はきちんと把握しておかないと、今後もVisual Basic.netを使うのであればマトモにコーディングできそうにありません。
調査の結果、宣言する場所によって振る舞いが変わることがわかりました。
SubまたはFunctionで定義するサブプロシージャ(Quick BASICではこう言ったのですが、Visual Basic.netではどういうのでしょう?)の中であれば、ローカルオブジェクトの宣言は「=」でも「As」でも型推論が働いていました。
一方で、クラスのメンバーの場合は、Sharedであるかどうかに関わらず、「=」を使った場合はObject型になり、「As」を使った場合は型推論が働いていました。
インテリセンスが期待通りに動かないと思っていたのは、Object型になってしまっていたからです。
また、「As」しか使えないと思っていたのは、上記の振る舞いによって「=」ではObject型になってしまっていることに気づかなかったからのようです。
Usingステートメントでは、インテリセンスで「As」の入力が促されるので、そう感じたこともあったと思います。
本来であれば、公式ドキュメントを読み込むべきなのですが、最初の第一歩としては実験で調べてみるのも悪くありません。
今後、Visual Basic.netの使用頻度が増すのであれば、当然ドキュメントを読んで、もっと正確に理解することにします。