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.)