Dúvidas sobre Variaveis
Digamos que eu declare na seção Private uma variável de nome I e tipo Integer. Agora eu declaro numa procedure qualquer(ex:BitBtnClick) uma variável I de tipo Integer. Se nessa procedure eu der um for com a variável I, ele estará lendo a da seção private ou a local? E se o mesmo acontecer com variáveis Globais ou Públicas qual a ordem de precedência para carregar variáveis? Essa pergunta é mais a título de teste mesmo. Valeu a todos de antemão.
Paulo
Curtidas 0
Respostas
Aroldo Zanela
22/07/2008
Colega,
Você não consegue declarar uma váriável de mesmo nome nas seções private e public, mas consegue declarar com o mesmo nome sendo pública e local ou privada e local.
Quando uma variável é declarada local, ela possui o seu escopo limitado dentro da procedure ou função onde foi declarada e é descartada da memória assim que a função/procedimento é encerrado.
Veja um exemplo:
Você não consegue declarar uma váriável de mesmo nome nas seções private e public, mas consegue declarar com o mesmo nome sendo pública e local ou privada e local.
Quando uma variável é declarada local, ela possui o seu escopo limitado dentro da procedure ou função onde foi declarada e é descartada da memória assim que a função/procedimento é encerrado.
Veja um exemplo:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } I: Integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var I: Integer; begin I := 123; ShowMessage(IntToStr(I)); end; procedure TForm1.FormCreate(Sender: TObject); begin I := 999; end; procedure TForm1.btn2Click(Sender: TObject); begin ShowMessage(IntToStr(I)); end; end.
GOSTEI 0
Paulo
22/07/2008
Digamos que eu declare na seção Private uma variável de nome I e tipo Integer. Agora eu declaro numa procedure qualquer(ex:BitBtnClick) uma variável I de tipo Integer. Se nessa procedure eu der um for com a variável I, ele estará lendo a da seção private ou a local? E se o mesmo acontecer com variáveis Globais ou Públicas
Eu não falei Private e Public ao mesmo tempo. Eu disse Private e Local ou Public e Local. Eu apenas exemplifiquei a Private e Local, mas depois descorri minha dissertação com Public e Global. Eu estou dando manutenção em um Software que possui a munha dúvida. A pergunta foi qual irá receber o valor em situações assim: A local ou as outras?
GOSTEI 0
Comodelphi
22/07/2008
a variável local tem precdência sobre outros identificadores. Ainda não é aconselhável fazer dessa forma, dificulta a leitura do programa. Se vc tem um atributo definido em uma classe qualquer poderia usar algo mais expressivo do que ´i: integer´, ´s: string´; deixa esse tipo de declaração pra variáveis locais.
GOSTEI 0
Paulo
22/07/2008
Sim, com o eu falei isso é apenas teste. Em realidade não existe nada aqui comigo. Isso foi uma questão de uma empresa em que me candidatei. Eu acertei então pelo vocês estão falando e acertei no escuro. Eu coloquei como as locais têm precedência, mas a pergunta foi meio pegadinha. A pergunta vinha assim: [i:919de315c5]Estou dando manutenção em um software quando deparo com as seguintes questões. Uma variável declarada na seção private tem um homônimo declarada no evento onclick de um botâo. Na execução do programa, qual irá carregar?E Porque?E Se fosse global?[/i:919de315c5] Mas está resolvido. Não me interessei pela empresa, mas havia umas questões lá maneira, boas para pensar.
GOSTEI 0
Rodc
22/07/2008
No caso, para conseguir acessar a variável do private é preciso usar o Self
Self.I := I;
GOSTEI 0