Zenでプログラムを書く準備が整いました。まず、Zenのサンプルプロジェクトを作成して、実行してみましょう。
作業用のディレクトリhello
を作成し、zen init-exe
コマンドを実行して下さい。
$ mkdir hello
$ cd hello
$ zen init-exe
これで、プロジェクトの雛形であるbuild.zen
とsrc/main.zen
が生成されます。
.
├── build.zen
└── src
└── main.zen
1 directory, 2 files
build.zen
については、10章ビルドスクリプトで紹介します。
src/main.zen
の内容を確認してみましょう。
examples/hello/src/main.zen
const std = @import("std");
pub fn main() anyerror!void {
std.debug.warn("Zen の道へようこそ。\n道案内はこちらからどうぞ:\nhttps://www.zen-lang.org/ja-JP/docs/\n", .{});
}
これは、ZenのHello Worldプログラムに相当します。通常、このファイルを編集してプログラムを作成していきますが、今回はこの雛形をそのまま実行してみましょう。
zen build run
でプロジェクトをビルドして、実行します。
$ zen build run
Zen の道へようこそ。
道案内はこちらからどうぞ:
https://www.zen-lang.org/ja-JP/docs/
おめでとうございます!これでZenでソフトウェアを書く第一歩を踏み出しました!
プログラムをビルドして実行する方法はいくつかあります。zen build run
は最もお手軽な方法です。他の方法も試してみましょう。
zen build run
を実行すると、zen-cache
というディレクトリが作成されます。
.
├── build.zen
├── src
└── zen-cache # ★
2 directories, 1 file
zen-cache
にはビルド時の一時ファイルや、ビルド済みの実行ファイルが含まれています。zen-cache/bin/hello
に実行ファイルが格納されており、直接この実行ファイルを実行することができます。
ノート: 実行ファイル名は、デフォルトでは作業ディレクトリ名であるため、ディレクトリ名を
hello
以外にした場合、実行ファイル名が異なります。
$ ./zen-cache/bin/hello
Zen の道へようこそ。
道案内はこちらからどうぞ:
https://www.zen-lang.org/ja-JP/docs/
プログラムを実行せず、ビルドだけすることもできます。
$ zen build
zen build
コマンドは、Zenのビルドスクリプトであるbuild.zen
を実行します。Zenコンパイラを直接利用して、プログラムをビルドする場合は、次のようになります。
$ zen build-exe src/main.zen
$ ./main
Zen の道へようこそ。
道案内はこちらからどうぞ:
https://www.zen-lang.org/ja-JP/docs/
それでは、サンプルプロジェクトのソースファイルsrc/main.zen
の内容を、少し詳しく見ていきましょう。
examples/hello/src/main.zen
const std = @import("std");
pub fn main() anyerror!void {
std.debug.warn("Zen の道へようこそ。\n道案内はこちらからどうぞ:\nhttps://www.zen-lang.org/ja-JP/docs/\n", .{});
}
1行目は、Zenの標準ライブラリをインポートしています。
const std = @import("std");
標準ライブラリには、入出力、コレクション、暗号などのモジュールが含まれています。標準ライブラリをconst変数std
にインポートすることで、std.xxx
という構文で標準ライブラリ機能が利用できます。
3行目は、関数の宣言です。
pub fn main() anyerror!void {
pub
はmain
関数が外部からアクセス可能であることを意味します。fn
は関数であることを示すキーワードです。main
は関数名で、()
内には関数の引数を書くことができます (今回は引数なしです) 。anyerror!void
は戻り値の型です。main
関数は、何らかのエラーを返すか、戻り値がない (void
) ことを意味しています。Zenでは、戻り値の型を省略することができません。これは、戻り値の型がvoid
であっても同様です。
{ }
が関数の本体です。4行目で、文字をコンソールに表示します。
std.debug.warn("Zen の道へようこそ。\n道案内はこちらからどうぞ:\nhttps://www.zen-lang.org/ja-JP/docs/\n", .{});
std.debug.warn
は、コンソールに文字を出力する標準ライブラリの関数です。()
内の文字列"..."
を標準エラーに出力します。std.debug.warn
は、ベースとなるフォーマット文字列と、1つの無名構造体リテラルを引数に取ります。今回無名構造体リテラルは空 (.{}
) です。std.debug.warn
は改行文字を自動で挿入しないため、文字列の最後に改行文字\n
を入れています。
これまで見てきたサンプルプログラムでは、文字列を標準エラーに出力していました。Zenで標準出力 (stdout) に文字を出力するプログラムは、次のようになります。
examples/hello_stdout/src/main.zen
const std = @import("std");
pub fn main() anyerror!void {
// 標準出力を取得できない環境では、エラーが発生してプログラムが停止します。
const stdout = try std.fs.getStdOut();
// 標準出力への表示に失敗すると、エラーが発生してプログラムが停止します。
_ = try stdout.write("Hello, world!\n");
}
try
については後の章で詳しく説明しますが、エラーが発生した場合にmain
関数から戻るためのキーワードです。Zenで標準出力に文字列を出力するには、まず、標準ライブラリ関数であるstd.io.getStdOut()
によって標準出力を取得できるかどうかを試し、その上で標準出力に文字列を書き込みます。これはZenが、プログラムが実行される環境に対していかなる前提も置かないためです。今回の例では、プログラムがOS上で動作することを前提としていないため、まず、標準出力を取得できるかどうか、から試しています。
上記の内容で、main.zen
を作成し、次のコマンドを実行することで、Hello World
プログラムを実行することができます。
$ zen build-exe main.zen
$ ./main
Hello, world!
☰ 人の生きた証は永遠に残るよう ☰
Copyright © 2018-2020 connectFree Corporation. All rights reserved. | 特定商取引法に基づく表示
Zen, the Zen three-circles logo and The Zen Programming Language are trademarks of connectFree corporation in Japan and other countries.