Você está na página 1de 11

A U L A

Introdução à
05 Linguagem do Visual FoxPro
Parte 1

A partir de agora estaremos entrando no maravilhoso mundo da programação.


Passaremos então a conhecer um pouco sobre a semântica da linguagem utilizada no
Visual FoxPro.

Aprender a lidar com uma linguagem de programação não é uma das tarefas mais fáceis,
mas também não é nenhum monstro como alguns chegam a dizer.

Basta entendermos bem alguns conceitos e daí já seremos capazes de construir muita
coisa.

Geralmente, e na maioria das vezes, os aplicativos que escreveremos terão função de


coletar, armazenar e depois gerar outros dados.

Quando desenvolvemos aplicativos que são orientados a dados, ou seja, o foco principal é
voltado para os dados, geralmente tendemos colocá-los como o centro de tudo. Mas essa
não é bem a verdade. Na prática temos muito mais que isso.

É comum encontrarmos programadores por aí que se dizem experientes (e talvez até o


são) que quando da conversa com um novo cliente para o desenvolvimento de um novo
aplicativo só pensam:

─ quais são os dados que devem ser preenchidos em determinado formulário e qual é o
relatório que você precisa?

Não há nenhum problema em fazer perguntas como essa para o cliente. E na verdade elas
devem mesmo serem feitas. Mas há outras perguntas importantes para o entendimento da
resolução do problema, por exemplo:

─ Se isto for feito desta forma, realmente irá resolver o problema proposto?

─ Fazendo desta forma, não virá a colidir com a forma como esses procedimentos são
executados quando da não utilização do meu aplicativo?

─ Qual o impacto que a implementação deste ou daquele recurso terá sobre a vida
cotidiana daqueles que forem trabalhar direta ou indiretamente com o aplicativo?
A U L A

05
─ Este aplicativo resolve o problema proposto ou simplesmente irá criar mais um problema
para os usuários?

Mais importante que coletar informações e gerar um monte de relatórios é realmente


resolver os problemas ao qual o aplicativo se propõe.

Por exemplo, um aplicativo de automação comercial como o próprio nome diz, deveria
automatizar o processo de compra, venda, estoques, crediário para os clientes, e não
burocratizar este processo.

Há cerca de uma semana entrei numa farmácia de um bairro de classe média alta aqui de
minha cidade. Eu só precisava comprar alguns medicamentos comuns. Talvez até se eu
tivesse ido ali na padaria da esquina eu os encontraria e os compraria em menos de um
minuto dentro do estabelecimento. Chegando à farmácia, tinha um sujeito vestido de
branco para me recepcionar, outro para pegar a receita que estava em minhas mãos e
sumir com ela pra algum terminal de computador e daí em diante, nem sei dizer em
quantos locais eu fui (visto que era um estabelecimento grande) até chegar a efetivar o
pagamento no caixa e depois ir até a área de pacotes receber o medicamento. Sem
brincadeira, levei uns 20 minutos nisso tudo. Se tivesse à beira da morte, vocês não
estariam lendo esse texto aqui hoje.

Sabe o que é interessante nisso tudo? Tinham um sistema muito bonito. Telas com
campos bem posicionados, foto do produto, código de barras e tudo o mais. Mas o
processo em si era demasiadamente desorganizado.

A meu ver, eles têm um grande problema. Talvez o problema não seja o sistema. Mas
talvez...

Você já deve estar pensando... porque tanto blá blá blá?

Bem, é que vamos começar a entender algumas coisas que dizem respeito a dados. Ou
como os dados existem na linguagem do Visual FoxPro.

Primeiramente vamos começar a entender o que são os dados e quais são os seus tipos.

O que é um dado?

Um dado é uma informação qualquer. Quando estruturamos uma certa seqüência


lógica de dados passamos então a constituir um determinado registro de informação. A
importância de tal informação dependerá da consistência dos dados que estruturamos.
Se fizermos com responsabilidade tal estruturação poderemos ter então uma
informação útil.

Para que possamos chegar ao estado de informação útil é necessário agregar vários
tipos de dados, por exemplo, dados do tipo texto como nomes e endereços, dados do
tipo numéricos como idade e renda per capta, dados do tipo data como data de
nascimento, data de casamento e coisas afins.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
Em alguns casos precisamos de algumas especializações de dados além dessas, por
isso, as linguagens de programação de hoje em dia são capazes de trabalhar com
diversos tipos de dados.

Como os dados são armazenados

No Visual FoxPro os dados podem ser armazenados em tabelas e campos e ainda em


variáveis e matrizes.

Quando necessitamos de armazenar um dado num meio permanente como um disco


então geralmente utilizamos tabelas que agregam um determinado número de campos.
Ao conjunto de tabelas utilizadas em nosso aplicativo, denominamos banco de dados.

Os dados que são utilizados temporariamente ou que não precisam ser armazenados
geralmente são atribuídos a variáveis de memória e a matrizes, que ao encerrar o
aplicativo ou o escopo de sua execução, são eliminados.

Tipos de Dados no Visual FoxPro

Agora que já conhecemos os meios de armazenamento, tanto permanentes como


temporários, vamos detalhar um pouco os tipos de dados que podem ser manipulados
e armazenados.

Todos os dados do Visual FoxPro possuem um tipo — uma descrição dos valores e
intervalo permitidos e o tamanho desses valores. Uma vez especificado o tipo de
dados, o Visual FoxPro pode armazenar e manipular os dados eficientemente.

As variáveis e matrizes mantêm um subconjunto dos tipos de dados disponíveis do


Visual FoxPro. Tipos de dados adicionais estão disponíveis apenas para os campos em
uma tabela.

A tabela a seguir, descreve os tipos de dados do Visual FoxPro:


Tipo de dado Descrição Tamanho Intervalo

Character Qualquer texto 1 byte por caractere Qualquer caractere


até 254

Currency Valores monetários 8 bytes –922337203685477.5808


até
922337203685477.5807

Date Data cronológica 8 bytes Ao usar formatos de data


constituída de mês, ano estritos, {^0001-01-01},
e dia January 1st, 1 A.D até
{^9999-12-31}, December
31st, 9999 A.D.

DateTime Data cronológica 8 bytes Ao usar formatos de data


constituída de mês, estritos,

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
ano, dia e hora.
{^0001-01-01}, January
1st, 1 A.D até {^9999-12-
31}, December 31st,
9999 A.D., adicionando
00:00:00 a.m. até
11:59:59 p.m..

Logical Valor booleano de 1 byte Verdadeiro (.T.) ou Falso


verdadeiro ou falso (.F.)

Numeric Números inteiros ou 8 bytes na – .9999999999E+19 até


frações memória; 1 a 20 .9999999999E+20
bytes na tabela

Variant Um dado do tipo variant


pode armazenar
qualquer tipo de dado
do Visual FoxPro.

A próxima tabela descreve os tipos de campos do Visual FoxPro

Tipo de campo Descrição Tamanho Intervalo

Doublé Um número de ponto 8 bytes +/–


flutuante de precisão 4.94065645841247E-
dupla 324 até +/–
8.9884656743115E307

Float Como o Numérico 8 bytes na memória; 1 – .9999999999E+19


a 20 bytes na tabela até .9999999999E+20

General Refere-se a um objeto 4 bytes na tabela Limitado pela memória


OLE disponível

Int Valores inteiros 4 bytes –2147483647 até


2147483646

Int (AutoInc) Mesmo que Int, porém 4 bytes - 2147483647 até


seu valor é 2147483647
automaticamente
incrementado. É
somente leitura.

Memo Refere-se a um bloco de 4 bytes na tabela Limitado pela memória


dados. disponível

Caractere (Binário) Quaisquer dados de 1 byte por caractere até Quaisquer caracteres
caracteres que você 254
queira manter sem
alteração através das

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
páginas de códigos

Memo (Binário) Quaisquer dados do 4 bytes na tabela Limitado pela memória


campo Memo que você disponível
queira manter sem
alteração através das
páginas de códigos

Algumas definições importantes

Variável – Uma área na memória do computador em que os dados são


armazenados. É possível alterar o conteúdo de uma variável, mas o
seu nome e a sua área de armazenamento são reservados para uso
até você encerrar a sessão do Visual FoxPro ou liberar a variável. As
variáveis e seus valores serão perdidos a menos que você os salve
em disco antes de sair do Visual FoxPro.

Matriz (Array) – Uma matriz é uma série ordenada de valores de dados,


denominados elementos, que são referenciados pelo número. Como
as matrizes existem na memória, elas fornecem rápido acesso aos
dados e fácil manipulação. Você pode facilmente especificar,
localizar ou manipular elementos em uma matriz.

Constante – Um valor numérico ou de seqüência que não se altera. Expressões


de constantes combinam constantes e operadores, mas nenhuma
variável, e resultam sempre no mesmo valor.

Operadores

Os operadores permitem que você manipule dados do mesmo tipo. Os operadores do


Visual FoxPro são agrupados pelas seguintes funções e tipos de dados:

• Operadores de caracteres

• Operadores de data e DataHora

• Operadores lógicos

• Operadores relacionais

• Operadores numéricos

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05

Operadores de caracteres

Você pode associar e comparar os dados de caracteres utilizando os


operadores de caracteres +, - e $. A tabela a seguir lista os operadores de
expressão na ordem de prioridade.

Operador Ação Código Exemplo

+ Concatenação. Junta duas ? 'bom ' + 'dia'


seqüências, uma seqüência e
um campo ou uma seqüência e
uma variável.

- Concatenação. Remove espaços ? customer.first -


à direita do elemento que customer.last
antecede o operador e depois
associa dois elementos.

$ Comparação. Procura uma ? 'pai' $ 'avô' ? 'Principal'


expressão de caracteres dentro $ customer.address
de outra.

O operador $ é sensível à caixa alta e caixa baixa dos caracteres,


significando que fará diferença entre maiúsculas e minúsculas. Uma boa
prática é utilizar as funções de conversão UPPER() e LOWER para tornar as
sentenças totalmente maiúsculas ou minúsculas respectivamente antes de
compará-las.

Operadores de Data e DataHora

No Visual FoxPro podemos adicionar ou subtrair números a uma data, ou,


datas podem ser somadas ou subtraídas entre si. Matematicamente falando,
para o Visual FoxPro uma data é um número de dias. Assim sendo, podemos
adicionar ou subtrair qualquer número de dias a uma data.

Os operadores abaixo agem sobre as datas e horas.

Operador Ação Código Exemplo


tNewTime = tTime1 + nSeconds
+ Adição dNewDate = dDate1 + nDays
nSeconds = tTime1 - tTime2
– Subtração tNewTime = tTime1 - nSeconds

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
dNewDate = dDate1 - nDays

Operadores Lógicos

A tabela a seguir lista os operadores lógicos em ordem de prioridade.

Operador Ação Código Exemplo

() Grupos de expressão cVar AND (cVar2 AND cVAR3)

NOT, ! Negativo lógico IF NOT cVarA = cVarB IF !


nVar1 = nVar2

AND AND lógico lVar0 AND lVar9

OR OR inclusivo lógico lVarX OR lVarY

Operadores Relacionais

A tabela a seguir lista os operadores relacionais.

Operador Ação Código Exemplo

< Menor que ? 23 < 54

> Maior que ?1>2

= Igual a ? cVar1 = cVar

<>, #, != Não igual a ? .T. <> .F.

<= Menor ou igual a ? {01/01/92} <= {01/01/92}

>= Maior ou igual a ? 32 >= nHisAge

== Comparação de seqüência de ? status == "Aberto"


caracteres

Operadores Numéricos

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
A tabela seguinte traz uma lista dos operadores numéricos em ordem de
precedência.

Operador Ação Código Exemplo

() Subexpressões de grupo (4-3) * (12/nVar2)

**, ^ Exponenciação ? 3 ** 2
?3^2

*, / Multiplicação e divisão ? 2 * 7 ? 14 / 7

% Módulo (resto) ? 15 % 4

+, - Adição e subtração ? 4 + 15

Declaração de Variáveis

Declarar variáveis no Visual FoxPro é algo muito simples. Diferentemente de outras


linguagens, pode-se até mesmo atribuir valores a variáveis sem mesmo tê-la
declarado explicitamente.

Quando você armazena um valor em uma variável e esta variável não existe, o
Visual FoxPro irá declará-la implicitamente. As linguagens que exigem a declaração
explícita de variáveis irão retornar um erro.

No Visual FoxPro, embora você possa atribuir o tipo de dados para uma variável, o
tipo não será utilizado de forma intrínseca, ou seja, você poderá simplesmente
armazenar outro tipo de valor sem que um erro seja gerado, como no caso de
linguagens como Pascal, C, C#, etc. O recomendável então é que você nomeie a
variável com um prefixo que sugira o tipo de dados para a qual será utilizada.

Apesar de podermos atribuir valores em variáveis sem declará-las previamente,


essa técnica deve ser evitada para impedir que variáveis sejam criadas e
disponibilizadas fora do escopo que desejamos.

Ao declarar uma variável, devemos fazê-lo definindo o seu escopo, de acordo com
a pretensão de utilização da mesma.

Definição de Escopo das Variáveis

O escopo determina a visibilidade de uma variável dentro do aplicativo, onde


a mesma pode ser identificada e referenciada. No Visual FoxPro podemos ter
uma variável declarada com os escopos: PUBLIC, LOCAL e PRIVATE.
Vejamos agora maiores detalhes sobre cada escopo:

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
ƒ PUBLIC – O escopo PUBLIC é utilizado para definir variáveis e
matrizes com visibilidade global, ou seja, poderão ser referenciadas
em todo o aplicativo.

ƒ PRIVATE – Uma variável ou matriz com escopo PRIVATE só pode ser


referenciada dentro da procedure atual ou abaixo dela.

ƒ LOCAL – Variáveis e matrizes com escopo LOCAL só podem ser


utilizadas dentro da procedure, função ou método que as criou. Em
outras palavras, este é o nível mais restrito que há para a definição de
uma variável.

Os comandos utilizados para a declaração do escopo da variável, são os


mesmos do nome do escopo: PUBLIC, PRIVATE, LOCAL.

Há ainda um comando utilizado para forçar os parâmetros de uma procedure,


método ou função a terem visibilidade LOCAL: LPARAMETERS.

Exemplo de Declaração de Variáveis

A sintaxe de declaração dos comandos PUBLIC, PRIVATE e LOCAL são as


seguintes:

PUBLIC Var1, Var2, ..., nVar

PRIVATE Var1, Var2, ... nVar

LOCAL Var1, Var2, ... nVar

Exemplo:

Crie um novo programa chamado public.prg, digitando MODIFY COMMAND


public.prg na janela de comandos e digite o seguinte código:
SET TALK OFF
CLEAR && Limpa a área de console
PUBLIC val1,val2
val1 = 10
val2 = 15
? "Valor das variáveis antes da execução da procedure Down.", val1,
val2

DO down

? "Valor das variáveis após a execução da procedure Down...", val1,


val2

RELEASE ALL && Libera somente variáveis privadas


DISPLAY MEMORY LIKE val?

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
RELEASE val1,val2 && Variáveis públicas devem ser liberadas
explicitamente
DISPLAY MEMORY LIKE val?

PROCEDURE down
PRIVATE val1
val1 = 50
val2 = 100
? "Valor das variáveis dentro da procedure
Down...................", val1, val2
RETURN

Antes de executar o programa, certifique-se de fechar todas as janelas que


estão abertas impedindo a área de visualização da janela do Visual FoxPro.
A área branca da janela do Visual FoxPro é chamada de área de console, e é
nela que o resultado do comando “?” será exibido. Abaixo, na figura 5.1 você
pode ver o resultado:

Figura 5.1 – Resultado da execução do programa public.prg

Neste exemplo o que fizemos foi dentro do programa public.prg declarar


duas variáveis públicas chamadas val1 e val2. Então os valores 10 e 15 são
atribuídos às variáveis, respectivamente. Logo em seguida, uma procedure
chamada Down é executada. Dentro dessa procedure uma variável val1 é
criada com o escopo PRIVATE e os valores 50 e 100 são atribuídos as
variáveis val1 e val2, respectivamente. Observe listamos os valores das
variáveis dentro da procedure Down e seus valores são 50 e 100, como
atribuído.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

05
Após a execução da procedure Down, novamente listamos os valores das
variáveis e pra nossa surpresa, os valores foram 10 e 100, respectivamente,
para as variáveis val1 e val2.

Mas de onde vem o 10? Como as variáveis tem um escopo global, o valor é
aquele definido lá no início do programa public.prg.

Mas porque o valor de val2 foi alterado para 100 e o de val1 permaneceu o
mesmo do início? Simples. Porque dentro da procedure Down a variável val1
foi declarada como PRIVATE. Isso significa que sua existência seria restrita à
procedure e ao que viesse dentro dela. Fora dela sua declaração e seu valor
não existiria.

Note ainda que mesmo que val1 fosse novamente declarada dentro de da
procedure Down, seu valor em nada interferiu na existência de val1 com
escopo público. A este fenômeno, chamamos de encapsulação. É possível
ter variáveis de mesmo nome com escopo e valores diferentes dentro de
procedures, funções, métodos, etc.

Variáveis do Sistema

São variáveis que o Visual FoxPro cria e atribui-lhes valor automaticamente, desde
o momento da sua inicialização e esses valores podem ou não irem sendo
modificados ao longo da execução de determinadas rotinas ou programas.

As variáveis do sistema iniciam-se com uma caractere “_” underline (sublinhado).


Para conhecer as variáveis do sistema, procure por System Variables no help do
VFP 8.0 ou por Variáveis de memória do sistema no help em português do Visual
FoxPro 5.0, disponível para download no ambiente do curso.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados

Você também pode gostar