Mostrando postagens com marcador pascal. Mostrar todas as postagens
Mostrando postagens com marcador pascal. Mostrar todas as postagens

quarta-feira, 10 de agosto de 2011

Object Pascal Style Guide

Sempre tenho dúvida se estou escrevendo meus códigos de uma forma correta.

O link abaixo vai me ajudar:

http://edn.embarcadero.com/article/10280

Recebi pelo grupo de discussão do Yahoo!

sexta-feira, 15 de julho de 2011

Turbo Pascal 1.0

Toda história tem um começo.

E um dia me perguntei: "Onde começou a história do Delphi?" Isso me levou ao Turbo Pascal 1.0 .
Veja este site que interessante: http://www.emsps.com/OLDTOOLS/borpasv.htm É isto ai! O cara vende softwares antigos!

Dai pensei: "Por que não rodar o Turbo Pascal 1 na minha máquina"?

Vamos ver no que deu?

O primeiro desafio, óbvio, foi a instalação do software. Meu notebook é 64 bits com Windows 7.
Considerei então que seria o caso de instalar uma máquina virtual para instalar o DOS.
Instalei o VirtualBox: http://www.virtualbox.org/

O próximo desafio foi instalar o DOS. Um bom tutorial eu encontrei em: http://www.youtube.com/watch?v=8C_XQ86bXE0&feature=related

E as imagens dos disquetes do DOS eu encontrei aqui: http://www.mediafire.com/?8x1ewss0yvt

Por fim o instalador do Turbo Pascal. Olhe este artigo: http://edn.embarcadero.com/article/20693
Não poderia ter sido melhor.

Para conseguir gerar uma imagem de disquete dos arquivo baixados e usar na máquina virtual, usei o WinImage 8.50, baixado de http://www.winimage.com/

Eis o resultado de pouco mais de três horas de esforços:


Bom, tentei usar o editor mas confesso que não consegui. Dai roubei. Fiz um arquivo a parte, abri e compilei.



Bacana né?

Com um pouco mais de esforço, gerei um arquivo .COM (wowwwww):



Para terminar, os manuais em PDF: http://electrickery.xs4all.nl/comp/tp30/doc/index.html

quinta-feira, 14 de julho de 2011

Pascal Básico

Olá. Segue a apresentação que usei para resumir os elementos básicos do Delphi Language para a turma para qual estou ministrando curso de Delphi na TDS.

Talvez lhe seja útil.

Talvez não.

quinta-feira, 7 de abril de 2011

Tirando um maior proveito do Exit

Olá. Estou fazendo uma higienização por aqui, tirando os warnings dos projetos. E teve um que me deixou muito encucado:

[DCC Warning] Unit2.pas(39): W1035 Return value of function 'TForm2.EntradaValida' might be undefined

Vamos ao código:

function TForm2.EntradaValida(piEntrada: Integer): Boolean;
begin
  if (piEntrada > 0) then
  begin
    {...}
    Exit;
  end;

  {...}
  Result := True;
end;

Neste exemplo o compilador reclama que o resultado da função EntradaValida não foi definido.

O compilador foi ninja o suficiente para perceber que se entrar no if..then o método será interrompido pelo comando Exit.

Desde o D2009 podemos chamar o Exit de dentro de uma função passando como parâmetro o resultado desta função. Isso elimina o warning W1035. Veja no exemplo abaixo:

function TForm2.EntradaValida(piEntrada: Integer): Boolean;
begin
  if (piEntrada > 0) then
  begin
    {...}
    Exit(False); {<-- PULO DO GATO}
  end;

  {...}
  Result := True;
end;

É isso ai.

sexta-feira, 4 de março de 2011

Use o Format, por favor!

Olá!

A tempos queria postar sobre uma função muito interessante, que é o Format.

Uma das coisas que eu detesto em um código Delphi é a concatenação de string.

Olha este exemplo horrível (sim, estou lhe induzindo a achar horrível):

procedure TForm2.Button1Click(Sender: TObject);
var
sMessage : string;
begin
  sMessage := 'Aluno: ' + Self.FNome + ' Endereço: ' + Self.FEndereco + ' Nota: ' + Self.FNota;
  ShowMessage(sMessage)
end;

Compare com o código abaixo:

procedure TForm2.Button2Click(Sender: TObject);
var
sMessage : string;
begin
  sMessage := Format('Aluno: %s Endereço: %s Nota: %d',[Self.FNome,Self.FEndereco,Self.FNota]);
  ShowMessage(sMessage);
end;

Perceba que no segundo exemplo o código ficou mais legível. Qualquer um vai entender o resultado da concatenação sem muito esforço mental. Já no primeiro exemplo...

Então a idéia básica é passar uma string com marcações especiais (identificadas com o símbolo %) e em seguida os argumentos.

As marcações que eu considero mais úteis no dia a dia são:

%s - String
%d - Número decimal
%f - Float

Mas existem outras! Veja no Help no Delphi.

Uma característica que valorizo no Format é a possibilidade de alinharmos os valores, ajudando a formatar um bom arquivo de log por exemplo.

Para isso basta informar o número de caracteres que você deseja. %s pode vira um %15s por exemplo, onde o 15 é o tamanho. Ainda neste aspecto, vale salientar que a palavra será jogada para a direita e na maioria das vezes é mais adequado à esquerda. Para isso usamos um traço, ficando: %-15s.

Bom, é isso. Tem outros aspectos mas acho que iria tornar o assunto mais chato do que o necessário. Eu sempre incentivo o uso do Format. Na minha opinião é mais profissional. Quando você se acostumar irá ter a mesma opinião que tenho sobre o primeiro exemplo lá em cima deste post: horrível. :)

Exemplo completo (aplicação console):

program Console;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;


procedure ExemploSimples;
var
sResult : string;
begin
  sResult := Format('Nome: %s Endereco: %s Idade: %d',['Fulano','Terra do Nunca',10]);

  Writeln('Codigo.....: Format(''Nome: %s Endereco: %s Idade: %d'',[''Fulano'',''Terra do Nunca'',10])');
  Writeln('Resultado..:' + sResult);
end;

procedure ExemploListagemSemIdentacao;
var
i      : Integer;
sNome  : string;
iIdade : Integer;
begin
  Writeln('Codigo.....: Format(''Nome....: %s  Indade...: %d'',[sNome,iIdade])');
  Writeln('Resultado..:');
  for i := 1 to 5 do
  begin
    case i of
      1 :
      begin
        sNome  := 'Maria';
        iIdade := 34;
      end;
      2 :
      begin
        sNome  := 'Kleberson';
        iIdade := 18;
      end;
      3 :
      begin
        sNome  := 'Dona Florinda';
        iIdade := 60;
      end;
      4 :
      begin
        sNome  := 'Bazzinga';
        iIdade := 28;
      end;
      5 :
      begin
        sNome  := 'Fatima';
        iIdade := 40;
      end;
    end;

    WriteLn(Format('Nome: %s  Idade: %d',[sNome,iIdade]));
  end;
end;

procedure ExemploListagemComIdentacao;
var
i      : Integer;
sNome  : string;
iIdade : Integer;
begin
  Writeln('Codigo.....: Format(''Nome....: %15s  Indade...: %d'',[sNome,iIdade])');
  Writeln('Resultado..:');
  for i := 1 to 5 do
  begin
    case i of
      1 :
      begin
        sNome  := 'Maria';
        iIdade := 34;
      end;
      2 :
      begin
        sNome  := 'Kleberson';
        iIdade := 18;
      end;
      3 :
      begin
        sNome  := 'Dona Florinda';
        iIdade := 60;
      end;
      4 :
      begin
        sNome  := 'Bazzinga';
        iIdade := 28;
      end;
      5 :
      begin
        sNome  := 'Fatima';
        iIdade := 40;
      end;
    end;

    WriteLn(Format('Nome: %-15s  Idade: %d',[sNome,iIdade]));
  end;
end;

var
bContinue : Boolean;
sEntrada  : string;
begin
  try
    bContinue := True;

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN OR  BACKGROUND_BLUE);
    repeat
      Writeln('                                                                 ');
      Writeln('/===============================================================\');
      Writeln('| Escolha a opcao:                                              |');
      Writeln('|                                                               |');
      Writeln('| 1) Exemplo simples;                                           |');
      Writeln('| 2) Exemplo de listagem SEM identacao                          |');
      Writeln('| 3) Exemplo de listagem COM identacao                          |');
      Writeln('\===============================================================/');
      Writeln('                                                                 ');
      Write('Digite: ');
      Readln(sEntrada);
      Writeln('                                                                 ');

      if (sEntrada = '1') then
      begin
        ExemploSimples;
        Continue;
      end;

      if (sEntrada = '2') then
      begin
        ExemploListagemSemIdentacao;
        Continue;
      end;

      if (sEntrada = '3') then
      begin
        ExemploListagemComIdentacao;
        Continue;
      end;

      bContinue := False;
    until not (bContinue);
    Write('Fim da execucao!');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Forte abraço!

Minha lista de blogs