> LeekScript チュートリアル
ストリクト・モードに移行することを決めたら、エディタがそれまで存在しなかった大量の警告であふれかえった。慌てないでください。ストリクト・モードの意義はまさに、許容範囲を狭め、特に型付けについて自由度を減らすことにあるのです。 よくある警告の例をいくつか見て、まず何が問題として報告されているのかを理解し、それを解決する方法を探しましょう。
まずは簡単な例。計算結果を整数型の変数に保存したいとします。
ここでの問題は、数学的には sqrt(4) が 2 であっても、関数 sqrt が常に実数型の値を返すことです。実数は損失なしに整数型の変数に収まりません。たとえば sqrt(2) の小数部分はどうすればよいのでしょう? そのためコンパイラは明示的な選択を求めてきます。 この警告を解決する方法はいくつかあります。
別の例。次のように定義した整数の連想配列(Map)があり、その値を同じく整数型の変数に保存したい。普通に考えれば型は一致するはずなのですが……
なぜ警告は mapEntier[0] が単なる「integer」ではなく「integer?」型だと言うのでしょうか? 思い出しておくと、型の末尾の「?」は、その型が null 値も受け入れることを意味し、「integer | null」と同等です。では、型からすれば integer しか含まないはずの連想配列が、なぜ null を返しうるのでしょう? 連想配列から値を読むにはキーを渡す必要があります。ここでは角括弧に入れた「0」で、このキーは連想配列で定義された型(ここでは integer)でなければなりません。その点は問題ありません。しかし、そのキーが連想配列に存在することをエディタに保証するものは何もなく、存在しないキーで連想配列を読むと戻り値は常に null になります。したがって、キーによる連想配列へのアクセスの戻り値は常に nullable になるのです。 では、警告が出ないようにこの問題を解決する方法を見てみましょう。
今回は、整数のリストをソートしたいという、一見なんでもない話です。ドキュメントの例をそのまま使います。
ところがこの 1 行だけで警告が 2 つも出ます。まず 1 つ目から見ましょう。括弧で囲まれているのは、問題が関数のパラメータにあり、期待されるシグネチャに合っていないことを意味します。 arraySort のドキュメントでシグネチャを確認しましょう:Function real | integer> => Array> つまりこれは 2 つのパラメータを取る関数で、1 つ目はリスト、2 つ目は同じく 2 つのパラメータを取って整数または実数を返す関数です。1 つ目のパラメータには確かにリストを渡しているので問題なし。ということは 2 つ目のパラメータに何か問題があります。渡している関数のシグネチャは Function any> ですが、arraySort が期待するのは Function real | integer> であり、戻り値の型が期待どおりではありません。
コールバック関数の型付けの問題は解決しました。残るは 2 つ目の警告です。先ほど見たとおり、関数 arraySort の戻り値は、変数に期待している Array\ ではなく単なる Array なので、この問題を修正するには戻り値を明示的にキャストする必要があります。
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.