トップページへ | [ 一覧 | 検索 | 最終更新 ] [ 差分 | 履歴 ] |
値と変数†即値†文が扱える値は整数、実数、文字列の3種類です。 整数(int)†符号付き32bit整数です。
10進数値はそのまま記述します。 int10 { 10 0b1010 0xa } 実数(double)†符号付き64bit浮動小数点数です。小数点以下の桁がある場合や、精度が落ちてもいいので非常に巨大な数値を扱いたい場合はこれを使用します。 整数との区別は小数点の有無です。文は数値に小数点を見つけると、これを実数として取り扱います。 例えば Test { 3/4*100 } とすると結果は75ではなく0になってしまいます。これは3/4を評価した時intとして解釈してしまい、小数点以下が切り捨てられてしまうためです。(演算子は左から順に評価されます)意図した動作にするには Test { 3.0/4*100 } とする必要があります。これは3.0を評価した時点でdouble型として解釈するためです。(double型のため結果は75ではなく75.000000となります。整数にしたい場合はTOINT関数を使ってください) 変数の演算でこれを行いたいときは宣言時に実数を代入するか、TOREAL関数を用いる必要があります。 Test { _A = 3 _B = 4 TOREAL(_A)/_B*100 } 文字列†ダブルクォート(")で囲まれた値は文字列です。 文字列の中にダブルクォートが含まれてはいけません。 「/」を文末に書くと改行を含む文字列を記述することができます。 "こん\n/ なかんじに\n/ 書いてもOK\n/" 後述するヒアドキュメントを用いても改行を含む文字列を書けます。 また、さくらスクリプトは文字列として記述しないと動作しません。 文字列(展開なし)†シングルクォート(')で囲まれた値は、展開されない単純な文字列です。 ヒアドキュメント†「ヒアドキュメント」とは、複数行書ける文字列即値です。 <<" 行1 行2 ">> で展開あり文字列、 <<' 行1 行2 '>> で展開無し文字列になります。 変数†変数は値を格納するための領域です。
を格納することができます。 名前は以下の禁止条項に抵触しない限りは自由につけることができます。
値の格納(代入)は代入演算子 = で行ないます。内容を出力するには、関数と同様にその名前を書きます。 request { str = "こんにちは" str } 上は単純な例で、変数strに文字列を格納し、そのまま出力しています。 まだ値が代入されていない変数は、「未定義型」という特殊な型となります。 request { "Hello World" i } この場合、i は存在しないため、「未定義型」となります。 変数のスコープと寿命†変数はスコープ(有効範囲)の違いによって2種類存在します。
両者を区別するのは変数の名前です。変数名の先頭がアンダースコア("_")の変数は、ローカル変数として扱われます。 「必要な範囲だけで有効な変数」であるローカル変数をうまく利用することで、プログラムの見通しが良くなります。 request { ᵢ = "3*2は" ⱼ = multi(3) ᵢ +ⱼ + "です" } multi { ᵢ = ₐrgv[0] ᵢ * 2 } requestとmultiが同じ名前の変数 ᵢ を使っていますが、それらはまったく別物として扱われます。お互いの値を破壊することはありません。
関数の引数を扱う変数ₐrgcとₐrgvも実はローカル変数であることに気付かれたかと思います。 ローカル変数が「現在の関数内で使用可能な変数」ではなく、「現在の{ }内、およびそれより深い入れ子階層のみで使用できる変数」であることには注意してください。 request { { ₛtr = "Hello World" } ₛtr } このプログラムは期待通りには動作しません。 グローバル変数を削除するにはELASEVAR関数を使う必要があります。また、その性質上グローバル変数の初期化は起動時に最初に実行される関数(OnBootなど)で行うことを推奨します。 |