Skip to main content

Criando Bibliotecas

Estenda o poder do MiniDart criando suas próprias bibliotecas com funções nativas implementadas em Dart.

Arquitetura do Sistema de Bibliotecas

  1. StandardLibrary: Gerenciador central das bibliotecas
  2. NativeFunction: Representação de uma função nativa
  3. Sistema de Imports: Permite importar bibliotecas com ou sem alias
  4. VM Integration: Execução das funções nativas durante runtime

Fluxo de Funcionamento

Estrutura de uma Biblioteca

1. Registro da Biblioteca

Todas as bibliotecas são registradas no arquivo lib/src/standard_library.dart através de métodos privados:

2. Convenção de Nomes

  • Nome da biblioteca: nomebiblioteca.funcao
  • Exemplo: math.sqrt, string.tamanho, io.imprimir
  • Consistência: Use nomes em português para manter o padrão da linguagem

3. Classe NativeFunction

Processo de Criação de Nova Biblioteca

Passo 1: Definir o Escopo da Biblioteca

Determine:
  • Nome da biblioteca (ex: data, arquivo, rede)
  • Funcionalidades que serão oferecidas
  • Tipos de dados que serão manipulados
  • Dependências externas necessárias

Passo 2: Implementar as Funções

2.1 Adicionar método de registro

No arquivo standard_library.dart, adicione um novo método:

2.2 Chamar o método no construtor

2.3 Implementar as funções

Passo 3: Implementar Funções Auxiliares

Adicione métodos de conversão específicos para sua biblioteca:

Passo 4: Validação e Testes

Crie arquivos de teste para validar sua biblioteca:

Exemplo Completo: Biblioteca de Arquivos

1. Definição da Biblioteca

2. Uso da Biblioteca

Boas Práticas

1. Tratamento de Erros

2. Validação de Parâmetros

3. Documentação

4. Convenções de Nome

  • Biblioteca: substantivo em minúsculas (math, string, arquivo)
  • Função: verbo ou substantivo descritivo (calcular, tamanho, existe)
  • Parâmetros: nomes claros e em português quando possível

Tipos de Dados Suportados

Entrada (Parâmetros)

  • int - Números inteiros
  • double - Números reais
  • String - Texto
  • bool - Valores lógicos (true/false)
  • null - Valor nulo

Saída (Retorno)

  • Mesmos tipos de entrada
  • void - Para funções que não retornam valor (use return null;)

Conversões Disponíveis

Sistema de Imports

Import Básico

Import com Alias

Validação de Bibliotecas

No arquivo semantic_analyzer.dart, adicione sua biblioteca à lista de bibliotecas válidas:

Debugging e Testes

1. Teste Individual de Funções

2. Verificação de Erros

3. Execução

Bibliotecas Existentes como Referência

1. Math Library (31 funções)

  • Trigonometria: sin, cos, tan, asin, acos, atan
  • Exponenciais: exp, log, log10, pow, sqrt
  • Arredondamento: abs, ceil, floor, round
  • Comparação: max, min
  • Aleatórios: random
  • Constantes: PI, E, LN2, etc.

2. String Library (17 funções)

  • Propriedades: tamanho, vazio
  • Transformações: maiuscula, minuscula, inverter, limpar
  • Verificações: contem, comecaCom, terminaCom
  • Manipulação: encontrar, substituir, fatiar, caractereEm
  • Operações: repetir, concatenar, dividir

3. IO Library (5 funções)

  • Saída: imprimir, escrever, novaLinha
  • Entrada: lerTexto, lerNumero (simulados)

Próximos Passos

Ideias para Novas Bibliotecas

  1. data - Manipulação de datas e tempo
  2. arquivo - Operações com arquivos e diretórios
  3. rede - Requisições HTTP básicas
  4. json - Parsing e geração de JSON
  5. lista - Operações avançadas com arrays
  6. crypto - Funções de hash e criptografia básica

Recursos Avançados Futuros

  • Bibliotecas dinâmicas: Carregamento de bibliotecas externas
  • Namespaces aninhados: biblioteca.modulo.funcao
  • Tipos customizados: Estruturas de dados complexas
  • Callbacks: Funções como parâmetros