Getters e Setters em Dart and Flutter

Getters e Setter em Dart e Flutter.


Como em muitos outros idiomas, getters \ setters são métodos que dão acesso de leitura / gravação às propriedades do objeto.


Neste artigo, veremos exemplos simples e os executaremos no dartpad.



No Dart, a leitura e gravação de quaisquer propriedades de objetos é implementada usando getters \ setters.


Por exemplo, veja o código


class Person { String name; int birthYear; Person(this.name, this.birthYear); } void main() { Person person = Person('username', 1990); print('Hello ${person.name}, you was born in ${person.birthYear}'); person.name = 'Newusername'; print('Hello ${person.name}, you was born in ${person.birthYear}'); } 

Execute o código no Dartpad.


Cada propriedade nesta classe possui um setter implícito para gravar nele e um getter implícito para obter o valor.


Quando chamamos person.name = 'Newusername'; então nos voltamos para a classe setter. E depois disso obtemos seu valor person.name usando getter.


No Dart, podemos (e isso é recomendado para abstração de código) criar nossos próprios getters e setters. Isso nos permite inicializar nossas classes com propriedades e, no futuro, envolvê-las com métodos diferentes sem alterar o código do cliente.


Por exemplo, digamos que nosso projeto com a classe Person tenha evoluído e precisamos determinar a idade da maioria. Podemos fazer isso sem alterar o construtor e as propriedades básicas do objeto.


 class Person { String name; int birthYear; bool get isAdult => (DateTime.now().year - birthYear) > 18; Person(this.name, this.birthYear); } void main() { Person personAdult = Person('adultUser', 1990); print('Hello ${personAdult.name}, you was born in ${personAdult.birthYear}, you are ${personAdult.isAdult ? 'adult' : 'not adult'}'); Person personNotAdult = Person('adultUser', 2005); print('Hello ${personNotAdult.name}, you was born in ${personNotAdult.birthYear}, you are ${personNotAdult.isAdult ? 'adult' : 'not adult'}'); } 

Execute o código no Dartpad.


Executando o código no Dartpad, vemos que adicionamos um novo comportamento de classe, enquanto o código do cliente já criado não será afetado e tudo continuará funcionando.


Da mesma forma, se em alguma parte do projeto começamos a trabalhar com a idade, e não com a data de nascimento, podemos adicionar o setter para registrar o aniversário ao indicar a idade.


 class Person { String name; int birthYear; bool get isAdult => (DateTime.now().year - birthYear) > 18; int get age => (DateTime.now().year - birthYear); set age(int val) => birthYear = (DateTime.now().year - val); Person(this.name, this.birthYear); } void main() { Person personAdult = Person('adultUser', 1990); print('Hello ${personAdult.name}, you was born in ${personAdult.birthYear}, you are ${personAdult.isAdult ? 'adult' : 'not adult'}'); Person personNotAdult = Person('adultUser', 2005); print('Hello ${personNotAdult.name}, you was born in ${personNotAdult.birthYear}, you are ${personNotAdult.isAdult ? 'adult' : 'not adult'}'); //check how setter work print(personAdult.birthYear); personAdult.age = 5; print(personAdult.birthYear); } 

Execute o código no Dartpad.


Em geral, getter e setter são usados ​​com tanta frequência que sua criação automática é incorporada ao Android Studio. Quando o cursor na propriedade é pressionado, Command + N (no Windows, Ctrl + N) e sua criação fica no menu de contexto.


Boa codificação para todos!

Source: https://habr.com/ru/post/pt464095/


All Articles