Esta lib tem o propósito de criar o tipo enum em Prisma. Enuns são sequências de números inteiros sem sinal muito usadas em linguagens como C, C++, C# e outras.
Veja um exemplo de enum em C: enum Level {
LOW,
MEDIUM,
HIGH
};
//este enum (enumeration) acima atribui ao primeiro item da lista o valor 0, ao segundo 1 e assim por diante.
//poderíamos determinar o valor inicial, ou de qualquer parte dos itens do enum.
if(LOW==0) puts('LOW = 0');
1 2 3 4 5 6 7 8 9
enum Level {
LOW,
MEDIUM,
HIGH
};
//este enum (enumeration) acima atribui ao primeiro item da lista o valor 0, ao segundo 1 e assim por diante.
//poderíamos determinar o valor inicial, ou de qualquer parte dos itens do enum.
if(LOW==0) puts('LOW = 0');
Em Prisma ficaria:
local enum = inclua'enum'; //o retorno é uma única função.
local Level = enum(0); //parâmetro valor inicial, o padrão é 1 caso não seja definido.
local LOW = Level.LOW, Level.MEDIUM, Level.HIGH;//primeira forma
imprima('Primeira forma:', Level.LOW, Level.MEDIUM, Level.HIGH);
se Level.LOW == 0 entao
poe('LOW = 0');
fim
local LOW, MEDIUM, HIGH = Level(100,102); //segunda forma - range com inicio em 100 até 102 (100,101,102);
imprima('Segunda forma:', LOW, MEDIUM, HIGH);
local LOW, MEDIUM, HIGH = Level({10,30,50});//cada valor da tabela é passado para cada variável do lado esquerdo.
imprima('Terceira forma:', LOW, MEDIUM, HIGH);
//no caso de tabela (terceira forma) os parênteses podem ser omitidos:
local LOW, MEDIUM, HIGH = Level{10,30,50};
imprima('Omitindo parênteses:', LOW, MEDIUM, HIGH);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
local enum = inclua'enum'; //o retorno é uma única função.
local Level = enum(0); //parâmetro valor inicial, o padrão é 1 caso não seja definido.
local LOW = Level.LOW, Level.MEDIUM, Level.HIGH;//primeira forma
imprima('Primeira forma:', Level.LOW, Level.MEDIUM, Level.HIGH);
se Level.LOW == 0 entao
poe('LOW = 0');
fim
local LOW, MEDIUM, HIGH = Level(100,102); //segunda forma - range com inicio em 100 até 102 (100,101,102);
imprima('Segunda forma:', LOW, MEDIUM, HIGH);
local LOW, MEDIUM, HIGH = Level({10,30,50});//cada valor da tabela é passado para cada variável do lado esquerdo.
imprima('Terceira forma:', LOW, MEDIUM, HIGH);
//no caso de tabela (terceira forma) os parênteses podem ser omitidos:
local LOW, MEDIUM, HIGH = Level{10,30,50};
imprima('Omitindo parênteses:', LOW, MEDIUM, HIGH);
Obs.: Outra forma que fica bem semelhante ao C:
local enum = inclua'enum';
level = enum(0);//primeiro devemos criar o objeto enum(); o parâmetro opcional é o valor inicial.
enum{ //depois com a própria função enum, podemos enumerar quaisquer chaves e o valor será uma sequência;
level.LOW;
level.MEDIUM;
level.HIGH;
}
imprima('Quarta forma:', level.LOW, level.MEDIUM, level.HIGH );
1 2 3 4 5 6 7 8 9 10
local enum = inclua'enum';
level = enum(0);//primeiro devemos criar o objeto enum(); o parâmetro opcional é o valor inicial.
enum{ //depois com a própria função enum, podemos enumerar quaisquer chaves e o valor será uma sequência;
level.LOW;
level.MEDIUM;
level.HIGH;
}
imprima('Quarta forma:', level.LOW, level.MEDIUM, level.HIGH );
Obs.: Poderíamos mudar a sequência:
local enum = inclua'enum';
pos = enum();
pos.CENTRO = 0; //definimos um valor inicial
enum{ pos.DIREITA_TOPO, pos.ESQUERDA_TOPO; }
//mudando a sequência:
pos.DIREITA_BASE = 100;
enum{ pos.ESQUERDA_BASE, pos.ALEATORIO, pos.LOCAL_MOUSE, pos.LOCAL_ANTERIOR; }
imprima( pos.CENTRO, pos.DIREITA_TOPO, pos.ESQUERDA_TOPO, pos.DIREITA_BASE, pos.ESQUERDA_BASE, pos.ALEATORIO, pos.LOCAL_MOUSE, pos.LOCAL_ANTERIOR );
//--> saída: 0 1 2 100 101 102 103 104
1 2 3 4 5 6 7 8 9 10 11 12 13
local enum = inclua'enum';
pos = enum();
pos.CENTRO = 0; //definimos um valor inicial
enum{ pos.DIREITA_TOPO, pos.ESQUERDA_TOPO; }
//mudando a sequência:
pos.DIREITA_BASE = 100;
enum{ pos.ESQUERDA_BASE, pos.ALEATORIO, pos.LOCAL_MOUSE, pos.LOCAL_ANTERIOR; }
imprima( pos.CENTRO, pos.DIREITA_TOPO, pos.ESQUERDA_TOPO, pos.DIREITA_BASE, pos.ESQUERDA_BASE, pos.ALEATORIO, pos.LOCAL_MOUSE, pos.LOCAL_ANTERIOR );
//--> saída: 0 1 2 100 101 102 103 104
Esta função enum() simula o tipo enum do C, gerando uma enumeração contínua.
Obs.: Ao chamar a função enum passando uma tabela, podemos simular a criação de um enum no estilo C, veja o exemplo abaixo:
local enum = inclua'enum'; //retorna uma única função ao incluir esta lib.
local Level = enum(); //construtor da enum, sem valor inicial, o padrão é 1;
Level.LOW=0; //definindo o valor inicial;
enum{Level.MEDIUM, Level.HIGH}; //quarta maneira.
imprima("Levels:", Level.LOW, Level.MEDIUM, Level.HIGH);
imprima(Level); //
imprima('tipo: ', tipo(Level)); // --> "enum" (a partir de Prisma-1.0.107, o metamétodo __tipo foi definido.)
1 2 3 4 5 6 7 8 9
local enum = inclua'enum'; //retorna uma única função ao incluir esta lib.
local Level = enum(); //construtor da enum, sem valor inicial, o padrão é 1;
Level.LOW=0; //definindo o valor inicial;
enum{Level.MEDIUM, Level.HIGH}; //quarta maneira.
imprima("Levels:", Level.LOW, Level.MEDIUM, Level.HIGH);
imprima(Level); //
imprima('tipo: ', tipo(Level)); // --> "enum" (a partir de Prisma-1.0.107, o metamétodo __tipo foi definido.)