Javascript orientado a objetos segun Buzu

No es novedad que soy un javascripter de hueso colorado. A lo largo de esta carrera por la lucha contra las incompatibilidades entre navegadores, la falta de soporte de los estándares y otros malestares propios del programador que opta por las tecnologías de lado del cliente, he aprendido un montón de cosas, pero una de las mas valiosas es que no hay como un buen objeto. Sin embargo, es necesario un conocimiento robusto y con buenas bases acerca de la tecnología y sus agujeros para poder crear objetos que sean realmente funcionales.

A lo largo de este tiempo, también me he dado cuenta que hay muchos que no tiene ni idea de la programación con objetos y sus beneficios. Muchos cuando tratan de empezar se encuentran con que no hayan por donde empezar y parece que todos los buenos tutos están en inglés. Por esta razón me he decidido escribir esta serie de tutoriales esperando que puedan ser una puerta de entrada al mundo de OOP en javascript. Quiero dejar claro que esta no es una serie de tutoriales para novatos en el mundo de javascript y por lo tanto no me detendré a explicar conceptos que creo demasiado básicos. Sin embargo, y en contraste con lo que acabo de decir, si me detendré un momento a explicar algunos puntos sobre las variables, ya que las eh encontrado base fundamental de los objetos. Me quedo abierto a tus dudas. Si hay algo que no entiendes, no dudes en dejar un mensaje y yo te respondo.

Espero recibir un poco de feedback ya que es eso lo muchas veces alienta a seguir escribiendo.

Primero que nada hablemos sobre variables y por que son importantes en la creación y el entendimiento de como funcionan los objetos.

Las variables son como pequeñas cajitas que nos sirven para guardar valores ya sea numéricos, alfanuméricos, boleanos (falso, verdadero), e incluso funciones y objetos. Piensa en una variable como un papelito en el que escribes una nota para poder recordarla en otro momento.

La importancia de las variables en la programación orientada a objetos (OOP) es que estas nos ayudan a guardar valores que son fundamentales para el funcionamiento de los objetos. Sin variables no hay nada más. El problema con las variables es que muchas veces las vemos como simples valores, cuando en realidad son la base de un buen objeto.

Entender el concepto de las variables y sus distintas formas de comportarse según el ambiente en el que están, es fundamental para entender otros conceptos mas abstractos como el caso de los closures, al cual nos acercaremos en artículos posteriores.

Hay diferentes formas de declarar una variable y distintos lugares en los cuales hacerlo y estos determinan el comportamiento de una variable. Veamos primero las formas de hacerlo:

Usando var:

Usar la palabra var es una de las formas mas comunes de crear una variable. Es tambien una de las razones de algunos problemas de novato, pero que hasta los desarrolladores experimentados cometemos alguna vez. Lo que pasa es que usando la palabra var, creamos una variable local al territorio en el que nos encontramos. Ah si, olvide mencionar que hay varios “territorios”, pero creo que eso lo explica mejor una imagen.

nivelesenjs1

De este modo tenemos que daca función define su propio territorio. Para ser sincero no se si se les llama territorios, en Inglés (el lenguaje en el que he aprendido casi todo lo que se) se les llama scope.

Una variable declarada con var dentro de la función moveLinks no puede ser accesada desde otra función al mismo nivel o un nivel mas arriba de moveLinks por que la variable es local al territorio de moveLinks. En otras palabras, esta contenida dentro de ese territorio y no puede salir de ahi. Ah si, otra vez olvidé mencionar que también hay niveles y de nuevo, eso quizá lo explica mejor un imagen.

nivelesenjs2

De este modo, la variable “extra”, declarada dentro de la función init, al ser declarada con la palabra var, no puede ser accesada desde addEvent o mOver (las otras dos funciones en negro) debido a que estas están al mismo nivel de init y no pueden acceder una variable local que no sea local a ellas mismas o a un función declarada un nivel mas arriba dentro del mismo territorio. Se que suena confuso, pero es muy sencillo una vez que captas la idea principal.

Ese concepto que acabo de explicar es uno de los conceptos que es necesario entender para poder darle con duro a los closures, así que te recomiendo que lo analices bien y de nuevo, si tienes dudas, deja un comentario y yo te contesto.

En resumen, tenemos que una variable declarada con var es local a la función en que dicha variable fue declarada, esta “presa” dentro del terriotorio de dicha función y no puede ser accesada (en teoría) mas que por la función en donde fue creada o una funciona en un nivel mas abajo de dicha función que esté contenida dentro del territorio de la función en que la variable fue creada. En otras palabras, una función contenida dentro de la función en donde la variable fue creada. Eso fue mas fácil no?

Te preguntarás por que he puesto entre paréntesis “en teoría”. Esto es por que si hay formas de acceder a una variable local desde fuera de la función en la que esta fue creada, pero eso lo veremos después.

Sin usar var

Cuando no usas var, la cosa es mas sencilla, pero menos recomendable desde un punto de vista OOP. Toda variable declarada sin usar la palabra var es global y puede ser accesada desde cualquier lugar.

Esta sea quiza la explicacion de la diferencia entre usar var y no usar var mas larga que hayas leido, pero como lo he dicho ya, entender esta diferencia es clave si realmente quieres aprender OOP en javascript. En siguientes articulos de la serie estaré tratando temas más interesantes. Por ahora eso es todo.

6 thoughts on “Javascript orientado a objetos segun Buzu

  1. Hola! Felicidades por tu blog! excelente los articulos sobre POO en Javascript… solo una pequeña nota: scope se puede traducir mejor como “alcance” en vez de “territorio”.

    Saludos!

    • Que tal horroroso? pues gracias por la nota. Sin duda la tendré en cuenta. Realmente no sabía como decir eso del scope en español (que vergüenza). Como todo lo he aprendido en inglés… Gracias. Creo que se oye y se entiende mejor con alcance.

Comments are closed.