Pagina 1 di 1

Ogni funzione una riga? ma anche no!

MessaggioInviato: ven mar 26, 2010 10:38 pm
di Keith Reinard
(della serie "forse non tutti sanno che")

Di solito si ha l'abitudine di scrivere ogni riga di codice in una riga letterale, per migliorare la leggibilità

è indubbio che queste forme

Codice: Seleziona tutto
integer i; integer x, integer f;
float a1; float a2;

on_rez(integer sp){llResetScript();}


siano meno chiare delle canoniche

Codice: Seleziona tutto
integer i;
integer x;
integer f;

float a1;
float a2;

on_rez(integer sp)
{
     llResetScript();
}



tuttavia ci son casi in cui fa comodo scrivere una funzione su più righe.
Prendiamo ad esempio una riga classica di take controls che prenda i 4 tasti cursore

Codice: Seleziona tutto
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT,TRUE,FALSE);


se per motivi di testing dobbiamo levare temporaneamente il controllo sul tasto back e left, dovremmo toglierli di lì, e nel caso servissero di nuovo, riscriverceli ancora. Non possiamo commentarlo, perchè commenteremmo tutta la riga da l' in poi spezzando la funzione a metà.

Perchè non usare allora questa forma?

Codice: Seleziona tutto
llTakeControls(CONTROL_FWD |
               CONTROL_BACK |
               CONTROL_ROT_LEFT |
               CONTROL_ROT_RIGHT,
               TRUE,FALSE);


in questo modo è possibile commentare i singoli elementi dell'OR, lasciando la funzione intatta. ;)

Codice: Seleziona tutto
llTakeControls(CONTROL_FWD |
               //CONTROL_BACK |
               //CONTROL_ROT_LEFT |
               CONTROL_ROT_RIGHT,
               TRUE,FALSE);

Re: Ogni funzione una riga? ma anche no!

MessaggioInviato: ven mar 26, 2010 11:09 pm
di Opensource Obscure
sono d'accordo!

un esempio qui, con le particles, che hanno tanti parametri:
http://lslwiki.net/lslwiki/wakka.php?wa ... icleScript

Re: Ogni funzione una riga? ma anche no!

MessaggioInviato: mer mar 31, 2010 6:30 pm
di rubin_mayo
Ciao a tutti.

Su questo post, Keith e Opensource, siete da quotare.

Io aggiungerei anche la possibilità di inserire su una sola riga più istruzioni, quando la leggibilità lo consente o quando risulta comodo aggregare le righe:
Questo esempio contiene le due versioni... poi ciascuno usi il modo più consono ai suoi schemi mentali.

Codice: Seleziona tutto

reset_all()
{
    llMessageLinked(LINK_SET
        ,-99999999
        ,"reset_all"
        ,NULL_KEY
    );
}

reconfig()
{
    llMessageLinked(LINK_SET,-99999999,"re_config",NULL_KEY);
}

region_restart()
{
    llMessageLinked(LINK_SET,-99999999,"region_restart",NULL_KEY);
}


default
{
    on_rez(integer start_param)
    {
        reset_all();
    }

    changed(integer change)
    {
        if(change&CHANGED_OWNER){reset_all();return;}
        if(change&CHANGED_INVENTORY)
        {
            reconfig();
            return;
        }
        if(change&CHANGED_REGION_START){region_restart();return;}
    }
}



Come si vede, le "if" dell'evento "changed" sono ugualmente leggibili sia scritte in un modo che nell'altro.
Cosi come è possibile vedere nelle funzioni scritte entrambe gli stili di programmazione: ciascuno ha i suoi pregi e i suoi difetti, poi anche le preferenze personali contano.

Mister Rubin (Mayo)

Re: Ogni funzione una riga? ma anche no!

MessaggioInviato: lun mar 18, 2013 5:23 am
di soulstar
ragazzi ciao a tutti visto che si parla di script in quest ocaso io dovrei creare un'arma ma nn so creare lo script nn so far interagire lo script con i movimenti e un mio sogno vorrei imarare a fare script per armi(spada.pugnale,langia) qualcuno puoi aiutarmi?? :cry: