16 dicas de desenvolvimento para o Android no Kotlin. Parte 1



Antes de ler essas dicas, você deve ler a documentação do Kotlin e aprender o idioma em try.kotlinlang.org . Como essas dicas visam especificamente o uso do Kotlin no contexto do desenvolvimento do Android, você também deve ter experiência com o SDK do Android. Também é aconselhável se familiarizar com o plug-in Kotlin e o uso do Kotlin com o Android Studio do JetBrains (criadores do Kotlin)

Dicas básicas do Kotlin para Android


Carregamento lento


O carregamento preguiçoso tem várias vantagens. Por exemplo, como:

  • Você economiza tempo de inicialização porque o carregamento de alguns dados atrasa até que seja necessário. Isso é especialmente verdadeiro para o Android, porque o usuário verá o conteúdo do aplicativo mais rapidamente, em vez de um longo tempo de espera para iniciar e assistir ao toque no download.
  • Você economiza memória, porque o recurso é carregado na memória do dispositivo somente mediante solicitação. Isso é especialmente importante para plataformas móveis, porque os recursos dos telefones celulares são bastante limitados.

Por exemplo, se você estiver criando um aplicativo de compras no qual os usuários serão guiados principalmente por sua escolha, o carregamento lento poderá ser configurado na API de compras real, por exemplo, algo como isto:

 val purchasingApi: PurchasingApi by lazy { val retrofit: Retrofit = Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(MoshiConverterFactory.create()) .build() retrofit.create(PurchasingApi::class.java) } 

O resultado do uso de um download tão lento é que, se o usuário não tentar fazer uma compra no aplicativo, você não fará o download e usará recursos não reclamados.

O carregamento lento também é uma boa maneira de encapsular a lógica de inicialização, por exemplo:

 val bounds: RectF by lazy { RectF(0f, 0f, width.toFloat(), height.toFloat()) } 

Assim que a primeira chamada é feita, uma instância do RectF é criada com base na largura e altura atuais da visualização, o que elimina a necessidade de criá-la separadamente e definir esse objeto.

Getters e setters personalizados


Para ler configurações personalizadas na linguagem Kotlin, um modelo estrutural com comportamento especificado do usuário é usado para obter e definir campos. Ao usar modelos para estruturas específicas, como o SDK do Parse, você seleciona valores que não são variáveis ​​de classe local, mas que são recuperados e armazenados usando um método customizado, por exemplo, no JSON.

Usando métodos de aquisição e instalação definidos pelo usuário, podemos simplificar o acesso, por exemplo:

 @ParseClassName("Book") class Book : ParseObject() { // getString() and put() -  ParseObject var name: String get() = getString("name") set(value) = put("name", value) var author: String get() = getString("author") set(value) = put("author", value) } 

A recuperação desses valores será semelhante ao uso da sintaxe de acesso à propriedade em outros modelos, como:

 val book = api.getBook() textAuthor.text = book.author 

Agora, se você precisar transferir seu modelo do Parse para outra fonte de dados, o código praticamente não precisará ser alterado.

Lambda


Lambdas reduzem a duplicação de linhas de código no arquivo de origem e permitem o uso de programação funcional. Embora atualmente as lambdas sejam usadas pelo Android, o Kotlin as leva a um novo nível, garantindo que você não precise lidar com a Retrolambda ou alterar a maneira como cria.

Por exemplo, ouvir um arquivo seria algo como isto:

 button.setOnClickListener { view -> startDetailActivity() } 

E é assim que funciona com valores de retorno:

 toolbar.setOnLongClickListener { showContextMenu() true } 

No Android SDK, muitas vezes, é necessário implementar um desses métodos. O lambda lida com isso com um estrondo.

Classes de dados


As classes de dados simplificam as classes adicionando automaticamente os métodos equals() , hashCode() , copy() e toString() . Eles esclarecem quais dados devem ser usados ​​no modelo, separando os dados da lógica.

Por exemplo, aqui está uma classe de dados:

 data class User(val name: String, val age: Int) 

Isso é tudo. Nada mais é necessário para o seu trabalho. Se você usar classes de dados com algo semelhante ao Gson ou outra biblioteca de tipos JSON, poderá criar um construtor padrão com valores padrão, por exemplo:

 data class User( @SerializedName("name") val name: String = "", @SerializedName("age") val age: Int = 0 ) 

Filtragem de conjunto de dados


Ao trabalhar com a API, surge constantemente a necessidade de processar coleções. Na maioria das vezes, eles precisam ser filtrados ou modificados.

Usando as coleções de filtragem Kotlin, você pode tornar o código mais simples e mais compreensível. Você pode especificar o conteúdo de uma lista de resultados filtrando coleções, por exemplo, assim:

 val users = api.getUsers() val activeUsersNames = items.filter { it.active } adapter.setUsers(activeUsers) 

Os métodos de filtragem de coleção incorporados do Kotlin são muito semelhantes aos métodos usados ​​em outras linguagens de programação como Java 8 ou ao trabalhar com tipos de coleção Swift. Métodos unificados de filtragem de coleções simplificam a compreensão mútua ao se comunicar com os funcionários sobre a necessidade de executar operações específicas para obter e exibir as listas de itens necessárias.

Isso conclui a primeira parte do artigo e o convida a participar de um seminário on- line gratuito sobre o tópico: "Teste de unidade no Android" .

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


All Articles