Executando verificação de segurança...
3

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:

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

Carregando publicação patrocinada...
1

Meus parabéns pelo tópico abordado. Vai dar um norte legal pra quem esta iniciando na linguagem e ainda deixou vários links bacanas como referência.