let (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

シグネチャ

let [access] [constant] name[:type] [ = value]
  [, name[:type][ = value]] ...

新しい変数を宣言します。

説明

現在のコード ブロック内で、1 つまたは複数の新しい変数を宣言します。アプレット、パッケージ、またはスクリプトのトップ レベルで使用すると、これはグローバル変数を作成します。グローバル変数はコンポーネント全般にわたってアクセス可能です。それ以外の場合は、変数はその変数が含まれているコード ブロック内でのみアクセス可能です。
let 宣言は 3 つの状況のいずれかで使用されます。
  1. アプレット、パッケージ、又はスクリプトのトップ レベル : コンポーネント全体でアクセス可能なグローバル変数を定義します。アプレットでは、トップ レベルの let 宣言はテキストと区別するためにCurlブラケットで囲む必要があります。
  2. クラスのトップ レベル : グローバルな クラス変数 を定義します。
  3. コード コンテキスト : これを含むコード ブロック内でのみアクセス可能な新しい変数を定義します。
access 属性は let のトップ レベルの使用にのみ適用され、packagelibrary または public の値を持つ場合があります。指定されていない場合は、アクセス既定で package になります。グローバル変数を、それが宣言されたパッケージの外部でアクセス可能にするには、public を指定します。アプレットまたはスクリプト内でグローバル変数のアクセス値を public として宣言していても、他のコンポーネントがそのグローバル変数にアクセスすることができないため意味がありません。
変数を constant として宣言すると、set を使用してその変数値を置換することができません。変数がクラス インスタンスを含む場合、変数を constant として宣言することでインスタンスの置換を回避できますが、コードがオブジェクトの内部状態を変更することは避けられないことに注意してください。変数の型を自動的に参照するという利点があるので、constant の代わりに def 構文を使用することは通常理にかなっています。
type または value のどちらかを指定することが必要ですが、両方の指定は必要ありません。type の指定がない場合、既定では any 型になります。value の指定がない場合、宣言型の既定値が使用されます。宣言型に既定値が入っていないと構文エラーが生成されます。
次の構文を使用して、複数の値を返す let 関数内で複数の変数を初期化することもできます。
let (name1[:type1], name2[:type2] [,...]) = {function}
この場合、変数は関数で返される値と同じ順番で指定することが必要です。ただし、値は最後から省略できます。たとえば、関数が 4 つの値を返す場合、let は最後の 1 個、2 個、または 3 個の値を省略できます。例については、次を参照してください。
let ステートメントは、アプレット内のグローバル変数を宣言するために使用するのでない限り、Curlブラケットで囲む必要はありません。ただし、 形式の問題上、グローバル定数やローカル定数の宣言を簡単に区別できるよう、let をトップ レベルやクラス レベルで使用する時は常に中かっこで囲むことを推奨します。
詳細と例に関しては、『Curl 開発者ガイド』の変数セクション を参照してください。

|| Top-level, global constants
{let public constant ten:int = 10, hundred:int = 100}
||
|| Some global variables
{let message:String = "hi there"}
let count:int = 0  || curly braces not needed if not in an applet
||
|| Local variables.  Not visible outside the enclosing 'do':
{do
    let x:int = 42
    let missing-type = 42 || Same as missing-type:any = 42
    let missing-value:any || Same as missing-value:any = null
    let str1:String       || Error: no default value for String
    let str2:#String      || Ok.  Default value is null.
    || 
    || One or more values may be assigned in a let from functions
    || that return multiple values:
    let str-value:String = "42"
    let value1:int = {str-value.to-int}
    let (value2:int, n-chars-consumed:int) = {str-value.to-int}
}