En Swift tienes muchas formas de marcar tus métodos, puedes hacerlos: Públicos, privados, mutables, finales, etc. Es por ello que en esta oportunidad te hablaremos sobre final clases o métodos, es decir, qué sucede cuando un método se marca como final.
La palabra clave final de Swift a menudo se pasa por alto, o se descarta por no ser necesaria. Sin embargo, la realidad es que aplicar esta palabra clave final es una técnica sutil que puede optimizar tu código de una manera poderosa. A continuación te explicamos más al respecto:
¿A qué se refiere la palabra clave final en clases o métodos?
Si un método, propiedad está marcado como final, no puede ser sobreescribir. Las clases también se pueden marcar como finales.
Herencia
Para definir qué es la palabra clave final, es necesario hablar de herencia. En este sentido, es importante que consideres que no tiene razón de ser el prefijar una definición de tipo, de un tipo de valor con la palabra clave final. De hecho, si se realiza, el compilador arrojará un error de tiempo de compilación.
¿Por qué sucede esto? Sencillo, si antepones una definición de clase final, evitas que alguien pueda heredar de esa clase. Los tipos de valor no admiten la herencia, por lo que no tiene sentido marcar una estructura o enumeración como final.
La palabra clave final le comunica al compilador que la clase no puede ni debe ser heredada. Por ello, aplicar el modificador final a una definición de clase es una señal clara.
Sin embargo, es importante que sepas que aplicar final a una clase no es la única opción que tienes. De hecho, es posible aplicar final de forma más sutil.
No se puede sobreescribir ningún método, propiedad o subíndice que tenga el prefijo del modificador final. Esto es útil si una propiedad, método o subíndice no se puede declarar como private o fileprivate, pero no deseas que las subclases lo sobreescriban.
¿Para qué y cómo se utiliza?
Aunque la herencia de clases es muy útil, y de hecho, gran parte de las plataformas de Apple requieren que la uses, sabemos muy bien que a veces puedes querer impedir que otros desarrolladores creen su propia clase basada en la tuya.
Swift proporciona una palabra clave final solo para este propósito: Cuando declaras una clase como final, ninguna otra clase puede heredar de ella. Esto significa que no pueden sobreescribir tus métodos para cambiar su comportamiento; necesitan usar tu clase de la forma en la que fue escrita.
Para hacer que una clase sea final, simplemente coloca la “final” antes, de la siguiente manera:
1 2 3 4 5 6 7 8 9 |
final class Dog { var name: String var breed: String init(name: String, breed: String) { self.name = name self.breed = breed } } |
Lenguaje intermedio rápido (SIL)
Finalmente, si hablamos de final clases y métodos es necesario que sepas que Swift tiene su propio lenguaje intermedio, que utiliza el optimizador de Swift para realizar optimizaciones de lenguaje específicas.
Para concluir, agregar final a tu método es mucho más que solo un error de tiempo de compilación. Realmente, optimiza internamente tu código, genera una representación más eficiente, y además puede resultar en una ejecución más rápida. Por ello, la próxima vez que crees un método y no quieras que sea sobreescrito, recuerda marcarlo como final.
¿Qué te pareció el principio YAGNI? Dejame tu comentario y no te olvides de compartirla 😄