Comprendiendo las clases de TypeScript

TypeScript
TypeScript

TypeScript

Después de dos entradas sobre TypeScript, (funciones) llega una entrada para hablar sobre las clases.

Las clases no existen en Javascript

Y es que el concepto de clase que se tiene en otros lenguajes como Python o C# no existe como tal en Javascript, y claro … cuando hay que trabajar con aplicaciones grandes, las clases facilitan la vida.

Teóricamente, en Javascript, las clases se declaran de 3 formas, que puedes ver con más detalle en esta entrada (no voy a repetir código): http://www.phpied.com/3-ways-to-define-a-javascript-class/. Además, ya puse este link sobre patrones de Javascript (y de jQuery), donde explican qué es lo recomendado y qué no: http://shichuan.github.io/javascript-patterns/.

En ningun caso hay una palabra reservada class como hay en otros lenguajes, y la creación de propiedades, métodos y funciones es un poco “liosa”, porque se puede hacer lo mismo de múltiples formas, pero además tienes que usar Prototype. La programación basada en prototipo es un modelo de programación orientada a objetos que no usa clases, sino más bien logra reutilización comportamiento (equivalente a la herencia en lenguajes basados en clases) decorando (o la ampliación a) existente objetos prototipo.

Copiando el modelo de C#

La nueva versión de Javascript EMACScript6 incorpora las clases: www.sitepoint.com/understanding-ecmascript-6-class-inheritance/. Otro de los aspectos fundamentales de las clases son los getters y setters (presentes desde EMACScript5, pero no en EMACScript 3), que facilitan que la información incorporada a la clase sea la correcta (o lo intente).

class FooBar{
constructor(foo) {
this.foo = foo;
this._bar = 0; }
get bar() { return this._bar;}
set bar(value) { this._bar = value; }
doFoo() {console.log("Hi! "+ this.foo);}
}

Personalmente, esta forma de definir las clases está más próxima a Python o C# que a Javascript, de ahí que aprender TypeScript sea para mi fundamental. Ya he comentado en múltiples entradas que Javascript es un lenguaje que “odio” profundamente, porque está todo permitido, pero nada está recomendado.

Variables privadas

En Javascript no existe el compromiso de que todas las variables que empiecen por _ sean privadas, es más, todas son públicas, o al menos accesibles. Y realmente, el tema de las variables privadas es un tema serio, porque “forzar” a que las variables sean privadas tiene truco. Aquí puedes leer varias soluciones propuestas: http://eclipsesource.com/blogs/2013/07/05/private-members-in-javascript/. Aquí tienes otra entrada sobre el mismo tema: http://blogs.msdn.com/b/eternalcoding/archive/2014/08/05/javascript-using-closure-space-to-create-real-private-members.aspx?WT.mc_id=12833-DEV-sitepoint-othercontent.

TypeScript viene a simplificar las cosas

Es evidente que si te has leido las entradas a las que he vinculado, es porque conoces bien el problema o has aplicado alguna de sus soluciones. ¿no crees que en cualquier caso, todo es muy complejo? Yo, así lo creo, de ahí que aprender Javascript es complicado.

Siguiente paso, poner en marcha las clases.

Como ves, seguimos dando pasos para que Javascript resulte más agradable. Gracias TypeScript!