問1 ゼロ値を予言せよ
初段 / 目安 15分
TypeScript道場を突破したあなたに、凛さんからメッセージが届きました。
「fleama、アクセス増で Node版 API が悲鳴を上げています。Goリプレイス計画、始動します。リードは私。実装は——あなたにお願いします。ルールは前と同じ。私の CI が通らないコードはマージしません」
最初の課題は、書く前に考える課題です。
「宣言だけして初期化していない変数たち。それぞれ何が入っているか、実行する前に予言を書いてから、コードで確かめてください。Go では『分からない』は存在しません」
Go では、var で宣言しただけの変数にも必ず値が入ります。これをゼロ値と呼びます。JavaScript の undefined のような「まだ何も無い状態」は存在しません。型が決まれば、初期値も決まります。
数値は 0、文字列は空、真偽値は false です。ここまでは素直です。少し違うのがスライスで、こちらのゼロ値は nil になります。ただし nil のスライスでも len は取れて 0 を返しますし、append もそのまま使えます。空だが壊れてはいないという状態です。
完成条件
初期化していない変数の中身を組み立てて返す関数 predictZero を作ってください。
var で int string bool []string の4つを宣言し、その値から次の形の1行を作ります。引数の addOne が true のときだけ、スライスに1件だけ append してから調べます(nil でなくなることを確かめるためです)。
プレーンテキスト
int=0 string=空 bool=false slice=nil(len 0)文字列のゼロ値は見えないので、空だったときは 空 という字に置き換えて出してください。スライスは nil と等しいかどうかで nil か あり を出し分け、そのあとに (len 0) の形で長さを添えます。
数値と真偽値と長さを文字に直すところは strconv が使えます。
要件
varでintstringbool[]stringの4つを宣言する(代入はしない)- 文字列が空のときは
空に置き換えて出す - スライスは
nilと等しければnil、そうでなければありを出し、(len 長さ)を添える
入出力例
predictZero(false) → "int=0 string=空 bool=false slice=nil(len 0)"
predictZero(true) → "int=0 string=空 bool=false slice=あり(len 1)"ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです