enun.pris

Adalberto

04/12/2023


Simples lib para simular o tipo enum da linguagm C. mais...

Funções:

  1. enum

enun.pris

Simples lib para simular o tipo enum da linguagm C.
*

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:
📋
 ex_enum.c
  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:

📋
 ex1.prisma
  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:

📋
 ex2.prisma
  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:

📋
 ex3.prisma
  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

Funções:

Voltar ao início

local funcao enum(ini)

Esta função enum() simula o tipo enum do C, gerando uma enumeração contínua.

Parâmetros:

ini(numero) - número inicial do enum.

Retornos:

(tabela) - tabela enum.

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:

📋
 ex4.prisma
  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.)