ざっくりZig - 変数と代入

2024/03/05に公開

プログラミングでは、必要なデータを一時的に記憶する場所を用意する処理をよく行います。この記憶場所に名前を付けたものを変数(へんすう)といいます。変数はデータを記憶したり、記憶したデータを読み込んだりするときに使われます。

変数を介してデータを記憶させることを代入(だいにゅう)といいます。代入されたデータのことを、その変数の値(あたい)といいます。次に示すプログラムでは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言語"

数値の表し方と計算 >
< "Hello, Zig!"の表示に必要なこと
ざっくりZig 一覧

Discussion