ユーザ定義関数

From Second Life Wiki
Jump to navigation Jump to search

LSL ではユーザ定義関数を扱えます。構文は非常にシンプルです:

<lsl>

return_type variable_name(par1type par1name, par2type par2name,...)

 {
   function_statements;
   .
   .
   .
   return value_of_return_type;
 }

</lsl>

"function" や "def" といったキーワードや、関数の型/継承を指定する必要はありません。引数の数や組み合わせにどのような制限が (もしあれば) あるのか、私はまだ知りません。下の例のように、引数の型はまちまちで構いません。list 型を戻り値にできますので、一つの関数が複数の値を含めたリストを返せます。ユーザ定義関数によってスクリプトは簡潔で読みやすくなり、基本的なコードの再利用が可能になります。LSL スタイルガイドでは、ユーザ定義関数は default ステートの前、ユーザ定義変数の後に置かれるべきとしています。ユーザ定義関数を最初のステートの後に記述すると、Syntax Error になるでしょう。

簡単な例を 2 つ挙げます:

<lsl>

float xsquared(float x) // 引数の二乗を返します {

   return x*x;

}

vector scalarmult(vector vIn, float sMult) // スカラーとベクトルの積を返します {

   vIn.x=vIn.x*sMult;
   vIn.y=vIn.y*sMult;
   vIn.z=vIn.z*sMult;
   return vIn;

}


default {

   state_entry()
   {
       llWhisper(0, "Some user functions");
   }
   touch_start(integer total_number)
   {
       float testx=3;
       llWhisper(0,"testx squared :"+(string)xsquared(testx));
       vector testVector = <1,2,3>;
       testVector = scalarmult(testVector,testx);
       llWhisper(0,"test vector is:"+(string)testVector);
   }

}


</lsl>