logicabr.dev

Bibliotecas e Módulos

O que é uma biblioteca? No mundo real da programação, ninguém tem tempo para reinventar a roda todos os dias. Uma Biblioteca (ou módulo) é um pacote de código pronto que resolve um problema específico. Pense nelas como a caixa de ferramentas de um mecânico: você não precisa criar uma chave de fenda do zero, apenas pega uma pronta e usa.

Por que quebrar o código em partes menores? Quando os sistemas crescem, tentar ler arquivos de texto com milhares de linhas se torna caótico. Separar seu código em abas menores (módulos) ajuda a sua mente a focar em um problema por vez, facilita encontrar as linhas corretas num teste, e o mais importante: blinda o sistema (um erro na tela de pagamentos não corrompe a tela de login, por exemplo).

A Biblioteca Nativa Integrada: Util

Seu ambiente já possui a caixa de ferramentas Util embutida, pronta para uso sem a necessidade de criar a aba na mão. Ela contém ações de base da computação:

  • Util.sorteia(1, 10): Sorteia aleatoriamente um número inteiro entre o valor de início e fim. Perfeito para simular eventos de jogos ou imprevisibilidades físicas.
  • Util.aguarde(1000): Trava a execução do programa exatamente na linha por uma quantia MÍNIMA de milissegundos (1000ms = 1 segundo). Ideal para animações e, principalmente, loops de monitoramento infinitos que, se soltos, queimariam a CPU travando todo o navegador.

Quanto tempo um programa pode rodar: com Util.aguarde() (ou esperando uma entrada()) dentro do laço, ele roda por até 10 minutos, e o botão Parar mostra há quanto tempo está rodando. Um laço sem nenhuma pausa é interrompido depois de 15 segundos, porque quase sempre é um loop infinito por engano.

Exemplo Tutorial: Sensor de Temperatura em 3 Passos

Abaixo, criaremos uma arquitetura robótica em 3 abas diferentes! Abstraindo primeiro os alertas, depois a análise da temperatura, e por fim o ciclo principal de leitura na fábrica. Isso ilustra o poder prático dos módulos.

Passo 1: Crie uma nova Aba na IDE rotulada como Aviso

Esta é a nossa "Caixa de Alertas". Ela recebe os códigos e se encarrega exclusivamente de exibi-los. É o nível mais isolado da arquitetura.

funcao mensagem(dados, tempAtual){ escolha(dados) { caso 0: saida("[CORTANDO ENERGIA] " + tempAtual + "ºC - Superaquecimento!"); pare; caso 1: saida("[AVISO] " + tempAtual + "ºC - Disparando e-mail p/ o técnico."); pare; caso 2: saida("[AVISO] " + tempAtual + "ºC - Temperatura do sensor estabilizada."); dados = 1; pare; } retorno dados; }

Passo 2: Crie outra Aba rotulada como Sensor

Este é o "cérebro" lógico. Ele importa o Aviso, toma decisões baseadas no número de graus lidos, mas repassa o trabalho de exibir mensagens de volta para a outra aba e retorna a ação de parada para o ciclo principal.

inclua Aviso funcao monitorar(tempAtual) { numero dados; se (tempAtual >= 25) { dados = 0; // Sinal fatal para desligar a máquina } senao se (tempAtual >= 20 e tempAtual <= 24) { dados = 1; // Estado de atenção. Continua operando. } senao { dados = 2; // Estado normal. Continua operando. } retorno Aviso.mensagem(dados, tempAtual); }

Passo 3: Volte para a Aba principal de execução: main

Aqui centralizamos tudo! O loop infinito não sabe COMO processar avisos ou checar a temperatura exata, ele simplesmente sorteia números e delega a complexidade aos dois módulos anteriores. O descanso ocorre via Util.aguarde().

inclua Sensor // Importa o cérebro! (o cérebro por sua vez já importa o modulo de Avisos automaticamente) inclua Util // Importa as funções nativas de delay de sorteio saida("> Firmware de Câmera Fria online! Monitorando <"); numero lendo = 1; enquanto (lendo == 1) { // 1. A Biblioteca nativa assume o papel físico oscilante do chip medidor numero temp = Util.sorteia(10, 30); // 2. O módulo avaliará e retornará ao fim da cadeia se o loop deve continuar (1) ou decair (0) lendo = Sensor.monitorar(temp); // 3. Obrigamos o chip a dormir 1 segundo fechado para não travar toda a máquina. Util.aguarde(1000); }

Variáveis e funções entre abas

Funciona como os módulos das linguagens profissionais (o import do JavaScript e do Python):

  • Cada aba roda uma vez só. Se o programa e outra aba incluem a mesma aba, os dois usam a mesma aba: mudar VARIAVEIS.saldo num lugar muda para todos, em qualquer nível.
  • Use sempre o nome da aba na frente: VARIAVEIS.saldo, CAIXA.depositar(10). Cada aba tem as suas variáveis; duas abas podem ter variáveis com o mesmo nome sem se misturar.
  • Quem usa, inclui. Se a aba CAIXA mexe em VARIAVEIS.saldo, ela também precisa de inclua VARIAVEIS no começo. Uma aba não enxerga as variáveis do programa principal.
  • O tipo vale em qualquer aba. VARIAVEIS.opcao = entrada("Opção?") guarda um número se opcao foi declarada como numero.
  • Uma aba não pode incluir a si mesma, nem por um caminho (A inclui B, B inclui A). Se duas abas precisam das mesmas coisas, coloque essas coisas numa terceira aba.
// Aba VARIAVEIS moeda saldo = 100 // Aba CAIXA inclua VARIAVEIS funcao depositar(moeda valor) { VARIAVEIS.saldo = VARIAVEIS.saldo + valor } // Aba principal inclua VARIAVEIS inclua CAIXA CAIXA.depositar(50) saida(VARIAVEIS.saldo) // 150

Se algo estiver errado, a mensagem diz em qual aba e em qual linha, e sugere o nome certo quando você digita um nome que a aba não tem.