Guia da linguagem dart
Guia da linguagem dart – Nesse guia da linguagem Dart você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação Dart.
O Dart é uma linguagem de programação fortemente tipada criada pela Google em 2011. A missão inicial do Dart era substituir o JavaScript para desenvolvimento de scripts em páginas web. Porém, com a evolução da linguagem e com o passar dos anos, ela hoje pode ser considerada uma linguagem multi-paradigma, embora a linguagem apresente fortes estruturas típicas de linguagens orientadas a objeto.
Hoje, sabemos que o Dart não obteve muito sucesso em sua missão inicial em substituir o JavaScript nos navegadores. Porém, o desenvolvimento e posterior sucesso do Flutter, que é fundamentado no Dart, fez com que a linguagem voltasse à tona, atraindo a atenção de muitos desenvolvedores.
Como instalar o Dart e executar seu primeiro exemplo
Agora que já sabemos o que é o Dart e suas principais características, estamos prontos para realizar a instalação e executar o nosso primeiro exemplo com a linguagem e para isso basta baixar o Dart SDK.
O Dart SDK possui as bibliotecas e ferramentas de linha de comando que você precisa, então acesse o Link para fazer o download do SDK.
Temos um artigo com as explicações de como instalar, em todos os sistemas operacionais, basta ler o artigo: “Como instalar o Dart e executar seu primeiro exemplo”.
Conhecendo variáveis e constantes
Toda linguagem de programação possui uma tipagem, que é basicamente um conjunto de regras que as define como estática, dinâmica e forte ou fraca.
O Dart é uma linguagem de tipagem estática e fortemente tipada, então ele tem tipos bem definidos que são validados durante a compilação e não realiza conversões automáticas de tipo.
Os tipos de dados no Dart são classes que herdam da classe Object
fazendo um açúcar sintático para definir seus tipos.
Um pequeno exemplo é o tipo int
ou double
, eles são classes que herdam de num
que por sua vez herda da classe Object
.
- int: O tipo inteiro é representado por toda e qualquer informação numérica que pertença ao conjunto de números inteiros relativos (números positivos, negativos ou o zero).
- double: O tipo double é representado por números decimais, ou seja, números que possuem partes fracionadas.
- String: String é uma cadeia de caracteres que representam textos.
- bool: Variáveis booleanas armazenam valores lógicos que podem ser verdadeiro ou falso.
A declaração de variáveis no Dart é um processo muito simples, você pode definir primeiro o tipo da variável, seguido do nome e seu valor:
String variavel = "valor_da_variavel"
Ou utilizar a palavra reservada “var” e utilizar a inferência de tipos:
var variavel = "valor_da_variavel"
const
e final
Também temos a const
e final
, que sob um ponto de vista prático são como variáveis, só que com o ponto de que seu valor não pode ser modificado. Isso quer dizer que, se você declara uma constante chamada MaioridadePenal com o valor 18, esse valor não poderá mudar
final variavel = "valor_da_variavel"
const variavel = "valor_da_variavel"
No exemplo a cima vai haver inferência de tipo, mas podemos declarar seus tipos dessa forma:
final String variavel = "valor_da_variavel"
const String variavel = "valor_da_variavel"
E caso você esteja com dúvidas de qual é a diferença entre o final
e const
, visto que ambas são palavras reservadas que deixam seu valor inalterável, é porque o final
é inicializado em tempo de execução, já o const
é em tempo de compilação e isso interfere na regra de negócio da sua aplicação.
No artigo Conhecendo variáveis e constantes no Dart, podemos nos aprofundar no uso de constantes e ver mais exemplos e explicações sobre o uso de variáveis.
Estrutura de dados no Dart
No Dart, podemos utilizar diversos tipos de estruturas de dados. Estas estruturas resolvem um tipo de problema e podem ser úteis em diversas situações. As principais estruturas são as List
, Map
e Set
.
Uma lista é a estrutura de dados mais básica do Dart. Sua estrutura permite armazenar dados em sequência, onde cada elemento possui sua posição de origem, sendo o primeiro elemento armazenado no índice zero e, a cada elemento novo, o índice é incrementado.
Podemos criar listas da seguinte forma:
final List myList = [1,2,3,3];
Para ver mais detalhes sobre listas, recomendo a leitura do artigo “Manipulando listas no Dart”
Os mapas são coleções de dados que se organizam em um formato chave-valor. Cada elemento inserido em um mapa no Dart possui uma chave a ele relacionado. Os mapas são estruturas muito úteis quando precisamos relacionar cada elemento com um identificador único.
final Map myMap = {'usuario':'admin','senha':123};
Para ver mais detalhes sobre mapas, recomendo a leitura do artigo “Manipulando mapas no Dart”
Os sets são uma coleção de itens desordenada, parcialmente imutável e que não podem conter elementos duplicados.
final Set mySet = {1, 2, 3, 4};
Note que o Set
, diferente do Map
, não possui chave valor e diferente de uma lista ele não ordena por indice e não tem valores repetidos, porque ele simplesmente ignora.
Estruturas condicionais e estruturas de repetição
Estruturas de condição são artifícios das linguagens de programação para determinar qual bloco de código terá execução a partir de uma determinada condição. No Dart, assim como em outras linguagens, podemos trabalhar com as estruturas de condição utilizando o if/else e o switch/case como veremos abaixo.
Abaixo temos um exemplo simples da utilização do if/else
. Nele verificamos se a pessoa é maior ou menor de idade, dependendo do valor que conter na variável idade.
void main() {
var idade = 18;
if (idade < 18) {
print("Você é menor de idade");
} else {
print("Você é maior de idade");
}
}
As estruturas de repetição, também conhecidas como loops (laços), tem seu uso para executar repetidamente uma instrução ou bloco de instrução enquanto determinada condição estiver sendo satisfeita. As principais estruturas de repetição são o for
e o while
.
Vejamos um exemplo abaixo utilizando o for
. No exemplo, estamos criando um intervalo de 1 a 10 e verificando os números dentro deste intervalo que são pares (resto da divisão deste número por 2 é igual a 0)
void main() {
for (int numero = 1; numero <= 10; numero++){
if (numero % 2 == 0) {
print(numero);
}
}
}
Orientação a Objetos
Dart é uma linguagem Orientado a objetos e traz boas vantagens como a reutilização de código, legibilidade e manutenibilidade do código, modularização e a produção de código mais acessível, já que as estruturas criadas geralmente representam aspectos também existentes no mundo real.
Quando lidamos com o paradigma orientado a objetos, acabamos criando diversas unidades de software através de estruturas chamadas classes. A partir destas classes, podemos criar estruturas chamadas objetos, estruturas estas que interagem entre si. Esse é o motivo pelo qual o paradigma se chama de orientação a objetos: todas as interações necessárias para que o software funcione ocorrem através de mensagens e ações que se trocam entre estes objetos.
Uma classe nada mais é que um “molde” para definição de outras estruturas. Um exemplo seria uma classe chamada Pessoa. Todas as pessoas possuem características em comum, como nome, idade, sexo, etc, por isso elas podem fazer parte de uma mesma classe.
class Pessoa {
final String nome;
final int idade;
final String sexo;
Pessoa({
required this.nome,
required this.idade,
required this.sexo,
});
void falar() {
print("Olá!");
}
void andar() {
print("Está andando...");
}
void comer() {
print("Eá comendo...");
}
}
Como o nome diz, na orientação a objetos temos os objetos. Os objetos são estruturas com criação a partir das classes. Por exemplo, os objetos criados a partir da classe Pessoa, podem usufruir dos mesmos atributos e métodos definidos pela Classe.
void main(){
Pessoa pessoa = Pessoa({
nome: 'Ariel Sardinha',
idade: 28,
sexo: 'M'
});
}
Também vimos que ela tem acesso aos métodos, que são comportamentos e ações que os objetos podem ter. Nesse nosso exemplo, poderíamos colocar que toda Pessoa
pode falar, andar, comer, etc.
void main(){
Pessoa pessoa = Pessoa({
nome: 'Ariel Sardinha',
idade: 28,
sexo: 'M'
});
pessoa.falar();
pessoa.andar();
pessoa.comer();
}
Como utilizar generics no Dart
Os generics são uma maneira de criar métodos, funções ou classes que funcionam com uma gama de tipos de dados em vez de apenas um.
Para exemplificarmos os generics vou utilizar a estrutura de dados List
.
Eu posso falar que a minha lista vai receber String
e int
ao mesmo tempo, mas imagine que eu queira ter uma lista que aceite somente String
, eu posso utilizar os generics para isso. Observe o exemplo:
final List<String> myList = ['Ariel','Carlos'];
Observe que no exemplo eu passei os caracteres de menor e maior para definir os generics da lista e podemos fazer a mesma coisa com o Map:
final Map<String, dynamic> myMap = {'usuario':'admin','senha':123};
O que é o gerenciador de pacotes?
Gerenciadores de pacotes são ferramentas que automatizam o processo de instalação, atualização e remoção de pacotes necessários para o pleno funcionamento de um software.
O pub.dev é o gerenciador de pacotes utilizado para a linguagem de programação Dart, contendo bibliotecas e pacotes reutilizáveis para Flutter, AngularDart e programas Dart gerais.
Usando bibliotecas Dart.
Para instalar uma biblioteca como, por exemplo, o Dio
para realizar requisições HTTP executamos:
dart pub add dio
Após execução do comando a biblioteca já terá sido baixado e já estará disponível no projeto. Caso queira desinstalar um pacote basta executar o seguinte comando:
dart pub remove dio
Conclusão
O Dart é uma linguagem bem poderosa e popular que possui um ecossistema bastante vasto, composto por diversas bibliotecas e frameworks para resolver os mais diferentes tipos de problemas como desenvolvimento web, desenvolvimento mobile, desenvolvimento desktop e várias outras possibilidades de uso dessa incrível linguagem.
Por fim, caso queira aprender mais sobre e sua infinidade de recursos saiba que aqui na temos cursos super completos que falam desde os fundamentos até as principais funcionalidades.
Leia também: “O que é AWS S3”