コンソール入出力とフォーマット
print、println、input 文とプレースホルダーの規則を説明します。
Wave Foundation
入出力文
print、println、input は、フォーマット付きコンソール入出力を行う 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 はフォーマットしたテキストをそのまま出力します。println は末尾に改行を追加します。
print("loading...");
println("done");
フォーマットには整数、浮動小数点数、文字列、ポインタなどのスカラー値を使用できます。配列と構造体はフォーマット引数にできません。
input の格納先
input のフォーマット以降にある各式は、解析した値を書き込めるストレージを示す必要があります。
var number: i32 = 0;
input("{}", number);
変数、対応するフィールドアクセス、対応するデリファレンス形式を格納先にできます。リテラルと計算結果の右辺値は使用できません。
input が要求されたすべての値を変換できない場合、プログラムは失敗ステータスで終了します。
ランタイム境界
これらのコンソール文にはホストランタイムが必要です。フリースタンディングのカーネルや組み込みプログラムでは、明示的な関数または FFI 境界を通してターゲット固有の入出力を提供します。