<?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>Polar Geek &#187; conferencias</title>
	<atom:link href="http://www.polargeek.net/tag/conferencias/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.polargeek.net</link>
	<description>Desarrollo web, tips, diseño, php, javascript...</description>
	<lastBuildDate>Thu, 29 Jul 2010 09:33:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>[Javascript] Conferencia 01. Douglas Crockford</title>
		<link>http://www.polargeek.net/javascript-conferencia-01-douglas-crockford/</link>
		<comments>http://www.polargeek.net/javascript-conferencia-01-douglas-crockford/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 17:52:16 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[conferencias]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=712</guid>
		<description><![CDATA[Introducción Desde un tiempo a esta parte he estado programando en javascript como la mayoría lo hacemos, cuando necesitamos algo que no sabemos lo buscamos en google. Después: Ctrl A + Ctrl C + Ctrl V. Modificación del código para mis necesidades y listo. Probablemente es uno de los lenguajes más desconocidos y a la [...]]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Desde un tiempo a esta parte he estado programando en javascript como la mayoría lo hacemos, cuando necesitamos algo que no sabemos lo buscamos en google. Después: Ctrl A + Ctrl C + Ctrl V. Modificación del código para mis necesidades y listo. Probablemente es uno de los lenguajes más desconocidos y a la vez más usado, en mi opinión tiene mucho potencial y por eso decidí aprenderlo más en profundidad, desde el principio, como aprendí pascal, java, c, o cualquier otro.</p>
<p>Para ello he seguido una serie de conferencias, he leído mucho y sobretodo he programado. Así que voy a hacer una serie de posts sobre este tema, con explicaciones sobre las conferencias, mis propios apuntes y con el video en el propio post, si, al estilo <a href="http://www.catonmat.net" target="_blank">catonmat.net</a>, con el que tanto he aprendido.</p>
<p><span id="more-712"></span>He de decir que si todo el mundo se tomara el streaming docente en serio, como si estuviera en una clase importante en la uni, probablemente se aprendería mucho más, y de repente <a href="http://www.blogatclock.net/la-universidad-debe-cambiar/" target="_blank">todo podría cambiar</a>.</p>
<h2>Conferencia 01. Introducción</h2>
<p>En esta conferencia de Douglas Crockford (Yahoo Inc.), presenta la importancia de Javascript, y las cosas básicas sobre este lenguaje.</p>
<h3>Historia e Importancia de JavaScript</h3>
<p>Javascript fue lanzado en Marzo de 1996, cuando Internet Explorer estaba en su versión 3.0. El autor fue <a title="Brendan Eich" href="http://es.wikipedia.org/wiki/Brendan_Eich" target="_blank">Brendan Eich</a>, de Netscape. Después ha ido evolucionando con varios nombres: Mocha -&gt; Livescript -&gt; Javascript.</p>
<p>Fue el primer lenguaje que se podía poner en un servidor web (ejecución a través de http, se entiende) y en los navegadores. Ha pasado por muchas fases, y se han ido incluyendo nuevas funcionalidades, pero no quiero enrollarme con eso, que te aburro.</p>
<p>La importancia de Javascript se ve desde 3 puntos:</p>
<ol>
<li>Es un <strong>lenguaje real</strong>, es decir, al usarse en el desarrollo web, e integrado dentro un documento html, que incluye, lógicamente html (que no es un lenguaje), se tiende a pensar que no es de verdad.</li>
<li>Es <strong>pequeño</strong>, en el sentido que no tiene muchas funciones por defecto ni muchos tipos de datos, como sí pasa con Java, por ejemplo. A pesar de eso es muy potente, como veremos.</li>
<li><strong>No es un subconjunto de Java</strong>. Es decir lo único en común que tienen Java y Javascript (exagerando un poco) es &#8220;Java&#8221;.</li>
</ol>
<p>Ideas clave:</p>
<ul>
<li>&#8220;Vagamente&#8221; tipado.</li>
<li>Se carga y se ejecuta.</li>
<li>Los objetos se usan como contenedores.</li>
<li>Los objetos heredan de otros objetos, <strong>no hay clases</strong>.</li>
<li>Lambda. Funciones como objetos.</li>
<li>Uso de variables globales como enlace entre funciones.</li>
</ul>
<p>De todo esto no te preocupes, porque se hablará más adelante.</p>
<h3>Tipos de datos</h3>
<h4>Numbers</h4>
<p>Solo un tipo de números, no integer. El tipo number es IEEE-754, es decir del tipo <em>Double</em> de toda la vida.<br />
Tiene un problema con la aritmética, por ejemplo: 0.1 + 0.2 = 0.30000000000000004, no 0.3. Que parece un detalle tonto, pero si estamos hablando de dinero en grandes cantidades la puedes liar.</p>
<ul>
<li><strong>NaN</strong>. Es un tipo especial de number. Es especial, porque precisamente indica que no es un number. Se suele obtener en operaciones erróneas y si se concatenan varias operaciones y a la mitad obtienes un NaN, como salida vas a tener NaN, puesto que cualquier operación aritmética con NaN como entrada, tiene NaN como salida.NaN no es igual a nada, ni siquiera a NaN.</li>
</ul>
<ul>
<li><strong>Number(valor)</strong> ó <strong>+valor</strong>. Convierte valor a number, si hay algun problema, entonces valor=NaN.</li>
</ul>
<ul>
<li><strong>parseInt(valor,10)</strong>. Convierte valor a number.  El 10 puede ser 08, 16&#8230;dependiendo de si estamos trabajando en octal o hexa.</li>
</ul>
<ul>
<li><strong>Más funciones</strong>. De la clase Math de Java(abs, floor, log, max&#8230;.). Todos <a href="http://www.w3schools.com/jsref/jsref_obj_math.asp" target="_blank">aquí</a></li>
</ul>
<h4>Strings</h4>
<p>No existe el tipo caracter, es un string de longitud 1.<br />
Son inmutables, y la comparación entre strings es curiosa, porque dos strings similares son iguales con (==).<br />
Comillas dobles o simples. &#8216;aKc&#8217; ó &#8220;aKc&#8221;. Es igual.</p>
<ul>
<li><strong>string.length</strong>. Longitud de string.</li>
</ul>
<ul>
<li><strong>String(valor)</strong>. Convierte valor a string.</li>
</ul>
<ul>
<li><strong>Más métodos</strong> (charAt, concat, indexOf, match, replace&#8230;.). Todos <a href="http://www.w3schools.com/jsref/jsref_obj_string.asp" target="_blank">aquí</a></li>
</ul>
<h4>Null</h4>
<p>Un tipo de dato que representa &#8220;nada&#8221;, es decir que no tiene un valor asociado.</p>
<h4>undefined</h4>
<p>Un tipo de dato que ni siquiera es un tipo de dato, es el valor por defecto para variables, parámetros y atributos de un objeto que no existen.</p>
<h4>Boolean</h4>
<p>Valores <em>true</em> ó <em>false</em></p>
<ul>
<li><strong>Boolean(valor) </strong>ó<strong> !!valor</strong>.  True si valor es <em>truthy</em>. False si valor es <em>falsy</em>. (ahora se explicará esto)</li>
<li><strong>Valores <em>falsy</em></strong>.
<ul>
<li>false</li>
<li>null</li>
<li>undefined</li>
<li>&#8220;&#8221; (string vacío)</li>
<li>0</li>
<li>NaN</li>
</ul>
</li>
<li><strong>Valores truthy</strong>.
<ul>
<li>El resto. &#8220;0&#8243;, &#8220;false&#8221;&#8230;. Fácil, ¿verdad? Sigamos.</li>
</ul>
</li>
</ul>
<h3>Todo lo demás -&gt; Objetos</h3>
<p>new Object(). Genera un contenedor vacío del par nombre/valor. Nombre puede ser cualquier string, y valor puede tener cualquier valor excepto undefined.</p>
<p>A los valores se puede acceder con obj["nombre"] ó con obj.nombre. El único requisito es que cuando accedas con el punto, &#8220;nombre&#8221; no puede ser una palabra reservada.</p>
<p>La implementación interna es una <a href="http://es.wikipedia.org/wiki/Tabla_hash" target="_blank">tabla Hash</a>, pero no hay métodos relacionados con esto, como rehash ni cosas por el estilo.</p>
<blockquote><p>Cualquiera de los tipos de datos explicados puede almacenarse en una variable, o se puede pasar a una función.</p></blockquote>
<h3>Sintaxis y operadores</h3>
<p>La sintaxis de Javascript es bastante similar a la de C, salvo porque en Javascript las funciones pueden ser variables, como:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> sumar <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #000066; font-weight: bold;">return</span> a<span style="color: #339933;">+</span>b<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Los identificadores empiezan por $ ó una letra ó un _. Seguidos de 0 o más letras, _, $ ó dígitos.</p>
<p>Por convención -&gt; Minúsculas, menos los constructores, que empiezan por mayúscula.</p>
<h4>Comentarios</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Esto es un comentario</span>
<span style="color: #006600; font-style: italic;">/*
  Y este otro
*/</span></pre></td></tr></table></div>

<h4>Operadores aritméticos (+ &#8211; * / %)</h4>
<p><strong>+ (Suma y concatenación)</strong></p>
<ul>
<li>Binario: Suma y concatenación de strings. Es decir si son numbers los dos operandos los suma, sino los transforma a strings y los concatena.</li>
<li>Unario: Convierte string a number, como se ha dicho al principio.</li>
</ul>
<p><strong>/ (División, produce un resultado no entero)</strong></p>
<ul>
<li>10 / 3 = 3.3333333333333335</li>
</ul>
<h4>Operadores de comparación (== != &lt; &gt; &lt;= &gt;=)</h4>
<p><strong>==</strong> y<strong> !=</strong>. Comparan como se espera, lo único destacable es que es mejor utilizar === y !==, porque también comparan el tipo de dato aparte del valor. Y la velocidad del programa sube.</p>
<h4>Operadores lógicos</h4>
<p><strong>&amp;&amp;</strong> . Si el primer operando es truthy entonces devuelve el segundo operando, si no devuelve el primero. Un uso especial de esto:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/* Si a no es null entonces
devolvemos el atributo velocidad.*/</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">return</span> a.<span style="color: #660066;">velocidad</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// Si no, devolvemos null</span>
  <span style="color: #000066; font-weight: bold;">return</span> a<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Esto se puede hacer de una manera más limpia y con una ejecucion más rápida <img src='http://www.polargeek.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">return</span> a <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> a.<span style="color: #660066;">velocidad</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #006600; font-style: italic;">/*Si a es truthy (no null, por ejemplo),
entonces devuelve el segundo operando,
sino el primero */</span></pre></td></tr></table></div>

<p><strong>||</strong> . Si el primer operando es truthy entonces devuelve el primer operando, sino es el segundo. Ejemplo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> uvas <span style="color: #339933;">=</span> recogidas <span style="color: #339933;">||</span> almacenadas<span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// uvas = almacenadas si recogidas es falsy.</span></pre></td></tr></table></div>

<p><strong>!</strong> . NOT. Si es truthy el valor pasado -&gt; false, si es falsy -&gt; true.</p>
<p><strong>!!</strong> . Procuce boolean, true o false si es truthy o falsy, el valor que le pasamos</p>
<h4>Operadores a nivel de bit (&amp; | ^ &gt;&gt; &gt;&gt;&gt; &lt;&lt;)</h4>
<p>Desaconsejados por la implementación interna del lenguaje.</p>
<blockquote><p>Estos operadores, convierten el valor a un entero con signo de 32 bits, y devuelven el valor en coma flotante de 64 bits.</p>
<p>Consecuencia -&gt; Más lento en ejecución.</p></blockquote>
<h2>Apuntes propios</h2>
<p><center><div class="wp-caption alignnone" style="width: 138px"><a href="http://static.polargeek.net/uploads/[Javascript]_Conferencia_01.pdf"><img src="http://static.polargeek.net/uploads/Forudaa-Paper_128.png" alt="Apuntes en PDF" width="128" height="128" /></a><p class="wp-caption-text">Apuntes en PDF</p></div></center></p>
<h2>Vídeo</h2>
<p><center>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="512" height="322" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" value="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=1710507&amp;vid=111593&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w327/111593_320_240.jpeg&amp;embed=1" /><param name="src" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" /><param name="flashvars" value="id=1710507&amp;vid=111593&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w327/111593_320_240.jpeg&amp;embed=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="512" height="322" src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" flashvars="id=1710507&amp;vid=111593&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w327/111593_320_240.jpeg&amp;embed=1" bgcolor="#000000" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div><a href="../wp-content/uploads/javascript_drockford.zip">Descarga las transparencias aquí</a></div>
<p></center></p>
<p><b>Continuar&aacute;&#8230;</b></p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/javascript-conferencia-01-douglas-crockford/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
