Category:ユーザ定義関数

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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>

Subcategories

This category has only the following subcategory.