estrito.pris

Adalberto

25 nov 2023


Uma biblioteca simples para definir o modo estrito global, const ou local mais...

Funções:

  1. estrito.desative
  2. estrito.modo_const
  3. estrito.modo_global
  4. estrito.modo_local

estrito.pris

Uma biblioteca simples para definir o modo estrito global, const ou local
Esta biblioteca permite ativar: #### Modo global: #### Toda variável global ou campo de uma tabela terá seu tipo fixo, ou seja, o primeiro valor atribuído definirá seu tipo não podendo mais ser alterado. Assim, se uma variável for do tipo número, não é possível atribuir uma string a ela, por exemplo.

Obs. qualquer tentativa de obter o valor de uma variável global não declarada dará erro.

#### Modo const: #### Neste modo toda variável global ou campo de uma tabela será imutável, ou seja, depois de atribuir um valor não será possível mudar de valor.

Obs. qualquer tentativa de obter o valor de uma variável global não declarada dará erro.

#### Modo local: #### Neste modo só é permitido o uso de variáveis locais, qualquer tentativa de atribuir uma global dará erro. Em caso de tabela, não será possível atribuir novos campos.
## Exemplos: ## #### Modo global ####
      //funciona apenas com variáveis globais ou valores de tabela.
      
      local estrito = inclua'estrito';
      estrito.modo_global();
      a = 1;
      imprima(a);
      //estrito.desative(); //podemos desativar o modo global e dará certo a atribuição de valor diferente.
      a = 'A';  //--> erro no modo estrito global, tentativa de atribuir um valor string em uma variável número.
      imprima(a);
      local n = 1;
      n = 'olá'; //-- ok, pois em variável local é permitido a troca de valores de tipos diferentes.
      imprima(n);
      
  


#### Modo estrito const #### Toda variável local é imutável, o primeiro valor atribuído é fixado não podendo mais trocar de valor.
      
      local estrito = inclua'estrito';
      estrito.modo_const();
      PI = 3.14;
      PI = 1; //--> Erro ao atribuir novo valor em uma variável global em modo const.
      imprima(PI);
      
      local n = 1; 
      n = 2; //--> ok, pois em modo local é permitido.
  


#### Modo local #### O modo local força o programador usar somente variáveis locais, veja:
      local estrito = inclua'estrito';
      estrito.modo_local();
      local a = 1;
      local b = 2;
      
      c = 3; //->erro em modo local, tentativa de atribuição de variável global;
      
  
#### Modo global, const e local em tabelas: #### O modo local força o programador usar somente variáveis locais, veja:
📋
 ex1.prisma
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
local estrito = inclua'estrito';
local t = {};
estrito.modo_global(t);

t.s = 'algo';
//t.s = 3; //--> erro ao atribuir um valor número em um campo de tabela do tipo string.
estrito.desative(t);
t.s = 3; //após a desativação do modo é possível alterar o tipo dos valores dos campos.

local c = {};
estrito.modo_const(c);
c.s = 'c.s: algo';
//c.s = 'c.s: algum'; //--> erro ao trocar uma valor de campo de tabela em modo const.
estrito.desative(c);
c.s = 'c.s: outro'; //após a desativação do modo é possível alterar os campos.

local l = {a=1, b=2};
estrito.modo_local(l);

//l.s = 'ola'; //--> erro, pois não é permitido adicionar novos campos na tabela em modo local.
l.a = 10; //para os campos da tabela definidos antes do modo local é permitido a mudança de valores.
l.b = 20; //para os campos da tabela definidos antes do modo local é permitido a troca de valores.
estrito.desative(l);
l.s = 'ola'; //após a desativação do modo é possível acrescentar novos campos.


## Observações ## Ao desativar o modo global ou const, as variáveis e campos já não serão mais acessíveis. ####Exemplo:####
📋
 ex2.prisma
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
    local estrito = inclua'estrito';
    estrito.modo_global();
    s = 'ola';
    imprima(s);//--> ola
    estrito.desative();
    imprima(s);// -->nulo; 
    
    //os valores ficam na metatabela .__self   para global   e   .__const   para const.
    local mt1 = obtmetatabela(_G);
    se mt1 entao
        imprima( mt1.__self.s); //--> ola;
    fim
    
    estrito.modo_const();
    
    __S__ = 'minha var const';
    imprima(__S__);//--> minha var const
    estrito.desative();
    imprimma(__S__); //--> nulo;
    local mt2 = obtmetatabela(_G);
    se mt2 entao
        imprima(mt2.__const.__S__);//--> minha var const
    fim
    

Funções:

Voltar ao início

funcao estrito.modo_global(t) --{

Função que define o modo estrito global, isto significa que não será possível mudar o tipo de uma variável


Ao definir o modo estrito global, variáveis globais serão aceitas, mas não será possível mudar o tipo do valor de uma variável. Portanto, o primeiro valor atribuído a uma variável será fixado como o tipo dela.

Parâmetros:

t(tabela ou nulo) - este parâmetro pode ser omitido e o padrão será a tabela global Prisma (_G);
caso seja uma tabela os seus métodos e chaves terão tipagem fixa.
OBS.: não é possível usar o modo estrito global ao mesmo tempo que o modo estrito local com a mesma tabela. Mas com tabelas diferentes é possível, lembrando que a tabela _G guarda as variáveis globais. Com o modo global ativado não é possível atribuir nulo a uma variável ou membro de tabela.

Retornos:

(tabela) - o retorno é a propria tabela a ser ativada.
Voltar ao início

funcao estrito.modo_const(t) --{

Função que define o modo estrito const, não é possível alterar o valor já atribuído.

Também não é possível usar uma variável antes dela estar declarada.
Ao definir o modo estrito const, variáveis globais serão aceitas, mas não será possível mudar o valor de uma variável. Portanto, o primeiro valor atribuído a uma variável será fixado como constante.

Parâmetros:

t(tabela ou nulo) - este parâmetro pode ser omitido e o padrão será a tabela global Prisma (_G);
caso seja uma tabela os seus métodos e chaves terão tipagem fixa.
OBS.: não é possível usar o modo estrito const ao mesmo tempo que o modo estrito local com a mesma tabela. Mas com tabelas diferentes é possível, lembrando que a tabela _G guarda as variáveis globais. Com o modo const ativado não é possível atribuir nulo a uma variável ou membro de tabela.

Retornos:

(tabela) - o retorno é a propria tabela a ser ativada.
Voltar ao início

funcao estrito.modo_local(t) --{

Função estrito.modo_local(t) - ativa o modo estrito local, variáveis globais não serão permitidas.

Esta função força o programador a usar somente variáveis locais, caso tente atribuir uma variável global ocorrerá um erro e o programa será finalizado com a mensagem de erro.
OBS.: só não é possível atribuir novas variáveis globais, mas obter os valores de variáveis globais já atribuídas antes de modo local é totalmente possível.

Parâmetros:

t(tabela ou nulo) - a tabela para ativar o modo estrito local ou nulo. Caso seja nulo, nenhum valor passado,
então o padrão será _G, não faz sentido atribuir uma tabela normal no modo local, entao deixe sempre vazio. só faria sentido para não poder atribuir mais valores em uma tabela.

Retornos:

(tabela) - o retorno é a própria tabela com o modo local ativado.
Voltar ao início

funcao estrito.desative(t) --{

Função estrito.desative(t) - desativa o modo estrito local, global ou const

Parâmetros:

t(tabela ou nulo) - a tabela a ser desativada ou nulo para a tabela global _G

Retornos:

(booleano) - retorna verdadeiro ou falso em caso de sucesso ou falha.
Caso haja a tentativa de desativar uma tabela não ativada o retorno será falso.