2
respostas

Como funciona os generics, fiz uma breve explicação sobre o que eu entendi.

Essa primeira sintaxe não entendi o pq declarar. Se alguém poder me dar uma explicação, vai me salvar :)

public inline fun <T, R>

1º Disponibilizo a extension map, para todas as classes que herdem de Interable.

Interable<T>.map

2º Eu tenho uma variavel do tipo função, pode receber (T) parametro de qualquer tipo. E o retorno R retornar qualquer coisa

(transform: (T) -> R)

4ª R singifica que eu posso retornar uma lista de qualquer tipo

:List<R>

5ª Aqui o R ele difini que qualquer tipo poderá ser passado.

return mapTo(ArraysList<R>(collectionSizeOrDefault(10)))

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá Thailan, tudo bem?

A sintaxe que você mencionou é a declaração de um tipo genérico em Kotlin. A letra "T" representa um tipo genérico que será definido posteriormente, assim como a letra "R".

Essa sintaxe é muito utilizada em funções e classes que precisam ser flexíveis em relação ao tipo de dado que irão manipular. Dessa forma, é possível criar uma função que possa receber diferentes tipos de parâmetros e retornar diferentes tipos de resultados, sem precisar criar uma função para cada tipo.

No seu exemplo, a função map é uma extensão da interface Iterable, que é uma interface que define um conjunto de operações que podem ser realizadas em coleções de dados. A função map recebe como parâmetro uma função transform que recebe um tipo T e retorna um tipo R.

O tipo R é utilizado para definir o tipo de dado que será retornado pela função map. No caso do seu exemplo, a função map retorna uma lista do tipo R.

O tipo T é utilizado para definir o tipo de dado que será recebido como parâmetro pela função transform. No seu exemplo, a função transform recebe um parâmetro do tipo T.

Espero ter ajudado a esclarecer suas dúvidas sobre generics em Kotlin. Se tiver mais alguma pergunta, não hesite em perguntar.

Espero ter ajudado e bons estudos!

Mais uma dúvida:

Sempre quando eu for criar um metodo que contenha parametros e retornos genérico, eu tenho que seguir essa sintaxe, essa abordagem ela se chama variance, certo?

public inline fun <T, R>

Porém quando apenas o parametro for genérico, isso seria chamado de Contravariance

fun consumer(t: T) 

E quando tenho apenas o retorno genérico seria convariance

  fun producer(): T

Seria isso?