“Any fool can write code that a computer can understand, but good programmers write code that humans can understand.”
Martin Fowler
«Cualquier tonto puede escribir código que una computadora pueda entender, pero buenos programadores pueden escribir código qué humanos pueden entender.»
Martin Fowler
Classes
Las clases son similares a las structs, te permiten nuevos tipos de datos, con propiedades y métodos.
Las clases tienen por lo menos cinco diferencias principales con las Clases
Creating your own classes
La primera es que las clases no vienen un un inicializador por default, siempre debes crearlo tú.
class Perro {
var nombre: String
var raza: String
init(nombre: String, raza: String) {
self.nombre = nombre
self.raza = raza
}
}
Crear instancias de una clase es igual que crear instancias de una estructura.
let cachorrito = perro(nombre: "Toby", raza: "Poodle")
Class inheritance
La segunda diferencia es que puedes crear una clase partir de otra clase ya existente, esto hereda todas las propiedades y métodos de la clase padre.
Por ejemplo creemos una clase en base a nuestra clase anterior Perro
class Sabueso: Perro {
}
Esta clase nueva hereda el inicializador y los parámetros de su clase padre
Aun así podemos crear un inicializador propio de Sabueso por ejemplo ya que sabemos que nuestro perro es un sabueso podemos iniciar nuestra clase sabueso solo con el nombre.
Sin bien la herencia es algo genial, no es algo que siempre queramos, por ejemplo si queremos marcar nuestras clases como finales y evitar que otros desarrolladores remplacen nuestros métodos solo debemos marcar la clase como final.
final class Perro {
var nombre: String
var raza: String
init(nombre: String, raza: String) {
self.nombre = nombre
self.raza = raza
}
func ladrar (){
print("¡Guau! ¡Guau! ¡Guau!")
}
}
Cómo vemos eso impide la herencia.
Copying objects
La tercera diferencia entre clases y estructuras es lo que ocurre al copiarla
Al copiar una estructura, tanto la original como la copia son instancias diferentes, cambiar una no afecta la otra.
Cuando copias una clase, tanto la original como la copia son la misma, cambiar algo en una afecta a la otra.
let cachorrito = Perro(nombre: "Toby", raza: "Poodle")
let copiaDeCachorrito = cachorrito
copiaDeCachorrito.nombre = "Firulais"
print(cachorrito.nombre)
Al correr este código veras que al editar la copia de cachorrito también afecta al original. Esto ocurre por que ambas instancias apuntan al mismo espacio en al memoria
Deinitializers
La curta diferencia entre clases y estructuras es que las clases pueden tener «Deinitializers» código que se ejecuta cuando una instancia de la clase es destruida.
Para crear un Deinitializer usamos la palabra reservada «deinit»
class Chihuahua: Perro {
init() {
super.init(nombre: "Panchito", raza: "Chihuahua")
print("¡Ahy ahy \(nombre) esta vivo!")
}
deinit {
print("¡Ahy ahy 🤧😭 \(nombre) ya se murio!")
}
}
for _ in 1...3 {
let perro = Chihuahua()
}
Eso fue divertido
Mutability
La quinta y ultima diferencia entre clases y estructuras es la manera en como lidian con las constantes
En una estructura si tenemos una instancia que es una constante, y dentro de ella variables, la variable no puede ser cambiada pues toda la estructura es una constante.
Sin embargo en una clase si tenemos una instancia que es una constante y dentro tenemos una variable esta si que puede ser cambiada, por eso clases no necesitan mutating en sus métodos que cambian propiedades.
Si queremos evitar que esto pase debemos definir nuestra parámetro como una constante.
class Perro {
//ahora ya no podrá ser cambiado
let nombre: String
var raza: String
init(nombre: String, raza: String) {
self.nombre = nombre
self.raza = raza
}
func ladrar (){
print("¡Guau! ¡Guau! ¡Guau!")
}
}
Resumen
Las clases y las estructuras son similares, ambas pueden crear tipos de datos personalizados, con sus propias propiedades y métodos
Las clases pueden heredar propiedades y métodos a otras, mediante un sistema de jerarquía llamado herencia en el cual creas clases a partir de otras
Puedes evitar la herencia marcando tu clase como final
El remplazo de métodos en una clase hija permite crear un remplazo del método de la clase padre con su propia implementación esto en POO se conoce como polimorfismo.
Cuando dos variables (o instancias) apuntan a la misma clase ambos comparten el mismo espacio de memoria, modificar una modifica a la otra.
Las clases tienen desinicializadores que es código que corre cuando una instancia de la clase es destruida.
Las clases aunque sean constantes pueden ser modificadas si alguna de sus propiedades es una variable.
//y bueno esas fueron mis notas para clases sin duda un tema super interesante y muy relacionado con POO
Ahora que comienzo mi blog personal decidí usar WordPress mas que nada por que no tenia ganas por el momento de reinventar la rueda y lo cierto es que como blog funciona a la perfección.
Aun así algo es claro y eso es; que el estilo CSS del tema por defecto no coincide con el de mi pagina web principal por tanto me decidí a investigar como editar el estilo css del tema de WordPress y ademas darle soporte para modo oscuro.
Es mas fácil editar el estilo desde CSS adicional en Apariencia > Temas > Personalizar > CSS adicional pero hay que estar inspeccionando los elementos para encontrar las clases por lo que es más fácil editarlo directamente desde el archivo css principal.
Para comenzar encontré que es posible editar el CSS del tema en Apariencia > Editor de temas
Al parecer al Inicio hay un indice de lo que contiene el archivo CSS principal ya que el cero se supone que es para reiniciar el estilo vamos a dejarlo tal y como esta.
Así que comienzo añadiendo mis constantes de colores
Ahora esto hace que me marque errores en el código pero los ignoraremos por ahora.
para que nuestro sitio se adapte al modo oscuro o claro del dispositivo del usuario añadiremos estas dos etiquetas
@media (prefers-color-scheme: dark) {
body {
background: var(--blacktwo);
}
}
@media (prefers-color-scheme: light) {
body {
background: var(--greelc);
}
}
Como puede verse he añadido mis dos constantes de color como fondo solo para probar si esta funcionado, así que ahora solo hay que hacer click en el botón actualizar archivo y recargar el sitio sin cache.
Modo claroModo oscuro
Ademas de editar el archivo CSS fue necesario editar un archivo php así que trate de elegir un color que funcionara tanto en modo oscuro como claro.
Ademas de editar el css fue necesario editar functions.php
Nota: al editar directamente en el editor del tema el css adicional que hagas quedara incrustado como una etiqueta style al principio del body del sitio así que tendrá prioridad.
Después de editar mi código tanto en personalizar tema como en archivo css principal y el php obtuve este resultado.
Antes de terminar me di cuenta me había faltado definir otro color para las categorías en el modo claro y no se veían por ser del mismo color que el del tema de fondo.
y por ultimo el toque final
power by WordPress & landercorp.mx
con eso ya queda listo mi blog para comenzar a narrar mis aventuras haciendo sitios WEB y aplicaciones en SwiftUI