「undefined」値と「unsupplied」値の違いは何ですか。

undefined 値は、定義済みであるがまだ値の代入されていない変数や配列の要素に割り当てられます。

変数「a」を定義したが、代入演算子「=」を使用して変数に値を保存していない場合、最初の値は「undefined」になります。

例:

    a
    a == undefined

結果:

    undefined
    true

また、配列を作成してインデックス 4 の要素に値を割り当てた場合、値を割り当てた要素の前にある 3 つの要素はすべて、暗黙的に初期化されて値「undefined」が割り当てられます。4 番目の要素に値が設定されているのにそれより前の 3 つの要素が初期化されてない配列などはあり得ないので、これらの値は「プレースホルダ」のようなものであるといえます。

例:

    a = #()
    a[4] ="Yeah!"
    a

結果:

    #()
    "Yeah!"
    #(undefined, undefined, undefined, "Yeah!")

unsupplied 値は、関数が呼び出された時点でまだ指定されていない関数パラメータに割り当てられます。

関数の呼び出しでは、パラメータを指定しない場合 (この場合は「パラメータなし」を示す括弧が必要)、1つ以上の引数を指定する場合、さらに 1 つ以上の名前付き引数を指定する場合があります。関数によって定義される引数は、必須なので指定しなければなりません。一方、名前付き引数はオプションなので省略可能です。この場合、プログラム作成者が名前付き引数の値と「unsupplied」値を比較して、意味のある値が送信されたのか省略されたのかを検出します。

次の例では、関数は、引数が存在しないか、オプションの名前付き引数が 1 つ存在するかのどちらかであると想定しています。名前付き引数が指定され、リスナーにそれぞれのメッセージが出力されたかどうかをチェックして、true または false を返します。

例:

    fn test_function theParameter: =
    (
     if theParameter == unsupplied then
     (
      print "How about providing a parameter?"
      false
     )
     else
     (
      print "Thank you for calling the function with a parameter!"
      true
     )
    )
    test_function()
    -->"How about providing a parameter?"
    -->false

    test_function theParameter:123
    -->"Thank you for calling the function with a parameter!"
    -->true