¿Es bueno que Kotlin permita la extensión de los tipos existentes?

No, esto no es un antipatrón. En js es un antipatrón porque js es dinámico y, por lo tanto, cambiar un prototipo cambia la forma en que funciona el código en tiempo de ejecución, lo que lo convierte en un antipatrón. Esto también es extremadamente peligroso en función del funcionamiento del operador in y del hecho de que puede reescribir todo , por lo que cambiar un prototipo puede afectar el código en algún lugar de su página:

Number.prototype.toString = function(){
 return "bullshit";
};

alert(""+12);

En kotlin, este no es el caso, ya que kotlin es estático y todas las referencias se crean en tiempo de compilación . Además, no puede sobrescribir los métodos existentes, por lo que no es peligroso en absoluto.

Respuesta 1

No puede comparar un lenguaje prototipo como JS con Kotlin. Todas las extensiones se resuelven estáticamente y no modifican el tipo extendido ("receptor"). Esto es realmente importante e invalida su preocupación. Consulte la documentación para obtener más información sobre las cosas que suceden con las extensiones en segundo plano (compilador).

Sin embargo, en mi opinión, debes tener cuidado con las extensiones. No permita que todos los desarrolladores de un proyecto de Kotlin agreguen nuevas extensiones a tipos aleatorios. Creo que el proyecto debe definir ciertas reglas que manejan el proceso de definir nuevas funciones / propiedades en los tipos existentes, porque de lo contrario puede ser difícil leer el código extranjero. También debe haber lugares firmes donde colocar esas extensiones.

Respuesta: 2

No, no es bueno. Es muy malo que Kotlin permita extensiones de tipos existentes.

Con las extensiones no hay ninguna razón para crear una jerarquía de clases o incluso crear una nueva definición de clase para el caso.

Los creadores de Kotlin también podrían haber usado erlang en lugar de tomarse la molestia de crear extensiones.

Las extensiones significan que ya no puede confiar en que una definición de clase sea constante. Imagine todo el tiempo que la gente va a pasar solo para encontrar las extensiones "creativas" de un desarrollador, y mucho menos para depurarlas.

Respuesta: 3

Varios idiomas ya tenían esto. El problema con JavaScript es la forma en que funciona, como se indica en la respuesta del enlace.

JavaScript tiene un par de formas de anular la propiedad. Una biblioteca podría haber definido muy bien una anulación, pero la otra la anula nuevamente. La función se llama desde ambas bibliotecas, se desata el infierno.

Es más un sistema de tipos y un problema de visibilidad en mi opinión.

Respuesta: 4

¿Hay alguna forma de optimizar Jython sin recurrir a la creación de perfiles o cambiar significativamente el código? Específicamente, ¿hay alguna bandera que se pueda pasar al compilador, o sugerencias de código en apretado ...

// Convierte un nombre en una clave usando radix-26: // Usa todas las letras del alfabeto como dígitos. // Supongamos que solo tratamos con letras minúsculas por simplicidad. // Entonces puedes crear la raíz (...

Estoy buscando grandes proyectos Java (más de 100 MB) de código abierto. ¿Alguien sabe algo? Nota: Estoy marcando esto como wiki comunitario, aunque no estoy seguro de si es correcto.

Digamos que tengo algo como esto en mi archivo web.xml. <filter name = "foo"> <init-param> <param-name> fooBarUrl </param-name> <param-value> http: //foo.bar ...