Biblioteca padrão principal dart:core

A biblioteca dart:core é a biblioteca padrão principal do Dart, importada implícita e automaticamente. Ela disponibiliza as funcionalidades fundamentais essenciais da linguagem. Abaixo estão seus recursos principais e exemplos de código organizados por módulos.

O desenvolvedor não precisa escrever nenhuma instrução de import; essa biblioteca é carregada por padrão de forma automática.

I. Saída no console

Função de nível superior print(): invoca automaticamente o método toString() do objeto para exibir texto.

void main() {
  var tea = "milk tea";
  print(tea);
  print('I drink $tea.');
}Code language: Dart (dart)

II. Tipos numéricos: num / int / double

  1. Relação de herança: int e double herdam de num
  2. Conversão de string para número: parse(); int aceita o parâmetro radix para definir a base numérica
  3. Conversão de número para string:
  • toString(): conversão básica
  • toStringAsFixed(n): mantém n casas decimais
  • toStringAsPrecision(n): n algarismos significativos
void main() {
  // Converter string para número
  assert(int.parse('42') == 42);
  assert(int.parse('42', radix:16) == 66);
  assert(double.parse('0.5') == 0.5);

  // Converter número para string
  assert(123.456.toStringAsFixed(2) == '123.46');
  assert(123.456.toStringAsPrecision(2) == '1.2e+2');
}Code language: Dart (dart)

III. Strings & Expressões Regulares RegExp

  • Objetos String são imutáveis (todos os métodos de alteração retornam novas strings); armazenam unidades de código UTF-16
  • Métodos comuns: busca, substring, divisão, alteração de caixa, remoção de espaços
void main() {
  var str = 'Never odd or even';
  // Consultas
  assert(str.contains('odd'));
  assert(str.startsWith('Never'));
  assert(str.endsWith('even'));
  assert(str.indexOf('odd') == 6);

  // Substring e divisão
  assert(str.substring(6,9) == 'odd');
  var parts = 'a b c'.split(' ');

  // Remover espaços e verificação de vazio
  assert('  abc  '.trim() == 'abc');
  assert(''.isEmpty);
  assert('  '.isNotEmpty);

  // Alterar caixa para maiúsculas
  assert('dart'.toUpperCase() == 'DART');

  // Utilize StringBuffer para concatenação (melhor desempenho)
  var sb = StringBuffer();
  sb.write('Hello ');
  sb.writeAll(['A','B','C'], ',');
  print(sb.toString());
}Code language: Dart (dart)

Expressões Regulares RegExp

void main() {
  var reg = RegExp(r'\d+'); // Corresponde a sequências de dígitos
  var text = 'llamas live 15 to 20 years';

  assert(reg.hasMatch(text));
  // Iterar todas as correspondências globais
  for(var m in reg.allMatches(text)){
    print(m.group(0));
  }
  // Substituir trechos correspondentes
  var res = text.replaceAll(reg, 'XX');
  print(res);
}Code language: Dart (dart)

Observação: Uma unidade de código nem sempre equivale a um caractere visível. Para caracteres Unicode complexos (combinações de emojis), utilize o pacote externo characters.

IV. Coleções (List / Set / Map)

1. List: ordenada, aceita duplicatas, acesso por índice

void main() {
  var fruits = ['apple','orange'];
  fruits.add('kiwi');
  fruits.addAll(['grape']);
  fruits.removeAt(0);
  fruits.sort((a,b)=>a.compareTo(b)); // Ordenar elementos

  // Restrição genérica
  var strList = <String>[];
}Code language: Dart (dart)

2. Set: não ordenado, elementos únicos, sem acesso por índice

void main() {
  var set = <String>{};
  set.addAll(['gold','xenon']);
  set.add('gold'); // Adição duplicada não surte efeito
  assert(set.contains('xenon'));

  // Operação de interseção
  var set2 = Set.from(['xenon','argon']);
  var inter = set.intersection(set2);
}Code language: Dart (dart)

3. Map: coleção de pares chave-valor; as chaves são únicas

void main() {
  var map = {54: 'xenon'};
  print(map[54]);
  assert(map.containsKey(54));
  map.remove(54);

  // Atribuir valor apenas se a chave não existir
  map.putIfAbsent('name', () => 'Dart');

  // Iterar entradas
  map.forEach((k,v)=>print('$k:$v'));
}Code language: Dart (dart)

4. Operações genéricas Iterable (List e Set implementam Iterable)

Métodos de ordem superior comuns: forEach, map, where, any, every

void main() {
  var list = ['green','black','chamomile'];
  list.forEach(print);

  // map é avaliado de forma preguiçosa; toList executa imediatamente
  var upperList = list.map((e)=>e.toUpperCase()).toList();

  // Filtrar elementos
  var filter = list.where((e)=>e == 'chamomile');
  assert(list.any((e)=>e == 'chamomile'));
  assert(!list.every((e)=>e.contains('tea')));
}Code language: Dart (dart)

V. Manipulação de URI (Uri)

Usado para codificação, decodificação, análise e construção de URLs

  1. encodeFull: codifica apenas espaços e caracteres similares, mantém símbolos de URL / : ? &
  2. encodeComponent: escapa todos os caracteres especiais (ideal para codificar valores de parâmetros)
void main() {
  // Analisar url
  var uri = Uri.parse('https://example.org:8080/foo?lang=dart#frag');
  print(uri.scheme);
  print(uri.host);
  print(uri.queryParameters);

  // Construir url
  var newUri = Uri.https('example.org','/foo', {'lang':'dart'});
}Code language: Dart (dart)

VI. Data e Hora DateTime & Duration

  • DateTime: instante no tempo, suporta horário local e UTC
  • Duration: intervalo de tempo, usado para somar/subtrair instantes e calcular diferenças
void main() {
  var now = DateTime.now();
  var y2k = DateTime.utc(2000);

  // Adição e subtração de tempo
  var nextYear = y2k.add(const Duration(days:366));
  var diff = nextYear.difference(y2k);
  print(diff.inDays);

  // Timestamp (milissegundos desde a época Unix 1970-01-01 UTC)
  print(y2k.millisecondsSinceEpoch);
}Code language: Dart (dart)

Aviso: Deslocamentos baseados em dias podem causar erros com mudança de horário de verão. Prefira utilizar horário UTC.

VII. Interfaces e Classes Base Úteis

1. Comparable: possibilita comparação de objetos para ordenação

class Line implements Comparable<Line> {
  final int length;
  const Line(this.length);
  @override
  int compareTo(Line other) => length - other.length;
}Code language: Dart (dart)

2. Chaves personalizadas para Map: sobrescrever == e hashCode

Regra: Objetos iguais devem ter o mesmo hashCode

class Person {
  final String first, last;
  Person(this.first,this.last);

  @override
  int get hashCode => Object.hash(first, last);

  @override
  bool operator ==(Object other) =>
      other is Person && other.first == first && other.last == other.last;
}Code language: Dart (dart)
  • 3. Iterable + Iterator

Implementar Iterable permite usar laços for-in com lógica de travessia customizada.

VIII. Tratamento de Exceções

  • Error: falha grave, geralmente não capturável (ex: NoSuchMethodError)
  • Exception: anomalia previsível que pode ser capturada; é possível criar exceções personalizadas
class FooException implements Exception {
  final String? msg;
  const FooException([this.msg]);
  @override
  String toString() => msg ?? 'FooException';
}Code language: Dart (dart)

IX. Referências Fracas e Finalizadores

  • WeakReference: referência fraca, não impede o coletor de lixo de liberar o objeto alvo
  • Finalizer / NativeFinalizer: executa callback quando o objeto é coletado, para liberar recursos nativos
  • Finalizable: evita coleta prematura do objeto pelo GC

Biblioteca padrão principal dart:core

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *