Aprenda DART em 20 minutos para iniciantes
Seguindo o exemplo dos canais referenciados, decidi criar este tutorial para abordar conceitos básicos de Dart em 20 minutos! Quando iniciamos no mundo da programação somos que nem bebês, aprendemos com os outros, passo a passo e aos poucos vamos dando nossos primeiros passos. Simbora aprender assim?
Disclaimer: Saiba que dart é uma baita linguagem e possui diversas outras features que não conseguirei abordar aqui, como classes, objetos, herança, polimorfismo, futures, json, enum, null safety, imports, inputs, files, properties, streams, generics, closures, compile, build, etc, pois o objetivo é ser direto ao ponto com uma introdução básica a esta baita linguagem.
Para executar o código Dart existem 2 possibilidades:
- Você pode baixar o SDK para seu Desktop em Get the Dart SDK e seguir o tutorial deste vídeo Instalando o Dart SDK no Youtube.
- Se você não tem permissão para a instalação do dart, poderá utilizar o site online DartPad.
Dart é uma linguagem free e open source, criada pela Google, com programação de propósito geral, ou seja, ele é utilizado para diversas finalidades. Ela pega emprestado várias funcionalidades das linguagens mais famosas de mercado (python, java, c++, etc) e dart pode ser executado em qualquer plataforma como Web, CLI, Desktop, Mobile e IoT.
Todo o código dart começa pela função main:
void main() { }
Para testar se o uso do dart está ok mostre o famoso "Olá Mundo!" e pra isso você simplesmente faz o comando abaixo com o cuidado do ponto-e-vírgula:
void main() {
print("Olá Mundo!");
}
No dart não existe regra para identação, mas uma boa prática é identar o código com 2 espaços para cada nível e com isso trazendo legibilidade ao código e evitando erros pela falta de organização.
Os comentários são necessários para dizermos ao dart que não desejamos que a parte do nosso código comentado seja lido, passando pelo código sem executá-lo. É possível comentar dessa maneira:
void main() {
// Este é um comentário singleline
/*
Este é um comentário multiline e você
pode perceber que ele vai comentar até aqui.
*/
}
Para descrever textos (strings), você poderá utilizar:
void main() {
// aspas duplas
print("Olá Mundo!");
//ou aspas simples
print('Olá Mundo 2!');
}
Algo muito importante nas linguagens de programação são as variáveis. Variáveis são valores que podemos atribuir um nome e utilizar ela a qualquer momento em nosso código. Em dart declaramos o tipo, o nome e atribuimos um valor para a variável:
void main() {
String nome = "Victor"; // Texto
int idade = 89; // Inteiro
double altura = 3.4; // Ponto Flutuante
bool lindo = true; // Booleano
var euNaoSeiQuemSou; // Nulo
}
Para saber o tipo do valor que está na variável basta:
void main() {
var euNaoSeiQuemSou;
print(euNaoSeiQuemSou.runtimeType); // Null
}
Se eu quiser um valor default caso uma variável estiver como nula, é possível? Siiimm!!
void main() {
var desconto;
print(desconto ?? 5.5); // RESULTADO: 5.5
}
Podemos querer comportamentos diferentes para as variáveis, seja para proteger contra mudanças ou para variar elas, assim existem algumas formas de se trabalhar:
void main() {
// var permite ter um tipo atribuído pelo valor e não é possível a mudança do tipo depois.
var idade = 50;
var idade = "Aloha 50 anos!"; // RESULTADO: A value of type 'String' can't be assigned to a variable of type 'int'.
// const permite atribuir qualquer valor, porém não é possível alterá-lo depois.
const idade = 40;
const idade = 30; // RESULTADO: Error: Can't assign to the const variable 'idade'.
// dynamic permite ter um tipo atribuído pelo valor e é possível a mudança do tipo depois.
dynamic idade = 50;
dynamic idade = "Meus 50 anos";
}
Para exibir uma ou mais variaveis e textos no console, basta utilizar interpolação de string, referenciando a variável com $ (cifrão):
void main() {
String nome = "Victor"; // String
int idade = 89; // Inteiro
bool lindo = true; // Booleano
print("$nome de $idade anos é lindo? $lindo.");
// RESULTADO: Victor de 89 anos é lindo? true.
}
Como fazer as operações aritméticas? Usando os operadores + (adição), - (subtração), * (multiplicação), / (divisão):
void main() {
print(1+1); // RESULTADO: 2
print(5-1); // RESULTADO: 4
print(4*3); // RESULTADO: 12
print(3/1); // RESULTADO: 3
}
Se precisar incrementar ou decrementar o valor de alguma variável, é posssível? É sim!
void main() {
int counter = 1;
print(counter++); // RESULTADO: 1
print(++counter); // RESULTADO: 3
print(counter--); // RESULTADO 3
print(--counter); // RESULTADO 1
counter += 1;
print(counter); // RESULTADO 2
counter -= 1;
print(counter); // RESULTADO 1
}
Se eu precisar comparar ou relacionar valores? Simbora utilizar os operadores relacionais que são < (menor que), > (maior que), == (igualdade).
void main() {
int idade = 89;
print(10 < 30); // RESULTADO: true
print(10 <= idade); // RESULTADO: true
print(idade > 100); // RESULTADO: false
print(idade >= 90); // RESULTADO: false
print(idade == 89); // RESULTADO: true
print(idade != 5); // RESULTADO: true
}
E é possível realizar operações lógicas? Com certeza!
void main() {
// OR
print(true || false); // RESULTADO: true
// AND
print(true && true); // RESULTADO: true
// NOT
print(!true); // RESULTADO: false
}
Condicionais são controladores de fluxo, que direcionam o nosso código de acordo com as condições impostas. Para isso usamos if, elif e else:
void main() {
String lindo = "Victor";
if(lindo == true) {
print("Não é não ein!");
} else if(lindo == false) {
print("Não é pra tanto assim hehe");
} else {
print("To brincando, ele é lindão!");
}
// RESULTADO: To brincando, ele é lindão!
}
Para condicionais mais simples, como tomar uma ação se verdadeiro ou falso, use o operador ternário:
void main() {
bool lindo = false;
String info = lindo ? "Parabéns!" : "Pelo menos você é legal!";
print(info); // RESULTADO: Pelo menos você é legal!
}
Para condicionais para valores fixos, mais limitados, como tomar uma ação com base em uma linguagem escolhida, é possível utilizar o switch:
void main() {
String linguagem = "dart";
switch(linguagem) {
case "dart":
print("DART!!!");
break;
case "python":
print("PYTHON!!!!");
break;
case "java":
print("JAVA!");
break;
default:
print("Outra...");
}
// RESULTADO: DART!!!
}
É possível declarar uma variável contendo diversos valores como listas ou map!
void main() {
List<String> frutas = ["maçã", "pera", "banana"]; // Usando Listas
print(frutas); // RESULTADO: ["maçã", "pera", "banana"]
Map<String,double> frutas2 = {"banana": 50.05, "pera": 24.15}; // Usando map
print(frutas2); // RESULTADO: {banana: 50.05, pera: 24.15}
}
Para repetições para limites conhecidos, utilize o for:
void main() {
for(int i = 0; i < 4; i++){
print(i);
}
// RESULTADO: 0
// RESULTADO: 1
// RESULTADO: 2
// RESULTADO: 3
for(int i = 0; i < 4; i += 2){
print(i);
}
// RESULTADO: 0
// RESULTADO: 2
List<String> alunos = ["Felipe", "Guga", "Victor"]; // Lista
for(String aluno in alunos) {
print(aluno);
}
// RESULTADO: Felipe
// RESULTADO: Guga
// RESULTADO: Victor
}
Para repetições com limites desconhecidos, utilize o while:
void main() {
int j = 0;
while(j < 5){
print(j);
j++;
}
// RESULTADO: 0
// RESULTADO: 1
// RESULTADO: 2
// RESULTADO: 3
// RESULTADO: 4
}
Quando for necessário a execução a primeira vez mesmo que a condição inicial não seja válida, utilize o do while:
void main() {
int k = 0;
do {
print(k);
k++;
} while(k < 3);
// RESULTADO: 0
// RESULTADO: 1
// RESULTADO: 2
}
E se quiser reaproveitar e organizar o código de forma mais modular? Pode criar e usar funções! Funções são partes de código que podemos dar um nome e chamar em qualquer lugar do programa.
void main() {
// Chamada da função
mostrarNome("Felipe Deschamps"); // RESULTADO: Felipe Deschamps
String resultado = nomeCompleto("Victor", "Manhani");
mostrarNome(resultado); // RESULTADO: Victor Manhani
mostrarNome(nomes("TabNews ")); // RESULTADO: TabNews TabNews TabNews
// Chamada da função anônima
mostrarNome((() => "Só sucessinho!")()); // RESULTADO: Só sucessinho!
}
// Declaração da função sem retorno
void mostrarNome(nome) {
print(nome);
}
// Declaração da função com retorno
String nomeCompleto(String nome, String sobrenome) {
return nome + " " + sobrenome;
}
// Declaração da função resumida
String nomes(String nome) => nome * 3;
Tem um exemplo de um programa com alguns conceitos falados aqui? Tem sim!
void main() {
// Declaração e atribuição das variáveis
int nota1 = 10;
var nota2 = 4;
const nota3 = 6, nota4 = 6;
Map<String, Map<String, dynamic>> estudantes = {
"Felipe": {"nota1": nota1, "nota2": nota2},
"Max": {"nota1": nota3, "nota2": nota4}
};
for(MapEntry estudante in estudantes.entries) {
var media = (estudante.value['nota1'] + estudante.value['nota2']) / 2;
String aprovado = media > 6 ? "Sim 🤩" : "Não 😮";
print("${estudante.key} com média $media foi aprovado? $aprovado!");
}
/*
RESULTADO: Felipe com média 7 foi aprovado? Sim 🤩!
RESULTADO: Max com média 6 foi aprovado? Não 😮!
*/
}
No exemplo acima incrementei com alguns outros detalhes que não abordamos aqui, mas a ideia era apenas trazer um "start", uma inspiração ou referência para você explorar mais este maravilhoso mundo do dart!
Talvez eu tenha deixado passar algum comentário essencial para entender melhor determinada parte, mas tenha calma! Isso faz parte do aprendizado, pois nem sempre saberemos tudo e principalmente quando o assunto é ser iniciante em algo...
Mas, já parou para pensar que muitas coisas que vimos aqui já faziam parte da sua rotina na vida real? Pois é, o processo de aprendizagem é simples assim, você correlaciona conceitos com as coisas que você já viu na vida real e assim o aprendizado vai acontecendo!
Deixe comentários falando sobre o que achou deste tutorial básico e como ele poderia melhorar e ser mais "compartilhável" para aqueles nossos amigos e amigas que estão iniciando no mundo da programação!
E também vale um disclaimer que se você conhece outras linguagens, por exemplo Javascript, Rust ou qualquer outra, crie publicações como essa, será de muita valia sem dúvida!
Referências
- Dart Dev
- Learn X in Y minutes - Dart
- Tutorial: Aprenda Python em 10 Minutos para Iniciantes no TabNews
- 🚀 Guia Definitivo de Dart 2023: Domine a Linguagem do Flutter! | Zero ao Flutter GymApp #02 no Youtube
- #1 - Introdução ao Dart - Programação em Dart no Youtube - Playlist
- Curso de Dart - [00] Introdução - Playlist
- Learn Dart Basics in 30 Mins no Youtube
- Dart Programming Tutorial - Full Course - Partes do vídeo que está no Youtube
- 9 Dart concepts to know before you jump into Flutter // for super beginners in Flutter no Youtube
- Introdução ao Dart - Documentação Oficial Dart