Skip to content

Commit 588b19b

Browse files
authored
Merge pull request #49 from UlisesGascon/dev
v1.0.1
2 parents 5fc5112 + eba2868 commit 588b19b

17 files changed

Lines changed: 144 additions & 68 deletions

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
> *Linus Torvalds*
1111
1212

13+
### En otros idiomas
14+
15+
Este libro originalmente fue escrito en [español](https://leanpub.com/javascript-inspirate), pero ha sido traducido por la comunidad a los siguientes idiomas:
16+
17+
- [Gallego](https://leanpub.com/javascript-inspirate-gallego). Gracias a [Yoel Macia Delgado](https://github.com/ymdx)
18+
19+
1320
### Acerca de este libro
1421

1522
#### Un libro de programación sencillo y divertido que nos muestra como programar en JavaScript desde cero.

manuscript/capitulo1.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ G> - *[Facebook en 2015](http://web.archive.org/web/20150731235552/https://faceb
152152

153153
## El largo camino del Developer
154154

155-
Este esquemático *[mapa mental](https://coggle.it/diagram/WF5nS6mGe9w7iwoZ)*, puede ayudaros a visualizar lo que esta ocurriendo hoy en día en la web, y comprender como los profesionales de la industria, hemos ido migrando de nombres y funciones hasta donde estamos ahora mismo, que no es definitivo y lógicamente seguirá evolucionando.
155+
Este esquemático *[mapa mental](https://coggle.it/diagram/WF5nS6mGe9w7iwoZ)*, puede ayudaros a visualizar lo que está ocurriendo hoy en día en la web, y comprender como los profesionales de la industria, hemos ido migrando de nombres y funciones hasta donde estamos ahora mismo, que no es definitivo y lógicamente seguirá evolucionando.
156156

157157
### Una historia de evolución
158158

manuscript/capitulo10.txt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,19 @@ Las funciones, especialmente como *[parámetro (callback)](https://es.wikipedia.
7070

7171
{lang=js}
7272
~~~~~~~
73-
var miFuncion = function(){
74-
console.log("Hola!");
75-
}
73+
var miFuncion = function(){
74+
console.log("Hola!");
75+
}
7676

77-
function otraFunción() {
78-
console.log("Hola de nuevo!");
79-
}
77+
function otraFunción() {
78+
console.log("Hola de nuevo!");
79+
}
8080

81-
var obj = {
82-
metodo: function () {
83-
console.log("Hola... ahora como método!");
84-
}
85-
}
81+
var obj = {
82+
metodo: function () {
83+
console.log("Hola... ahora como método!");
84+
}
85+
}
8686

8787
miFuncion();
8888
otraFunción();
@@ -266,7 +266,7 @@ pruebaArgumentos (1, "vale", true);
266266
~~~~~~~
267267

268268
T> Conversión array requiere de ciertos conocimientos avanzados en el uso de
269-
T> *[protoype](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript)* y
269+
T> *[prototype](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript)* y
270270
T> *[this](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/this)*. Os
271271
T> dejo una función que os ayudará a realizar esta conversión de una forma fácil.
272272
T>
@@ -387,7 +387,7 @@ W> *linter* como *[JSHint](http://jshint.com/)* o *[ESLint](http://eslint.org/)*
387387

388388
## Funciones Anónimas
389389

390-
En JavaScript podemos crear tantas funciones como queramos, sin embargo entre los requisitos de creación no esta incluir un nombre necesariamente.
390+
En JavaScript podemos crear tantas funciones como queramos, sin embargo entre los requisitos de creación no está incluir un nombre necesariamente.
391391

392392
### Funciones que retornan funciones
393393

@@ -448,7 +448,7 @@ Lo contenido en el primer paréntesis contiene el código encapsulado, al igual
448448
El segundo paréntesis es el encargado de ejecutar el bloque de código anterior, asi es como logramos que la función sea inmediatamente ejecutada dentro de un ámbito al que no podremos acceder.
449449

450450

451-
Como podemos, ver la estructura básica sería algo así:
451+
Como podemos ver, la estructura básica sería algo así:
452452

453453
{lang=js}
454454
~~~~~~~
@@ -612,9 +612,9 @@ Veamos un ejemplo, un poco condensado. Os ayudaré comentando el código:
612612
*/
613613
var quieroCallback = function(p1, callback){
614614
// Consideramos el callback como algo opcional.
615-
if ((callback){
615+
if (callback){
616616
// Validamos si es una función o no.
617-
if (typeof callback === 'function')){
617+
if (typeof callback === 'function'){
618618
/*
619619
De ser una función lo ejecutamos y
620620
y pasamos como argumento "p1"
@@ -644,7 +644,7 @@ I> **La naturaleza de la Asincronía**
644644
I>
645645
I> Hasta ahora todo el código que vimos se ejecutaba de una manera lógica,
646646
I> previsible y secuencial.
647-
I> Cada línea de código era ejecutada después de la anterior, tardará lo que tardrá.
647+
I> Cada línea de código era ejecutada después de la anterior, tardará lo que tardará.
648648
I> Este estilo de programación es ineficiente y bloqueante, lo que en el mundo de
649649
I> la web es intolerable.
650650
I>
@@ -653,7 +653,7 @@ I> ejecución en un segundo plano.
653653
I> De tal forma que resulta imposible saber cuando terminarán y además antes de terminar su ejecucción se ejecutan la siguiente línea de código.
654654

655655

656-
Cuando en JavaScript se habla de asincronía, lo que realmente esta ocurriendo es que dejamos de ejecutar partes de nuestro script de manera secuencial. Esto crea un efecto curioso que tiene como consecuencia, un script muy escalable y rápido, ya que el sistema no espera a que algo termine para seguir ejecutando el resto del script.
656+
Cuando en JavaScript se habla de asincronía, lo que realmente está ocurriendo es que dejamos de ejecutar partes de nuestro script de manera secuencial. Esto crea un efecto curioso que tiene como consecuencia, un script muy escalable y rápido, ya que el sistema no espera a que algo termine para seguir ejecutando el resto del script.
657657

658658
I> La mala noticia, es que recaerá en el lector todo el peso de controlar esos caballos
659659
I> desbocados.
@@ -756,7 +756,7 @@ traigoDatos(pintoDatos);
756756
Algunas soluciones a este problema:
757757

758758
- No anidar en exceso... ¿Has oído hablar de la *[complejidad ciclomática](https://es.wikipedia.org/wiki/Complejidad_ciclom%C3%A1tica)*?.
759-
- Cualquier anidación de funciones a más de dos o tres niveles esta pidiendo a gritos una refactorización.
759+
- Cualquier anidación de funciones a más de dos o tres niveles está pidiendo a gritos una refactorización.
760760
- No todas las funciones de tu código han de ser anónimas...
761761
- Modularizar y refactorizar son tus dos mejores amigos en JavaScript.
762762
- Gestiona los errores en cada función y no al final de la pila.

manuscript/capitulo11.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ A la hora de trabajar con el navegador fuera de la consola, disponemos básicame
1212

1313
JavaScript
1414

15-
: Que es lo que intentamos aprender a lo largo de este libro, y que nos permite en esencia programar sobre la web que esta renderizada en el cliente.
15+
: Que es lo que intentamos aprender a lo largo de este libro, y que nos permite en esencia programar sobre la web que está renderizada en el cliente.
1616

1717

1818
BOM
@@ -59,11 +59,11 @@ history.forward();
5959
### *[window.navigator](https://developer.mozilla.org/es/docs/Web/API/Navigator)*
6060

6161

62-
Es un API que nos permite sacar gran cantidad de información sobre la máquina donde se esta ejecutando nuestro script. Incluso dispone de algunos métodos tan interesantes como *[Navigator.vibrate()](https://developer.mozilla.org/es/docs/Web/API/Navigator/vibrate)*, que permite hacer vibrar el dispositivo (siempre que sea compatible).
62+
Es un API que nos permite sacar gran cantidad de información sobre la máquina donde se está ejecutando nuestro script. Incluso dispone de algunos métodos tan interesantes como *[Navigator.vibrate()](https://developer.mozilla.org/es/docs/Web/API/Navigator/vibrate)*, que permite hacer vibrar el dispositivo (siempre que sea compatible).
6363

6464
En el siguiente ejemplo, hacemos una lectura de gran información del sistema y además hacemos un par de cálculos interesantes para confirmar el nivel de batería.
6565

66-
En la línea 28 hemos utilizado una *[promesa](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Promesa)*, ya que *[navigator.getBattery()](https://developer.mozilla.org/es/docs/Web/API/Navigator/getBattery) lo requiere así. Recuerda que esta es otra de las formas válidas, que existen para manejar la asincronía.*
66+
En la línea 28 hemos utilizado una *[promesa](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Promesa)*, ya que *[navigator.getBattery()](https://developer.mozilla.org/es/docs/Web/API/Navigator/getBattery) lo requiere así. Recuerda que ésta es otra de las formas válidas, que existen para manejar la asincronía.*
6767

6868

6969

@@ -322,7 +322,7 @@ Veamos como se utilizan algunos selectores avanzados de CSS3:
322322

323323
{lang=css}
324324
~~~~~~~
325-
a[href*="leanpub"] {
325+
a[href*="google.es"] {
326326
color:orange;
327327
}
328328
~~~~~~~
@@ -726,7 +726,7 @@ Básicamente crearemos un objeto con los métodos *agregar* y *quitar* vacíos.
726726

727727
Es un poco más de trabajo de lo esperado, pero así es mucho mas sencillo gestionar nuestra aplicación, ya que nuestros métodos se adaptarán y no así nuestro código.
728728

729-
El valor añadido de usar este patrón esta, en que en un solo punto tomo una decisión que se extenderá por toda nuestra aplicación.
729+
El valor añadido de usar este patrón está en que en un solo punto tomo una decisión que se extenderá por toda nuestra aplicación.
730730

731731
{lang=js}
732732
~~~~~~~

manuscript/capitulo12.txt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,13 @@ Estos códigos de estado pueden dividirse en cinco categorías principales:
5555
Siendo especialmente importantes para nosotros, los 4xx y los 5xx, ya que nos indican errores que están sucediendo y esto seguramente derive en un tráfico de datos erróneo.
5656

5757

58-
I> Aquí podéis encontrar la *[lista completa](https://es.wikipedia.
59-
I> org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP)* y la *[especificación](https://tools.ietf.
60-
I> org/html/rfc2616#section-10)*.
58+
I> Aquí podéis encontrar la *[lista completa](https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP)*
59+
I> y la *[especificación](https://tools.ietf.org/html/rfc2616#section-10)*.
6160

6261

6362
W> **Misterioso estado 418**
6463
W>
65-
W> Existen algunos códigos tan increíbles como *[418. I´m a teapot](http://www.josevazquez.net/codigo
66-
W> -de-estado-http-418-i%C2%B4m-a-teapot/)*.
64+
W> Existen algunos códigos tan increíbles como *[418. I´m a teapot](http://www.josevazquez.net/codigo-de-estado-http-418-i%C2%B4m-a-teapot/)*.
6765

6866

6967
## Trabajando con APIs
@@ -84,8 +82,8 @@ Esto permite conseguir datos (peticiones GET), actualizar datos (peticiones PUT)
8482
En la mayoría de los casos, el intercambio de información entre el cliente y servidor se realiza utilizando un formato de intercambio de datos conocido como JSON y no XML como antiguamente. De todo esto hablaremos a lo largo de este último capítulo.
8583

8684

87-
I> Para ilustrar un poco el ejemplo, te invito a visitar *[jsonplaceholder](https://jsonplaceholder.
88-
I> typicode.com/)* que es una especie de *[Lorem Ipsum](https://es.wikipedia.org/wiki/Lorem_ipsum)*
85+
I> Para ilustrar un poco el ejemplo, te invito a visitar *[jsonplaceholder](https://jsonplaceholder.typicode.com/)*
86+
I> que es una especie de *[Lorem Ipsum](https://es.wikipedia.org/wiki/Lorem_ipsum)*
8987
I> para peticiones Ajax.
9088

9189

@@ -112,14 +110,14 @@ Petición DELETE a *api.loremblog.com/posts/hello*
112110

113111

114112
I> Partiendo de esta filosofía, podremos atrevernos con muchas APIs, tan divertidas como [Twitter](
115-
I> https://dev.twitter.com/), *[Facebook](https://developers.facebook.com/)*, *[Spotify](https://
116-
I> developer.spotify.com/web-api/)* e incluso *[Yahoo!](https://developer.yahoo.com/everything.html)*
113+
I> https://dev.twitter.com/), *[Facebook](https://developers.facebook.com/)*,
114+
I> *[Spotify](https://developer.spotify.com/web-api/)* e incluso *[Yahoo!](https://developer.yahoo.com/everything.html)*
117115

118116

119117

120118
## Peticiones AJAX
121119

122-
Ya hemos visto que las peticiones Ajax son la esencia en la web de hoy, pero siempre que las utilicemos, debemos recordar, que nosotros somos consumidores/generadores de datos y que nuestra aplicación, esta dependiendo de manera permanente de otros sistemas.
120+
Ya hemos visto que las peticiones Ajax son la esencia en la web de hoy, pero siempre que las utilicemos, debemos recordar, que nosotros somos consumidores/generadores de datos y que nuestra aplicación, está dependiendo de manera permanente de otros sistemas.
123121

124122
Esto quiere decir, que puede haber errores en su código, que hagan que las respuestas a nuestras peticiones no traigan los datos como esperamos. Por tanto, tendremos que hacer un esfuerzo adicional para validar todos los datos que recibimos. En ocasiones la documentación sobre la API, puede ser poco precisa o estar desfasada... dejándonos en una situación muy comprometida.
125123

@@ -145,7 +143,7 @@ Respuesta 204
145143

146144
Respuesta 401
147145

148-
: *No autorizado*. Hemos olvidado utilizar el token. O nuestro token no esta correctamente configurado.
146+
: *No autorizado*. Hemos olvidado utilizar el token. O nuestro token no está correctamente configurado.
149147

150148

151149
Respuesta 403
@@ -318,7 +316,7 @@ Y por ello, cualquier petición que hagamos desde el navegador cliente no podrá
318316

319317
La mejor solución, es comunicarnos con los responsables de la API y facilitarles *[este link](http://enable-cors.org/index.html)*, donde *[Monsur Hossain](http://monsur.hossa.in/)* y *[Michael Hausenblas](http://mhausenblas.info/)*, explican como realizar las configuraciones adecuadas en muchos entornos.
320318

321-
Si por desgracia esta opción esta descartada, no pasa nada.... existen más posibilidades.
319+
Si por desgracia esta opción está descartada, no pasa nada.... existen más posibilidades.
322320

323321
La primera y más útil es crear/configurar/usar un *[proxy](https://es.wikipedia.org/wiki/Servidor_proxy)*. La idea del proxy, es que realice una petición capturando esos datos y enviándolos de nuevo, teniendo CORS habilitado en la cabecera, de tal forma que podremos hacer peticiones Ajax, aunque tengamos que pasar por nuestro servidor.
324322

manuscript/capitulo2.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ I> **Fiero veterano**
77
I>
88
I> En este capítulo, hablaremos sobre como es la computación y que se espera de un
99
I> desarrollador.
10-
I> Si ya dominaís algun lenguaje de programación o sencillamente quiereís empezar ya mismo con JavaScript... pasad al siguiente capítulo.
10+
I> Si ya dominaís algún lenguaje de programación o sencillamente queréis empezar ya mismo con JavaScript, pasad al siguiente capítulo.
1111

1212

1313
## Un mundo de máquinas
@@ -163,7 +163,7 @@ Para que la lógica del sistema pueda decidir, necesitamos reducir todo a compar
163163
- Operaciones lógicas
164164

165165
* La variable "nombreUsuario" es igual a "Pepe"
166-
* La variable "nombreUsuario" no esta vacía
166+
* La variable "nombreUsuario" no está vacía
167167

168168

169169
A la hora de representar las opciones. *[PseInt](http://pseint.sourceforge.net/)* nos da dos opciones principales. La estructura *Si.. entonces* y *Según*, la diferencia en este contexto está en función del número de opciones.
@@ -272,7 +272,7 @@ Instrucciones
272272

273273
- **While (Mientras)**
274274

275-
Esta pensado para aquellos bucles que requieran de una condición lógica y no matemática para validar la iteracción.
275+
Está pensado para aquellos bucles que requieran de una condición lógica y no matemática para validar la iteracción.
276276

277277

278278
T> Aunque lógicamente podremos mezclar entre las diversas condiciones (matemáticas y lógicas).
@@ -306,7 +306,7 @@ Instrucciones
306306

307307
- **For (Para)**
308308

309-
Esta diseñado específicamente para trabajar con series de números (longitud de cadena, elementos de un array, propiedades de un objeto, etc...) y nos provee de una estructura más sencilla para gestionar el flujo.
309+
Está diseñado específicamente para trabajar con series de números (longitud de cadena, elementos de un array, propiedades de un objeto, etc...) y nos provee de una estructura más sencilla para gestionar el flujo.
310310

311311
- En Pseudocódigo:
312312

manuscript/capitulo3.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ I> En el caso de depuración y prototipado de código puede ser un recurso muy
586586

587587
{lang=js}
588588
~~~~~~~
589-
confirm("¿Esta seguro que desea abandonar esta web?");
589+
confirm("¿Está seguro que desea abandonar esta web?");
590590
~~~~~~~
591591

592592
Ejemplo:

manuscript/capitulo4.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ El *operador ternario (?:)* nos ofrece una manera propia de hacer estructuras co
267267

268268
Este operador simplifica mucho la sintaxis propia de los condicionales, pero se desaconseja su uso para operaciones o evaluaciones múltiples.
269269

270-
I> Si estas empezando con JavaScript, debes tener en cuenta, que es un operador que resulta difícil
270+
I> Si estás empezando con JavaScript, debes tener en cuenta, que es un operador que resulta difícil
271271
I> de recordar al principio. Siendo bastante común su uso especialmente en proyectos desarrollados
272272
I> con Node.js.
273273

manuscript/capitulo5.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Para el caso que os preocupe el rendimiento de vuestros bucles os dejo *[este li
1313

1414
El primer bucle que veremos está específicamente diseñado para funcionar de manera constante, mientras una condición dada siga cumpliéndose.
1515

16-
Este bucle esta pensado para simplificarnos la sintaxis cuando el control del bucle no se realiza mediante operaciones matemáticas (mayor que... menor que...).
16+
Este bucle está pensado para simplificarnos la sintaxis cuando el control del bucle no se realiza mediante operaciones matemáticas (mayor que... menor que...).
1717

1818
### Funcionamiento
1919

@@ -240,7 +240,7 @@ for (var i = 0; i < 10; i++) {
240240

241241
### Exprimiendo el For
242242

243-
Si dominamos las tres partes básicas que componen el bucle *for*, podemos plantearnos estructuras tan complejas como esta.
243+
Si dominamos las tres partes básicas que componen el bucle *for*, podemos plantearnos estructuras tan complejas como ésta.
244244

245245
{lang=js}
246246
~~~~~~~
@@ -258,7 +258,7 @@ T> una buena práctica.
258258

259259
### No refactorizar
260260

261-
En ocasiones, el código evoluciona y no repasamos lo que habíamos construido previamente... llegando a situaciones tan monstruosas como esta.
261+
En ocasiones, el código evoluciona y no repasamos lo que habíamos construido previamente... llegando a situaciones tan monstruosas como ésta.
262262

263263
* Antes de refactorizar:
264264

manuscript/capitulo6.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ Hacemos una recopilación simplificada de los métodos más utilizados, aunque e
266266

267267
{lang=js}
268268
~~~~~~~
269-
Math.floor(20.5); // 21
269+
Math.floor(20.5); // 20
270270
Math.floor(20.49); // 20
271271
Math.floor(-20.51); // -21
272272
~~~~~~~
@@ -416,7 +416,7 @@ W> modificaciones (año, día del mes, etc..).
416416
{lang=js}
417417
~~~~~~~
418418
var ahora = new Date();
419-
console.log("Con UTC: ";
419+
console.log("Con UTC: ");
420420
console.log("==== FECHA ====");
421421
console.log("El año: " + ahora.getUTCFullYear()); // 4 dígitos
422422
console.log("El mes: " + ahora.getUTCMonth()); // 0 - 11
@@ -473,7 +473,7 @@ Los setters en el caso de las fechas están planteados como una manera de ajusta
473473

474474
Debes tener en cuenta las leyes naturales: un día tiene 24 horas, un mes tiene un máximo de 31 días...
475475

476-
Si obviamos esta lógica, JavaScript improvisa una nueva fecha, pero esta no suele ser correcta.
476+
Si obviamos esta lógica, JavaScript improvisa una nueva fecha, pero ésta no suele ser correcta.
477477

478478

479479
{lang=js}

0 commit comments

Comments
 (0)