Difference between revisions of "LSL Style Guide/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 3: Line 3:
'''現在翻訳作業中です...'''(これは翻訳作業者が、作業中であることを明示するために挿入した一文です。)
'''現在翻訳作業中です...'''(これは翻訳作業者が、作業中であることを明示するために挿入した一文です。)


Effective programming in LSL requires that developers use a disciplined practice for applying formatting and convention to their scripts.
LSLにおける効率的なプログラミングには、スクリプトを定型と規約に定めるための制約的実行が必要です。


These guidelines, referred to collectively as a Style Guide, are not as rigid as the rules required by the language compiler but nonetheless are critical to creating maintainable code. The most critical aspect of a style is that you apply it consistently to the code you write.
これら、スタイルガイドと呼ばれる集約的要素のガイドラインは、言語コンパイラが必要とするルールほど厳密ではありませんが、それでもなお効率的なメンテナンス性のあるコードを作成するためには必要です。最も効果的なスタイルの様相は、あなたの書くコードに首尾一貫性を持たせることです。


==General Guidelines==
==一般的なガイドライン==


Most people, when they start programming on their own, will have programs that are UGLY to look at; to put it nicely. They usually look like the following:
プログラミングを始めるときに、多くの人々はそれをみて確実に不快感を催すでしょう。彼らは大抵以下のようなものを目にします。


     default {state_entry(){llSay(0,"Hello World.");}}
     default {state_entry(){llSay(0,"Hello World.");}}


However, that code is impossible to read (or at least to ''follow'') when one is writing a ten thousand word program. Therefore, programmers have two main methods as to bracketing and indenting.
しかしながら、このコードは一行が一万語で書かれているプログラムの場合、読み解く(あるいは最後まで解釈する)ことが困難です。それ故、プログラマー達は主に括弧とインデントという二つの手法を用います。




Method One:
手法一:
<pre>
<pre>
     default {
     default {
Line 25: Line 25:
</pre>
</pre>


Method Two:
手法二:
<pre>
<pre>
     default
     default
Line 36: Line 36:
</pre>
</pre>


Method One conserves space, however Method Two is easier to read for the beginner. Once a scripter is the practice of using a particular style, reading code in that style will be easier. Consistent indenting makes reading both styles easier. In Method One indenting is the key indicating factor of levels of scope.
手法一あるいは手法二の位置づけスペースは初心者にとってより読みやすくなります。スクリプタは記述スタイルとして実施することにより、さらに読みやすいコードとなるでしょう。首尾一貫したインデントは、さまざまなスタイルをさらに読みやすくします。手法一におけるインデントは、スコープレベルでの要素を表す鍵です。


==Naming Conventions==
==命名規則==


There are many naming conventions in Second Life. Only the most used ones will be listed below.
Second Lifeには、多くの命名規則が存在します。ただ、最も使われるものは次に並んだものでしょう。
 
 
Global Variables (variables used through out the entire program) should begin with a lowercase g. For Example:


グローバル変数(プログラム全体を通して持ちいられる変数)は最初に小文字のgをつけるべきです。
<pre>
<pre>
     integer gSelected = 0;
     integer gSelected = 0;
Line 50: Line 48:
</pre>
</pre>


 
固有変数は全て大文字を用いるべきです。例:
Variable Constants should be in ALL CAPS. For Example:


<pre>
<pre>
Line 59: Line 56:




Arguments used within a user defined function or an [[event]] should start with an underline (_). For Example:
ユーザ定義関数やイベントの中で用いられる引数は、アンダーバー(_)から始めるべきです。
 
<pre>
<pre>
     listen( integer _channel, string _name, key _id, string _message )
     listen( integer _channel, string _name, key _id, string _message )
Line 69: Line 65:
</pre>
</pre>


==Separating Code==
==コードの分離==
Many people will start out doing many, many function calls on one line. This makes the code hard to read, and almost impossible to debug. The following is an example of one such program:
 
多くの人達は一行で余りにも沢山の関数を呼び出そうとするでしょう。これはコードを読み難くして、極めてデバッグを困難にします。例として、このようなプログラムを挙げてみます。
<pre>
<pre>
list lst;
list lst;
Line 87: Line 84:
</pre>
</pre>


Now here is the code, with the exact same features, in a simpler way. While hardly anyone could tell you what the above code did, almost everyone can tell you what the below code does.
いまここに、簡潔になる方法をとった、まったく同じ処理のコードがあります。誰かが、先ほどのコードが一体何を行っているのか、あなたに説明することで困難になっている間に、多くの人達はこのコードを教えるでしょう。


<pre>
<pre>
Line 108: Line 105:
</pre>
</pre>


LSL lacks an optimizing compiler. For this reason it may be necessary to balance the two style to get faster code. Line combination optimization should only be done after the code is working & bug free. Improper optimization can lead to wrong results. Always test optimized code thoroughly.
LSLは最適化コンパイラではありません。これは、二つのスタイルがさらに軽快なコードにすることにはバランスが必要となる理由でしょう。行を混ぜ合わせる最適化は、後々コードの動作をバグでいっぱいにするでしょう。間違った最適化は、よくない結果を招きいれます。常に十分に最適化されたコードを試みましょう。


<pre>
<pre>
Line 125: Line 122:
</pre>
</pre>


==Script Structure==
==スクリプト構成==
LSL scripts are comprised of expressions, functions, statements, event handlers and states. The LSL compiler mandates a certain structure to scripts:
 
LSLスクリプトは、関数、ステートメント、イベントハンドラ、ステートの要素によって構成されています。LSLコンパイラはスクリプトに正確な構造化を強制します。


#User Defined Variables  (see [[LSL_Variables]])
#定義された変数を用いる([[LSL_Variables]]を参照)
#User Defined Functions (see [[User-defined_functions]])
#定義された関数を用いる([[User-defined_functions]]を参照)
#[[default]] State  (see [[State]])
#[[default]] State  ([[State]]を参照)
#User Defined States
#定義されたステートを用いる


==Editor==
==エディタ==


There are many 3rd party editors with LSL syntax files.
多くのサードパーティ製エディタとLSL構文ファイルがあります。その他の情報は[[LSL Alternate Editors]]を参照してください。
See [[LSL Alternate Editors]] for more information.

Revision as of 01:20, 25 December 2007

現在翻訳作業中です...(これは翻訳作業者が、作業中であることを明示するために挿入した一文です。)

LSLにおける効率的なプログラミングには、スクリプトを定型と規約に定めるための制約的実行が必要です。

これら、スタイルガイドと呼ばれる集約的要素のガイドラインは、言語コンパイラが必要とするルールほど厳密ではありませんが、それでもなお効率的なメンテナンス性のあるコードを作成するためには必要です。最も効果的なスタイルの様相は、あなたの書くコードに首尾一貫性を持たせることです。

一般的なガイドライン

プログラミングを始めるときに、多くの人々はそれをみて確実に不快感を催すでしょう。彼らは大抵以下のようなものを目にします。

   default {state_entry(){llSay(0,"Hello World.");}}

しかしながら、このコードは一行が一万語で書かれているプログラムの場合、読み解く(あるいは最後まで解釈する)ことが困難です。それ故、プログラマー達は主に括弧とインデントという二つの手法を用います。


手法一:

    default {
        state_entry() {
            llSay(0, "Hello World.");
        }
    }

手法二:

    default
    {
        state_entry()
        {
            llSay(0, "Hello World.");
        }
    }

手法一あるいは手法二の位置づけスペースは初心者にとってより読みやすくなります。スクリプタは記述スタイルとして実施することにより、さらに読みやすいコードとなるでしょう。首尾一貫したインデントは、さまざまなスタイルをさらに読みやすくします。手法一におけるインデントは、スコープレベルでの要素を表す鍵です。

命名規則

Second Lifeには、多くの命名規則が存在します。ただ、最も使われるものは次に並んだものでしょう。

グローバル変数(プログラム全体を通して持ちいられる変数)は最初に小文字のgをつけるべきです。

    integer gSelected = 0;
    string  gMyName = "Please set one";

固有変数は全て大文字を用いるべきです。例:

    integer CHAT_CHAN = -517265;
    key OWNER_KEY = llGetOwner();


ユーザ定義関数やイベントの中で用いられる引数は、アンダーバー(_)から始めるべきです。

    listen( integer _channel, string _name, key _id, string _message )
    {
        if ( _channel == 1 || _id == llGetOwner() )
        	llOwnerSay("Hello Avatar");
    }

コードの分離

多くの人達は一行で余りにも沢山の関数を呼び出そうとするでしょう。これはコードを読み難くして、極めてデバッグを困難にします。例として、このようなプログラムを挙げてみます。

list lst;
integer numDigits = 10;
default {

   touch_start(integer n) {
       integer i = 0;
       integer index = llListFindList(lst, [llToLower(llGetSubString(llList2String(llParseString2List(llKey2Name(llDetectedKey(i)), [" "], []), 0), 0, numDigits - 1))]);
       if (!~llListFindList(lst, [llToLower(llGetSubString(llList2String(llParseString2List(llKey2Name(llDetectedKey(i)), [" "], []), 0), 0, numDigits - 1))]))
           lst += llToLower(llGetSubString(llList2String(llParseString2List(llKey2Name(llDetectedKey(i)), [" "], []), 0), 0, numDigits - 1));
       llOwnerSay(llList2CSV(lst));
   }

}

いまここに、簡潔になる方法をとった、まったく同じ処理のコードがあります。誰かが、先ほどのコードが一体何を行っているのか、あなたに説明することで困難になっている間に、多くの人達はこのコードを教えるでしょう。

list lst;
integer numDigits = 10;

default {
    touch_start(integer n) {
        integer i = 0;
        string name = llKey2Name(llDetectedKey(i));
        list nameAsList = llParseString2List(name, [" "], []);
        string firstName = llList2String(nameAsList, 0);
        string startPart = llToLower(llGetSubString(firstName, 0, numDigits - 1));
        integer index = llListFindList(lst, (list)startPart);
        if (!~index)
            lst += startPart;
        llOwnerSay(llList2CSV(lst));
    }
}

LSLは最適化コンパイラではありません。これは、二つのスタイルがさらに軽快なコードにすることにはバランスが必要となる理由でしょう。行を混ぜ合わせる最適化は、後々コードの動作をバグでいっぱいにするでしょう。間違った最適化は、よくない結果を招きいれます。常に十分に最適化されたコードを試みましょう。

list lst;
integer numDigits = 10;

default {
    touch_start(integer n) {
        integer i = 0;
        string startPart = llToLower(llGetSubString(llList2String(llParseString2List(llKey2Name(llDetectedKey(i)), [" "], []), 0), 0, numDigits - 1));
        if (!~llListFindList(lst, (list)startPart))
            lst += startPart;
        llOwnerSay(llList2CSV(lst));
    }
}

スクリプト構成

LSLスクリプトは、関数、ステートメント、イベントハンドラ、ステートの要素によって構成されています。LSLコンパイラはスクリプトに正確な構造化を強制します。

  1. 定義された変数を用いる(LSL_Variablesを参照)
  2. 定義された関数を用いる(User-defined_functionsを参照)
  3. default State (Stateを参照)
  4. 定義されたステートを用いる

エディタ

多くのサードパーティ製エディタとLSL構文ファイルがあります。その他の情報はLSL Alternate Editorsを参照してください。