Capítulo 08.
Trabalhando com variáveis

A Exceção do Tipo Byte

A exceção para a regra, de que não se pode converter caracteres alfabéticos para números, é o tipo byte. Quando o IDL converte uma string de caracteres para byte, o resultado é um vetor de byte com o mesmo comprimento da string. Inversamente, uma matriz ou vetor de bytes convertido para uma string, resulta em uma string contendo os valores dos caracteres ASCII.

IDL> str = 'Hello World'
IDL> bstr = byte(str)
IDL> help, bstr
           BSTR BYTE = Array[11]
IDL> bstr [0] = bstr [0] + 6
IDL> print, string(bstr )
          Nello World

Estes comandos convertem uma string em um vetor de bytes e manipulação do primeiro byte. Adicionando seis no primeiro byte mudando o 'H' para 'N'. Convertendo os bytes de volta para string o resultado é 'NELLO WORLD'.

 

Variáveis Dinâmicas

O tipo de dados e a estrutura organizacional de uma variável muda dinamicamente. Por exemplo, esta é a forma errada de inicializar os elementos de uma matriz ou vetor de inteiros com o valor 1:

IDL> array = intarr(10, 12)
IDL> print, array
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
IDL> array = 1
IDL> print, array
         1

No terceiro comando veja que é trocada a estrutura da variável nomeada array (que até então é uma matriz de 10 colunas e 12 linhas preenchida com zeros), ela passa a ser uma variável do tipo integer com valor 1.

Uma forma melhor de inicializar uma matriz ou vetor de inteiros com 1 é:

IDL> array = intarr( 10, 12)
IDL> array = array + 1
IDL> print, array
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1
          1 1 1 1 1 1 1 1 1 1

Neste caso o segundo comando adiciona o valor 1 para todos elementos da variável nomeada array.

Os tipos de variáveis podem ser alterados dinamicamente.

IDL> variavel = 4
IDL> help, variavel
         VARIAVEL INT = 4
IDL> variavel = 4.0
IDL> help, variavel
         VARIAVEL FLOAT = 4.00000
IDL> variavel = '4.0'
IDL> help, variavel
         VARIAVEL STRING = '4.0'

Veja que a variável com nome de variavel muda de integer, para float e depois para string.

 

Usando o Tipo de Variáveis Errado

Tipos de variáveis dinâmicas são muito eficientes, mas podem se transformar em um problema se não tomarmos cuidado. Um erro muito comum que ocorre, é especificar uma divisão com resultado inteiro, quando temos uma divisão com resultado flutuante. Por exemplo:

IDL> valor = 16 / 5
IDL> print, valor
         3

A expressão acima resulta em um valor inteiro (3). Se você espera que o valor retornado seja 3.2, você precisaria rescrever esta expressão, utilizando um ponto (.) após o número cinco (5):

IDL> valor = 16 / 5.
IDL> print, valor
         3.20000

 

Variáveis de Sistema

O IDL tem uma classe especial de variáveis predefinidas que estão disponíveis para todas as unidades do programa. Estas variáveis são chamadas variáveis de sistema. Elas são identificadas por um ponto de exclamação antes do seu nome.

Algumas variáveis de sistema comuns, que fornecem apenas a informação de leitura.

VARIÁVEIS DO SISTEMA DESCRIÇÃO
!dtor O fator da conversão dos graus para aos radianos
!radeg O fator da conversão dos radianos para aos graus
!pi Valor do pi com precisão simples
!dpi Valor do pi com dupla precisão
!error_state Uma variável do tipo estrutura contendo informações da ultima mensagem de erro.
!version Dá informações sobre a versão em uso do IDL.

 

Gráficos Diretos de Saída

O !d, !p e o !x, !y e !z são variáveis de sistema usadas para fornecer informações sobre o dispositivo atual de gráfico direto. Estas variáveis de sistema são estruturas com campos múltiplos para identificar informações relacionadas ao gráfico.

A variável de sistema !d fornece informações sobre o atual dispositivo exposto. Alguns campos da variável de sistema !d estão listados na tabela abaixo.

CAMPOS DE !d DESCRIÇÃO
name O nome do atual dispositivo gráfico.
n_colors O número de cores disponíveis no dispositivo gráfico.
table_size O número índice da tabela de cor atual.
x_size A largura da atual janela gráfica, em pixels.
y_size A altura da atual janela gráfica, em pixels.
Window O Índice da janela ativa dos gráficos.

A variável de sistema !p permite que você altere configurações padrões de um gráfico em linha, gráfico de contorno e um gráfico de superfície. Alguns dos campos da variável de sistema !p estão na tabela abaixo.

CAMPOS DE !p DESCRIÇÃO
color O índice de cor do gráfico.
charsize O tamanho do caracter para o rótulo.
linestyle O estilo de linha utilizado no gráfico.
multi Especifica o número de gráficos em uma página.
position Especifica a posição do gráfico em uma página.
psym O estilo de símbolo utilizado no gráfico.
subtitle Uma palavra (frase) utilizado como subtítulo, colocado abaixo do eixo X.
title Uma palavra (frase) especificando o titulo do gráfico.

O !x, !y e !z são variáveis de sistema que permitem a você alterar as configurações padrões dos eixos de um gráfico. Alguns exemplos destes campos, estão listados na tabela abaixo.

CAMPOS DE !x, !y e !z DESCRIÇÃO
minor O número de pequenos intervalos dentro de grandes intervalos.
range Marca a distância mínima e máxima dos eixos.
tickname Colocar uma matriz ou vetor (geralmente do tipo string) de anotações para cada intervalo maior.
ticks O número de intervalos constantes no eixo.
title O título dos eixos.