Sobrecarga do operador Kotlin (com exemplos)

Índice

Neste artigo, você aprenderá sobre a sobrecarga do operador (definir como o operador funciona para tipos definidos pelo usuário, como objetos) com a ajuda de exemplos.

Quando você usa o operador no Kotlin, sua função de membro correspondente é chamada. Por exemplo, a expressão a+btransforma-se a.plus(b)em algo subjacente.

 fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )

Quando você executa o programa, a saída será:

 15

Na verdade, a plus()função está sobrecarregada para funcionar com vários tipos básicos de Kotlin e String.

 // + operador para tipos básicos operator fun plus (outro: Byte): Int operator fun plus (other: Short): Int operator fun plus (other: Int): Int operator fun plus (other: Long): Oper operator fun plus (outro: Float): Float operator fun plus (other: Double): Double // para string operador de concatenação fun String? .plus (outro: Any?): String 

Você também pode definir como o operador funciona para objetos, sobrecarregando sua função correspondente. Por exemplo, você precisa definir como o +operador funciona para objetos, sobrecarregando a plus()função.

Exemplo: Sobrecarga + Operador

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) : Point ( return Point(x + p.x, y + p.y) ) )

Quando você executa o programa, a saída será:

 soma = (5, 1)

Aqui, a plus()função é marcada com a operatorpalavra-chave para informar ao compilador que o +operador está sendo sobrecarregado.

A expressão p1 + p2é transformada em p1.plus(p2)sob o capô.

Exemplo: - Sobrecarga do operador

Neste exemplo, você aprenderá a sobrecarregar o --operador. A expressão --aé transformada em a.dec()sob o capô.

A dec()função de membro não aceita nenhum argumento.

 fun main(args: Array) ( var point = Point(3, -8) --point println("point = ($(point.x), $(point.y))") ) class Point(var x: Int = 0, var y: Int = 10) ( operator fun dec() = Point(--x, --y) )

Quando você executa o programa, a saída será:

 ponto = (2, -9) 

Lembre-se disso,

 operador fun dec () = Point (- x, --y)

é equivalente a

 operador fun dec (): Point (return Point (- x, --y))

Alguns pontos importantes

1. Ao sobrecarregar os operadores, você deve tentar manter o espírito original do operador. Por exemplo,

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) = Point(x - p.x, y - p.y) )

Embora o programa acima seja tecnicamente correto, usamos o +operador para subtrair as propriedades correspondentes de dois objetos que tornaram o programa confuso.

2. Ao contrário de linguagens como Scala, apenas um conjunto específico de operadores pode ser sobrecarregado no Kotlin. Visite a página para saber mais sobre os operadores que podem ser sobrecarregados no Kotlin e suas funções-membro correspondentes.

Artigos interessantes...