LSL Style Guide/es

From Second Life Wiki
Jump to: navigation, search

Programación eficaz en LSL require que los desarrolladores sean disciplinados en la práctica de aplicar formatos y convenciones a sus scripts.

Estas directrices, conocidas conjuntamente como la Guía de Estilo, no son tan rígidas como las reglas requeridas por un compilador de lenguage pero son sin embargo críticas para crear un código sostenible. El aspecto más crítico del estilo es que lo apliques consistentemente al código que escribes.

Directrices Generales

Muchas personas comenzando a programar tendrán programas que son FEOS cuando los ves. Su código es algo como lo siguiente:

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

Sin embargo es imposible leer ese código (o por lo menos seguirlo) cuando alguien escribe un programa de más de diez mil palabras. Por tanto los programadores tienen dos métodos principales para agrupar con paréntesis e indentar.

Primer método:

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

Segundo método:

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

El primer método conserva espacio pero el segundo método es más fácil de leer para el novato. Cuando un programador practica un estilo particular, leer el código en ese estilo será más fácil. Indentar permite leer ambos estilos fácilmente. En el primer método, indentar es el factor indicador clave de los niveles de alcance.

Convención de Nombrado

Hay muchas convenciones de nombrado en Second Life. Solo se muestran abajo las más usadas.


Variables globales (variables usadas a través del programa) deben comenzar con una g minúsculas. Por ejemplo:

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


Constantes variables deben estar todas en mayúsculas. Por ejemplo:

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


Los argumentos usados dentro de la función definida por el usuario o un event deben comenzar con una línea de subrayado (_). Por ejemplo:

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

Separando el Código

Muchas personas comienzan con muchas llamadas de funciones en una sola línea. Esto hace que el código sea difícil de leer y casi imposible de limpiar. El siguiente es un ejemplo de esa clase de programa:

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));
   }

}

Ahora esta el código, con las mismas características, de manera más simple. Mientras que casi nadie podría decirte lo que el código arriba hace, casi todos pueden explicarte lo que el código abajo hace.


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 no tiene un compilador optimizado. Por esta razón es necesario tener un balance entre ambos estilos para crear código rápido. La optimización de combinación lineal solo debe hacerse después que el código funciona y está libre de errores. La optimización incorrecta puede crear resultados incorrectos. Sírvase examinar el código optimizado minuciosamente.

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));
    }
}

Estructura del Script

Los scripts de LSL están compuestos de expresiones, funciones, declaraciones, manejadores de eventos y estados. El compilador de LSL requiere una estructura determinada para los scripts:

  1. Variables Definidas por el Usuario (consulte LSL_Variables)
  2. Functiones Definidas por el Usuario (consulte User-defined_functions)
  3. default Estado (consulte State)
  4. Estados Definidos por el Usuario

Editor

Hay muchos editores de tercera parte con archivos de sintaxos de LSL. Consulte LSL Alternate Editorspara más información.