Criando Bibliotecas
Estenda o poder do MiniDart criando suas próprias bibliotecas com funções nativas implementadas em Dart.Arquitetura do Sistema de Bibliotecas
- StandardLibrary: Gerenciador central das bibliotecas
- NativeFunction: Representação de uma função nativa
- Sistema de Imports: Permite importar bibliotecas com ou sem alias
- 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 arquivolib/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 arquivostandard_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 inteirosdouble
- Números reaisString
- Textobool
- Valores lógicos (true/false)null
- Valor nulo
Saída (Retorno)
- Mesmos tipos de entrada
void
- Para funções que não retornam valor (usereturn null;
)
Conversões Disponíveis
Sistema de Imports
Import Básico
Import com Alias
Validação de Bibliotecas
No arquivosemantic_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
data
- Manipulação de datas e tempoarquivo
- Operações com arquivos e diretóriosrede
- Requisições HTTP básicasjson
- Parsing e geração de JSONlista
- Operações avançadas com arrayscrypto
- 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