[Tutorial] Entendendo static
#1

♥ Introduзгo
  • Muitos de vocкs jб devem ter visto a declaraзгo de uma variбvel usando static e feito as seguintes perguntas. "Oque isso faz ?", "Qual a diferenзa de static para new?", "Й realmente mais rбpido usar static ao invйs de new?". Eu jб tive essas dъvidas, e vou ajudar vocк que tem essas dъvidas hoje.
♥ static
  • PHP код:
    /*
    Pergunta: "Й realmente mais rбpido usar static ao invйs de new?"
    Resposta: Pode atй ser, mas й uma via de mгos duplas.
    */ 
    Ambas as variбveis funcionam da mesma forma, mas a forma como elas funcionam por trбs dos bastidores sгo diferentes. Hб nгo ser que sejam declaradas de forma global, caso for global, nгo haverб diferenзa alguma.

    Quando declaramos uma variбvel static ela nгo vai ser destruнda quando a chave for fechada.
    PHP код:
    static i;
    for(
    i100; ++i)
    {
        
    // ...

    Quando declaramos a variбvel i ela veio com o valor padrгo (0). Com o uso do loop, ela terminou tendo o valor de 100.

    Quando o bloco de cуdigo acima for chamado novamente, a variбvel vai iniciar contendo o valor 100, isso pq ela nгo foi destruнda jб que foi definida como static, mesmo com o fechamento das chaves.

    Como a variбvel nгo vai precisar ser recriada, isso vai torna-lб um pouco mais veloz, jб que vai pular uma pequena etapa de alocaзгo.
♥ Via de mгo dupla
  • PHP код:
    /*
    Pergunta: "Entгo usar static seria a melhor opзгo?"
    Resposta: Nгo necessariamente, e vou explicar o pq.
    */ 
    Vamos ver oq acontece quando os dois tipos de variбveis sгo declarados.
    PHP код:
    // static
    {
        static 
    i// O programa aloca um valor X de memуria no sistema na primeira vez que б variбvel й criada.
        
    for(i100; ++i)
        {
            
    //...
        
    }
        
    // Como a variбvel nгo vai ser deletada aqui, a memуria continua alocada.

    PHP код:
    // new
    {
        new 
    i// O programa aloca um valor de memуria X.
        
    for(i100; ++i)
        {
            
    //...
        
    }
        
    // A memуria usada vai ser devolvida para o sistema e a variбvel consequentemente deletada.

    Apesar da variбvel local declara com new sofrer um processo um pouco mais lento do que static, a memуria (RAM) serб liberada de volta ao sistema quando ela nгo for mais ъtil (quando a chave for fechada). Vocк vai economizar mais memуria.

    Vocк pode sim usar static quando quiser, mas lembre-se de que a memуria (RAM) do computador nгo й infinita. Vocк deve usar com sabedoria.
♥ Notas finais
  • ♪ Foi uma explicaзгo bem simples, mas procurei ser bem objetivo e claro.
    ♪ Nгo procurei escrever de forma muito formal e provavelmente haverб erros de escrita, mas os que forem reportados vou corrigir.
    ♪ Qualquer dъvida estarei respondendo.
Reply
#2

Boa iniciativa!
eu costumo usar so em textdraw's
pawn Код:
static PlayerText:TextDraw[MAX_PLAYERS]...
Reply
#3

Nгo fiquem com medo de utilizar porque usa memуria, SA-MP utiliza pouquнssima memуria.
Meu VPS tem 2GB de memуria e uso static em tudo, o uso nгo passa de 5%.

Sу tomem cuidado com bugs, e lembrem sempre de resetar a var em certos casos. Exemplo:

static count; // Vбriavel para contar elementos (count++)
count = 0; // Resetar vбriavel
Reply
#4

Cada variбvel declarada possui 32bits de memуria, se possuir dimensхes serб 32bits * X.
PHP код:
{
    static 
i[MAX_PLAYERS]; // 32bits * MAX_PLAYERS
    // ...

Reply
#5

Eu gostava de concatenar strings usando 'static' mas funcionava melhor em dialogs ..
o melhor uso de static й para com escopo local, onde sу devem ter funcionamento dentro de um determinado comando, funзгo, etc ..



Esse rique aki ta uma porra
Reply
#6

Quote:
Originally Posted by Sky™
Посмотреть сообщение
Eu gostava de concatenar strings usando 'static' mas funcionava melhor em dialogs ..
o melhor uso de static й para com escopo local, onde sу devem ter funcionamento dentro de um determinado comando, funзгo, etc ..



Esse rique aki ta uma porra
obrigado por comentar em meu humilde tуpico grande senpai
sempau*
Reply
#7

Apesar de ter vбrias possibilidades de uso, busco apenas usar em funзхes recursivas nas quais eu necessite de um dado estбtico ao decorrer da execuзгo.

Also, bom tutorial.
Reply
#8

Quote:
Originally Posted by luandriftlogkdr
Посмотреть сообщение
Apesar de ter vбrias possibilidades de uso, busco apenas usar em funзхes recursivas nas quais eu necessite de um dado estбtico ao decorrer da execuзгo.

Also, bom tutorial.
Obrigado. Й muito legal esse tipo de feedback que ai o pessoal nгo fica com medo de usar static e aprendem onde ela pode ser bem aproveitada.
Reply
#9

Parabйns. Ensinar й a melhor forma de aprender!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)