<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Criteria Studio &#187; tutorial</title>
	<atom:link href="http://www.criteriastudio.com/tag/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.criteriastudio.com</link>
	<description>Mobile apps developers</description>
	<lastBuildDate>Wed, 23 May 2018 10:18:22 +0000</lastBuildDate>
	<language>es-ES</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>JavaScript para Titanium (I)</title>
		<link>http://www.criteriastudio.com/javascript-para-titanium-i/</link>
		<comments>http://www.criteriastudio.com/javascript-para-titanium-i/#comments</comments>
		<pubDate>Fri, 06 Jul 2012 08:42:43 +0000</pubDate>
		<dc:creator><![CDATA[J. Rayon]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[básico]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[titanium]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.criteriastudio.com/?p=258</guid>
		<description><![CDATA[Si estás empezando a trabajar con Titanium, lo mejor que puedes hacer antes de embarcarte en un proyecto real es adquirir una BUENA base de JavaScript. Lo mejor y lo peor de JavaScript es que lo aguanta todo. Puedes olvidarte de declarar las variables, no usar punto y coma al final de línea y ser un [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Si estás empezando a trabajar con <a href="http://www.appcelerator.com" target="_blank">Titanium</a>, lo mejor que puedes hacer antes de embarcarte en un proyecto real es adquirir una BUENA base de JavaScript.</p>
<p>Lo mejor y lo peor de JavaScript es que lo aguanta todo. Puedes olvidarte de declarar las variables, no usar punto y coma al final de línea y ser un desastre organizando el código. Es posible que, incluso así, el código funcione. Pero pobre del que tenga que revisar tu código, incluso si eres tú mismo, cuando algo deje de funcionar.</p>
<p>No me gusta convencer a la gente de que haga cosas sólo por miedo a que algo terrible ocurra (en este caso, el miedo a que algún día nuestro código sea un desastre). Y, aunque es un argumento de peso, JavaScript tiene bastantes alicientes como para motivar su aprendizaje a fondo sin otro objetivo que crear grandes aplicaciones y aprovechar al 100% las características del lenguaje.</p>
<p>JavaScript es un gran lenguaje de programación, a menudo incomprendido, porque ha sido el lenguaje que a movido la web durante años con tantos sabores como navegadores en el mercado. Quizá por eso mi primer consejo al empezar con Titanium es olvidarse del DOM, de JQuery y cualquier otro framework y forma de programar orientada a la web. Titanium no se ejecuta en una ventana de navegador, por tanto estamos hablando de JavaScript &#8220;puro&#8221;, ampliado y mejorado con la API de titanium, desarrollada en el código nativo de cada plataforma. Por eso Titanium es único, porque realmente ejecuta código nativo, que es llamado desde el intérprete JavaScript.</p>
<p>Este artículo pretende mostrar las &#8220;mínimas&#8221; cosas que uno debe saber de JavaScript, especialmente cuando viene de trabajar con otros lenguajes.</p>
<h3>Lo mas basico</h3>
<h4>Tipos</h4>
<p>Las variables no se declaran con un tipo específico y pueden cambiar de tipo durante su vida (pueden crearse siendo string y luego asignar un valor numérico sin hacer ningún tipo de cast).</p>
<p>Las cadenas se pueden delimitar con comillas simples y dobles indistintamente. Es exactamente lo mismo.</p>
<p>La mayoría de tipos (strings, arrays, objects&#8230;) son objetos. Así, al declarar una variable string como <code class="codecolorer javascript mac-classic"><span class="javascript">&nbsp;<span style="color: #003366; font-weight: bold;">var</span> str <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;hola&quot;</span></span></code>, ya podemos hacer uso de sus métodos y propiedades. Por ejemplo <code class="codecolorer text mac-classic"><span class="text">str.length</span></code> devolverá el valor 4.</p>
<p>Para declarar cualquier tipo de variable (sea array, string o cualquier otro tipo), utilizamos la palabra <code class="codecolorer text mac-classic"><span class="text">var</span></code>. En aplicaciones como las que haremos con Titanium <strong>debemos obligarnos</strong> a declarar siempre las variables ya que, de no hacerlo, éstas se crean con alcance global (y como ya puedes intuir esto es malo, malo). Que estén en global significa que nunca se liberan de memoria y que pueden llegar a colisionar con otras variables, creando aplicaciones muy difíciles de trazar.</p>
<p>Los números en JavaScript siempre son tratados internamente en coma flotante. Las variables numéricas por defecto están &#8220;unboxed&#8221; lo que quiere decir que no podemos tratarlas como objetos. Para tratarlas como objeto crearemos con el operador <code class="codecolorer text mac-classic"><span class="text">new</span></code>. Ocurre lo mismo con los booleanos.</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//Unboxed: valor</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">;</span><br />
<br />
x.<span style="color: #660066;">foo</span> <span style="color: #339933;">=</span> ’bar’<span style="color: #339933;">;</span>   <span style="color: #006600; font-style: italic;">// Esto falla “en silencio”</span><br />
<br />
x.<span style="color: #660066;">foo</span>            <span style="color: #006600; font-style: italic;">// undefined;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//Boxed: referencia</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Number <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
x.<span style="color: #660066;">foo</span> <span style="color: #339933;">=</span> ’bar’<span style="color: #339933;">;</span><br />
<br />
x.<span style="color: #660066;">foo</span>            <span style="color: #006600; font-style: italic;">//’bar’; x es un puntero (una referencia, no un valor)</span></div></td></tr></tbody></table></div>
<p>Los arrays son muy flexibles, puedes crear arrays mezclando distintos tipos de variables, añadir índices en cualquier posición.</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> otroArr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;una cadena&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>x<span style="color: #339933;">:</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span> y<span style="color: #339933;">:</span><span style="color: #CC0000;">10</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//puedes combinar cualquier tipo de contenido en un array</span><br />
<br />
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> “hola”<span style="color: #339933;">;</span><br />
<br />
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> “adiós”<span style="color: #339933;">;</span><br />
<br />
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">15</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> “ciao”<span style="color: #339933;">;</span><br />
<br />
arr.<span style="color: #660066;">push</span> <span style="color: #009900;">&#40;</span>“buenos dí<span style="color: #000066; font-weight: bold;">as</span>”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//añade al final</span><br />
<br />
arr.<span style="color: #660066;">unshift</span> <span style="color: #009900;">&#40;</span>“buenas noches”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//añade al principio</span><br />
<br />
<span style="color: #006600; font-style: italic;">//recorre todo el array</span><br />
<br />
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> arr.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> j<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
Ti.<span style="color: #660066;">API</span>.<span style="color: #660066;">info</span><span style="color: #009900;">&#40;</span>arr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<h4>Comparaciones</h4>
<p>Lo que en otros lenguajes se compara con <strong>==</strong> ó <strong>!=</strong> (dos caracteres) en JavaScript se hace con tres (<strong>===</strong> y <strong>!==</strong>). Este es uno de los errores de principiante más comunes al empezar con JavaScript. Así que <strong>siempre hay que utilizar el comparador ternario</strong> (el de tres caracteres), a menos que sepas lo que estás haciendo. Como ejemplo de los líos en los que nos podemos meter, en JavaScript todas las siguientes sentencias son TRUE (en la mayoría de lenguajes serían FALSE):</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><br />
<span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">==</span>’’<br />
’’<span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><br />
<span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">==</span><span style="color: #CC0000;">1</span><br />
<span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">==</span>’<span style="color: #CC0000;">1</span>’<br />
’<span style="color: #CC0000;">1</span>’<span style="color: #339933;">==</span><span style="color: #CC0000;">1</span></div></td></tr></tbody></table></div>
<p>Usando la comparación === hubieran dado false como resultado, que es lo que esperaríamos en la mayoría de casos.</p>
<h4>Ambito y declaracion de variables</h4>
<p>En JavaScript <strong>el ámbito de una variable es el de la función en la que es declarada</strong>. Si la variable no se declara dentro de una función, entonces se trata de una variable global. Esto puede llegar a ser un serio problema, ya que JavaScript permite usar variables sin declarar, lo que hace que se vayan cargando siempre al ámbito global de ejecución y por tanto nunca se liberen de la memoria. ¿Cómo resolver esto?</p>
<div class="grid_8">
<ul class="ul bullet_arrow_dark">
<ul>
<li>Primero: <strong>siempre</strong> declara las variables con la palabra clave <code class="codecolorer text mac-classic"><span class="text">var</span></code>. Acostúmbrate a hacerlo. Siempre.</li>
<li>Segundo: Dado que las variables tienen como ámbito la función que la contiene, da igual que la declares dentro de un bloque if, o dentro de un bucle for o cualquier otro sitio. Esa variable <strong>siempre existe desde el principio de la función</strong> y seguirá existiendo al terminar el bloque If o el bucle for. Por tanto, es una buena idea declarar siempre las variables al comienzo de la función y no a lo largo de la misma.</li>
<li>Tercero: restringe el uso de las variables globales. Más adelante hablaremos de los módulos CommonJS como forma de organizar el código. Valga decir que SI es posible crear aplicaciones con <strong>cero variables globales</strong> y este será nuestro objetivo.</li>
<li>Cuarto: podemos usar objetos como contenedores de variables para agrupar aquellas con una utilidad común. Por ejemplo, podemos tener un objeto &#8220;config&#8221; que contenga las variables de configuraciones de la aplicación:</li>
</ul>
</ul>
</div>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> config <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
title<span style="color: #339933;">:</span><span style="color: #3366CC;">'My app'</span><span style="color: #339933;">,</span><br />
support<span style="color: #339933;">:</span><span style="color: #3366CC;">'info@myapp.com'</span><span style="color: #339933;">,</span><br />
defaultTheme<span style="color: #339933;">:</span><span style="color: #3366CC;">'white'</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>(más adelante hablaremos de los objetos en JavaScript)<br />
::</p>
<div>
<p>En muchos lenguajes el ámbito de las variables está delimitado por bloques y esperamos este comportamiento, pero en JavaScript no ocurre así. Recuérdalo cuando hagas algo como esto:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> miFuncion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//aquí i sigue existiendo y vale 10</span><br />
<br />
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">15</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//Aquí j sigue existiendo y vale 15;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//Aquí no existe i ni j</span></div></td></tr></tbody></table></div>
<p>&nbsp;</p>
<h4>Punto y coma</h4>
<p>En JavaScript no es obligatorio usar punto y coma <code class="codecolorer text mac-classic"><span class="text">;</span></code> al final de todas las sentencias.  Hay un montón de gente que le encanta discutir sobre si, siendo algo opcional, debe usarse o no.</p>
<p>Mi opinión: <strong>debe usarse siempre</strong>. Además de que no cuesta nada y que ayuda visualmente a la lectura, hay un argumento de peso. Ayuda al intérprete de JavaScript a determinar cuando ha terminado una sentencia y empieza la siguiente, lo que en casos extremos puede evitar errores muy difíciles de detectar porque el intérprete JavaScript está entendiendo algo distinto a lo que nosotros creemos que debería hacer. Usa el punto y coma. Siempre. Asunto resuelto.</p>
<p>&nbsp;</p>
<p><a title="JavaScript para Titanium (I)" href="http://www.criteriastudio.com/javascript-para-titanium-ii/">Continuar con el siguiente artículo de la serie &gt;</a><br />
</p>
<blockquote><p>¿Te interesa Titanium y JavaScript? Sígueme en <strong><a href="http://www.twitter.com/jrayon">@jrayon</a></strong></p></blockquote>
<p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.criteriastudio.com/javascript-para-titanium-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
