Dúvidas sobre Variaveis

Delphi

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 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

Paulo

Curtidas 0

Respostas

Aroldo Zanela

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:

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

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

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

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

Rodc

22/07/2008

No caso, para conseguir acessar a variável do private é preciso usar o Self
Self.I := I;



GOSTEI 0
POSTAR