Strict Data Typing: Mantén a Salvo tu Cordura

A pesar del tiempo que tienen ya AS2 y AS3, aún existe mucha gente que desconoce el Strict Data Typing y escriben su código del mismo modo como se hace en AS1 o PHP, por lo que podemos ver cosas como ésta:

miVariable = "Hola Mundo";

Que no es muy diferente a lo que haríamos en PHP:

$miVariable = "Hola Mundo";

Como se dan cuenta, la única diferencia entre uno y otro, es el signo de dólar ($) que identifica a un variable en PHP.

Claro que en este momento puedes decir: “Sí, yo lo hago así y me parece genial porque puedo poner distintos valores, de distintos tipos, en la misma variable”. E incluso puedes pensar que eso te hace c00l, que ahorras memoria porque puedes hacer varias cosas con la misma variable y que estás contribuyendo al bienestar de los niños del mundo…

Pues, mi querido(a) amigo(a), lamento tener que informarte que estás equivocado, y ahora veremos por qué:

¿Qué es el Strict Data Typing?

Bien, el Tipeo Estricto de Datos no es más que una regla que nos permite asegurarnos acerca del tipo de dato que tendrá una variable específica, evitando que, accidentalmente, introduzcamos un valor de tipo equivocado en nuestro código.

El modo como funciona el Strict Data Typing en AS2 y AS3 es el siguiente: var nombreVariable:TipoDato

¿Por Qué Adoptar el Strict Data Typing?

La razón principal es sencilla: control sobre el código. Pocas cosas son tan frustrantes como un código que no da errores pero tampoco los resultados esperados. Además que los errores de tipos de datos son de los más difíciles de rastrear. Veamos un pequeño ejemplo:

miNumero = "10";
miOtroNumero = miNumero + 10;
trace(miOtroNumero);

En principio parece que todo estaría bien, no hay errores de compilación, pero cuando corremos el código nos aparece un hermoso NaN (Not a Number) ¿Por qué nos pasa eso si somos buena gente? Sencillo, al colocar el valor de miNumero entre comillas (“”), estamos diciendo que es texto (String), no un número, por lo que la operación no puede ejecutarse.

Claro que esto es sólo un pequeño ejemplo a modo de ilustración. Ahora imagina que esto te ocurra cuando ya tienes unas cuantas líneas de código, o estás trabajando con funciones que -para ahorrar recursos- usan la misma variable con datos diferentes…

Tampoco es que necesariamente ahorres recursos, puesto que el compilador se verá en la obligación de chequear en cada momento qué tipo de variable metes allí, para convertir el tipo de datos al necesario. Esto significa también que asignará la mayor cantidad de memoria posible a la variable para evitar la pérdida de datos.

De Cómo el Strict Data Typing Salvó el Planeta

Como ves, la principal ventaja del SDT es que permitirá chequear, en tiempo de compilación si los valores que estás colocando en la variable son los que se esperan. Además, permitirá un uso más eficiente de los recursos porque le asignará a cada variable la cantidad de memoria necesaria para cada caso y no más; así que en vez de perder, ganas. Eso sin decir que hace tu código más legible porque le dice al siguiente que lo lea (que puedes ser tú mismo) qué tipo de datos debe esperar. Dicho sea de paso, el Strict Data Typing es obligatorio en AS3. Así que si cambiamos el ejemplo anterior por:

var miNumero:Number = "10";
var miOtroNumero:Number = miNumero + 10;
trace(miOtroNumero);

Tendríamos un hermoso mensaje de error en tiempo de compilación que nos diría algo como se recibió String donde se esperaba Number, lo que nos permitirá diagnosticar enseguida donde se encuentra el error y corregirlo, por ejemplo con:

var miNumero:Number = 10;
var miOtroNumero:Number = miNumero + 10;
trace(miOtroNumero);

y asunto terminado.

Si el SDT es tan bueno ¿por qué puedo escribir código en AS2 sin él?

La respuesta es simple: AS2 es lo que yo llamo una versión de transición entre AS1 y As3. Mucho más potente que la primera pero compatible con ella. Además, da las pautas para escribir código orientado a objetos, que será lo que veamos en AS3. Esta necesidad de compatibilidad con AS1 es lo que permite usar algunos comandos que ya están desfasados en AS2, como target, ifFrameLoaded, etc. con la esperanza de que la gente migrara al nuevo esquema de forma más amigable. Lamentablemente, como lo comentaba Zguillez, lo que ocurrió es que la gente seguía programando como en AS1, pensando que lo hacía en AS2. Cosas que pasan.

Así que ya lo sabes. Si quieres mantener tu integridad mental y la paz de tu alma, utiliza el Strict Data Typing y programa un poco más feliz 😉

Technorati Tags: ,


9 thoughts on “Strict Data Typing: Mantén a Salvo tu Cordura

  1. Pues yo no sabía lo que era, pero lo vi en diversos códigos, y vi que me era mucho más cómodo trabajar así. Es decir, que ya lo uso de manera intuitiva 😛

    Gracias por el articulo fricky. (y)

  2. Jajaja buen articulo man, lo malo de aprender lenguajes como php o AS1 sin haber tocado ningun otro lenguaje es que se mal acostumbran a hacer ese tipo de cosas, y luego es un “retroceso”

    Saludos
    PD: Java RLZ! xD xD

  3. Estoy en total de acuerdo con el SDT U_U, aunque a veces en PHP utilizo unas cuantas variables para distintos tipos de dato (cuestiones de tiempo de entrega xD).
    Esa es una de las cosas que me gusta de java, que es muy estricto en ese sentido U_U
    Buen artículo 😀

  4. Gracias a todos por sus comentarios 😛
    Es cierto, el Strict Data Typing salvará tu vida en más de una ocasión, y si hablamos de Programación Orientada a Objetos, pues está más claro aún. No sólo Java es super estricto en esto, sino también una serie de lenguajes, como C++, Visual Basic, Delphi… Además, termina siendo un gran dolor de cabeza menos a la hora de depurar errores. Es una lástima que php no tenga tampoco asignación de tipos de datos, eso lo haría todavía más c00l.

  5. La verdad es que es la primera vez que he oído hablar de ello… Bueno, de momento el php me va bien jeje no mezclaremos muchos lenguajes de programación que nos liaremos jeje 😄

  6. La otra vez me paso que con array: array(1,”pepe”)

    operacion:
    array[0]+1

    resultado:
    11

    Se arregla con Nunber(), pero como que el SDT se queda corto al no poder definir tipos a posiciones dentro del array, no?

  7. @cpucpu: Tienes razón, no se puede asignar tipos de datos a los elementos de un Array. Bueno, realmente no es que no se pueda sino que se hace dinámicamente. Ahora mismo no recuerdo un lenguaje que permita hacer tal cosa, pero sí, ayudaría mucho.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s