Um estudo sobre Dart, a linguagem do Google
Se você começou a estudar um pouco sobre o Flutter, provavelmente deve ter trabalhado um pouco com o Dart… Se você ainda não mexeu com Flutter, deve ter ouvido falar um pouco sobre o Dart, já que várias grandes empresas, como o Nubank, estão começando a migrar suas aplicações para esta linguagem. Porém, o que afinal de contas é o Dart?
O que vem a ser o Dart?
O Dart é uma linguagem de programação fortemente tipada inicialmente 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. Algumas características da linguagem são:
- A sintaxe é C-like, portanto, se você programa em Java, C#, PHP ou Javascript, você não terá dificuldades em aprender a linguagem;
- Segue o paradigma orientado a objetos;
- Todos os objetos herdam da classe Object;
- Fortemente tipada, mas não é necessário colocar um tipo, pois Dart consegue inferir os tipos;
- No Java e C# você usa a palavra reservada private, enquanto que no Dart basta colocar um underline (_) no início do nome de um atributo, método ou classe para torná-lo privado.
- Dart pode ser compilada em ahead-of-time (AOT) e just-in-time (JIT). Compilação ahead-of-time é quando o código é compilado diretamente para ARM nativo, o que possibilita a performance de uma aplicação nativa. Just-in-time compila o código diretamente no device, com a aplicação em execução, o que permite um retorno em tempo real da alteração e aumenta a velocidade do ciclo de desenvolvimento. Este ponto é chamado de hot-reload.
Variáveis
Variável de forma bem resumida, é um local que você pode armazenar temporariamente alguma informação. Os principais tipos de variáveis são:
Vamos ver algumas formas de usar essas variáveis
Operações
Os tipos int, double e num (pode ser inteiro ou ponto flutuante) fornecem diversos métodos e propriedades que podem ser utilizados para a transformação e checagem de dados. Eles também dispõem de capacidades para expressões utilizando os operadores + (adição), — (subtração), * (multiplicação), / (divisão) e % (resto da divisão).
Operadores relacionais
Os seguintes operadores podem ser usados para comparações no Dart. O resultado de cada expressão é sempre um bool, o que significa que é true ou false.
Condicionais
Geralmente quando estamos programando, sempre precisamos tomar decisões, para isso podemos utilizar condicionais. Vamos dar uma olhada nelas
Repetições
Quando precisamos realizar repetições, podemos utilizar os comandos FOR, WHILE, DO/WHILE ou FOREACH (uso junto com coleções).
A saída deste programa são os valores 0, 1, 2, 3, 4 para cada tipo de repetição executada.
Funções
Na maioria dos códigos existem trechos repetidos, para evitar isso criamos funções. Existem algumas formas para criarmos as funções, veja o código a seguir:
O uso do tipo de retorno nas funções utilizando Dart é opcional, você não precisa informar, mas recomendo colocar, pois isso facilita a leitura do código.
PROGRAMAÇÃO ORIENTADA A OBJETOS COM DART
A Programação Orientada a Objetos foi criada por Alan Kay, autor da linguagem Smalltalk. Antes mesmo da criação Orientada a Objetos, já existiam algumas aplicações, neste caso da linguagem Simula 67, criada por Ole Johan Dahl e Kristen Nygaard em 1967.
Segue um vídeo legal, para quem desconhece os termos ligados a Programação Orientada à Objetos (POO).
Classes, Atributos, Construtores e Objetos
- Objetos: Um objeto é uma implementação de Tipos Abstratos de Dados (TAD’s) que encapsula dados e operações. Todo objeto tem um estado, um comportamento e uma identidade.
- Classes: Classe é uma abstração que define um tipo de objeto e o que objetos desse determinado tipo tem dentro dela (atributos) e também que tipo de ação ele é capaz de executar (métodos).
- Atributos: São características que os objetos possuem. Ao definir um atributo sempre é passado nome e o que irá guardar, ou seja, qual tipo de dado que ele vai armazenar, exemplo: cor do olho, altura.
- Construtores: Método que inicializa o estado de um objeto.
Métodos
São ações que os objetos possuem. Geralmente todo objeto possui algum tipo de ação e essas ações são as funcionalidades de nosso objeto, exemplo: somar, dividir, subtrair.
Getters e Setters
Muitas das vezes nós não queremos que alguns atributos não sejam acessíveis por fora, por questões de segurança (segundo o paradigma orientado a objetos, nenhum atributo poderia ser acessado diretamente). Parar criar um atributo ou método privado, basta colocar um “_” à frente do atributo.
Assim, será possível acessar o atributo _nome, _peso e _altura através do get para ler o valor e através do set para modificar o valor.
Herança, Sobrescrita de métodos e Classes Abstratas
- Herança: A herança proporciona o reuso de software, quer dizer: novas classes são criadas a partir de outras já existentes, absorvendo atributos e comportamentos e adicionando os seus próprios;
- Polimorfismo (sobrescrita de método): Capacidade de reescrever um método da classe pai (utilizado juntamente com a herança);
- Métodos abstratos: Uma classe abstrata normalmente possui métodos abstratos. Esses métodos são implementados nas suas classes derivadas (filhas) concretas com o objetivo de definir o comportamento específico. O método abstrato define apenas a assinatura do método e, portanto, não contém código. Vale ressaltar, que uma classe abstrata não pode ter uma instancia.