Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
¿Por qué los métodos de clase delegada getValue y setValue deben marcarse con la palabra clave del operador?

Este es un ejemplo de la documentación de propiedades delegadas .

 import kotlin.reflect.KProperty class Delegate { operator fun getValue(thisRef: Any?, property: KProperty<*>): String { return "$thisRef, thank you for delegating '${property.name}' to me!" } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) { println("$value has been assigned to '${property.name}' in $thisRef.") } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto se debe a que las propiedades delegadas se definen por convención . Lo que esto significa es:

[su] semántica se define a través de la expansión sintáctica de una forma de sintaxis en otra forma de sintaxis.

Puede ver la expansión de una propiedad delegada más abajo en la página de documentación :

 class C { var prop: Type by MyDelegate() } // this code is generated by the compiler instead: class C { private val prop$delegate = MyDelegate() var prop: Type get() = prop$delegate.getValue(this, this::prop) set(value: Type) = prop$delegate.setValue(this, this::prop, value) }

Y una de las características de una sintaxis que se define por convención, es que (del primer enlace):

Todas las expresiones de llamada producidas por expansión solo pueden usar funciones de operador.

y también:

Esta expansión de una forma de sintaxis particular a una pieza diferente de código generalmente se define en términos de funciones de operador.

Solo para darle más ejemplos, el primer enlace muestra más ejemplos de sintaxis definidas por convención. Aquí están las funciones de operador correspondientes relacionadas con ellos:

Sintaxis definida por convención Funciones de operador relacionadas
Operadores aritméticos y de comparación plus , compareTo , etc.
invoke convención invoke
Asignaciones de formulario de operador plusAssign , minusAssign etc.
Declaraciones de bucle for iterator , hasNext , next
Propiedades delegadas getValue , setValue
Destrucción de declaraciones component1 , component2 , etc.

Tenga en cuenta que debe colocar la palabra operator en todas esas funciones para que funcione la sintaxis correspondiente. En otras palabras, " operator " significa que esta función puede usarse en una sintaxis definida por convención.

over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro de entender su pregunta correctamente, pero agregamos un operator para marcar funciones no solo como funciones regulares, sino como funciones designadas para proporcionar alguna funcionalidad específica. Esto no se limita realmente a las propiedades delegadas, es lo mismo para todos los operadores.

Creo que marcar como operadores tiene al menos dos beneficios. Primero, es explícito para el lector que la función se puede usar con alguna característica del lenguaje. En segundo lugar, ayuda a evitar situaciones en las que teníamos la intención de proporcionar algún operador, pero cometimos un error, por ejemplo, en los tipos de parámetros, por lo que se ignora en silencio. El operator nos dice inmediatamente si la firma de la función es correcta o no.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda