コンソールの入力、出力、およびフォーマット
print、println、input文とプレースホルダーの規則を説明します。
Wave Foundation
入出力文
Waveはprint、println、inputをコンソール入出力文として提供します。
fun main() {
var count: i32 = 0;
input("{}", count);
print("count = ");
println("{}", count);
}
各文は;で終わります。最初の引数は文字列リテラルでなければなりません。変数または計算した文字列をformat引数として使用することはできません。
プレースホルダー
正確に2文字の{}のみプレースホルダーです。
println("name = {}, score = {}", name, score);
プレースホルダの数と次の式の数はまったく同じでなければなりません。数が異なると文法エラーです。
println("{} {}", one);
// 오류: 자리표시자 2개, 값 1개
println("plain text", one);
// 오류: 자리표시자 없음, 값이 남음
他の形式の中かっこはプレーンテキストのままです。この文法には名前や番号の付いたプレースホルダはありません。
printとprintln
printはフォーマットしたテキストをそのまま出力し、printlnは改行を付け加えます。
print("loading...");
println("done");
フォーマット引数には、整数、浮動小数点、文字列、ポインタなどのスカラー値を使用します。配列と構造体はフォーマット引数として使用できません。
input対象
inputは読み取った値をターゲットに格納するため、formatの後の式はすべて書き込み可能な位置にする必要があります。
var number: i32 = 0;
input("{}", number);
変数、フィールド、および逆参照した保存場所をターゲットとして使用できます。リテラルと計算結果は入力先として使用できません。
入力値を要求されたタイプにすべて変換できない場合、プログラムは失敗状態で終了します。
ランタイム境界
これらの文は、hosted環境のコンソール入出力を使用します。プリスタンディング環境では、カーネルまたはデバイスが提供する入出力を関数またはFFI境界として定義する必要があります。
入力値と範囲
bool入力は0と1のみ許可します。 2をtrueと解釈するか、trueという文字列を同じ入力として受け取りません。整数入力は、ターゲット整数幅の範囲内になければなりません。 128・256・512・1024ビット整数度タイプの全幅を基準に処理します。
フォーマットエラー、範囲超過、必要な入力前EOFは失敗です。組み込みinputは、失敗を返して再入力する関数ではなく、プロセスを失敗終了させる入力機能です。リカバリ可能な入力処理が必要な場合は、ioでバイトを読み込み、別のパーサーを構成します。