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

235
Vistas
Diferencia entre la función de extensión privada de nivel superior y la función de extensión privada dentro de la clase

Actualmente estamos cambiando nuestro proyecto a Kotlin y nos encontramos con la siguiente pregunta:

Necesitamos una cierta función de extensión solo dentro de una clase dada. Por lo tanto, tenemos dos posibilidades: (1) Declarar private la función de extensión en el nivel superior del archivo o (2) declarar private la función de extensión dentro de la clase.

Siguiendo un MCVE :

Ejemplo de nivel superior (archivo C1.kt ):

 private fun String.double() = this.repeat(2) class C1 { init { println("init".double()) } }

Ejemplo de clase interna (archivo C2.kt ):

 class C2 { private fun String.double() = this.repeat(2) init { println("init".double()) } }

Preguntas:

  1. ¿Hay alguna diferencia entre esos dos enfoques, excepto que en C1.kt la función de extensión String.double() también sería visible para otros posibles miembros del archivo (como otras clases en el mismo archivo)?

  2. Dado que queremos lograr un código "lo más kotlinic posible", nos gustaría saber cuál de los dos enfoques es el sugerido. ¿Hay alguna sugerencia oficial/guía de estilo sobre el ejemplo anterior? Creo que se considera una buena práctica declarar las funciones de extensión lo más cerca posible de su uso previsto, por lo que en el ejemplo anterior se sugeriría la estructura de C2 .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  1. ¿Hay alguna diferencia entre esos dos enfoques, excepto que en C1.kt la función de extensión String.double() también sería visible para otros posibles miembros del archivo (como otras clases en el mismo archivo)?

Hay una diferencia: al especificar una función de extensión dentro de la clase (en su ejemplo C2 ), entonces, además, tiene acceso a la instancia de esta clase con la sintaxis calificada this (en su ejemplo this@C2 ).

  1. Dado que queremos lograr un código "lo más kotlinic posible", nos gustaría saber cuál de los dos enfoques es el sugerido. ¿Hay alguna sugerencia oficial/guía de estilo sobre el ejemplo anterior? Creo que se considera una buena práctica declarar las funciones de extensión lo más cerca posible de su uso previsto, por lo que en el ejemplo anterior se sugeriría la estructura de C2 .

Buena pregunta. Personalmente, pondría las funciones de extensión fuera de la clase, ya que (normalmente) especifican un comportamiento relacionado con el tipo extendido y no con el tipo de la clase donde se usan. Sin embargo, si necesita información relacionada con la clase dentro de la función de extensión, la especificaría dentro de la clase.

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