コンソールアプリケーションの基礎

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。

アプリケーションの種類

 Visual Studio .NET で作成できるVB.NETアプリケーションのうち、主に使用されるものは次の三つです。
・Windowsアプリケーション
 フォームをベースとした、従来のVBがもっとも得意としたWindowsアプリケーション。 VB.NETでは多くの機能が強化されているが、その分変更点(特に言語仕様の)が多く、最初はその違いにとまどうかもしれない。
・クラスライブラリ
 ユーザーインターフェイスを持たない、コードベースのクラスライブラリ。 他の.NET言語からも使用できるライブラリを作ることができる。
・コンソールアプリケーション
 文字だけからなるコンソールのみを用いたアプリケーション。 主にデバッグやテストなどで用いる。
 これ以下では、このうちのコンソールアプリケーションを用いて解説をしていきます。

Hello, world!

 まず始めに、おなじみの「Hello, world!」を表示するコンソールアプリケーションを作成してみることにします。 「ファイル」メニューの「新規作成」から「プロジェクト」を選択します。 現れたダイアログから、VB.NETの「コンソールアプリケーション」を選択し、適当なプロジェクト名を入れます。
 OKボタンを押すと次のようなソースコードが現れるはずです。
001
002
003
004
005
006
007
Module Module1

    Sub Main()

    End Sub

End Module
 このソースコードの真ん中あたりにコードを追加して次のようにします。
001
002
003
004
005
006
007
008
009
Module Module1

    Sub Main()

        Console.WriteLine("Hello, world!")

    End Sub

End Module
 これができあがったら、Visual Studio .NETを使用している場合はCtrl + F5キーを押して実行します。 このときF5だけだとデバッグは可能ですが、実行が終わったとたんにウィンドウが閉じてしまうので、Ctrlを一緒に押してください。 うまく実行すると次のような画面が現れるはずです。
 現れたウィンドウの左上に「Hello, world!」と表示されていればこのプログラムは完璧です。 これ以降はこのプログラムをベースにコーディングしていきます。

アプリケーションのエントリーポイント

 どのようなプログラムでも、最初に実行される場所というものがあります。 それをエントリーポイントといいます。 先ほどのソースコードを見てみましょう。
001
002
003
004
005
006
007
008
009
Module Module1

    Sub Main()

        Console.WriteLine("Hello, world!")

    End Sub

End Module
 このプログラムにおけるエントリーポイントは、上から二行目の「Sub Main()」の部分です。 これはMainプロシージャの宣言部分です。 VB.NETではMainと言う名前のプロシージャがアプリケーションのエントリーポイント、つまりプログラムの開始点となります。
 Mainプロシージャの形式には数種類ありますが、この形式は一番単純な形式です。 Mainプロシージャではコマンドライン引数を受けることができ、またエラーなどで終了する場合に通知するエラーコードなどを返すこともできます。 それらの形式を次の表にまとめておきます。
Mainプロシージャの形式
宣言の形式概要
Sub Main()コマンドライン引数を受け取らない。 エラーコードを返さない。
Function Main() As Integerコマンドライン引数を受け取らない。 エラーコードを返す。
Sub Main(ByVal args() As String)コマンドライン引数を受け取る。 エラーコードを返さない。
Function Main(ByVal args() As String) As Integerコマンドライン引数を受け取る。 エラーコードを返す。
 さらに、クラスがエントリーポイントを持つ場合は、これらの宣言の先頭に「Shared」を付加する必要があります。 参考までに、クラスがもっとも長い形式のエントリーポイントを持つ場合のコードを利用して先ほどの「Hello, world!」を表示するプログラムを記述すると次のようになります。
001
002
003
004
005
006
007
008
009
010
011
Class Class1

    Shared Function main(ByVal args() As String) As Integer

        Console.WriteLine("Hello, world!")

        Return 0

    End Function

End Class

コンソールへの出力

 まず、一行だけ文字を表示するには、Console.WriteLine()メソッドを使用します。
001
002
003
004
005
006
007
008
009
Module Module1

    Sub Main()

        Console.WriteLine("一行だけ出力")

    End Sub

End Module
出力結果
一行だけ出力
 改行文字を出力しないで文字を表示する場合は、Console.Write()メソッドを使用します。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
Module Module1

    Sub Main()

        Console.Write("改行文字を出力しないで")

        Console.Write("文字を表示")

        ' 最後に改行文字だけを出力
        Console.Write()

    End Sub

End Module
出力結果
改行文字を出力しないで文字を表示
 さらに、途中で変数の値などを含めて表示するには次のようにします。
001
002
003
004
005
006
007
008
009
010
011
012
013
Module Module1

    Sub Main()

        Dim i As Integer = 15

        Console.WriteLine("変数iの値は{0}です。", i)

        Console.WriteLine("この部分が{0}や{1}に置き換わり表示されます。", "文字", "数値")

    End Sub

End Module
出力結果
変数iの値は15です。
この部分が文字や数値に置き換わり表示されます。
 { }で囲まれた部分が、その後に指定されているパラメータに置き換えられて表示されます。 { }の中の番号の順に並んでいるパラメータが表示されます。
001
002
003
004
005
006
007
008
009
Module Module1

    Sub Main()

        Console.WriteLine("0:{2} 1:{1} 2:{0}", "一番目", "二番目", "三番目")

    End Sub

End Module
出力結果
0:三番目 1:二番目 2:一番目

コンソールからの入力

 コンソールから文字列を入力するにはConsole.ReadLine()メソッドを使用します。
001
002
003
004
005
006
007
008
009
010
011
012
013
Module Module1

    Sub Main()

        Dim str As String

        str = Console.ReadLine()

        Console.WriteLine("入力された文字: {0}", str)

    End Sub

End Module
出力結果
test
入力された文字: test
 数値などを入力する場合は、文字列として入力を受け取り、任意の型に変換します。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
Module Module1

    Sub Main()

        Dim str As String
        Dim i As Integer

        Console.Write("整数値を入力してください >")

        str = Console.ReadLine()

        i = Integer.Parse(str)

        Console.WriteLine("入力された整数値: {0}", i)

    End Sub

End Module
出力結果
整数値を入力してください >123456
入力された整数値: 123456
 実数値を入力する場合も同様です。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
Module Module1

    Sub Main()

        Dim str As String
        Dim s As Single

        Console.Write("数値を入力してください >")

        str = Console.ReadLine()

        s = Single.Parse(str)

        Console.WriteLine("入力された数値: {0}", s)

    End Sub

End Module
出力結果
数値を入力してください >123.4567
入力された数値: 123.4567