Dart: Introdução à Linguagem Dart — Da Origem ao Ecossistema

Dart — Uma linguagem nascida para multiplataforma, do Flutter ao CLI, da Web ao Servidor, uma base de código roda em todo lugar.

1. O que Você Aprenderá


2. A História de um Desenvolvedor Real

(1) Dor: O Pesadelo da Fragmentação no Desenvolvimento Multiplataforma

Bob é um desenvolvedor full-stack responsável por um produto SaaS de análise de dados de e-commerce. Ele precisa manter simultaneamente um frontend web (JavaScript), aplicativos móveis (Kotlin + Swift), serviços de backend (Go) e ferramentas CLI (Python). Quatro linguagens, quatro toolchains, quatro bases de código — corrigir um único bug exige alterações em quatro lugares. Quando o gerente de produto solicitou um "painel em tempo real", Bob teve que ponderar repetidamente entre Flutter e desenvolvimento nativo, com os custos de comunicação da equipe disparando para 20 horas por semana.

(2) A Solução do Dart

O Dart oferece uma stack tecnológica unificada: uma linguagem cobre o frontend (Flutter Web), mobile (Flutter Mobile), backend (Dart shelf) e CLI (dart:io). Bob reescreveu todo o projeto em Dart, e a lógica de negócio principal só precisa ser escrita uma vez.

DART
// Lógica de negócio compartilhada - roda em CLI, Web, Mobile, Server
class DataPipeline {
  final String name;
  final int maxRecords;

  const DataPipeline({
    required this.name,
    this.maxRecords = 1000000,
  });

  String get summary => '$name: capacity ${maxRecords} records';
}
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

(3) Benefícios


3. O Nascimento e a Evolução do Dart

(1) Contexto de Criação

O Dart foi lançado em 2011 por Lars Bak e Kasper Lund do Google, inicialmente concebido para substituir o JavaScript como a linguagem principal da web. O surgimento do Flutter em 2015 mudou o destino do Dart — transformando-o de uma "linguagem Web" para uma "linguagem multiplataforma."

100%
graph LR
  A[Dart 1.0<br/>2011] --> B[Dart 2.0<br/>2018<br/>Tipagem forte]
  B --> C[Dart 2.12<br/>2021<br/>Null Safety]
  C --> D[Dart 3.0<br/>2023<br/>Records/Pattern/Sealed]
  D --> E[Dart 3.x<br/>2024+<br/>Wasm GC]
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.
Marco de Versão Ano Recurso Principal Significado
Dart 1.0 2011 Tipagem opcional Alternativa para Web
Dart 2.0 2018 Strong mode + tipagem estática Fundação da segurança de tipos
Dart 2.12 2021 Sound Null Safety Elimina ponteiros nulos
Dart 3.0 2023 Records / Pattern Matching / Sealed Classes Recursos de linguagem moderna
Dart 3.x 2024+ Suporte a Wasm GC Salto de desempenho na Web

(2) Posicionamento Estratégico do Google

O Dart é a única linguagem oficial do Flutter e também é a linguagem da camada de aplicação do Fuchsia OS interno do Google. O investimento do Google no Dart é uma estratégia de longo prazo, não um projeto experimental.

Dimensão Estratégica Posicionamento
Mobile Linguagem principal do Flutter
Web Compila para JS / Wasm para execução
Desktop Flutter Desktop
Lado servidor shelf / dart:io
Embarcado Camada de aplicação do Fuchsia OS

4. Dart vs Outras Linguagens

(1) Comparação das Diferenças Principais

100%
graph LR
  A[Dart] --> B[Null Safety]
  A --> C[Pattern Matching]
  A --> D[Sealed Classes]
  A --> E[AOT + JIT]
  A --> F[Concorrência Isolate]

  G[JavaScript] --> H[Tipagem dinâmica]
  G --> I[Thread única]

  J[TypeScript] --> K[Type erasure]
  J --> L[Sem tipos em tempo de execução]

  M[Kotlin] --> N[Dependente da JVM]
  M --> O[Coroutines]
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.
Dimensão Dart JavaScript TypeScript Kotlin
Sistema de Tipos Estático Sound Dinâmico Estático (apagado) Estático
Null Safety Sound (tempo de compilação) Nenhum Não obrigatório Não obrigatório
Compilação AOT Suportado Não suportado Não suportado Suportado (Native)
Modelo de Concorrência Isolate (sem memória compartilhada) Thread única Thread única Coroutines
Pattern Matching Nativo do Dart 3 Nenhum Nenhum Suporte limitado
Sealed Classes Nativo do Dart 3 Nenhum Nenhum Suportado
Suporte Flutter Único oficial Nenhum Nenhum Indireto (KMP)
Curva de Aprendizado Média Baixa Média Média

(2) Vantagens Exclusivas do Dart


5. Os Três Pilares do Dart 3

(1) Null Safety

O Sound Null Safety divide os tipos em anuláveis T? e não anuláveis T. O compilador garante em tempo de compilação que tipos não anuláveis nunca serão nulos.

DART
// Não anulável - compilador garante não-nulo
String name = 'Bob';

// Anulável - deve verificar antes de usar
String? nickname = null;

// Acesso seguro
int length = nickname?.length ?? 0;
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

(2) Pattern Matching

O Dart 3 introduziu um sistema completo de pattern matching, suportando desestruturação, if-case, switch expressions e verificações exhaustivas.

DART
// Switch expression com pattern matching
String describe(Object value) => switch (value) {
  int i => 'Integer: $i',
  double d => 'Double: $d',
  String s => 'String: $s',
  _ => 'Unknown type',
};
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

(3) Sealed Classes

Uma sealed class restringe as subclasses à mesma biblioteca, permitindo que o compilador garanta a exaustividade do switch.

DART
sealed class DataSource {}
class ApiSource extends DataSource { final String endpoint; ApiSource(this.endpoint); }
class FileSource extends DataSource { final String path; FileSource(this.path); }
class DatabaseSource extends DataSource { final String connectionString; DatabaseSource(this.connectionString); }

// Switch exhaustivo - compilador verifica todos os casos
String describe(DataSource source) => switch (source) {
  ApiSource(:final endpoint) => 'API: $endpoint',
  FileSource(:final path) => 'File: $path',
  DatabaseSource(:final connectionString) => 'DB: $connectionString',
};
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.
Recurso Problema Resolvido Cenário de Exemplo
Null Safety Exceções de ponteiro nulo em tempo de execução Itens de configuração opcionais, retornos de API anuláveis
Pattern Matching Cadeias if-else verbosas Verificação de tipos, desestruturação de dados
Sealed Classes Esquecer de tratar um ramo Tipos de fonte de dados, máquinas de estado

6. Panorama do Ecossistema Dart

(1) Componentes Principais do Ecossistema

100%
graph LR
  A[Ecossistema Dart] --> B[Flutter<br/>Mobile/Desktop/Web]
  A --> C[pub.dev<br/>Registro de Pacotes]
  A --> D[Lado Servidor<br/>shelf/dart:io]
  A --> E[Ferramentas CLI<br/>args/dart:io]
  A --> F[Web<br/>dart2js/dart2wasm]
  A --> G[Testes<br/>pacote test]
  A --> H[Geração de Código<br/>build_runner]
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.
Componente do Ecossistema Propósito Pacotes Representativos
Flutter Framework de UI flutter, cupertino
pub.dev Gerenciador de Pacotes 40.000+ pacotes
Lado servidor Serviços HTTP shelf, dart_frog
CLI Ferramentas de Linha de Comando args, cli_util
Web Compilação Frontend dart2js, dart2wasm
Testes Framework de Testes test, mockito
Geração de Código Geração de Código build_runner, json_serializable

▶ Exemplo

TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

: Busca de pacotes no pub.dev

Bob busca por pacotes relacionados a processamento de dados no pub.dev:

DART
// Dependências do pubspec.yaml para o DataPipeline
// dependencies:
//   args: ^2.4.2        # Parsing de argumentos CLI
//   http: ^1.2.0        # Cliente HTTP
//   csv: ^6.0.0         # Parsing de CSV
//   sqlite3: ^2.4.0     # Banco de dados SQLite
//   path: ^1.9.0        # Manipulação de caminhos
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

7. Visão Geral do Projeto DataPipeline do Bob

(1) Definição do Projeto

DataPipeline é uma ferramenta CLI de análise de dados de e-commerce desenvolvida por Bob, que processa milhões de registros de pedidos para gerar relatórios utilizáveis por um painel SaaS.

▶ Exemplo

TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

: Visão do Projeto

DART
// Visão geral do projeto DataPipeline
// Entrada:  1.2M pedidos de e-commerce (CSV / API / Banco de Dados)
// Processamento: Filtrar, agregar, transformar em paralelo
// Saída: Relatórios prontos para painel (JSON / CSV / HTML)

void main() {
  print('DataPipeline v1.0.0');
  print('Capacidade de processamento: 1.000.000+ pedidos');
  print('Formatos de saída: JSON, CSV, HTML');
}
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

(2) Roteiro de Aprendizagem

100%
graph TD
  subgraph Phase1[Fase 1: Fundamentos]
    L1[Aula 1: Introdução]
    L2[Aula 2: Instalação]
    L3[Aula 3: Sintaxe Básica]
    L4[Aula 4: Variáveis e Tipos]
    L5[Aula 5: Operadores]
    L6[Aula 6: Fluxo de Controle]
  end

  subgraph Phase2[Fase 2: Recursos Principais]
    L7[Aula 7: Funções]
    L8[Aula 8: Classes e Objetos]
    L9[Aula 9: Coleções]
    L10[Aula 10: Tratamento de Exceções]
    L11[Aula 11: Generics]
    L12[Aula 12: Enums e Extensions]
  end

  subgraph Phase3[Fase 3: Avançado]
    L13[Aula 13: Null Safety]
    L14[Aula 14: Future / async-await]
    L15[Aula 15: Stream]
    L16[Aula 16: Recursos do Dart 3]
    L17[Aula 17: Isolates]
    L18[Aula 18: Metaprogramação]
  end

  subgraph Phase4[Fase 4: Operações]
    L19[Aula 19: Gerenciamento de Pacotes]
    L20[Aula 20: Testes]
    L21[Aula 21: Geração de Código]
    L22[Aula 22: Dart e Flutter]
  end

  subgraph Phase5[Fase 5: Projeto]
    L23[Aula 23: Design de Projeto]
    L24[Aula 24: Otimização e Release]
  end

  Phase1 --> Phase2 --> Phase3 --> Phase4 --> Phase5
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.
Fase Aulas Objetivo Resultado Principal
Fase 1 L1-L6 Fundamentos Hello World → Fluxo de controle
Fase 2 L7-L12 Recursos Principais Funções/Classes/Coleções/Exceções/Generics/Enums
Fase 3 L13-L18 Recursos Avançados Null Safety/Async/Stream/Dart 3/Isolates
Fase 4 L19-L22 Gerenciamento e Operações Gerenciamento de Pacotes/Testes/Geração de Código/Flutter
Fase 5 L23-L24 Prática Integrada Projeto DataPipeline completo

▶ Exemplo

TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

: Código de preview do DataPipeline

DART
// Preview do DataPipeline - o que você vai construir
void main() {
  // Passo 1: Definir fonte de dados
  final source = ApiSource('https://api.example.com/orders');

  // Passo 2: Criar pipeline
  final pipeline = DataPipeline(
    name: 'E-Commerce Analytics',
    maxRecords: 1200000,
  );

  // Passo 3: Processar e gerar saída
  print(pipeline.summary);
  // Saída: E-Commerce Analytics: capacity 1200000 records
}
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

8. Exemplo Completo: Esqueleto do Projeto DataPipeline

DART
// ============================================
// Esqueleto do Projeto DataPipeline
// Uma ferramenta CLI para análise de dados de e-commerce
// ============================================

// Tipos de fonte de dados (sealed class para matching exhaustivo)
sealed class DataSource {}

class ApiSource extends DataSource {
  final String endpoint;
  ApiSource(this.endpoint);
}

class FileSource extends DataSource {
  final String path;
  FileSource(this.path);
}

// Classe principal do pipeline
class DataPipeline {
  final String name;
  final int maxRecords;
  DataSource? source; // anulável - pode não estar configurado ainda

  DataPipeline({
    required this.name,
    this.maxRecords = 1000000,
  });

  String get summary => '$name: capacity ${maxRecords} records';

  String describeSource() {
    if (source == null) return 'No source configured';
    return switch (source!) {
      ApiSource(:final endpoint) => 'API source: $endpoint',
      FileSource(:final path) => 'File source: $path',
    };
  }
}

// Ponto de entrada
void main() {
  final pipeline = DataPipeline(
    name: 'E-Commerce Analytics',
    maxRecords: 1200000,
  );

  pipeline.source = ApiSource('https://api.example.com/orders');

  print('=== DataPipeline ===');
  print(pipeline.summary);
  print(pipeline.describeSource());
}
TEXT 📖 Somente leitura
> **Saída:** Execute em um DartPad local ou com `dart run`. Todos os exemplos do curso Dart são baseados em Dart 3.x / Flutter 3.x, e os resultados podem variar ligeiramente com a versão do SDK.

Saída:

TEXT 📖 Somente leitura
=== DataPipeline ===
E-Commerce Analytics: capacity 1200000 records
API source: https://api.example.com/orders

❓ Perguntas Frequentes

P: Qual é a relação entre Dart e Flutter? R: Dart é a única linguagem de programação oficial do Flutter, que é um framework de UI construído com Dart. Aprender Dart é um pré-requisito para aprender Flutter.

P: O Dart pode substituir o JavaScript no desenvolvimento frontend? R: O Dart pode ser compilado para JavaScript via dart2js ou para WebAssembly via dart2wasm. No entanto, o ecossistema web ainda é dominado por JS. A força do Dart está no Flutter para a web.

P: O Null Safety do Dart 3 é obrigatório? R: Sim, o Dart 3 ativa o Sound Null Safety por padrão. Código legado precisa de migração, mas a migração gradual é suportada desde o Dart 2.12.

P: O Dart é adequado para desenvolvimento de backend? R: Sim. O Dart possui frameworks de backend como shelf e dart_frog, e seu modelo de concorrência Isolate pode lidar com cenários de alta concorrência. No entanto, seu ecossistema não é tão maduro quanto o de Go/Java.

P: É difícil aprender Dart se eu já tenho experiência com TypeScript? R: Não é difícil. Dart e TS têm sistemas de tipos semelhantes, mas o Sound Null Safety e o Isolate do Dart são conceitos novos que exigem aprendizado focado.

P: Como é o desempenho do Dart? R: Após a compilação AOT, o desempenho é próximo ao de Go/Java. O modo JIT suporta desenvolvimento com hot-reload. O suporte a Wasm GC melhora significativamente o desempenho na web.

P: Como é a qualidade dos pacotes no pub.dev? R: O pub.dev possui um sistema de pontuação de qualidade (pub points) que cobre suporte a plataformas, cobertura de documentação, etc. Pacotes populares como http e args são de alta qualidade, mas pacotes de nicho devem ser avaliados individualmente.


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Visite pub.dev, busque pelo pacote http, verifique sua pontuação pub points e registre a lista de plataformas suportadas.
  2. Intermediário (Dificuldade ⭐⭐): Compare o Dart com a linguagem de programação que você mais conhece (JS/Python/Java, etc.), liste 3 vantagens e 3 desvantagens do Dart e escreva uma breve tabela de comparação.
  3. Desafio (Dificuldade ⭐⭐⭐): Esboce um diagrama de divisão de módulos para o projeto DataPipeline, considerando quais componentes são necessários para as três etapas: entrada de dados, processamento e saída.

← Aula Anterior | Próxima Aula →

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%