コンソール入出力とフォーマット

print、println、input 文とプレースホルダーの規則を説明します。

Wave Foundation

入出力文

printprintlninput は、フォーマット付きコンソール入出力を行う Wave 言語の文です。

fun main() {
    var count: i32 = 0;
    input("{}", count);
    print("count = ");
    println("{}", count);
}

各文は ; で終わります。最初の引数は文字列リテラルでなければならず、変数や計算で得た文字列をフォーマット引数として使用することはできません。

プレースホルダー

正確に 2 文字の {} だけがプレースホルダーです。

println("name = {}, score = {}", name, score);

プレースホルダーの数は、後続する式の数と一致していなければなりません。一致しない場合はコンパイル時エラーになります。

println("{} {}", one);      // エラー: 2 個のプレースホルダーに対して値が 1 個
println("plain text", one); // エラー: プレースホルダーがないのに余分な値がある

それ以外の波括弧は文字どおりのテキストです。この構文には名前付きまたは番号付きのプレースホルダーはありません。

print はフォーマットしたテキストをそのまま出力します。println は末尾に改行を追加します。

print("loading...");
println("done");

フォーマットには整数、浮動小数点数、文字列、ポインタなどのスカラー値を使用できます。配列と構造体はフォーマット引数にできません。

input の格納先

input のフォーマット以降にある各式は、解析した値を書き込めるストレージを示す必要があります。

var number: i32 = 0;
input("{}", number);

変数、対応するフィールドアクセス、対応するデリファレンス形式を格納先にできます。リテラルと計算結果の右辺値は使用できません。

input が要求されたすべての値を変換できない場合、プログラムは失敗ステータスで終了します。

ランタイム境界

これらのコンソール文にはホストランタイムが必要です。フリースタンディングのカーネルや組み込みプログラムでは、明示的な関数または FFI 境界を通してターゲット固有の入出力を提供します。