ざっくりZig - 変数と代入
プログラミングでは、必要なデータを一時的に記憶する場所を用意する処理をよく行います。この記憶場所に名前を付けたものを変数(へんすう)といいます。変数はデータを記憶したり、記憶したデータを読み込んだりするときに使われます。
変数を介してデータを記憶させることを代入(だいにゅう)といいます。代入されたデータのことを、その変数の値(あたい)といいます。次に示すプログラムではaという変数に3という値を代入し、そのあと、それに2を加えた結果をbに代入する処理を行います。
$ cat > plus2.zig # Windowsでは以下9行をテキストエディタで入力
pub fn main() !void {
const std = @import("std");
const stdout = std.io.getStdOut().writer();
const a = 3; // aが変数、aに3を代入
const b = a + 2; // aの値に2を足した結果をbに代入
try stdout.print("a = {}, b = {}\n", .{a, b}); // a, bの値を出力
}
$ zig run plus2.zig
a = 3, b = 5
変数にデータを代入
const a = 3;
a = 3の部分がaに3というデータを代入しているところです。constは、これ以降aの値が変更されないことを表します。
変数の値を使って計算
const b = a + 2;
aにはすでに3という値が代入されています。これに2を足した結果(5)がbに代入され、bの値は5となります。
変数の値を出力
try stdout.print("a = {}, b = {}\n", .{a, b}); // a, bの値を出力
変数の値を出力するとき、{}の部分に変数の値が出力されます。ここでは"a = {}, b = {}\n"のように{}が2か所あるため、最初の{}の位置にaの値、次の{}の位置にbの値を出力するため、.{a, b}としています。これにより、全体として"a = 3, b = 5\n"が出力されます。\nは改行を表し、この後の文字列を次の行に出力されるようにします。
変数に代入できるのは3, 5のような数値だけではありません。"Hello, Zig!"のような文字列も代入できます。
$ cat hello_name.zig # Widnowsでは以下8行をエディタで入力
pub fn main() !void {
const std = @import("std");
const stdout = std.io.getStdOut().writer();
const name = "Zig"; // 文字列の代入
try stdout.print("Hello, {s}!\n", .{name}); // {s}部分にnameの値が表示される
}
$ zig run hello_name.zig
Hello, Zig!
文字列の代入
const name = "Zig";
文字列を変数に代入するときは、文字列の両端を"(二重引用符)で囲みます。日本語文字列を含むときは文字コードUTF-8で記述してください。また、"自身は"のように直前に\をつけます。
const name = "\"Zig\"はプログラミング言語です"; // "Zig"はプログラミング言語です
文字列の出力
try stdout.print("Hello, {s}!\n", .{name});
"Hello, {s}!\n"に含まれる{s}の位置にnameの値が出力されます。nameには"Zig"が代入されていますので、出力される文字列は"Hello, Zig!\n"となります。
エスケープシーケンス
文字列中の\nや"のように\と別の文字列を組み合わせたものをエスケープシーケンスといいます。
記号 | 内容 |
---|---|
\n | 改行 (次の行) |
\r | 復帰 (行頭に戻る) |
\t | タブ |
\\ | \自身 |
\' | '自身(一重引用符) |
\" | "自身(二重引用符) |
このほかに文字コードを16進数で表すこともできます。ASCIIコードに含まれるものは \xNN 、Unicodeに含まれるものは \u{NNNN} となります。Nは16進数の1桁(0~9, a~f)で、a~fはA~Fでも同じです。
"\x5A\x69\x67\u{8A00}\u{8A9E}" // "Zig言語"
"\x5a\x69\x67\u{8a00}\u{8a9e}" // "Zig言語"
Discussion