やっとこさ Visual Basic ネタで。ちょっとした思い出話です。(タイトルもなつかしさを出してみました。)
<ATTENTION>
私は Visual Basic.NET 2003 と Visual Basic 2005 しかまともに(まともでもない)触っていない人間です。
</ATTENTION>
今回のお題はMain プロシージャ。エントリするポイントのことです(?)。え?ステートメントの解説とかじゃないの?やる気あんのか?と思われた方、続けざまにガッカリだよ!と思っていただければ幸いです(だって収拾つかなくなりそうだったから。orz)。
実のところワタクシ、Main プロシージャってVisual Studio 触り始めて幾日か過ぎてから知りました。Visual Basic も .NET も MSDN もサッパリ知らないまま、ぺらっぺらの軽い参考書を片手にゴソゴソいたのですが、
'Main プロシージャ' の 'M' の字も出てこなかったよ、ママン 。゚(゚´Д`゚)゜。
ちなみに、どこで Main プロシージャの存在を知ったかというと・・・
C# と VB.NET の入門サイト:二重起動を確実に禁止する
いわずと知れたじゃんぬねっとさんのところですw
さぁさぁ!初心にかえって、まずはMSDNから。←基本ですよね♪
MSDN:Visual Basic の Main プロシージャ(http://msdn2.microsoft.com/ja-jp/library/ms235406(VS.80).aspx) より。
すべての Visual Basic プログラムには、Main という名前のプロシージャが含まれている必要があります。このプロシージャは、アプリケーションの開始点となり、アプリケーションの総合的な制御を行います。.NET Framework は、アプリケーションをロードして、アプリケーションに制御を渡せる状態になると、Main プロシージャを呼び出します。
最初に実行するコードは Main 内に記述します。Main では、プログラムの起動時に最初に読み込まれるフォームを決定したり、同一アプリケーションが既にシステム上で稼動しているかどうかを調べたり、アプリケーションで使用する一連の変数を作成したり、アプリケーションで必要なデータベースを開いたりできます。
要するに、一番最初は Main というプロシージャから実行されるわけですね。つまり、これがエントリするポイントです、と。(要約してない。)
リンク先は比較的説明が穏やか(?)で分かりやすいので、さくさくっとまとめておきますと、
- Main プロシージャの要件
- コンソール アプリケーションとWindows フォーム アプリケーションには Main プロシージャ が必要なの。でもね、Windows フォーム アプリケーションでは Visual Basic コンパイラが自動的に Main プロシージャを生成するので、書かなくてもいいよ。
- クラス ライブラリには Main プロシージャは必要ないって。
- Main プロシージャの宣言
- Main は次の 4 種類あるよ。
- Sub Main()
- Sub Main(ByVal cmdArgs() As String)
- Function Main() As Integer
- Function Main(ByVal cmdArgs() As String) As Integer
- クラスで Main プロシージャを宣言する場合は、Shared キーワードが必要なの。モジュールで Main プロシージャを宣言する場合、Shared キーワードはいらないの。
さて、なぜ参考書に載っていないからってMain プロシージャの存在に気づかなかったのでしょう?
Visual Studio .NET 2003 でも Visual Studio 2005 でも、Visual Basic で WindowsApplication のテンプレートを使用すると、Form1.vb というファイルに 'Form1' というクラスが作成されますが、この中に Main プロシージャはありません(Visual Studio 2005 では Form1.Designer.vb というファイルも作成されますが、この中にもありません。)。 これは先ほどの内容のとおり、Visual Basic コンパイラが自動的に生成してくれるからですね。なんとおせっかい便利なんでしょう♪
・・・そりゃ知らなくて当然ですよね?(いや、事前にしっかりチェックしてないからなんですけどね。)
ちなみに C♯では Visual Studio .NET 2003 だとForm1.cs の中に Visual Studio 2005 でも、Program.cs というファイルの中に Program クラスが作成され、そこにMain プロシージャ があるんですね。
というわけで、 Main プロシージャを書いてみました。とにもかくにも基本の基本、"Hello, World!" を出力するプログラム!!!
1つ目は MSDN:Visual Basic バージョンの Hello World! (http://msdn2.microsoft.com/ja-jp/library/3cf7t4xt(VS.80).aspx) にあるモジュールを使用したものですね。
Imports System
Imports System.Windows.Forms
Module Hello
Sub Main()
MessageBox.Show("Hello, World!")
End Sub
End Module
2つ目は 上記をC♯のように、Program クラスにしたもの。
Imports System
Imports System.Windows.Forms
Public Class Program
Public Shared Sub Main()
MessageBox.Show("Hello, World!")
End Sub
End Class
おまけとして フォームを表示するだけの Main プロシージャ。
Imports System
Imports System.windows.Forms
Public Class Hello
Public Shared Sub Main()
Application.Run(New Form)
End Sub
End Class
・・・なつかしいですね♪(甘酸っぱいね。)
とまぁ、今回はこのくらいで勘弁してやるわぁ!(オチがないよ~。)
あ、書いていて、いくつか個人的に気になることがでてきました。今後、エントリとして書くかもしれません(調べても分からなくて書けないかもしれません。)。
- Main プロシージャを呼ぶ仕組み。
- なぜプロシージャから始まるの?しかも Module や Shared なのね。(クラスを指定するようなイメージのほうがすっきりしそう。)
- Visual Basic コンパイラが自動的に Main プロシージャを生成する仕組み。(と、実際どんなプロシージャになっているか。)
<余談>
Visual Studio はとても便利なシロモノですねぇ。私のように Main プロシージャの存在を知らない状態でもそこそこのものを作れてしまいます。これを'便利な世の中とする'のか'業界の今後を危惧する'のかは・・・(つ[カンペ] ここで「自由だ~~!!」という。)
</余談>
# タグ付けがおかしかったので修正しました。