Você está na página 1de 13

18

Tipos Ordinais
Linguagens de Programação
Nas aulas passadas...
▪ Tipos de dados que estão disponíveis por padrão em
máquinas contemporâneas

Byte byte

Inteiro short, int, long integer short, int, long

Número real float, double float, decimal float, decimal

Caracteres char character char

Booleano boolean boolean


Tipo Ordinal
▪ Faixa de valores possíveis pode ser facilmente associada ao
conjunto dos números inteiros positivos
▪ Ex:
– Tipo Enumerado
– Tipo Subfaixa ou Intervalo de inteiros
Enumeração
▪ Todos os valores possíveis se tornam constantes simbólicas

enum tipoCor{
vermelho = 101,
azul,
verde,
amarelo
type tipoCor = {vermelho, azul, verde, amarelo}; };
var cor : tipoCor; enum tipoCor cor;
Enumeração
▪ Normalmente não é permitido que um literal constante seja
usado em mais de uma enumeração
#include <stdio.h>
enum dias{
seg, ter, qua, qui, sex, sab, dom
};
enum fimDeSemaan{
sab, dom
};
int main(){
...
return 0; error:
error: redeclaration
redeclaration of
of enumerator
enumerator ‘sab’
‘sab’
} error:
error: redeclaration
redeclaration of
of enumerator
enumerator ‘dom’
‘dom’
Enumeração
▪ Normalmente não é permitido que um literal constante seja
usado em mais de uma enumeração
▪ Entretanto…

type LETRAS is ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z');
type VOGAIS is ('A', 'E', 'I', 'O', 'U');

L : LETRAS; for L in 'A'..'U' loop


. ...
.
. for L in VOGAIS'('A')..VOGAIS'('U') loop
if L = 'E' then ... ...
Enumeração
▪ Em alguns casos, enumerações são implementadas como
classes

enum Dia {
Segunda,
Terça,
Quarta,
Quinta,
Sexta,
Sábado,
Domingo
};
...
for(Dia d : Dia.values()){
System.out.println(d);
}
Enumeração
▪ Vantagens
– Legibilidade

int tema;
...
switch(tema){
case 0: //tema padrão
...
case 1: //tema dark
...
case 2: //tema light
...
case 3: //tema preto e branco
...
}
Enumeração
▪ Vantagens enum TemaCor{
TemaPadrao,
– Legibilidade TemaDark,
TemaLight,
TemaPretoBranco
};

TemaCor tema;

switch(tema){
case TemaPadrao:
...
case TemaDark:
...
case TemaLight:
...
case TemaPretoBranco:
...
}
Enumeração
▪ Vantagens
– Legibilidade
– Confiabilidade

Não permite operações aritméticas de inteiros

Não se pode definir valores fora da faixa

Não faz coerção para inteiros (enumeração ≠ inteiro)
Subfaixa / Intervalo de Inteiros
▪ Subsequência ordenada contínua de um tipo enumerado
▪ Normalmente são implementados da mesma forma que as
enumerações

type positivo = 0..MAXINT;


type maiuscula = 'A'..'Z';
Subfaixa / Intervalo de Inteiros
▪ Subsequência ordenada contínua de um tipo enumerado
▪ Normalmente são implementados da mesma forma que as
enumerações

type Dia is (seg,ter,qua,qui,sex,sab,dom);


subtype FimDeSemana is Dia range sab..dom;
...
A: Dia := dom;
B: FimDeSemana := A; -- Atribuição entre enumerações diferentes
C: Dia := seg;
D: FimDeSemana := ter; -- Erro detectado na compilação
E: FimDeSemana := A; -- Erro detectado na execução