Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rafael Adão

Variável estática

Mensagens Recomendadas

Rafael Adão

Como anda a utilização de variáveis estáticas em delphi atualmente?

Trabalho com uma versão muito antiga do delphi em que para utilizar uma variável estática, deve-se utilizar:

const estatica: Integer = 3;

Dei uma pesquisada em algumas wikis mas não encontrei o que procurava.

O que quero saber é se nas versão maiores, tipo XE3, fizeram alguma mudança.

sds

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Não sei bem o que queres dizer por variáveis estáticas, mas o código que puseste continua valido para constantes de tipo predefinido.

Também, nesse exemplo podias dispensar o tipo de dados, que o compilador escolheria automaticamente o tipo que melhor se adaptasse ao valor.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Kline777

Pois, penso que nao estou enganado mas isso não é uma variavel estatica mas sim uma constante :P de qualquer maneira está igual nas novas versões :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Com tem sido dito, isso é uma constante. Uma variável estática é outra coisa, um conceito diferente, e que normalmente está mais presente noutras linguagens como Java.

Sendo um valor imutável, o conceito de variável, logo aí, é posto de lado - uma variável varia, e com const define-se um valor fixo com um nome - constante ao longo de todo o programa. ;)

Nada mudou. As constantes mantêm-se como eram antes.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Rafael Adão,

De facto, a criação de variáveis estáticas é algo que penso necessitar de uma flag específica para o compilador (algo como ${J+}, "Writeable Typed Constants"), visto que habitualmente não é permitido.

Penso que as adições nas novas versões do Delphi dizem respeito a variáveis estáticas em classes (procura por coisas como class var) mas sinceramente não tenho acompanhado o desenvolvimento da coisa.

O próprio FreePascal suporta a criação destas "constantes mutáveis" desde que não estejamos a compilar em modo Delphi.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rafael Adão

CRLF,

Pesquisei sobre a diretiva {$J+} e percebi que esta diretiva ativa o conceito de variável estática no fonte. Segue um exemplo simples de uso:

program prStatic;
{$APPTYPE CONSOLE}
uses
 SysUtils;
type
 TSaldo = class
 {$J+}
 const valor: Integer = 0;
 {$J-}
 end;
var
 xSaldo1, xSaldo2: TSaldo;
begin
 xSaldo1 := TSaldo.Create;
 xSaldo2 := TSaldo.Create;
 try
   xSaldo1.valor := 10;
   Writeln('Saldo 1: ' + IntToStr(xSaldo1.valor));
   Writeln('Saldo 2: ' + IntToStr(xSaldo2.valor));
   xSaldo2.valor := 20;
   Writeln('Saldo 1: ' + IntToStr(xSaldo1.valor));
   Writeln('Saldo 2: ' + IntToStr(xSaldo2.valor));
   Readln;
 finally
   xSaldo1.Free;
   xSaldo2.Free;
 end;
end.

Se não me engano, na conversão do delphi6 para o delphi7 é que essa diretiva se fez necessária.

Obrigado a todos pela ajuda.

Editado por Rafael Adão

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Rafael Adão,

Só mais um reparo: CRLF é a minha "classificação" no fórum, o nick é "pwseo" (tal como o teu nick é "Rafael Adão" e a classificação é "null")

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gilson Nunes

mas qdo se fala "variável stática", normalemnte, não está se referindo ao "tipo do c".

está se falando de uma varariável q se assemelha aos metódos státicos (de classe).

isso tem no delphi desde o 8 se não me falhe a memória e tem tb no FPC

TSuaClasse = class
public
   class var Teste : Integer;

pra acessá-la:

TSuaClasse.Teste := 10;

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.