ちょっとした値の出力や関数・メソッドのテストに便利な、コンソールアプリケーションについて、述べてみます。
コンソールアプリケーションは、その名の通り、コンソール(コマンドプロンプト)で動作するアプリケーションです。
コンソールアプリケーションは、標準入力から値を受け取り、標準出力へ値を出力します。
標準入力 | キーボードなど |
標準出力 | ディスプレイなど |
標準エラー出力という物もあります。
これは、エラーが発生したときにエラー情報を出力する場所です。
基本的には標準出力と同じ「ディスプレイ」となっていることが多いようです。
しかし、これを変更することも可能です。
例えば、標準出力の出力先は「ディスプレイ」、標準エラー出力の出力先は「外部接続」とすることもできます。
これは、エラーが発生したときにエラー情報を出力する場所です。
基本的には標準出力と同じ「ディスプレイ」となっていることが多いようです。
しかし、これを変更することも可能です。
例えば、標準出力の出力先は「ディスプレイ」、標準エラー出力の出力先は「外部接続」とすることもできます。
なにはともあれ、実際に作ってみます。
「ファイル」→「新規作成」→「その他...」を選んで新規作成ダイアログを開いたところです。
ここで「コンソールアプリケーション」を選びます。
すると、次のようなコードが開きます。
program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; begin try { TODO -oUser -cConsole メイン : ここにコードを記述してください } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
例外処理とかが入っているステキなスケルトンができますが、今回の記事には邪魔なのですっきりさせます。
すっきりさせたのが下記です。
program Project1;
{$APPTYPE CONSOLE}
begin
end.
{$APPTYPE CONSOLE} は、コンパイラ指令です。
コンパイラに、このアプリケーションはコンソールアプリケーションであることを指示しています。
コンパイラに、このアプリケーションはコンソールアプリケーションであることを指示しています。
これを動かすと、一瞬コマンドプロンプトが開いてすぐに閉じます。
何もしないプログラムなので、当然の動作です。
せっかくなので、なにか表示してみます。
program Project1; {$APPTYPE CONSOLE} begin Write('Hello, console !'); end.
ここで出てきた Write は、標準出力に値を出力します。
引数に指定できるのは、文字列などの「値」です。
なので、ここには、Integer や Boolean も書くことができます。
たとえば、こんな風に書けます。
Write('Hello, console !', 123, True);
とりあえず実行させてみましょう。
しかし、やはり一瞬でコマンドプロンプトは閉じてしまい、表示されているか確認できません。
ちなみに、先にコンソールを開いてから、Project1 と入力して起動させれば、当然閉じたりはしません。
ですが、IDE から起動させる方が楽ちんです。
なので、開いたコンソールが勝手に閉じないようにする方法が必要です。
方法はいくつかありますが、今回は Readln を使います。
program Project1; {$APPTYPE CONSOLE} begin Write('Hello, console !'); Readln; end.
すると、下記の様に自動的にコンソールが閉じなくなりました。
コンソールを閉じるためには、「リターンキー/エンターキー」を押します。
さて、ここで出てきた Readln ですが、これは標準入力から値を受け取ります。
より正確にいうならば、Read は、ファイルから値読み出す関数です。
ファイル変数を省略すると、標準入力から値を読み込みます。
ファイル変数を省略すると、標準入力から値を読み込みます。
Read ではなく Readln なのは、何故でしょう?
実は、Read という関数もあり、こちらも標準入力から値を受け取るものです。
では、Read と Readln は、なにが違うのでしょう?
違いは Read は標準入力から値を読み出すだけですが、Readln は標準入力から「行」を読み出す、ということです。
Readln の "ln" は "Line" のことです。
では、行とは何のことでしょうか?
それは「改行」がある、ということです。
つまり、Readln は改行を受け取るまで、待機します。
そのため、Readln があるとコマンドプロンプトは自動的に閉じなくなり、「リターンキー/エンターキー」を押すと閉じたのです。
では Read では、ダメなのでしょうか?
残念ながら、Read では、ダメなのです。
それは、何も入力が無かったよ、という結果で復帰してしまうためです。
結局すぐに、コンソールは閉じてしまいます。
ところで、入力には Read と Readln がありましたが、出力には無いのでしょうか?
……当然、Write と Writeln があります。
Write は値を出力しますが、Writeln は行を出力します。
つまり、値の最後に「改行」を出力します。
たとえば、こんなコードを書くと
program Project1; {$APPTYPE CONSOLE} begin Write('Hello '); Write('world !'); Writeln(''); Writeln('Hello world 2!'); Writeln('Hello world 3!'); Readln; end.
結果は、こうなります
最初の Write の "Hello " と "world !" は繋がって表示されていますが、Writeln で表示した物は自動的に改行されています。
ちなみに Writeln('') とすると、改行だけが出力されます。
今回は Write/Writel について詳述しました。
次回は、Read/Readln について紹介してみたいと思います。
0 件のコメント:
コメントを投稿