Mestre o idioma de Dardos com segurança nulo - para iniciantes | Rahul Agarwal | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Mestre o idioma de Dardos com segurança nulo - para iniciantes

teacher avatar Rahul Agarwal, Flutter Developer & Trainer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação do curso

      0:41

    • 2.

      Vamos mergulhar em Dardo

      5:04

    • 3.

      Variáveis e tipo de dados

      7:02

    • 4.

      Interpolação de cordas e cordas

      6:06

    • 5.

      Palavras-chave final e contente

      6:01

    • 6.

      Declarações condicionais

      9:33

    • 7.

      Listas

      12:46

    • 8.

      Mapas

      11:48

    • 9.

      Declarações de looping

      14:31

    • 10.

      Quebra e continuar

      4:31

    • 11.

      Funções declaradas e sintaxe de mão curta

      18:37

    • 12.

      Tipos de parâmetros na função

      19:02

    • 13.

      Quais são os AULAS e Objetos

      16:14

    • 14.

      Tipo e herança

      13:41

    • 15.

      Como lidar com exceção usando tentativa captura

      6:48

    • 16.

      Variáveis estáticas

      10:52

    • 17.

      Operador ternário e segurança nulo

      19:24

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

121

Estudantes

--

Sobre este curso

Aprenda Dardo e se torne um especialista com este curso interativo. Dart é uma linguagem limpa, simples e orientada a objetos em base.

No entanto, você não pode ter uma conversa sobre Dart sem mencionar Flutter. O Flutter é o framework de IU móvel do Google usado para criar interfaces nativas de alta qualidade em iOS e Android. Aplicativos Flutter são escritos usando a linguagem de programação Dart, que ajudou a criar Dart uma linguagem amada pela comunidade de desenvolvedores. Antes de começar a limpar aplicativos usando Flutter, você precisa aprender Dart. Este curso vai ajudar você a aprender os fundamentos do Dart, e começar a sua jornada para aprender Flutter. Comece a aprender hoje.

O Curso foi atualizado após o lançamento do Flutter 2.0 que trouxe o conceito de segurança Null em dart.

Neste curso, você vai aprender:

  • Como trabalhar com DartPad

  • Como explorar o primeiro aplicativo Dart

  • Tipos de dados incorporados e declarações variáveis

  • Declarações condicionais

  • Loops ou Iteradores

  • Funções e métodos

  • Conceitos orientados por objetos

  • Herança

  • Construtores

  • Coleção de Darto: lista e mapa

  • Argumentos e seus tipos

  • Conceitos de segurança nulo

  • Resumo

Conheça seu professor

Teacher Profile Image

Rahul Agarwal

Flutter Developer & Trainer

Professor

Hello, I'm Rahul. I am skilled in building cross platform application using Flutter. I am freelance developer as well as conduct workshops to share my knowledge with the community.

Visualizar o perfil completo

Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Apresentação do curso: Olá, bem-vindo ao. Mas quando o corpo de enfermeiros para essa programação não verbal, primeiro devemos saber que os fundamentos da linguagem Dart sob demanda por desenvolvedores está aumentando dia a dia. E é por isso que devemos ter certeza que conhecemos todos os conceitos necessários. Antes de começar este curso, gostaria de me apresentar. Sou, sou um desenvolvedor como oficinas de condução bem o suficiente para a loucura pessoal medieval e permanecerá comunidade no Meetup. Lembre-se sempre, a programação é uma arte e somos sombrios. Só então prepare o código. E vamos começar. 2. Vamos mergulhar em Dart: Olá, bem-vindo à seção de programação escura. O desenvolvimento multiplataforma é um tópico muito quente hoje em dia, e temos poucas opções no mercado para criar aplicativos. Entre eles, a Flórida ganhou imensa popularidade em um curto período de tempo. Mas antes de saltar diretamente no Flutter, devemos conhecer os fundamentos dessa programação. Dart é desenvolvido pelo Google. E é como qualquer outra linguagem de programação, como script Java C com conceito básico, que discutiremos em breve. Portanto, sem perder mais tempo com o teórico, vamos começar a aprender passo a passo. A primeira coisa que temos que fazer é instalar o escuro. Morto fácil começar como a caverna que você pode instalar separadamente. Mas nesta sessão estaremos usando a cama de pontos on-line porque mais tarde, quando aprenderemos flutter e instalar todas as ferramentas inundadas, então elas serão instaladas automaticamente. Portanto, não precisamos fazer isso separadamente agora. E isso é apenas uma ferramenta online para desenvolver e escrever os códigos. Para isso. Você pode simplesmente ir ao seu navegador e digitar dot pad. E veja aqui está. Você escreve o código no lado esquerdo. E no lado direito, a saída estará lá. Se eu clicar no botão Executar, você pode ver este hello123 para, este é um tipo de loop for-loop que discutiremos mais tarde. Então, se dissermos, quais são os conceitos básicos da linguagem Dart? O básico é o ponto de entrada, que é a função principal. Aqui você pode ver esta função principal é o ponto de entrada do código, o que significa simplesmente se executarmos esse código, o que quer que esteja escrito dentro dessa função principal será executado no início. Se pontilhar nosso retorno aqui, ele não funcionará até e a menos que seja uma função, e nós o chamamos dentro da função principal. Então, para produzir qualquer coisa, usamos a declaração de impressão. Aqui você pode ver se eu removo isso e, assim como impressão, a flutter é incrível. E execute, então você pode ver que está imprimindo. Então, simplesmente, se você está vindo de qualquer PHP ou qualquer outra linguagem de programação, você sabe, a declaração de erros de impressão é muito comum na maioria das linguagens. E também strings, aspas limpas, mas números inteiros não. Que simplesmente no lugar. Se eu estiver escrevendo print 2021, então ele não precisa de aspas duplas ou aspas simples. Mas se for uma string que é alfabetos, definitivamente ela requer aspas. Agora, sabemos qual é o ponto, qual é a declaração impressa? E a próxima coisa que temos que entender é que os comentários em qualquer comentário da linguagem de programação estarão lá. É como entender o que está acontecendo nas funções. Os comentários são apenas para referência e não são executados. O que isso significa é, se eu escrever aqui, próxima declaração imprimirá string e depois executá-la. Você não verá essa declaração nesse console porque é um comentário. Agora, comentários que eu costumava usar. Para que, no futuro, quando você está olhando de volta para o código, é muito fácil para você entendê-lo e não ficar confuso mais tarde. Então isso é o básico, e acho que não. É muito agitado. Na próxima sessão, aprenderemos mais sobre quais nossas variáveis e quais são os tipos de dados. 3. Variáveis e DataType: Olá. Neste vídeo, aprenderemos sobre o que são variáveis e tipos de dados. Se você está vindo de um histórico de engenharia ou de qualquer grau de tipo BC, você pode ter ouvido esse termo olhar. É o básico de qualquer linguagem de programação. Então, o que basicamente é uma variável? As variáveis são usadas para armazenar informações a serem referenciadas e manipuladas posteriormente. Isso significa que se você tiver alguma média, suponha que flutter, então você acabou de armazená-la em uma variável. Como a linguagem. A linguagem é igual a flutter. E sempre que você quiser produzir essa flutter, basta usar esse idioma, palavra, palavra-chave, você pode dizer. Agora, o que são tipos de dados? Existem alguns tipos de dados incorporados. Isso é Números, Strings, Booleanos, lista e mapa. Liste nossos arrays em PHP, ele é chamado de arrays, e aqui é chamado de lista. O conceito é o mesmo. E também mapas. Mapas é apenas um par de valores chave, como dicionário na linguagem Python, matriz multidimensional em PHP. Portanto, não há nada de novo na linguagem Dart, leitura é exatamente a mesma. É só que você precisa atualizar sua memória aqui. Agora, a coisa é como declarar uma variável. Este é um padrão. Primeiro é o tipo de dados, segundo é o nome da variável e obtém um sinal de igual, que é igual ao valor. Agora, esta era tem um atraso de inteiro, a, 25 a 30, o que quer que seja. E essa idade tem isso. O tipo de dados da guerra que é, o que simplesmente implica que não sabemos o que ela vai conter. Pode ter um número inteiro, pode ter string. Mas aqui, se eu tentei escrever algo como a Flórida uma string, ela mostrará um erro porque o tipo de dados recebe um número inteiro. E lembre-se, flutter ou dark é uma linguagem tipada estaticamente. Isso significa que na maioria das vezes você especificará 51, uma variável de tipo ou a função será mantida. Isso é o principal. Você só, você não, você simplesmente nunca se esquece disso. Se tivermos um tipo de dados de login, a variável deverá conter esse valor. Agora, todos e cada tipo de dados discutiremos passo a passo, um a um. Mas no próximo vídeo, vamos praticar nos números mais recentes, que serão inteiros e duplos. E essa string, eu tenho esse exemplo básico. Aqui. Estamos usando o exemplo do filme Vingadores. Se você não assistiu ao filme, está tudo bem. Mas acho que a maioria de nós são fãs da Marvel. No entanto. Você pode ter ouvido falar sobre esse nome, Homem de Ferro, e vamos trazer nossa escuridão e remover o que estiver na função principal e começar desde o início. Na última sessão, ouvimos falar dos comentários que usaremos agora. Aqui, é como declarar variáveis. Então agora é hora de declarar nossa primeira variável. A primeira coisa que temos que escrever, digitar, será int. Em seguida, o nome da variável. Ele será marcado, o que será igual a 3000. Então, simplesmente, concluímos nossa tarefa de declarar uma variável. Agora, suponha que este seja um número inteiro, mas o que acontece se houver um valor decimal? Suponha a Turquia 0,5 ou o que quer que seja. Se você tiver um valor Pi e não nesse caso, o tipo de dados será o dobro. porcentagem dupla é igual a 92,5. Você acabou de dizer que pode adicionar o que quiser. Então, se você quiser ter alguma corda, ela permitirá que o herói de cordas seja igual a Ironman. Se você tiver algum outro herói próprio, você pode simplesmente anotá-lo. Sem problema. E quando vamos nos espalhar? Ok, declaramos com sucesso nossas quatro variáveis aqui. Agora é hora de imprimi-los. Portanto, lembre-se de imprimir, aprendemos que temos que usar a declaração de impressão. E essa declaração de impressão só imprimirá o valor nesse console. Portanto, quando você estiver criando um terceiro aplicativo real, se você usar essa impressão, não espere que o CUI ou a tela do aplicativo móvel produzam valor de pomba. Somente o valor está disponível para a depuração é o uso do desenvolvedor. Então, se você quiser, você apenas imprime a pontuação. Em seguida, você pode imprimir a porcentagem. Então, é herói. E, em seguida, imprime a roda e você corre, você executa o programa. E espero que sim, tenhamos a saída. É como 3000. É a porcentagem de número inteiro é 92,5, herói Ironman e depois 10 nós. Então, acho que está claro para você o conceito de variáveis e seus tipos. E entendemos com sucesso números e tipos de string. No próximo vídeo, discutiremos mais sobre cordas, o que nos ajudará a entender esse conceito profundamente. 4. Interpolação de cadeia e cadeia String: Nesta sessão, saberemos mais sobre strings. Anteriormente, usamos um tipo de dados de string, mas neste vídeo conheceremos as definições e os conceitos. Então, o que é string? Strings são apenas coleções de caracteres ou você pode dizer alfabetos. Podemos declarar uma string com aspas simples e duplas. É como se o nome String fosse uma chamada para Flutter. Aqui estamos usando aspas simples. Aqui. Você também pode usar aspas duplas. Mas o problema surge quando há algo como é fácil ou algo que tenha dentro do código. Então você pode dizer, se eu tiver esse nome de guerra é igual a 11. Agora, ele mostrará isso porque você tem aspas simples dentro de aspas simples. Para resolver esse problema, você precisa usar barra invertida r, certo? Aspas simples dentro de aspas duplas para evitar qualquer adição. Aqui, barra invertida aqui, você precisa simplesmente usar isso e o erro desaparecerá. Se eu executar o programa agora, você pode ver que a saída estará lá. E se você quiser, você pode simplesmente usar remover a barra invertida e usar aspas duplas no exterior. Então também seu programa funcionará sem problemas. Portanto, essa situação pode acontecer enquanto você está construindo um aplicativo que você tem algo como se fosse ousado ou algo assim. Só temos que lembrar que você não pode usar simples dentro de aspas simples ou aspas duplas dentro de aspas duplas. Então, sabemos como declarar uma string. Agora, o que é a interpolação de cordas? Isso também é muito simples. É como uma combinação de variáveis e strings. Normalmente, em qualquer outra linguagem de programação, podemos combinar variáveis e strings como esta. É por isso que o nome é chamado de chegada. Imprimir, meu nome é e em seguida, símbolo mais e o nome da variável. Isso também é correto e escuro, mas não recomendado. Isso prefere escrever variáveis dentro das aspas duplas usando dólar antes que o nome da variável mostre a você. Fazendo isso. Suponha que a variável seja Hero. Tenho que escrever. Meu herói é. E depois Ironman. Para isso, eu tenho que usar esse cifrão e, em seguida, esse nome de variável. E se eu executar o programa, veja, meu herói é Ironman. É interpolação de cordas. Anteriormente, apenas imprimiríamos variáveis. Mas, definitivamente, nos aplicativos do mundo real, você precisa usar algo como convidados de boas-vindas. Os hóspedes serão variáveis. E, se o usuário fizer login, nome do convidado mudará para o nome de usuário do usuário. É por isso que a interpolação de string é um tópico muito crucial. Agora, dentro desses poetas, ou seja, podemos produzir usando esse símbolo de dólar. Mas e se, se houver algum tipo de funções, como adição ou obtenção de terra? Nesse caso, você tem que usar Donner e esses aparelhos encaracolados. Você pode ver o exemplo aqui. E também faremos isso por conta própria. Só estou removendo tudo isso apenas pela simplicidade. Como int length é igual a 20 e, em seguida, bert é igual a 10. Agora, se eu quiser fazer algum tipo de cálculo com nossas variáveis, então eu tenho que escrever um pouco é dólar, então esses parênteses e dentro dessa terra. Tudo bem? Sim. Agora, se eu correr, ele simplesmente somará 30 C. Mas você não pode fazer assim. E isso. Se você tentar fazer usando apenas o cifrão, ele simplesmente o imprimirá. A soma é 20 mais 30, mas não faz essa parte de cálculo. Então você precisa se lembrar disso ao criar um aplicativo porque haverá muitas vezes em que você terá que fazer algum tipo de funções. Talvez seja necessário obter o comprimento da matriz. Nesse caso, esse aparelho de dólar e encaracolado é usado. Se você quiser, você pode tentar mais alguns exemplos criando como uma área japonesa. Há parâmetro, há muitos cálculos matemáticos, se você quiser, você pode apenas praticar sozinho. É isso. Esse conceito está feito. Este é o conceito muito básico de string. Nos próximos vídeos, também aprenderemos algumas novas palavras-chave. 5. Palavras-chave definitivo e &: Hoje vamos aprender sobre o que nossas constantes nesse idioma. Então, quando ouvimos a palavra constantes, a primeira coisa que veio à nossa mente é que o valor não será alterado. Que o valor não pode ser alterado. É um valor constante. Então não fizemos as constantes, existem duas palavras-chave. O primeiro é finito e o segundo é tão constante. Agora vamos começar com essa definição de palavra-chave const é muito simples. Const é usado se o valor for conhecido no momento da compilação. Nós apenas esquecemos esse termo de termos em palavras simples. Enquanto o desenvolvimento do aplicativo, nós codificamos o valor rígido, ou seja, as marcas int constantes são iguais a 90 marcas. Vamos tentar o nosso. Haverá marcas const int é igual a 90. E se você imprimir, você pode sprint marcas. E removerei os dados acima da declaração de impressão. Agora você pode dizer que são 90, são latas. Ou seja, se tentarmos alterar o valor mais tarde, como 58 é Marx igual a 50. Obter será um erro. A chance de valores não pode ser atribuída. Ou seja, se o valor for fixo, não podemos alterá-lo mais tarde no programa. Este é o uso da palavra-chave const. Agora você pode estar pensando, ok, Const a, eu entendo, mas qual é essa palavra-chave final? É um pouco complicado. Suponha que não saibamos esse valor ao escrever código, mas o valor será calculado. Nossa busca do banco de dados em Runtime. Tempo de execução significa se o aplicativo é operando. E depois disso, após o valor ter sido calculado, não queremos que o valor seja alterado após ser buscado. Então, é como algum banco de dados. Haverá a idade do usuário. Será final, cada palavra-chave. Mas uma vez buscado do banco de dados, depois disso, o usuário não pode alterar esse valor. Então aqui você não pode tentar escrevê-lo diretamente. Se você acabou de escrever o nome final da string é igual a flutter. Então também funcionará. Normalmente. Não mostrará nenhum erro aqui porque no final é uma constante. Mas você entenderá mais desse conceito mais tarde enquanto constrói uma aplicação no nível da área. Mas aqui no exemplo, você pode apenas ver o valor de pi, ou seja, 3,14 é uma constante. Nisso, usaremos a palavra-chave const. Mas enquanto os dados estiverem disponíveis, e se os atribuirmos à data, ponto de hora agora, isso será final porque suponha que o aplicativo seja anexado às 10 horas. Naquele momento, essa data será das dez horas. Ele será buscado uma vez e depois. Essa data não será alterada, mas esse valor de data não foi escrito. Frota. Então, nesse código, podemos fazê-lo com um exemplo muito básico. Pode apenas dizer, escrever int x é igual a 1, y é igual a 2. Final a é igual a x. Então, para int a. E aqui vou deixar const b ser igual a y. Imprimir B. Vamos ver. Ele mostrará um somador porque não podemos simplesmente escrever algo, o que não é apenas eles estão aqui, se estivermos usando um const aqui, o valor tem que ser retornado como cinco. Mas no final acima, a é igual a x. Não está mostrando nenhum erro. Como o final é como se executássemos o aplicativo e o valor ficar dentro dessa variável final, está tudo bem para isso. Depois disso, não posso alterá-lo. Como é igual a 26. Isso eu não posso fazer porque é um tipo de constante. Então você entenderá, você pode entender esse conceito aqui de uma maneira muito básica. Se for uma palavra-chave const, então temos que escrever o valor. E se for uma palavra-chave final, variável de concurso pode conter algo que será atribuído posteriormente. É isso. 6. Declarações condicionais: Nesta sessão, saberemos sobre declarações condicionais. Declarações condicionais estarão lá em qualquer linguagem de programação, PHP, Python, Java, C, C plus servem para qualquer coisa. O conceito de declaração condicional sempre estará lá. Então, o que são declarações condicionais? É como se houvesse uma condição. Se isso for verdade, faça outra coisa. Não faça nada. A primeira instrução condicional é se mais puder ver aqui, ofensa, se essa condição for verdadeira, então execute o código, RS, execute outro código. É muito simples. E o segundo é se, caso contrário, se isso significa que se você tiver várias condições, suponha que se a idade for maior que 18, então eles podem dirigir. Se então, caso contrário, se, caso contrário, se a idade for maior que 21, então eles podem ir a clubes e todos. E simplesmente, no final, senão você poderia apenas escrever Ps mencionou sua idade. É basicamente algum tipo de condições em sua aplicação. E confie em mim, quando você estiver construindo qualquer aplicativo do mundo real, haverá muitas condições. Se você vir o Facebook, você pode ver se o usuário fez login. Em seguida, mostre a página inicial, mostre o diálogo em violação. Esse é um exemplo muito bom, eu direi. Agora, existem alguns operadores também, que usamos frequentemente com declarações if else, que é o fim são nossos. Duas condições podem ser usadas, podem ser unidas usando e R. E ambas têm seu próprio significado. E significa operador. Ambos. As condições especificadas devem ser verdadeiras. Ou seja, se a idade for maior que 18 e a pessoa é de Diga-lhe. Nesse caso, existem duas condições que ambas devem ser satisfeitas para executar esse código. E quando se trata do operador, é como se essa pessoa for maior que 18, de Delhi, se qualquer uma delas for verdadeira, então podemos o sistema executar o código. Você pode apenas esboçar as informações básicas dela porque agora, vamos começar com um exemplo. Vamos fazer isso. Mais uma vez. Estou aqui usando esse cenário de ferimentos para que seja fácil de entender. Vamos remover os códigos anteriores e vamos iniciá-lo. Aqui primeiro. Vou usar comentários ao escrever variáveis declarando abaixo. Agora, usamos essa palavra-chave const anteriormente. Aqui vou escrever const int stones é igual a 6. Para seu uso, posso apenas escrever comentários como usar const para que o número de pedras não possa ser alterado. Simples. Fluxo denso, corda. Herói é igual ao Homem de Ferro. E a corda que aprendemos é igual a nos bronzear. Para baixo. Esse novo tipo de dados aqui será booleano. Booleano é o que você pode dizer, verdadeiro ou falso. Booleano não é nada além disso para valorizar, ou será verdadeiro ou falso. Então, temos esse herói booleano, quando é igual a verdadeiro? E novamente, booleano. Aprendemos quando é igual a falso. Então, declaramos com sucesso todas as variáveis necessárias, as cinco variáveis aqui. Agora usaremos declarações condicionais. Se nossa primeira condição for se as pedras forem inferiores a seis, imprima. Você não coletou pedras infinitas. Uma condição, em vez disso, segunda condição, se r for igual a 6, isso significa que as pedras são seis. E então, quando é igual a 2. Isso significa que o vilão ganha aqui neste caso, vamos imprimir usando interpolação de cordas. Aprendemos que tem novamente interpolação de cordas, seis pedras infinitas. Agora escrevemos duas condições aqui. Esse terceiro podemos dizer porque se mais você puder ter várias condições, não há limite. Novamente, se as pedras forem iguais a seis e a heroína for igual a verdadeira. Nesse caso, você simplesmente pisca. Herói atinge o Homem de Ferro como seis, que são as pedras, pedras infinitas. E, finalmente, na declaração else, você pode escrever herói. E não nos importamos com pedras. Simples. Agora, com sua mente, pense, o que será produzido aqui pedras é 0, 6 e 0 quando é verdade? Então, o primeiro será falso, o segundo será falso, o terceiro. Portanto, a saída será adicionada. O homem tem nossas últimas seis pedras infinitas. Mas se eu simplesmente tornar isso falso também, então ele vai durar. Else será executado porque nem uma das condições é satisfeita. E eu sou isso, só estou lembrando de novo. Como os tons são constantes, você não pode alterar o valor das pedras. Aqui. Assim. Ele mostrará um somador. Então, espero que você tenha entendido claramente quais nossas declarações condicionais e se outra coisa é muito autoexplicativa. Porque se uma condição for verdadeira, imprima-a. Imprima a outra coisa. Então é isso para todos hoje. Vejo você no próximo vídeo. 7. Listas: Até agora, discutimos alguns dos tipos de dados, como strings, duplas, booleanos também. Mas agora é hora de discutir a lista. Este é um tópico muito importante porque, ao criar um aplicativo, usaremos o tipo distinto na maior parte do tempo. Agora, o que é uma lista? Uma lista é simplesmente um grupo ordenado de qualquer tipo de dados. É comumente conhecido como ADH está em outras linguagens, se você está vindo do PHP ou qualquer outra linguagem de programação que você possa ter ouvido falar sobre matrizes. Então, simplesmente significa mais cedo quando estávamos declarando qualquer variável, era um link inteiro, um valor. Ou seja, suponha que esse Wilson estava segurando apenas tênis. Mas e se quiséssemos uma variável que conterá várias informações do usuário? Suponha o nome, o número de contato, a idade, tudo de uma forma, mas nesse caso, estaremos usando a lista. É muito conveniente armazenar e acessar os dados dessa maneira. Agora, cada elemento na lista é definido por um número exclusivo chamado esse índice. É muito simples. Suponha que se você quiser acessar dados da variável, você só precisa se lembrar em qual índice ele está. Obviamente, para acessar qualquer coisa, devemos ter algum ID. Aqui. Id, o ID é o índice e começa a partir de 0. Vamos começar a programar. Eu acho que TOD você entendeu, eu removerei a coisa anterior. Para declarar uma lista. Temos que mencionar esse tipo de dados Na primeira lista. Então, simplesmente vou escrever marcas e os colchetes. Por isso, declaramos alistar com sucesso. E você pode apenas ver no número inteiro ímpar booleano acima também. Mas desta vez é uma nova lista de tipos de dados. E quando eu estava dizendo sobre as posições do índice, o que eu quero dizer era, suponha que na lista de marcas, existam vários valores como este. Certo? Existem quatro valores nessa variável. E agora este 90 está na posição 0, está em uma posição, sessenta nessas duas, e 30 está na árvore. Então esse é o índice. Simplesmente você pode apenas dizer suponha se eu quiser acessar este 90, eu simplesmente tenho que escrever marcas de impressão e essa posição de índice 0. Agora vamos executar o programa. Veja 90. Você tem esse valor. Agora suponha que se você quiser arrumado, qual índice você tem que escrever? Serão três. Então, sim, então é 30 impresso. Agora, essa coisa é, suponha que tenhamos uma lista vazia de idade, OK e V1 para atribuir um valor a uma nova maneira. Ou seja, pode ser, está vazio. Mas, mais tarde, queremos atribuir. Nesse caso, você não pode simplesmente escrever diretamente idade na posição 0, dar até o momento. Isso mostrará um somador quando estivermos imprimindo a lista etária. Vamos ver, experimentar. Consulte não capturado, adicione um erro de intervalo, o que significa que essa não é a maneira correta de atribuir seu valor. Mas se você quiser alterar o valor das coisas que já foi atribuído, isso é as marcas do Enda. Nessa posição 0, você quer escrever 10. E depois imprima marcas. Lista. Vamos ver o que acontece. Veja, 90 mudou para dez, que simplesmente implica que você pode alterar o valor já existente com esse método, mas você não pode atribuir. Agora, você pode me perguntar como atribuiremos um valor porque Marx já está pré-escrito. Mas quando estamos construindo um aplicativo, todos esses dados estarão em tempo real. Nesse caso, eu só tenho que escrever H dot e depois adicionar. Esta é uma função. Esta é a, você pode dizer operações que uma lista excede a idade, ponto adicionar 25 e, em seguida, imprimirei Idade. Veja, 25 estão lá. E agora não está mostrando nenhum erro porque essa é a maneira correta de adicionar um valor dentro da lista. Novamente, se eu escrever H dot, adicionar 13 e imprimi-lo, então será 25 e arrumado C. Então, é um conceito muito fácil e muito importante porque a lista é a única maneira quando estamos buscando muito, suponha que em um aplicativo como o Facebook, haverá muitos usuários. Portanto, todos permitem que os usuários possam ser armazenados em uma lista. Se você vir este slide, escrevi que o índice começa a partir de 0 e se estende até n menos 1, onde n é o número total de elementos na lista. O que quero dizer com isso é o índice aqui. Começa a partir de 0 e termina em três, que é o número total de elementos na lista menos 1, ou seja, 1, 2, 3, 4, 4 menos 1, 3. Como começa com 0, esse final será sempre o número total de elementos menos um. É um conceito muito importante de qualquer linguagem de programação. Agora, fizemos essa parte onde não podemos atribuir valor a uma lista vazia. Também fizemos dispersão também. Já estamos atribuídos que o valor pode ser alterado assim. Agora, existem poucas operações que podem ser feitas em qualquer lista. Essa porção de adição está concluída. Agora, se você quiser remover qualquer elemento, então é muito fácil. É como lista, nome, que é Marx dot remove. E quais dados você deseja remover. Quero remover o suposto 25. E então vou imprimi-lo. Ele deve desencadear, exibido 30. Acho que cometi um pequeno erro. É como quando estamos removendo, talvez tenhamos que usar remove em para atribuirmos o índice. Suponha que aqui eu queira remover 0. Certo? Ok, é nos fazer remover das marcas e a divisão da idade de impressão mostrará que elas foram removidas. Vamos fazer isso de novo. Em Marx fui remover 90 e depois imprimi marcas aqui. Vamos conferir essas saídas. C, 90 é um. Assim, dessa forma, podemos remover o elemento se soubermos o valor do elemento. Mas suponha que não saibamos esse valor e apenas conhecemos o índice que é marcas, pontuar, remover, adicionar. E aqui darei índice como suponha um e comentei antes de remover a linha. Agora, os 80 serão removidos. Veja 10, 60, 30, mas um t não está lá. Então remova e remova em nossas duas operações, que são muito importantes. Porque definitivamente, quando inserimos qualquer valor, se o usuário quiser excluí-lo, ele deve ter esse recurso. É esse recurso que você pode ver. Agora, a última coisa é o comprimento da lista. Ou seja, se quisermos ter o comprimento, acabamos de ver, certo? Comprimento do ponto das marcas de impressão. E vou parar de remover elementos. E agora digamos que acho que mostrará o que eu estava discutindo anteriormente, ou seja, esse é o valor n e o elemento final sempre é o comprimento menos um. E se você quiser imprimir algo assim com concatenação, você pode fazer assim. O comprimento da lista é então dólar. E lembre-se da última sessão, se quisermos fazer qualquer operação, então temos que fazer dólar e depois chaves. E então marca o comprimento do ponto. Vou executá-lo novamente e ver o comprimento da lista é quatro. Então eu só quero dar uma recapitulação de concatenação porque não quero que você esqueça os conceitos anteriores também. Então, tudo bem, isso é tudo para este vídeo. encontraremos novamente no próximo vídeo. Obrigado. 8. Mapas: Então, agora é hora de aprender sobre o próximo tipo de dados, que é Tom map. O mapa também é um tipo de dados muito importante. Quando estamos construindo um aplicativo de inundação. Principalmente você usará a lista. Nosso mapa é, você usará o mapa dentro da lista. Neste momento, se você está ficando confuso, não há problema. Nos vídeos posteriores, você entenderá o que eu queria dizer. Então, o que é um mapa? Um mapa é um par de valores de chave simples, o que significa que, mais cedo, quando era uma lista, você pode ver que era o valor deles. Mas ele não tem nenhum nome. Você pode apenas dizer que tinha aquele índice neles a partir do qual podemos chamá-los, mas não tinha um nome. Então, quando esses dados são muito longos ou quando os dados são muitos dados, é muito difícil lembrar o índice do valor. Nesse caso, os mapas são muito úteis. Então, vamos ver o que isso significa. Essa chave será do tipo string, mas os valores em um mapa podem ser de qualquer tipo que seja chave será suposto nome. Então o valor pode ser string, ou seja, Rahul flutter ou o que for. Mas também o nome da chave de ponto pode ter 22 ou 23 quaisquer valores numéricos. Portanto, não é obrigatório usar apenas string como seu valor. Para declarar este mapa, podemos usar o mapa construído que é este. É, você precisa colocar os pares de valores chave com um eco lubrifica como este. Vamos começar criando nosso primeiro mapa. Novamente, removerei esses dados e começarei com uma fenda limpa. Agora, quando você está usando um construtor Mac, você pode apenas escrever var fruits é igual ao mapa. E depois disso, seus frutos. Você pode escrever apple como essa chave. Lembre-se de que a chave e seu valor serão vermelhos. Agora, se eu imprimir a variável de frutas e aqui var, ou também você pode usar o mapa como um tipo de dados. Não haverá nenhum erro. Vê, isso? Maçã e vermelho. A Apple é essa chave, e vermelho é o valor. Então, na maioria das vezes, não precisamos desse E, precisamos desse valor de vermelho para imprimir isso. Você simplesmente precisa escrever o membro variável Map e, em seguida, dot py, que é a Apple. Agora execute seu programa. E na saída você verá o Mar Vermelho. É assim que fazemos isso. É assim que o mapa está sendo usado. Agora, novamente, se você quiser adicionar outro valor de banana com um valor de amarelo. E, novamente, primeiro, imprima o mapa inteiro para que você possa ver como ele está sendo exibido. É como se a primeira chave fosse a Apple, então o valor é vermelho e vírgulas segunda chave é banana e o valor é amarelo. Agora você pode me perguntar, vamos imprimir o valor amarelo. Nesse caso, primeiro, tenho que escrever o nome do mapa. Então essa chave, que não é um exemplo mais válido, você pode dizer, será mapa de alguns usuários e que faremos usando o mapa literalmente antes, isso é feito usando o construtor de mapas. Agora, declararemos um mapa usando chaves curly diretamente, o que significa. Tenho um mapa do usuário. Então aqui, a primeira chave será chamada Bill Gates. Segundo, você pode dizer idade. Não conheço essa idade exata, mas suponho exemplo 88 e cansado, Onde será fundador? E será novamente uma string, Microsoft. Então aqui você pode ver que é assim que declaramos um mapa. Este também é um tipo de tipo atrasado que manterá vários valores, como exatamente como lista. Então, agora, se eu quiser, vou apenas escrever o usuário de impressão e então vou apenas comentar as linhas acima. Veja nomeado fundador de Bill Gates, Microsoft. Também. Da mesma forma, se você quiser, como impressão. E mostraremos como imprimir um novo, não novo. É como por falta de tempo para um fundador do que para a evidência da Microsoft, certo? Abaixo é. Agora, novamente, relaciono o usuário e, em seguida, o nome. Aqui estou usando concatenação. E você aprenderá a buscar o valor dos dados de um mapa. Acho que há alguns adicionados. Mais uma vez, deve terminar com isso. Sim, eu sei o que fiz. Aqui. É um erro muito básico. Nada muito. Na programação, você está acostumado a esse tipo de erros bobos. Agora, você obtém o financiador de saída da Microsoft é baguetes. Então esta é a onda, como você produzirá esses dados em seu aplicativo real. É muito importante aprender. E também você também pode imprimir o comprimento do mapa, como fizemos antes na lista, será três. Ou seja, existem três valores. Veja três valores. Outras operações incluem supor ponto do usuário. Você verá se acabo de escrever chaves de impressão do usuário. Ele mostrará que toda a chave é que é nome, idade, fundador. Então, se você esqueceu também, então você pode apenas verificar. E suponha que a partir dessas chaves, você se pergunte valores. Ou seja, você não se lembra de nenhuma das chaves, mas deseja buscar todos os valores, então você precisa usar uma função ou operação como ponto do usuário. Para cada dívida, ela passará pelo mapa com esse valor chave. E você pode simplesmente escrever impressão. Se você quiser valor, você pode simplesmente imprimir esse valor. E vamos novamente elogiar o Ting acima e imprimi-lo e executá-lo. E agora você verá Bill Gates AT e Microsoft. É assim que você olha pelo mapa. E você não precisa aguentar tanto estresse. Nas próximas sessões. Estaremos falando profundamente sobre loops. Mas agora, nossa preocupação era o mapa. E aprendemos muito, a operação final, o que é importante, obviamente há muita operação que você pode ver, veja. Mas a final se você puder dizer que é como remover. Se você quiser remover uma chave, basta escrever remove, então essa chave, o nome da chave será nomeado. E depois disso, se você beber, então você não verá Bill Gates aqui. Veja Bill Gates foi removido do mapa. Então é isso. Esses são os conceitos básicos. Espero que você tenha entendido a coisa básica porque para dominar menos nosso mapa, você tem que praticá-lo enquanto constrói um aplicativo do mundo real. Obrigado. 9. Demonstrações de looping: Nesta sessão, falaremos sobre loops e o que estão em loop. Então, se você está vindo de qualquer outra linguagem de programação, acho que você pode ter ouvido isso para, laço FOR ou para um loop do-while. E porque na engenharia ou em qualquer programação básica, esse conceito estará lá. Portanto, os loops são usados para produzir vários números de vezes. Os dados podem ser. Se tivermos que escrever, suponha que nosso nome 100 vezes, não vamos apenas imprimir, imprimir, desordenar impressão na Flórida quando mais lisonjeiro. Vai demorar muito tempo. Nesse caso, vamos, podemos usar loops. E no final, definitivamente vou te dizer ao construir um aplicativo do mundo real onde loops estão sendo usados. Então, sai de quatro tipos, 44 em y a y. Vamos começar a entendê-lo um por um. Então, o que é um loop for? O loop distante executa um bloco de código por um número específico de tempo, que mencionamos nesse loop. Então, a sintaxe é assim. Usamos para então colchetes. Há parênteses. Dentro disso, haverá três dados. Primeiro será a condição de inicialização e o que deve ser feito. Você pode ficar confuso agora. Vamos fazer isso praticamente. Vou remover tudo isso. Vamos começar. Loops. Primeiro será for loop. Então, suponha que eu tenha essa sintaxe de loop for. Primeiro é a inicialização, ou seja, a variável int I é igual a 0. Então a condição eu menos de três. E então o que deve ser feito a seguir? Depois que este código de bloco será executado. Como se eu escrevesse impressão. Então, se eu clicar em Executar, é assim que isso será feito. Agora eu é igual a 0. Ou seja, serei 0. Em seguida, ele verificará a condição. Se eu o valor for menor que três. Se for verdade, ele entrará em conjunto e executará esse bloco de código. Após a execução deste bloco de código, ele seguirá para esta etapa, ou seja, eu mais, o que implica que vou me tornar de 0 para um. Vamos executá-lo. Veja 012. Ele não vai em frente. Isso é depois de 23 porque existe essa condição. Então isso é uma coisa muito básica. Mas na maioria das vezes usaremos loops enquanto lidamos com listas são mapeadas. Então vou escrever lista. Marx é igual a novamente 50, 30, 20, 10. Então vou escrever para int I é igual a 0. Serei menor que o comprimento dessa lista, que será quatro. E eu mais, mais. E agora, se phi um para imprimir, então vou escrever o nome da lista e o índice, que começará a partir de 0 porque mencionamos aqui. Então, se você quiser, você pode simplesmente pausar e entendê-lo novamente, porque int I é 0, ele verificará se eu é menor que o comprimento, que é quatro. Se sim, ele imprimirá esse valor na lista desse índice. Primeiro será 0, ou seja, 50. Depois disso, ele fará esse passo, eu mais um. E, novamente, a mesma coisa acontecerá. Vamos ver a saída. Você pode ver a saída 1532, de fato 10. Então, o loop é muito poderoso. E ao criar um aplicativo do mundo real, você usará loops o tempo todo. Porque os dados que virão do banco de dados estarão na forma de uma matriz. Lista. Então você entendeu isso para loop. Agora feito Next loop é para NLU. Então você pode estar pensando por que isso para NLU, o loop for-in é usado para percorrer e listar um mapa. Está sendo principalmente, ele está sendo usado na maioria das vezes só porque esse loop através da lista de dados é tão comum. Portanto, há esse tipo específico de loop em que não precisamos mencionar como essa inicialização, esse painel de guias, porque é uma perda de tempo se já soubermos o que temos que fazer. Então, vou comentar os quatro acima. E aqui, vamos escrever isso. E muito longe de escrever. Loop vai como o quê? Mark, isso. Essa é uma variável simples em marcas. E depois imprima a marca. Veja, a saída é a mesma, mas o código parece muito mais limpo do que acima porque é simplesmente, está fazendo o quê? É. Atribuindo essa variável de marca ao primeiro elemento, segundo elemento e, em seguida, imprimindo-a automaticamente. E este loop embutido sabe que ele deve fazer um loop de dois pontos da lista, não deve exceder. Portanto, é uma prática muito comum de usar for-loop nesse aplicativo do mundo real. Acho que você já entendeu isso até aqui, pode ser usado no Maps também. Você viu a lista, mas vamos tentar o mapa. Var. O usuário é igual a c0 será por volta da idade será suposto 25. E depois vamos pegar, este é outro nome e a idade será salva 30. Agora, se você quiser fazer um loop para este mapa, é simplesmente escrever longe. Este é o dia de qualquer nome de variável nas entradas de ponto de Mark. Então isso é algo que você precisa se lembrar. Vamos ver, acho que sim, tantas operações que você pode fazer. Vamos imprimir e ver o que ele produz. Ponto de dados. Se eu apenas escrever dados, vamos ver. Ele mostra um erro ou qualquer coisa. Desculpe, tenho que escrever para o usuário. Isso foi novamente um erro tolo. Portanto, este usuário, se estivermos usando um mapa, então você terá que escrever entradas. Isso você precisa se lembrar de cor, porque o mapa é um tipo diferente de tipo de dados. E então você pode apenas escrever a tecla de ponto de dados e imprimir se quiser valor, em seguida, o valor do ponto de dados. E vamos sentar nele. Veja Rahul 25, tick tock. Então, imagine esse usuário agora, ele está contendo apenas dois dados. Mas se você tem um aplicativo como Facebook e obtém nossos coortes ou frouxos e qualquer número de dados, é impossível escrever todos por chaves mortas. Nesse caso, usaremos o loop. Agora, mais do loop que você entenderá enquanto estamos construindo um aplicativo de flutter agora, você apenas entende o conceito. Dois loops estão sendo feitos. Em seguida, o próximo é o loop while. While loop também faz o mesmo trabalho. Não é muito diferente. Ele também percorre os elementos. Usamos principalmente loop while quando sabemos quantas vezes o loop realmente será executado. Aqui, no exemplo, conhecemos o limite, ou seja, enquanto o número menor do que este. Mas suponha que uma música esteja sendo reproduzida e até, e a menos que o usuário pressione o botão de parada, ela deve continuar tocando. Este é um bom exemplo. Então, vamos fazê-lo através do loop while também. Vou comentar isso. Então. Vou apenas escrever int number é igual a 0, y. Y é o número menor que 10. Número de impressão. E número mais, mais isso é implementado. Não é nada novo. É o mesmo que o for-loop. Veja, a maneira de escrever é diferente. O loop for está sendo escrito assim e vil é assim. Portanto, o loop final é que fazer while, fazer while loop é diferente do loop while porque no loop selvagem, a primeira condição foi marcada. E depois que o código do bloco foi executado. Mas primeiro o código é executado pelo menos uma vez e, em seguida, a condição será verificada. Vamos tentar. Com o mesmo exemplo. Neste número é 0. Então, vamos apenas dizer que faça o número de impressão, mas essa condição será número maior que um. Então, imagine aqui que a condição é falsa. Então, se estivéssemos usando esse loop while, ele não deveria imprimir. Mas como estamos usando fazer while, você verifica a saída, veja 0. Está sendo impresso uma vez. Se eu escrever aqui número mais, mais também, então também a condição é falsa, mas esse código de bloco será executado. Então, fazer enquanto não está sendo usado muito MATLAB. É como se eu não tivesse usado o do-while, enquanto criava meus aplicativos. Na maioria das vezes estamos lidando com o loop for. Portanto, cabe a você qual tipo de loop você deseja usar em seu aplicativo. Então, no próximo vídeo, também aprenderemos duas pequenas palavras-chave que estão sendo usadas enquanto estamos usando loops e Q. 10. Breque e continuar: Esta será uma sessão muito curta, onde discutiremos o que nossas declarações break and continue, break and continue são usadas com loops, qualquer tipo de loops. E o que ele faz, só veremos porque evitamos quebrar apenas, você pode entender que ele encerra isso. Olhe. Vamos tentar com o exemplo. E quando isso, remova esta e essa declaração de quebra à direita. Se tivermos um loop for, para var I é igual a 0, eu menos de cinco. Eu mais, mais. Espero que você tenha entendido esse loop porque no último capítulo já discutimos isso. Aqui. Posso escrever impressão I, e você definitivamente verá a dúvida colocada da mesma forma de 0 a quatro. Mas e se eu tiver uma condição aqui? Como se eu fosse igual a então quebrar. Isso simplesmente significará que, se o número for para dois, ele deve terminar e, em seguida, executar esse código abaixo. Vamos executá-lo e ver que será apenas 01. Depois disso, o processo está sendo encerrado e o código será executado abaixo. Mas quando se trata de continuar declaração, continuar só vai pular dívida nesse loop, mas não encerrará todo o conselho. Suponha que eu tenha aqui impressão, flutter. Primeiro, ele vai 01, depois termina e executará esse código. Mas se eu escrever aqui, Continue. E todo esse código será C, Apenas, vou usar continuum e depois executá-lo. Veja, há muito diferente do tijolo porque somente quando tinha dois anos, o código foi encerrado. Mas isso não causa fora desse loop for. Basta verificar a condição novamente e o resto do código do sprinter. E então só ele irá e executará todos os códigos abaixo. Portanto, este é um conceito muito básico, mas importante porque Hume, teremos que usar a declaração continue R4 longe em seu aplicativo sempre que necessário. Então, espero ter liberado sua dúvida. Você, se quiser, pode tentar novamente com mais alguns exemplos. Se você quiser, você pode apenas escrever uma lista de usuários, depois passar por ela e tentar usar break our if-else. Depende de você porque quando estamos aprendendo qualquer linguagem de programação, é melhor praticarmos e tentarmos abordar também que ela seja benéfica para nós para o futuro. Então é isso para este vídeo. 11. Declarando funções e sintaxe de mão curta: Bem-vindo de volta. Nesta sessão, falaremos de um tópico muito importante. Então, se você tiver algum interesse em programação, você pode ter chegado à função word. As funções serão queridas. Ou você está trabalhando no PHP C, seja lá o que for, você tem que entender o conceito de funções. Então, o que é uma função? A função é apenas uma coleção de código. São instruções agrupadas para executar uma tarefa. Então, quando estamos escrevendo códigos aqui, suponha que este seja apenas um código realmente básico, dívida, para que possamos escrevê-lo em um, no mesmo arquivo. Mas e se houver 100 linhas de código ou 100 funções para executar em um 100, a tarefa a ser executada. Nesse caso, temos que fazer uso de funções para que possamos declarar essa função em outro lugar e chamá-la aqui em nossa chamada em várias vezes onde quisermos. Então, vamos começar. Vou remover e limpar tudo até gostarmos de funções. Então aqui você pode ver a sintaxe de uma função básica. Consiste em tipo de retorno, opcional, mas é recomendado. Tipo de retorno significa o que a função retornará. E o segundo é o nome da função. Portanto, é apenas um tipo de nome de variável que você pode dizer, porque nosso vastamente para chamar uma função, você tem que dar um nome a ela. E essa terceira coisa são argumentos de parâmetros. Esse é o valor que estamos enviando para a função enquanto a chamamos. Então, agora você pode ficar confuso, mas não precisa entrar em pânico. Vamos entender isso lentamente passo a passo. E quando eu estava dizendo e depois digite, às vezes a função pode não retornar nada. Nesse caso, usamos void como o tipo de retorno. Então, se você ouviu esse voto, você pode pensar, espere, eu vi em algum lugar. Então, se você for apenas para o código de pato aqui, esta também é uma função que é a principal função com o tipo de retorno de vazio. Então é muito estranho que desde o início, no início, no início, estávamos trabalhando com funções, mas não sabíamos porque esse é o ponto de entrada. É por isso que não discutimos isso antes. Até agora, você pode ver que é a mesma sintaxe que é o tipo de retorno, nome da função e, em seguida, parênteses e chaves. É assim que declaramos a função. Agora, o TOD está pronto. Vamos escrever isso escrevendo uma função porque existem maneiras diferentes para propósitos diferentes. A primeira maneira é a função sem passar argumentos. Isso significa que não estamos passando nenhum argumento para a função e argumentos onde esses valores. Vamos tentar. Nós mesmos. E vamos apenas escrever a primeira função sem argumentos de confusão. E retorne o tipo que essa função não está retornando nada. Então, vou declará-lo como vazio. Vamos fazer alguma coisa matemática, tudo bem, parâmetro. E então, na função, podemos ter variáveis, alguns códigos executáveis, o que quisermos. Então, primeiro declararei uma variável de número inteiro para. Então o segundo será o de um deserto. Para. Então agora vamos fazer o cálculo que é emissor ruim será uma variável que estará mantendo este cálculo dois em L mais B. Isso é comprimento mais pão. Certo? E então vamos apenas imprimir aqui o perímetro é e depois a concatenação. Certo? Então, aqui nós declaramos uma função com sucesso. Agora eu te disse, se tivermos uma função, temos que chamá-la. Então, como vamos chamá-lo simplesmente escreverá um parâmetro fino que é o nome da função e o parêntese, é isso. E agora vamos executar o programa. Veja, esse parâmetro é 12, ou seja, quatro mais dois é 66 em dois é 12. Portanto, essa é a primeira maneira de escrever uma função que não tem nenhum tipo de retorno e que não está recebendo nenhum argumento. Isso é que valores surdos estão sendo retornados dentro da função. Ok, espero que você tenha entendido até agora, porque agora vamos para a próxima maneira de escrever uma função, que é função com argumentos. Como o nome sugere. Aqui, passaremos o argumento quando estivermos chamando a função. Então, vamos supor aqui para declarar os parâmetros, escreverei o primeiro tipo de dados do parâmetro que é int length e, em seguida, o segundo será int bread. Agora, se estamos passando o valor, então não precisamos declarar o valor dentro da função. Então, vou removê-lo daqui. Agora a parte da declaração está concluída. Mas se estamos chamando uma função, então aqui está mostrando esse erro porque podemos apenas ver a edição para argumentos posicionais esperados que seja, temos que passar o valor para primeiro I passará apenas cinco e depois segundo também cinco, que esta terra e pão. Agora vamos ver novamente a saída. Veja que o parâmetro é 20. Então, o que será, será funtion com argumentos passantes. É muito simples. Mas espero que você tenha entendido porque este é um conceito muito central da programação. Sem isso, você não conseguirá entender mais adiante. Então eu vou sugerir que você se você tiver alguma dúvida, você apenas pesquisa por conta própria e tentou ir mais fundo no lado do conceito. Agora vamos passar para o terceiro, que é função com argumento e o tipo de retorno. Então, simplesmente, vamos escrever a função de terceira maneira definida com argumento e o tipo de retorno. Então, como o próprio nome sugere, que ele terá argumentos como este e teremos um tipo de retorno. Então agora o tipo de retorno não estará aqui, vazio, será int. Agora você pode ver que o corpo do dub de somador pode estar completo normalmente, mas não está retornando nenhum porque não está retornando nenhum valor. Então, o que temos que fazer, não o imprimiríamos dentro da função. Vamos apenas dizer que retorne o valor do perímetro c, que a adição desapareceu. Então, aqui teremos um tipo de retorno de inteiro já que ambos são inteiros e, após o cálculo , ele se torna um número inteiro. É isso. Agora, se estamos retornando dar valor significa, talvez tenhamos que pegá-lo em algum lugar. Então aqui vou apenas escrever int. Resultado é uma chamada para encontrar o pedômetro. Agora, a variável de resultado consistirá valor calculado enviado pela função Duff. Então agora, se quisermos, podemos simplesmente imprimir como o resultado do ponto phi. Então aqui. Agora temos que escrever a variável de parâmetro de resultado. Porque estamos armazenando isso por esse nome. E também, se você quiser, você pode fazer mais alguns cálculos mais adiante, como int. O total final é igual ao motivo de um resultado. Além disso, você pode apenas escrever 200. E então aqui novamente imprima resultado final. Depois. Então, depois de adicionar é, então encontre. Então, 10 K. Está mostrando algum assunto. E está tudo bem. Total final, desculpe. Certo, agora vamos executar o programa. Deve ser o primeiro será 5 mais 5, 10, 20 e, em seguida, o segundo será obviamente mais 100, 120. Então, fazemos esse tipo de retorno normalmente para que possamos ter mais alguns cálculos depois. É como depois de quando um usuário, quando tentamos obter a idade de um usuário, depois de ter essa idade, podemos fazer alguns cálculos. Vamos, vamos ver. Suponha que aqui diga idade do usuário int. Certo? E simplesmente aqui vamos escrever o retorno 20. Suponha. Agora, e se eu quiser primeiro int obter a idade do usuário, a idade do redutor. E depois de obter a idade do usuário, faremos alguns cálculos como se a idade do usuário tiver menos de 18 anos, imprimir, ele não pode dirigir. Else. Imprima. Permitido dirigir um carro. Agora vamos comentar isso e agora vamos executar. E espero que você saiba qual será o resultado. Ele lerá. Caso contrário, porque estamos chegando em t Quando estamos chamando a função. E então, a partir da declaração if else, que já aprendemos, vemos se o usuário permissão legal para dirigir um carro ou não. Portanto, este é um uso muito básico do assobio quando estamos construindo o aplicativo completo, teremos um uso mais avançado dessas funções. Agora, a última, outra forma de escrever uma função, você pode apenas dizer que é sintaxe abreviada, nossa flecha gorda. que significa que se o corpo da nossa função contiver apenas uma linha de código, podemos usar essa seta, seta e esse tipo de símbolo de seta. Você pode apenas dizer uma bobina e maior do que declarar a função e torná-la nítida. Portanto, é apenas uma maneira de limpar nosso código. E também na seção de notas, você pode ler em notação de seta gorda, não usamos as chaves e também não usamos a palavra-chave de retorno. Então, dados, há muito a digerir. Mais uma vez. Aqui vamos tentar com esta sintaxe int fat arrow. Aqui temos, estamos apenas retornando ou você pode ter apenas uma linha de código. Então, a primeira coisa, foi dito que temos que remover os aparelhos encaracolados. Certo, nós o removemos. E segundo, não temos essa declaração de retorno. Certo? E em vez disso, teremos essa flecha. Veja, ele está tão legal e tão limpo. E agora, novamente, vou mudar esse valor para 17. E vamos ver. O que é saída. Veja, ele não pode dirigir. que significa simplesmente que a função está fazendo o mesmo de antes. Mas com essa sintaxe abreviada, ela parece mais limpa e é mais fácil de ler. A dívida acaba de ser devolvida 17 e também existe esse tipo de retorno, que é um número inteiro. E se você quiser aqui também, você pode fazer essas mudanças. Primeiro. Vou remover os aparelhos encaracolados. Então eu removerei esses retorno ou retorno e simplesmente, Sim, vou escrever a seta. E essa linha de código que é, após o cálculo, ela retornará diretamente ao que estiver chamando. Vou comentar e fazer isso novamente. E espero que o resultado seja o mesmo de antes. Veja que o resultado é 20 após o resultado final, após a adição é 120. Então, quanto mais cedo, estava parecendo muito confuso, mas com a sintaxe abreviada, está melhorando. Então, espero que você tenha entendido o básico da função. No próximo vídeo, vamos nos aprofundar mais nos parâmetros e em seu tipo. 12. Os tipos de parâmetros em função: Agora é hora de se aprofundar nos parâmetros e nos tipos. Então, anteriormente, aprendemos a declarar uma função e como ela aceita um parâmetro. Mas existem maneiras diferentes de aceitar um parâmetro. Nesse diagrama, você pode ver que os parâmetros são de dois tipos, opcionais e obrigatórios. Somente o nome, você pode entendê-lo. Se for necessário, você terá que passar o argumento. Ele mostrará um somador. E quando é opcional, os dados também tratam tipos de opcionais que são particionais, nomeados e padrão. Então, vamos entender cada um passo a passo. Então, vamos começar. Primeiro, entenderemos quais são os parâmetros necessários. Vamos trazer nosso editor de código e criar um nome de função, nome de impressão. E suponha que ele aceite argumentos como string name 1, string name 2, string name tree. Certo? E vou apenas imprimir os nomes como nome1 e Nome 2 e 3. Certo. Temos nosso fundo em geral. Agora é hora de chamá-lo como nome de impressão. Mas se o chamarmos diretamente assim, ele mostrará um somador porque é um tipo de parâmetro obrigatório, o que significa que temos que enviar um valor. Vou enviar o Hulk, Homem de Ferro. E é por demanda. Vamos ver a saída. Ok, você pode ver todas essas impressões. Portanto, é realmente básico e também fizemos isso antes. Mas você precisa entender o que é chamado e é chamado de tipo de parâmetro obrigatório. Agora, o segundo tipo é opcional. E, dentro do opcional, estaremos entendendo o que é um parâmetro opcional particional. Então, para tornar um parâmetro opcional vi, use esses colchetes, colchetes e polimento nulo significa que este hulk estará na primeira posição, ou seja, string 1. Este Homem de Ferro estará na segunda posição que é o nome também, porque esta é a ordem como é boba. Vire aqui, veja se eu mudo a ordem como o Homem-Aranha aqui. E eu não quis dizer aqui. Então isso, a saída mudará, será alterada porque é decidido posicionalmente qual deles é raro. Agora? Agora, se eu quiser tornar essa árvore de nomes opcional, é, eu não quero. Se não for enviado, também está tudo bem. Assim. Temos que usar esse colchete quadrado. Mas eles estão emitindo um anúncio porque ele está escrito. Ele está mostrando que o nome do parâmetro entra em contato com um valor nulo por causa de seu tipo e seu tipo é string. Então, na versão mais recente, Dart introduziu algo chamado segurança nula, o que simplesmente significa que, se alguma variável, variável, nossa função pode retornar um valor que pode ser nulo. Nesse caso, nesse caso, você precisa declarar esse tipo de dados como anulável. O que pode ser feito com esse ponto de interrogação da expressão. que significa simplesmente se eu tiver essa string e eu apenas inserir um ponto de interrogação aqui, isso significa que esse valor, essa variável também pode conter um nulo. O que no nosso caso é verdade. E agora, se eu executar o programa, veja Hulk e Homem-Aranha e null porque não passamos um valor. Então aqui, esse conceito é muito, também muito importante porque quando você está pedindo um valor ao usuário, você, muitas das frescuras podem ser opcionais. Suponha quais interesses são, que idade você tem ou quanto dinheiro você no usuário pode ou não querer preencher essas fazendas. Então, nesse caso, você pode ter essas variáveis como opcionais. E lembre-se, essa segurança nula foi introduzida recentemente. Então, se você estiver assistindo a algum vídeo para fazer R real, o que é suposto seis meses ou um ano atrás. Portanto, ousa que este ponto de interrogação não esteja sendo introduzido. Então você pode receber alguns erros. E aqui em baixo você pode ver essas garantias nulas porque elas são padrão no Flutter Framework. Então eu, esse é o tipo de parâmetro opcional. Agora eu tenho, expliquei tudo aqui. Agora feito em seguida é nomeado parâmetro. Agora isso é um pouco interessante. Camada. Estávamos apenas usando parâmetros particionais porque há muito poucos argumentos que estávamos passando. Mas suponha que tenhamos muitos parâmetros que será muito difícil lembrar de suas petições. Ou seja, em uma posição, seu nome na segunda posição, sua idade, na terceira posição, sua cidade. Nem sempre é possível lembrar de todos esses. Então, nesse caso, usamos parâmetros de nome, e aqui estaremos usando chaves. Aprendemos a usar chaves quadradas, mas agora usaremos aparelhos encaracolados. E simplesmente, criarei uma nova função que será chamada de gorda. Terceiro, ok, vou escrever int find volume. E então, nesse parâmetro, vou simplesmente escrever chaves encaracoladas e, em seguida, int length, int, ler e escrever Clint e não imprimirei aqui, vou apenas retornar o comprimento para o pão. E se eu quiser altura também porque é o volume, declararei um parâmetro de altura do somador. Agora você pode estar vendo algumas áreas. Vou explicar você. O que é isso? Porque aqui o parâmetro se torna opcional por padrão. Então você tem que usar segurança nula dentro de chaves encaracoladas. Então, em parâmetros de nome, os valores se tornam opção e isto é, podem ser nulos. Temos que usar segurança nula, o que é muito simples, pois simplesmente usar ponto de interrogação, ponto de interrogação , ponto de interrogação. Mas se você estiver usando a marca do quociente aqui, ela mostrará algum endereço também. Porque não podemos fazer cálculos. Não podemos fazer esse tipo de cálculos aqui se o valor for nulo. Então, nesse caso, vou verificar. Vamos tentar verificar se o comprimento não é igual, comprimento igual a nulo e pão igual a nulo e igual a nulo. Em seguida, volte. Mais uma vez. É esse tipo de situações que você encontrará muito durante a programação. Então, para essa solução, você pode fazer uma coisa. Ou seja. Você pode simplesmente torná-lo opcional. Mas desculpe, faça dele um nome. Mas com a dívida de palavra-chave necessária é essa função tem que retornar um valor porque é um conceito muito simples. Se estivermos fazendo qualquer tipo de cálculo matemático, o valor deve ser fornecido. Então essa coisa necessária, certifique-se de que o valor está sendo enviado. Agora, se eu chamar a função como encontrar volume, não posso simplesmente passar valor assim. Porque é um parâmetro name. Tem seu próprio nome, que podemos ver aqui. altura pode ser cinco, vírgula cinco e o comprimento pode ser cinco. Então, se você notar aqui, já que não é posicional, posso chamar o valor em qualquer posição porque primeiro chamei altura, mas lá estava terra. Então eu chamo pão. Estava vermelho, mas por último estava alto. Mas eu chamo length porque é um parâmetro name e não precisamos lembrar as posições dos argumentos. E simplesmente vou imprimir volume, valor, desculpa, volume, ortografia, volume. E vamos correr e ver 125. Então, como é um argumento nomeado, d ou podemos chamá-lo por esses nomes. E é muito mais fácil porque pode ser nome, idade, salário. Não precisamos nos lembrar de nada. Agora é hora de usar o final, comprá-los, seja qual for esse parâmetro padrão. Agora, no mesmo caso, vou remover tudo isso e escreverei o parâmetro padrão. No mesmo caso. Se não fosse necessário, se fosse assim. Nesse caso, o padrão ganha. Se o valor não estiver sendo enviado, teremos esse valor. Em vez disso. É como se o comprimento fosse um. altura lerá isso, e o pão será quatro. Então, aqui, se eu suposto esquecer de enviar terras, então também o fará, o comprimento será um. Ou seja, vamos fazer isso também. Então, o cálculo você verá claramente dois em 51010 em 550. Veja, eu não enviei o parâmetro land, mas era, já que era padrão lá. E você pode programar, ele não fica travado. Um bom exemplo é o perfil branco. E também lembre-se, podemos usar os parâmetros posicional e nome ao mesmo tempo. Assim como a string, o host é igual ao convidado aqui será o parâmetro padrão. E eu simplesmente imprimirei. O workshop é realizado pelo anfitrião. Certo? Agora, se eu chamar a função, agora, concentre-se porque o primeiro parâmetro é uma posição. Então eu tenho, eu não posso simplesmente dizer trabalho, comprar e isso, Não, ele mostrará um somador para apoiar adicional Eu tenho que escrever flutter. E o segundo é nomeado. Então, o host será suponho que o Google. E agora vamos executar o programa. Veja lisonjeado é conduzido pelo Google. Mas suponha que, se eu esquecer ou não quiser dar o valor do parâmetro do host, ele não mostrará nenhum editor. E simplesmente se tornará inundado é conduzido pelo hóspede. Então, se você vir um exemplo do Facebook, você entenderá que haverá convidados bem-vindos e, após o login, será bem-vindo seu nome de usuário. Este é um exemplo muito básico do uso de parâmetros padrão. Então, espero que você tenha entendido esse conceito profundamente. Isso é tudo o que é necessário para o conceito de funções. Então, no próximo vídeo, aprenderemos mais alguns conceitos de, opa, que são aulas e objeto. Vejo você no próximo vídeo. 13. O que são cursos e objetos: Bem-vindo de volta. Nesta sessão, falaremos sobre programação orientada a objetos. Portanto, esse conceito está disponível em outra linguagem de programação, pois soldada é Java, PHP por 10. Por isso, inclui como vemos nossa cotação ou como organizamos nosso código. Objeto significa qualquer objeto que existe na vida real. Se você vir um carro, nossos alunos, nosso livro, você pode ver que tudo isso pode ser combinado em suas próprias classes. Vamos ver. Primeiro o que eu quis dizer. Vou remover tudo. E depois classes e objetos. Este é um tópico que abordaremos hoje. Então, suponha que haja um nome de string de dados seja igual a delegados B. Só estou inspirado por eles. Então, faculdade de cordas, você pode ver como a Primeira Guerra Mundial acho que C uma corda, ok? Marcas Int. Ele não faz sentido dar marcas a Bill Gates. Suponho saber. Estes são os dados de quer alugar densos. É por isso que é possível apenas anotá-lo assim e trazê-lo, imprimi-lo um por um. Mas e se houver muitos sprints? Então, obviamente, você quer apenas sentar e escrever string. O nome dois é igual a elon Musk. Assim, porque não faz nenhum sentido. Aqui. Se você perceber que todos eles foram adicionados ao nosso nome, as marcas da faculdade podem ser combinadas em uma classe chamada Estudante. E então podemos mencionar essas variáveis são propriedades intrínsecas porque quando estamos falando de programação orientada a objetos, as variáveis são conhecidas como propriedades e funções são conhecidas como métodos. Ambos são os mesmos quando entra nessa aula. Se o nome deles mudou, nada, quando não faz sentido para mim por que chamamos isso assim. Mas você, você entenderá. Você não precisa pensar muito. Então, vamos começar. O que é isso? Classe? Uma classe é um blueprint. Nosso destaque comum a todos os seus objetos. Objeto, vamos entender de certa forma. Mas você poderia, você pode apenas a partir da definição só pode entender São os recursos comuns nos dados da Alda. Então, nós apenas fazemos dela uma aula separada. O exemplo é a classe do aluno. Todos os alunos terão seu ID e nome. Todos os alunos desempenham funções como estudar e brincar. Para que possamos fazer disso uma aula. Na aula. Funções, em classe, desculpe, as funções são chamadas de métodos e as variáveis são chamadas de propriedades. Como eu discuti anteriormente, que estes são apenas intercambiáveis, mas são chamados assim. Agora vamos criar uma nova classe de ID de aluno de primeira classe, nome de string. Então 30. Suponha girar e apenas jogar. Brent, jogando. Então agora a coisa é que essa classe tem que estar fora da nossa função principal. E aqui está mostrando um erro porque não mencionamos que essa variável será nula ou não. Então, desde que não o fizemos. Atribuir qualquer valor tornará a segurança nula porque se tivéssemos um sinal como este, então é uma situação diferente. Mas neste momento não há valor sendo atribuído. Então você pode dizer que se eu mencionei essa classe aqui até, e a menos que um objeto tenha sido criado, ele não armazena nenhuma memória. Então você pode estar perguntando, eu usei a palavra objeto várias vezes. Então, o que exatamente um objeto significa? Um objeto é algo que atribuiremos valor, nosso acesso, todas as variáveis e métodos definidos em uma classe que essas variáveis em funções, você pode dizer em nosso exemplo que as variáveis são ID e nome, e a função é 30, e reproduzir. Então, definimos isso, essas propriedades, mas obviamente em nossa aplicação temos que fazer algo para fazer uso da propriedade e ousar o conceito de objetos entrar em jogo. Então nós, tivemos isso durante a aula, mas agora e se quisermos entrar é ser isso, então temos que fazer uma instância da classe. Vamos tentar. Vamos apenas escrever um aluno, um é igual ao aluno e, em seguida, parênteses, é chamado assim. Essa é a criação de objetos, você pode dizer. Então você verá que podemos apenas esticar para alugar um ponto. E então podemos acessar tudo. Primeiro, atribuirei um ID como um. E então o nome de um ponto do aluno é igual a Bill Gates. Agora, se eu imprimir um nome de ponto do aluno, e se eu imprimi acima, é quando não atribuímos. Vamos ver a saída. Veja primeiro que é nulo porque não atribuímos o valor. Mas depois que você pode ver se escrevemos como este ponto e depois acessamos essa propriedade, podemos atribuir essa propriedade de valor. E se você quiser acessar a função, você pode dizer diretamente o aluno 130. Veja. Agora ele mostrará estudando e eu apenas removerei isso. Certo? Este é um objeto. Ou seja, este é um. Agora, se você quiser, você pode simplesmente criar várias strings como essa para alugar para se opor. Mais uma vez, objeto. E, em seguida, o ID do aluno para ponto é igual a dois. Então agora você pode estar pensando ou você pode ver essa atribuição de valor não está um pouco limpa, você pode dizer porque temos que fazer ponto this.name. Nós tendemos a escrevê-lo de novo e de novo. Então, para enfrentar ou resolver essa coisa, o conceito de construtores vivos. Então você sabe, novamente você perguntará, o que são construtores? Isso é novamente, um conceito de programação orientada a objetos. Os construtores são como funções dentro de uma classe, que serão executadas antes de executar qualquer outro código nessa classe. Independentemente da posição, explicarei como qualquer outro método deve ser chamado. Mas mesmo que não chamemos o construtor, ele será executado automaticamente . É quem pode estar pensando o que está acontecendo. O que é exatamente um construtor? Primeiro, vou simplesmente ensiná-lo a definir um construtor. Um construtor é declarado escrevendo o nome da classe. Parênteses, o nome da classe é aluno, e esse parêntese é assim. Certo? Então, este é um construtor. E quando mencionei que ele será executado primeiro independentemente de sua posicionalidade, Se eu escrever no disco construído no último também agora, então então então, primeiro de outono quando criamos um objeto, isso será chamado e você pode apenas vê-los e estes são basicamente economizam dinheiro por sua aparência ou você pode comprar como está escrito. Ambos são os mesmos. E a segunda característica estrutura africana é que um construtor é como uma função I, como eu disse, mas não tem nenhuma perna desse tipo de retorno. Eles não retornam nada. Ele só pode ser executado. Dentro dessa classe, o que fazemos na maioria das vezes é atribuir um valor. E primeiro de eu vou mostrar um construtor e apenas escrever impressão. Este é um construtor. E desculpe pelo ponto e vírgula. E eu vou novamente apenas criar uma classe. E agora você vê que o código está escrito de cima para baixo. Mas antes de tudo, isso será impresso a partir daí, só você pode entender que o construído é executado no início. Veja que este é um construído, então, Bill Gates e depois estudando. Então este é o, esse é o significado de um construtor. Lembre-se que é o mesmo nome que o nome da classe e eles não retornam nada. Você, agora você vai me perguntar. Então k, eu entendi o construtor, mas qual é o uso dele? Então, principalmente temos antes dos EUA, devemos saber o que é um construtor parametrizado. Assim como em uma função normal, como enviamos parâmetro ou como enviamos argumentos. Da mesma maneira. Temos que enviar um parâmetro para um construtor de disco. E então esse parâmetro será atribuído. Ou seja, o valor será atribuído à variável presente nessa classe. Simplesmente, aqui, estávamos atribuindo assim, mas agora em diante, vamos apenas enviá-lo. E então ele será atribuído como, como, Vamos escrever os parâmetros em primeiro lugar, int id e, em seguida, nome da string. Certo? E, em seguida, a primeira coisa será que esse ID de ponto é igual a eu vou nomeá-lo ID do aluno. Apenas também, só para que os nomes sejam diferentes. E esse será o nome do aluno. Este nome de ponto é igual a 210 nome. Agora, vendo agora que temos, é obrigatório enviar isso ao valor. O primeiro será, acho que o primeiro é id e o segundo é o nome. Agora não preciso mencionar aqui. E se eu correr de novo, você verá a mesma coisa. Porque se você quiser verificar, eu enviarei um 100. E então vamos verificar o ID. Então, ID, então essa turma de aluno agora pode atribuir um valor. Esse conceito será usado muito tempo ao construir um aplicativo amarelo usando flutter. Próximo exemplo, você pode simplesmente ver se var student para ele tão fácil agora criar objetos foi escrito para então 99. E então Mark sucker berg. E então eu vou apenas dizer ao aluno para o nome do ponto. Você só verá, veja, isso é construído duas vezes. É chamado porque estamos criando dois objetos. Esse é o principal motivo. Então, espero que você tenha entendido o conceito de classes, objetos e construídos. Você só precisa entender isso muito mais V. Veremos onde ele está sendo usado quando estivermos na sessão de flutter. Então isso é tudo por hoje. Obrigado. 14. Tipo e heranças genéricos: Agora vamos discutir sobre o próximo tópico, que é o que nossas coleções de tipos genéricos são heterogêneas por padrão. Isso significa que coleções como mapa de listas podem conter vários valores de diferentes tipos. Só por exemplo. Mais uma vez, gostaria de remover tudo isso para que possamos entender esse conceito. Tipo genérico. Normalmente, o que acontece é se tivermos uma lista de, você pode dizer usuário, então essa lista pode ter primeira string, ou seja, marca. Em seguida, os segundos dados podem estar no professor. E os terceiros dados podem ser booleanos. Você pode dizer verdade. Certo? Então o que aconteceu é que estamos usando, estamos inserindo vários tipos de dados na lista de dívidas, o que é bom se isso for exigido por essa função específica, você pode dizer uma tarefa específica. O conceito de genética pode ser usado para alcançar um rigor estritamente nos tipos de dados. Ou seja, se mencionarmos que esse usuário deslistará, a lista de usuários conterá apenas cadeias , então ela garante que não haverá erro. Vital, estamos construindo esse aplicativo porque não queremos que o usuário, a pessoa que está usando nosso aplicativo apenas insira o que morrer ele queria para nossas variáveis porque mostrará um erro se qualquer pessoa tenta atribuir valores diferentes nessa configuração. E um tipo genérico é declarado simplesmente usando menos que, maior que. Isso está aqui. Liste, em seguida, string. Isso significa que esta lista conterá apenas string. Agora eu tenho que escrever. E então Jeff, veja, agora o erro se foi porque estamos fazendo o que está sendo mencionado em nosso programa. Da mesma forma, se quisermos, podemos usar menos tinta. Marcas é igual a 33, 44, 55. Se eu tentei a cadeia de antenas, ela mostrará um erro porque a string de tipo de elemento podemos atribuir a esse tipo de lista inteiro? Por isso, é muito conveniente muitas vezes. E também discutimos lista, mas e se houver um mapa? Como o mapa costumava ser como o nome da string, então um valor. Suponha que mais sobrou? Eu era como o Tom. E então vamos deixar 22 finais de semana reconhecíveis se for normal que não tenhamos mencionado nenhum tipo. Mas se você quiser restringi-lo, então podemos apenas escrever string será a chave na maioria das vezes, obviamente. E, em seguida, um valor, o valor será somente string. Nesse caso, esta árvore 20 mostrará um somador. Temos que dar uma corda. Suponha que idade, legis adulta. Só estou dando um exemplo. Da mesma forma, usamos Alistar e mapear. genética pode ser usada para qualquer coisa, como objeto de função de vidro. Você pode me perguntar como é a função. Se houver uma função, não estou recebendo um exemplo agora. Mas suponha que, se houver uma string de função. Lista, o nome da função será o que for. Dê, adicione os dados. Então é, é o tipo de retorno paga uma lista. Mas e se nós apenas mencionarmos a lista de números inteiros aqui? Portanto, esse retorno só deve conter números inteiros como este. Assim, enquanto o local verá o código de flutter de replicação plana real, você verá esse tipo genérico muito tempo. Agora, nosso próximo conceito é sobre acessibilidade, o que significa simplesmente, geralmente se você está vindo de outra linguagem de programação, você deve conhecer o conceito de público e privado. As propriedades são variáveis ou qualquer função. Por padrão, todas as variáveis e funções são públicas e acessíveis ao objeto semanalmente, suponha que haja uma classe. Estudante. A aula de estudo deve ser assim. Portanto, esse int id 2 é acessível por seu objeto, como um ID de ponto do aluno. Mas se quisermos torná-lo uma dívida privada significa sobre o desiluminado Dentro desta classe, esses dados serão acessados não fora. Então, nesse caso, se você, se você puder ver isso aqui, é a questão de, você pode dizer normalmente, esta é a questão do ponto pad, mas vamos tentar imprimir porque no VS Code aqui se você conseguir ver esse ID. Mas quando usaremos uma linguagem de programação real, você pode ver quando estamos trabalhando no VS Code, isso não acontecerá porque sempre que fizermos qualquer propriedade dentro da nossa classe, propriedade privada, não será acesso por seus objetos. Então meu TED é simplesmente usar sublinhado antes do nome da variável. É assim que o tornamos privado. E você pode pensar, não, não está funcionando aqui, mas isso não é verdade. Isso está em algum problema do trackpad, que será resolvido quando estivermos usando qualquer editor de texto. Mas agora, o único foco deve ser entender o conceito. Então, sim, fizemos essa parte que está controlando a acessibilidade, o que significa simplesmente como tornar uma função R variável privada dentro da classe. Então o próximo conceito que estaremos entendendo é o que é herança? Esse é outro conceito em programação orientada a objetos. Então, suponha que tenhamos duas aulas. Você pode ver esse slide. Há duas aulas, cachorro e gato. Dentro dos dados de dois óculos algumas propriedades são alguns métodos que são comuns. Podemos dizer que primeiro é cor e o segundo é comer. Então, se houver apenas uma ou duas vantagens, então é AKI. Mas o que acontece se tivermos várias aulas? E essas aulas também têm essa função que também é gato e cachorro. Certo? Mas e se houver algum pássaro de perna? Então, eles também terão uma coloração na função Comer. Então, nesse caso, podemos apenas fazer um, podemos apenas fazer uma, outra classe que será a classe pai. Você pode simplesmente enviar. Essa classe, pode ser estendida ou pode ser copiada por suas classes mais baixas. Então você pode ver a semana, faremos uma aula separada e colocaremos essas características comuns. Vamos fazer isso e tentar. Sim, certo? Em conceito pesado e denso. Primeiro de tudo, vou escrever a classe dos pais como animal. E então ele terá corda, cor e vazio. Vazio. Isso significa que isso é uma função. Agora vamos ver, eu tenho uma classe de col, de tag de nome e ela terá uma propriedade da raça String. E segundo, ele terá ampla por propriedade. Vamos torná-lo nulo. Agora, o que acontece se eu criar um objeto de cachorro? O cão é igual a um cachorro assim. E então, se eu tentasse acessar o ponto de cachorro, ele só mostrará raça e parque. Mas e se também quisermos essa cor? Nesse caso, o conceito de herança vem. Agora nós simplesmente temos que a aula estende animal. Certo? Esta palavra-chave extends é usada quando estamos herdando. Então agora, se eu escrever doc dot c v, você também pode ver a cor e comer também. E se você quiser, podemos chamar diretamente a função de TI como comer impressão. E agora R1, C, Você pode ver comer. Então aqui o cão é chamado de classe infantil, e esse animal é chamado de classe de pais. E essa classe está herdando dessa classe animal, herdando balas, essas propriedades e métodos. Ele também pode ser usado nesta classe. Então, é bom. E essa extensão será usada no Flutter. Eu não usei muito porque na Flórida tudo, eles já estão sendo estendidos. Internamente. Só temos que escrever a palavra-chave e é isso. Nós, é muito raro criarmos nossas próprias classes e herdá-las. Isso só depende do seu uso. Dito isso. Então, espero que você tenha entendido o conceito de herança e , em seguida, como tornar uma variável privada como Lex simplesmente esse sublinhado. E esse tipo genérico. O tipo genérico é usado principalmente com lista, mapa e edição. Portanto, dívidas para a parte orientada a objetos da linguagem escura. 15. Manipulação de exceção usando o Try Catch: Nesta sessão, falaremos sobre o tratamento de exceções. Então, se você estiver disposto a qualquer aplicativo, definitivamente haverá momentos que você encontrará alguns erros. São esses erros na linguagem de programação, é chamado de exceção. Então você pode ver a definição aqui. Quando um programa termina abruptamente ou tem um erro, essa situação é conhecida como uma exceção. Então, definitivamente, todos sabem que haverá um erro, então é melhor lidar com isso acordo para que nosso aplicativo não trave. Agora, o que é esse bloco try catch? Então, apenas pelo nome, você pode entendê-lo. Primeiro, vamos tentar esse bloco de código. E se houver alguma adição, pegue o erro e faça algo com ele. Portanto, esse é o significado dessa afirmação. Ok, agora, vamos tentar em nossa almofada escura porque obviamente, é bom se fizermos isso. Agora. E é ter uma nova variável do ano 2021. E então int 0 é igual a 0. Então, espero que você saiba que os números não podem ser divididos por 0. Então, se dizermos que int result é igual a IR dividido por 0, então, no momento, ele mostrará infinito, mas eu vou. Certo? Agora veja nosso tipo de duplo pode ser atribuído a uma variável do tipo int. Porque quando estamos nos dividindo assim, esse resultado virá em um ponto decimal. Para evitar isso, usaremos esse símbolo. Ele faz o quê? Ele simplesmente obtém o primeiro valor e você remove a parte decimal. Agora, se eu executá-lo no console, você receberá esse erro aqui e suportará erro não detectado, operação não suportada. Então você pode ver que já foi mencionado aqui que é uma edição sem cortes. Então, agora, para resolver isso, usaremos esse bloco try catch. E está escrito assim. Primeiro try and catch é uma função. E este E, vamos pegá-los. Ou você pode dizer que será armazenado nesta variável e, para que possamos usar e prever. Agora, vamos tentar isso e trazê-lo aqui. Certo? E vamos bem. Agora, primeiro vou escrever uma exceção manipulada, depois E, isso é qualquer que seja a exceção que ela está lá. Então, uma luz era de cor vermelha. Agora veja, é uma impressora normal, impressão, não uma exceção. É como exceção manipulada e, em seguida, operação não suportada. Então, esse é o caminho, como eu pegaria o código? Por exemplo, assim como você, nesse try-catch, há alguma chamada de banco de dados. E, obviamente, haverá momentos em que suponha que o servidor tenha algum assunto, a Internet não está funcionando. Nesse caso, vamos pegar o somador e mostrar que algum tipo de caixa de diálogo está alerta para o usuário em relação a isso mesmo , em vez de falhas de nosso aplicativo , falhas, e isso será muito experiência ruim para o usuário. Então você pode ver a partir do slide, é assim que lidamos com uma exceção. Outro exemplo de exceção pode ser ter uma lista. Então, vamos supor que temos uma lista de marcas e ela conterá 30 ângulos qualquer semi-sólido, ok? Ele conterá três vale. Então, o índice começará a partir de 0 e terminará 12. Então, o que acontecerá? Se tentarmos imprimir a árvore de marcas, que não está lá na lista. Então, definitivamente, ele deve mostrar um erro, mas o erro é tratado. E C, erro de intervalo, índice fora do intervalo. índice deve ser menor que três. E se eu escrever dois, então simplesmente imprimirá a soma D7 e este bloco de captura, obviamente, como não há erro, Este telefone será executado. Então, espero que você tenha entendido o conceito de manipulação de exceções usando try-catch quando estiver trabalhando em um terceiro aplicativo. Este bloco try and catch será usado intensamente porque garantiremos que nenhum erro ou não, nenhuma situação deve ocorrer onde o usuário deve ficar irritado e desinstalar nosso aplicativo. Pois, ok, mais disso vamos aprender na seção inundada. É isso. 16. Variáveis e métodos estáticos: Então, nesta sessão, entenderemos o que as variáveis estáticas e os métodos estáticos. Então, se você ouviu falar sobre essa estática e coisas, então é novamente o conceito de programação orientada a objetos. E vamos ter uma turma de alunos. Então agora estou falando de propriedades estáticas. Então, lembre-se das variáveis da instância também. Então, variável de instância de água, se mencionarmos como int Marx é igual a 0. Esta é uma variável de instância. Certo? E simplesmente, se eu quiser declarar uma variável estática, vou escrever essa palavra-chave. E então o que devo escrever? O usuário tem marcas. Vou apenas escrever pontuação. Sim, apenas por exemplo. Essa é a variável de tick. Essa variável estática, apenas adoçando a palavra-chave estática, torna-se uma variável estática. Então você pode estar pensando, qual é a diferença? Só chegaremos a isso em um tempo. Agora vamos ter uma função que também é método. Amplo. Na Grécia, Marx, eu deveria apenas marcas de ponto e vírgula mais mais e dizendo, vou apenas dizer vazio, aumentar a pontuação e direita, pontuação mais, mais. Essa é nossa variável de instância. Vou remover tudo isso. Agora. Para acessar uma variável de instância, precisamos criar um objeto. Então, já fizemos isso antes. Guerra. O nome da string é igual a, este é um objeto. E depois disso, se eu escrever impressão e quiser imprimir marcas, simplesmente estudarei marcas de um ponto. E essa chamada, vou fazer isso a partir de dez e vou apenas dizer mais 10, que será incrementado menos de 10, para que não fiquemos confusos. Agora. Ok, se eu correr agora, ele imprimirá 0. O que, o quê, e se eu quiser imprimir a pontuação? Então, vamos tentar com o objeto. Criamos o aluno um ponto c. Se eu escrever ponto, a pontuação não será acessível. Não é acessível porque é valor estético. Propriedade estática. Para acessar isso, temos que fazer isso diretamente a partir do nome da classe que é aluno, é o nome da classe, em seguida, ponto Dense core C. Então isso é uma abordagem diferente ou um conceito diferente. Você precisa se lembrar que, se quisermos acessar a variável de instância , temos que criar um objeto primeiro. Mas se tivermos uma variável estática, não precisamos criar nenhum objeto para essa classe diretamente. Podemos acessar o valor. Certo? Se você entendeu até agora. Agora, eu gostaria de fazer o que eu gostaria de acessar a um ponto final na Grécia, Marx. E vou ler o aumento de um ponto do aluno. Então, é a ortografia de Turim errada. Aluno um ponto aumenta o núcleo. Certo? E, novamente, vou colocar nossos valores aqui. Mas espero que você saiba qual será a resposta. Será então 12, de fato, aqui em baixo, 120. Certo? Agora, vamos fazer uma coisa. Criaremos outro objeto. aluno Var dois é igual a. Estudante, ok, temos um novo objeto. Então, se eu escrever aluno de impressão para marcas de ponto. E então, para fazer isso, vou aumentar a pontuação. Ok, essa é a variável estática, mas estou fazendo isso com o segundo objeto. Então, em sua mente, você pode pensar, agora se eu imprimir novamente, se eu imprimir novamente, faz isso representando um Phi, agora estamos em coisa estática. Então ele dispara apenas ter essa pontuação é 10. E, novamente, de fato, porque é um novo objeto, Vamos executar. Mas você só verá a diferença aqui. Veja isso marca o aluno de que Marx é 0. Mas essa pontuação de pontos do aluno é continuação. Ou seja, a partir do primeiro objeto fizemos algumas mudanças do segundo mundo do objeto, assim como alguma variável estática tenuto. Mas todo esse ano depurado serão objetos diferentes, mas o valor será visto. Mas, no caso de uma variável de instância, ela começará novamente a partir de 0. Portanto, essa é a principal diferença entre a variável de instância estática. Dívida é variável de instância será chamada ou será iniciada várias vezes, mas seu valor estático será inicializado para um. Depois que os mesmos dados forem buscados da memória, pelo menos eles viverão a memória eficiente porque na maioria das vezes sabemos reunir alguns dados que não serão alterados nessa classe. Suponha que haja um aluno, então o nome da faculdade suponha que não mude, suponha que haja um banco de classe bancária. Esse nome do banco é algo que é único e não muda. Então, o que fazemos, podemos não querer usar a memória de criá-lo de novo e de novo. Nesse caso, usamos a palavra-chave estática. Espero que você tenha entendido que é apenas a diferença que uma variável de instância consome mais memória porque EBIT cada objeto, é inicializado a partir de 0, ou seja, desde o início. Mas a estática vamos ficar grande continuada. O mesmo valor continuará. Agora, você entendeu propriedades estáticas que esses t. Agora é hora de você entender estática. Bem, o que é chamado de método, basta escrever a palavra-chave estática antes de um método. É isso. Mas se você torná-lo estático, definitivamente ele não será acessível através do objeto. Então, não vou sugerir que mude isso, mas terei apenas retorno estático, vazio, string, faculdade. Certo. Agora, para acessar isso, simplesmente temos que ler a faculdade de estudantes impressos assim. Então lembre-se, isso não é um objeto. Estamos acessando diretamente por meio do nome da classe. Objeto é esse. E isso. Esses dois são objetos que só podem acessar diretamente a variável de instância ou a instância. Meus filhos. Vou apenas escrevê-lo aqui. É o método de instância. Esta é a instância minha hora, mas esse é um método estático. Então, esta era a lógica por trás das palavras-chave de instância e estática decimal. Espero que você tenha entendido e gostado até agora. Agora, estamos prestes a terminar nosso curso. E depois disso, mergulharemos diretamente no Flutter. 17. Operador de ternário e segurança null: Agora, por último, restam apenas alguns conceitos , são difíceis deles. O primeiro conceito é chamado de operadores ternários. Então, vou escrever um operador ternário. Então você pode perguntar, o que é um operador ternário? Não é nada além de evitar escrever declaração if else. Então você só sabe como escrever difere isso se. E então aqui simplesmente assim. Suponha que eu tenha um valor int age é igual a 25. Para aqui. Vou escrever apenas se a idade for 18, impressão permitida, suponha. E, se não, a impressão não é permitida. Certo? Então esta é a nossa declaração normal if else para você pode estar perguntando o que é um retorno de tornado? Portanto, os operadores ternários estão acostumados a espalhar o código que escrevemos ou apenas para garantir que ele esteja muito limpo. Quando escrevemos. Não acontece, não é como se não estivesse ocupando muito espaço. É apenas a idade certa. Maior que 18. Se for verdade, imprima. Sim. Else imprima. Não. Veja, este é o operador ternário. L é francês aqui novamente, isso, e então este programa de gênero é executado. E veja que temos a saída, sim. Portanto, o operador ternário é uma maneira de escrever a instrução if-else. E sim, você o usará muito tempo porque você pode ver a diferença. Figura os próprios olhos. Essa é apenas uma linha de código. Anteriormente, temos duas raízes, tantos códigos para fazer a mesma coisa. Então, apenas escrito como a condição e o mapa do quociente. Ou seja, se a condição é verdadeira, então o que temos que fazer, e com essa coluna, significa que se essa condição não é verdadeira, então o que temos que fazer, simples assim. Agora, esse operador ternário acabou, o conceito acabou. Depois disso. Nosso conceito final e importante é a segurança nula. Anteriormente também você usou essa segurança nula, se você se lembrar, era a marca de quociente nesse tipo, o que significa que você também pode conter nulo. Essa segurança nula foi introduzida muito recentemente. Então, se você voltar, seis meses atrás ou no início do final de 2020, você pode dizer que não estará ouvindo ou não usará essa segurança de notas porque não estava no modo de produção. Aconteceu em março de 2021. O conceito de segurança nula foi introduzido oficialmente. Quando declaramos qualquer variável, ela pode conter valor ou pode ser deixada nula por padrão. Isso pode criar erros quando estamos nisso. É por isso que o conceito de segurança nula foi introduzido. Agora, quando declaramos qualquer variável, presume-se que ela não será nula, a menos que declaremos usar determinada palavra-chave, que discutiremos mais adiante. Agora a segurança já estava ativada. Veja aqui, baixos. Já estava ativado aqui. E em flutter, ele está ativado por padrão, então você não tem outra opção de remover. Então, o que foi introduzido no conceito de segurança nula aqui com algumas novas palavras-chave ou operadores. Primeiro é esse ponto de interrogação, que já usamos antes. Usamos isso para denotar que a variável pode continuar. valor real também pode ser nulo. Nesse caso, neste caso, já sabemos que o valor pode ser nulo e vamos lidar com isso de acordo. Não haverá escopo para nenhuma exceção desconhecida, editar o tanque integrando. Como eu levo como Lake, havia uma variável, suponha que string conterá um ID de usuário. E se isso for nulo, será um grande problema porque não poderemos buscar nenhuma informação do nosso banco de dados sem o ID do usuário. Vamos anotá-lo. Vamos escrever se esse amigo de cordas for igual a Elon Musk, ok? Então, não está mostrando nenhum erro. Mas o que acontecerá se escrevermos se string for nula? Agora isso mostrará um erro porque não podemos atribuir um valor a uma string. Mas se nós, se soubermos que esse valor pode ser nulo, então teremos que usar esse operador. Agora, não há um problema. Então, essa variável de amigo será nula. Essa variável de amigo conterá uma string como essa. Portanto, esse é o uso da palavra-chave de marca de quociente. Vamos fazer isso. Vamos fazer mais alguma coisa. Suponha que tenhamos um amigo conjunto de funções. Ele conterá um nome e não aceitará um nome. E vamos apenas dizer nome ponto ToupperCase. E chamaremos essa função aqui. Vamos correr. Acabei de fazer isso. Agora vamos correr. Obviamente. Essa função não foi, foi escrita abaixo, então estava mostrando um somador. Agora, o que acontecerá se tentarmos enviar um valor nulo? Neste caso? Agora ele mostrará um erro porque null não pode ser enviado para uma string. Mas se tornarmos nula segurança, essa área desaparecerá, mas o erro estará aqui porque se for nulo, então como essa função será executada. Porque estamos vendo que a variável de nome num será nula. Mas, novamente, será adicionado pois temos algum tipo de função. Para lidar com isso. Temos que verificar aqui. Se o nome for igual a nulo, somente aqui retornarei a função e não executarei abaixo. Então, agora essa é uma maneira adequada de verificar se o valor é nulo ou não. Portanto, esse conceito é muito importante. E há outra palavra-chave para verificar. Se um valor for nulo, R nada, que é essa palavra-chave, marca de quociente e ponto, que usaremos. Agora, vamos ver. Veja nulo. Portanto, está verificando se esse nome é nulo ou não. Se for nulo, então apenas sprint out null são, se é um nome que é Bill Gates, então o que acontecerá? Ele executará a função. Esta é uma maneira melhor de apenas verificar o nulo. Nulo. O que você diz, se alguma variável for nula ou não. Depois disso, a próxima palavra-chave é necessária. Isso é um, esta é uma mudança que está sendo feita nesse código. Se você se lembra de como, o que, onde, nome, argumentos. Ele vai gostar disso e apenas dizer nome da string e imprimir seu nome. Ele mostrará um erro porque o nome pode ser valor, pode ser nulo. Então, ou temos que usar esse ponto de interrogação. Para resolver isso. Estamos simplesmente escrevendo a palavra-chave obrigatória aqui. Sim, essa palavra-chave, o que simplesmente significa que temos que enviar um valor. Não podemos simplesmente enviá-lo para essa função. Portanto, a dívida é a palavra-chave necessária pelo usuário principalmente nesse tempo juro que os valores podem ser opcionais. Isso está no parâmetro name r. Se você não quiser escrever, eles não querem escrever requerem, então a outra coisa é apenas dar um valor padrão que é suposto convidado, assim e será igual. Portanto, esse é um valor padrão. Se o nome da string estiver contendo nulo, vou testar meu nome e enviar aqui. Desculpe, deve ser pelo menos string. Se eu não estiver enviando nada, então será o nome. Porque não estou dizendo que será nulo porque podemos torná-lo opcional. E se eu escrever máscara de aprendizado P, então o que acontecerá? É, já que é um argumento de nome, deveria ser assim. Valor C estamos programando. Temos que nos certificar de que não cometemos todos esses tipos de erros. Você precisa se lembrar da diferença entre uma variável de nome, parâmetro de nome e um parâmetro posicional. Então, espero que você tenha entendido um pouco sobre segurança, porque esse conceito é muito importante. Depois disso, a próxima palavra-chave, que é essa exclamação para dizer ao compilador que temos muita certeza de que você não será nulo. Estamos confiantes de que a variável sempre terá um valor. Então, somente usaremos essa palavra-chave. Vamos experimentá-lo por conta própria. Agora, vamos supor que temos essa coisa. Novo nome, variável que pode ser nula. Temos aqui. E o que acontecerá se eu enviar essa string para eles, minha função name, que também aceita um parâmetro name, que é uma string. Se eu escrever um novo nome, aqui, você verá que ele mostrará um erro porque estamos enviando uma string que é uma string anulável para uma string. Mas o que acontecerá se mantivermos uma exclamação aqui? O que significa que temos muita certeza de que isso está tendo um valor. Então, para ter certeza de que temos alguma coisa, eles têm muita certeza de que você não será nulo no futuro. Além disso, usamos essa exclamação. Mas lembre-se que essa exclamação é uma coisa muito complicada. Porque se estivermos errados com a nossa coisa, dívida de aposentadoria significa que se você está dizendo que o valor não será nulo, e se o valor for nulo, então teremos esse tipo de erro em nosso aplicativo, o que não é bom. Então você pode estar pensando que é demais para digerir, mas apenas ter alguns pacientes porque definitivamente. Quando estivermos no curso de flutter, entenderemos todos esses conceitos com muita clareza. Então, entendemos palavras-chave como ponto de interrogação, exclamação e, em seguida, a palavra-chave necessária. Agora, a última alteração é a palavra-chave late. É muito simples. Essa palavra-chave é usada quando temos a certeza de que inicializaremos o valor dessa variável posteriormente. O que significa que, não importa o que, quando o objeto dessa classe for criado por spin, inicializaremos nosso v, garantiremos que a variável não seja nula. Então lembre-se se você deixar que ela se esqueça um remetente válido para uma string ou uma variável, ele mostrará erro. Então, se você tem uma turma de alunos, podemos apenas escrever int id tardio, assim, tarde, desculpe nome da string. E isso significa que esse ID será impresso. Arábia Saudita não será deixada nula, não importa o que aconteça. Então, se tivermos a função de id de impressão, certo, Mas int id. Então, está tudo bem. Não mostrará nenhuma era, mas se removermos o botão tardio, veja, então ele será DID é um erro porque está mostrando que primeiro, por favor, tenha um valor aqui como fazer árvore, como este. Mas usando a palavra-chave let, podemos remover esse editor e apenas dizer ao compilador que não leva tanto estresse. Sabemos que essa variável é importante e garantiremos que ela tenha um valor no final da criação do objeto. Então é isso. Esse era o conceito de segurança nula. E dessa forma, esse foi o tópico final do curso sombrio como suor. Se eu sentir como se eu tiver que adicionar alguma coisa no futuro, definitivamente vou adicioná-lo. Mas agora estamos prontos para ir diretamente para o curso de flutter. Obrigado.