You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 00_intro.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,13 +18,13 @@ Ahí es donde entra en juego la programación. _Programar_ es el acto de constru
18
18
19
19
{{index ["programación", "la alegría de"], speed}}
20
20
21
-
Por suerte, si puedes superar ese hecho—e incluso disfrutar del rigor de pensar en términos que las máquinas tontas pueden manejar—programar puede ser gratificante. Te permite hacer cosas en segundos que te tomarían _una eternidad_ a mano. Es una forma de hacer que tu herramienta informática haga cosas que antes no podía hacer. Además, se convierte en un maravilloso juego de resolución de acertijos y pensamiento abstracto.
21
+
Por suerte, si puedes superar ese hecho, e incluso disfrutar del rigor de pensar en términos que las máquinas tontas pueden manejar, programar puede ser gratificante. Te permite hacer cosas en segundos que te tomarían _una eternidad_ a mano. Es una forma de hacer que tu herramienta informática haga cosas que antes no podía hacer. Además, se convierte en un maravilloso juego de resolución de acertijos y pensamiento abstracto.
22
22
23
23
La mayoría de la programación se realiza con ((lenguajes de programación)). Un _lenguaje de programación_ es un lenguaje artificialmente construido utilizado para instruir a las computadoras. Es interesante que la forma más efectiva que hemos encontrado para comunicarnos con una computadora se base tanto en la forma en que nos comunicamos entre nosotros. Al igual que los idiomas humanos, los lenguajes informáticos permiten combinar palabras y frases de nuevas formas, lo que permite expresar conceptos cada vez más nuevos.
En un momento dado, las interfaces basadas en lenguaje, como los _prompts_ de BASIC y DOS de los años 1980 y 1990, eran el principal método de interactuar con las computadoras. Para el uso informático rutinario, estas se han reemplazado en gran medida por interfaces visuales, que son más fáciles de aprender pero ofrecen menos libertad. Pero si sabes dónde buscar, los lenguajes todavía están ahí. Uno de ellos, _JavaScript_, está integrado en cada navegador web moderno—y por lo tanto está disponible en casi todos los dispositivos.
27
+
En un momento dado, las interfaces basadas en lenguaje, como los _prompts_ de BASIC y DOS de los años 1980 y 1990, eran el principal método de interactuar con las computadoras. Para el uso informático rutinario, estas se han reemplazado en gran medida por interfaces visuales, que son más fáciles de aprender pero ofrecen menos libertad. Pero si sabes dónde buscar, los lenguajes todavía están ahí. Uno de ellos, _JavaScript_, está integrado en cada navegador web modernoy por lo tanto está disponible en casi todos los dispositivos.
Copy file name to clipboardExpand all lines: 01_values.md
+12-9Lines changed: 12 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,15 @@
1
1
# Valores, Tipos y Operadores
2
2
3
-
"Debajo de la superficie de la máquina, el programa se mueve. Sin esfuerzo, se expande y contrae. En gran armonía, los electrones se dispersan y se reagrupan. Las formas en el monitor no son más que ondas en el agua. La esencia permanece invisible debajo."
4
-
—Master Yuan-Ma, _El Libro de la Programación_
3
+
{{quote {author: "Master Yuan-Ma", title: "El Libro de la Programación", chapter: true}
4
+
5
+
Debajo de la superficie de la máquina, el programa se mueve. Sin esfuerzo, se expande y contrae. En gran armonía, los electrones se dispersan y se reagrupan. Las formas en el monitor no son más que ondas en el agua. La esencia permanece invisible debajo.
6
+
7
+
quote}}
5
8
6
9
{{figure {url: "img/chapter_picture_1.jpg", alt: "Una foto de un mar de bits", chapter: "framed"}}}
7
10
8
11
9
-
En el mundo de la computadora, solo existe data. Puedes leer data, modificar data, crear nueva data, pero aquello que no es data no puede ser mencionado. Toda esta data se almacena como largas secuencias de bits y, por lo tanto, es fundamentalmente similar.
12
+
En el mundo de la computadora, solo existen datos. Puedes leer datos, modificar datos, crear nuevos datos, pero aquello que no son datos no puede ser mencionado. Todos estos datos se almacenan como largas secuencias de bits y, por lo tanto, es fundamentalmente similar.
10
13
11
14
_Los bits_ son cualquier tipo de cosas de dos valores, generalmente descritos como ceros y unos. Dentro de la computadora, toman formas como una carga eléctrica alta o baja, una señal fuerte o débil, o un punto brillante u opaco en la superficie de un CD. Cualquier pieza de información discreta puede reducirse a una secuencia de ceros y unos y por lo tanto representarse en bits.
12
15
@@ -49,7 +52,7 @@ La memoria de la computadora solía ser mucho más pequeña, y la gente solía u
49
52
50
53
{{index signo, "número de punto flotante", "bit de signo"}}
51
54
52
-
Sin embargo, no todos los números enteros menores que 18 mil trillones encajan en un número de JavaScript. Esos bits también almacenan números negativos, por lo que un bit indica el signo del número. Un problema más grande es representar números no enteros. Para hacer esto, algunos de los bits se utilizan para almacenar la posición del punto decimal. El número entero máximo real que se puede almacenar está más en el rango de 9 cuatrillones (15 ceros), que sigue siendo increíblemente grande.
55
+
Sin embargo, no todos los números enteros menores que 18 mil trillones encajan en un número de JavaScript. Esos bits también almacenan números negativos, por lo que un bit indica el signo del número. Un problema más grande es representar números no enteros. Para hacer esto, algunos de los bits se utilizan para almacenar la posición del punto decimal. El número entero máximo real que se puede almacenar está más en el rango de 9 mil billones (15 ceros), que sigue siendo increíblemente grande.
{{index pi, ["número", "precisión de"], "número de punto flotante"}}
73
76
74
-
Los cálculos con números enteros (también llamados _((enteros))_) que son más pequeños que los mencionados 9 cuatrillones siempre serán precisos. Desafortunadamente, los cálculos con números fraccionarios generalmente no lo son. Así como π (pi) no puede expresarse con precisión mediante un número finito de dígitos decimales, muchos números pierden algo de precisión cuando solo están disponibles 64 bits para almacenarlos. Es una lástima, pero solo causa problemas prácticos en situaciones específicas. Lo importante es ser consciente de esto y tratar los números digitales fraccionarios como aproximaciones, no como valores precisos.
77
+
Se garantiza que los cálculos con números enteros (también llamados _((enteros))_) menores que los 9 mil billones antes mencionados siempre serán precisos. Desafortunadamente, los cálculos con números fraccionarios generalmente no lo son. Así como π (pi) no puede expresarse con precisión mediante un número finito de dígitos decimales, muchos números pierden algo de precisión cuando solo están disponibles 64 bits para almacenarlos. Es una lástima, pero solo causa problemas prácticos en situaciones específicas. Lo importante es ser consciente de esto y tratar los números digitales fraccionarios como aproximaciones, no como valores precisos.
75
78
76
79
### Aritmética
77
80
@@ -89,7 +92,7 @@ Los símbolos `+` y `*` se llaman _operadores_. El primero representa la suma y
89
92
90
93
{{index "agrupación", "paréntesis", precedencia}}
91
94
92
-
¿Significa este ejemplo "Sumar 4 y 100, y luego multiplicar el resultado por 11", o se realiza primero la multiplicación antes de la suma? Como habrás adivinado, la multiplicación se realiza primero. Como en matemáticas, puedes cambiar esto envolviendo la suma entre paréntesis:
95
+
¿Significa este ejemplo "Sumar 4 y 100, y luego multiplicar el resultado por 11", o se realiza primero la multiplicación antes de la suma? Como habrás adivinado, la multiplicación se realiza primero. Pero igual que en matemáticas, puedes cambiar esto envolviendo la suma entre paréntesis:
93
96
94
97
```{meta: "expr"}
95
98
(100 + 4) * 11
@@ -115,7 +118,7 @@ Hay tres valores especiales en JavaScript que se consideran números pero no se
115
118
116
119
{{index NaN, "no es un número", "división por cero"}}
117
120
118
-
`NaN` significa "no es un número", aunque _es_ un valor del tipo numérico. Obtendrás este resultado cuando, por ejemplo, intentes calcular `0 / 0` (cero dividido por cero), `Infinity - Infinity`, u cualquier otra operación numérica que no produzca un resultado significativo.
121
+
`NaN` significa "no es un número", aunque _es_ un valor del tipo numérico. Obtendrás este resultado cuando, por ejemplo, intentes calcular `0 / 0` (cero dividido por cero), `Infinity - Infinity`, o cualquier otra operación numérica que no produzca un resultado significativo.
119
122
120
123
## Cadenas
121
124
@@ -166,11 +169,11 @@ Las cadenas también deben ser modeladas como una serie de bits para poder exist
166
169
167
170
{{index "UTF-16", emoji}}
168
171
169
-
Sin embargo, hay una complicación: la representación de JavaScript utiliza 16 bits por elemento de cadena, lo que puede describir hasta 2^16^ caracteres diferentes. Sin embargo, Unicode define más caracteres que eso —aproximadamente el doble, en este momento. Por lo tanto, algunos caracteres, como muchos emoji, ocupan dos "posiciones de caracteres" en las cadenas de JavaScript. Volveremos a esto en el [Capítulo ?](higher_order#code_units).
172
+
Pero hay una complicación: la representación de JavaScript utiliza 16 bits por elemento de cadena, lo que puede describir hasta 2^16^ caracteres diferentes. Sin embargo, Unicode define más caracteres que eso (aproximadamente el doble), en este momento. Por lo tanto, algunos caracteres, como muchos emoji, ocupan dos "posiciones de caracteres" en las cadenas de JavaScript. Volveremos a esto en el [Capítulo ?](higher_order#code_units).
170
173
171
174
{{index "operador +", "concatenación"}}
172
175
173
-
Las cadenas no se pueden dividir, multiplicar o restar. El operador `+` se puede usar en ellas, no para sumar, sino para _concatenar_—unir dos cadenas. La siguiente línea producirá la cadena `"concatenar"`:
176
+
Las cadenas no se pueden dividir, multiplicar o restar. El operador `+` se puede usar en ellas, no para sumar, sino para _concatenar_(unir dos cadenas). La siguiente línea producirá la cadena `"concatenar"`:
El valor `chunk` pasado al controlador de datos será un `Buffer` binario. Podemos convertir esto a una cadena decodificándolo como caracteres codificados en UTF-8 con su método `toString`.
395
+
El valor `chunk` pasado al manejador de datos será un `Buffer` binario. Podemos convertir esto a una cadena decodificándolo como caracteres codificados en UTF-8 con su método `toString`.
396
396
397
397
El siguiente fragmento de código, cuando se ejecuta con el servidor de mayúsculas activo, enviará una solicitud a ese servidor y escribirá la respuesta que recibe:
398
398
@@ -422,7 +422,7 @@ Probablemente no queramos compartir todo nuestro sistema de archivos, por lo que
422
422
423
423
{{index "ejemplo de servidor de archivos", "Node.js", "objeto methods", "clase Promise"}}
424
424
425
-
Construiremos el programa paso a paso, utilizando un objeto llamado `methods` para almacenar las funciones que manejan los diferentes métodos HTTP. Los controladores de métodos son funciones `async` que reciben el objeto de solicitud como argumento y devuelven una promesa que se resuelve a un objeto que describe la respuesta.
425
+
Construiremos el programa paso a paso, utilizando un objeto llamado `methods` para almacenar las funciones que manejan los diferentes métodos HTTP. Los manejadores de métodos son funciones `async` que reciben el objeto de solicitud como argumento y devuelven una promesa que se resuelve a un objeto que describe la respuesta.
426
426
427
427
```{includeCode: ">code/file_server.mjs"}
428
428
import {createServer} from "node:http";
@@ -455,7 +455,7 @@ Esto inicia un servidor que simplemente devuelve respuestas de error 405, que es
455
455
456
456
{{index "500 (código de estado HTTP)", "manejo de errores", "respuesta de error"}}
457
457
458
-
Cuando la promesa de un controlador de solicitud es rechazada, la llamada a `catch` traduce el error en un objeto de respuesta, si aún no lo es, para que el servidor pueda enviar una respuesta de error para informar al cliente que no pudo manejar la solicitud.
458
+
Cuando la promesa de un manejador de solicitud es rechazada, la llamada a `catch` traduce el error en un objeto de respuesta, si aún no lo es, para que el servidor pueda enviar una respuesta de error para informar al cliente que no pudo manejar la solicitud.
459
459
460
460
{{index "200 (código de estado HTTP)", "encabezado Content-Type"}}
Copy file name to clipboardExpand all lines: html/01_values.html
+7-1Lines changed: 7 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,13 @@
12
12
13
13
<h1>Valores, Tipos y Operadores</h1>
14
14
15
-
<p><aclass="p_ident" id="p-CfZ0i1g49l" href="#p-CfZ0i1g49l" tabindex="-1" role="presentation"></a>“Debajo de la superficie de la máquina, el programa se mueve. Sin esfuerzo, se expande y contrae. En gran armonía, los electrones se dispersan y se reagrupan. Las formas en el monitor no son más que ondas en el agua. La esencia permanece invisible debajo.”<br>—Master Yuan-Ma, <em>El Libro de la Programación</em></p><figureclass="chapter framed"><imgsrc="img/chapter_picture_1.jpg" alt="Una foto de un mar de bits"></figure>
15
+
<blockquote>
16
+
17
+
<p><aclass="p_ident" id="p-bpaGsABGGJ" href="#p-bpaGsABGGJ" tabindex="-1" role="presentation"></a>Debajo de la superficie de la máquina, el programa se mueve. Sin esfuerzo, se expande y contrae. En gran armonía, los electrones se dispersan y se reagrupan. Las formas en el monitor no son más que ondas en el agua. La esencia permanece invisible debajo.</p>
18
+
19
+
<footer>Master Yuan-Ma, <cite>El Libro de la Programación</cite></footer>
20
+
21
+
</blockquote><figureclass="chapter framed"><imgsrc="img/chapter_picture_1.jpg" alt="Una foto de un mar de bits"></figure>
16
22
17
23
<p><aclass="p_ident" id="p-5q3V1d0pX9" href="#p-5q3V1d0pX9" tabindex="-1" role="presentation"></a>En el mundo de la computadora, solo existe data. Puedes leer data, modificar data, crear nueva data, pero aquello que no es data no puede ser mencionado. Toda esta data se almacena como largas secuencias de bits y, por lo tanto, es fundamentalmente similar.</p>
<p><aclass="p_ident" id="p-uGKPxOs3On" href="#p-uGKPxOs3On" tabindex="-1" role="presentation"></a>El valor <code>chunk</code> pasado al controlador de datos será un <code>Buffer</code> binario. Podemos convertir esto a una cadena decodificándolo como caracteres codificados en UTF-8 con su método <code>toString</code>.</p>
259
+
<p><aclass="p_ident" id="p-uGKPxOs3On" href="#p-uGKPxOs3On" tabindex="-1" role="presentation"></a>El valor <code>chunk</code> pasado al manejador de datos será un <code>Buffer</code> binario. Podemos convertir esto a una cadena decodificándolo como caracteres codificados en UTF-8 con su método <code>toString</code>.</p>
260
260
261
261
<p><aclass="p_ident" id="p-raOCi6Y4Ip" href="#p-raOCi6Y4Ip" tabindex="-1" role="presentation"></a>El siguiente fragmento de código, cuando se ejecuta con el servidor de mayúsculas activo, enviará una solicitud a ese servidor y escribirá la respuesta que recibe:</p>
262
262
@@ -274,7 +274,7 @@ <h2 id="file_server"><a class="h_ident" id="h-uA++Rty3OD" href="#h-uA++Rty3OD" t
274
274
275
275
<p><aclass="p_ident" id="p-x6JgKfdaZz" href="#p-x6JgKfdaZz" tabindex="-1" role="presentation"></a>Probablemente no queramos compartir todo nuestro sistema de archivos, por lo que interpretaremos estas rutas como comenzando en el directorio de trabajo del servidor, que es el directorio en el que se inició. Si ejecuté el servidor desde <code>/tmp/public/</code> (o <code>C:\tmp\public\</code> en Windows), entonces una solicitud para <code>/file.txt</code> debería referirse a <code>/<wbr>tmp/<wbr>public/<wbr>file.<wbr>txt</code> (o <code>C:\tmp\public\file.<wbr>txt</code>).</p>
276
276
277
-
<p><aclass="p_ident" id="p-oUNTEGADKj" href="#p-oUNTEGADKj" tabindex="-1" role="presentation"></a>Construiremos el programa paso a paso, utilizando un objeto llamado <code>methods</code> para almacenar las funciones que manejan los diferentes métodos HTTP. Los controladores de métodos son funciones <code>async</code> que reciben el objeto de solicitud como argumento y devuelven una promesa que se resuelve a un objeto que describe la respuesta.</p>
277
+
<p><aclass="p_ident" id="p-oUNTEGADKj" href="#p-oUNTEGADKj" tabindex="-1" role="presentation"></a>Construiremos el programa paso a paso, utilizando un objeto llamado <code>methods</code> para almacenar las funciones que manejan los diferentes métodos HTTP. Los manejadores de métodos son funciones <code>async</code> que reciben el objeto de solicitud como argumento y devuelven una promesa que se resuelve a un objeto que describe la respuesta.</p>
@@ -301,7 +301,7 @@ <h2 id="file_server"><a class="h_ident" id="h-uA++Rty3OD" href="#h-uA++Rty3OD" t
301
301
302
302
<p><aclass="p_ident" id="p-+zXJyjiv+x" href="#p-+zXJyjiv+x" tabindex="-1" role="presentation"></a>Esto inicia un servidor que simplemente devuelve respuestas de error 405, que es el código utilizado para indicar que el servidor se niega a manejar un método determinado.</p>
303
303
304
-
<p><aclass="p_ident" id="p-LQFPuDuYA9" href="#p-LQFPuDuYA9" tabindex="-1" role="presentation"></a>Cuando la promesa de un controlador de solicitud es rechazada, la llamada a <code>catch</code> traduce el error en un objeto de respuesta, si aún no lo es, para que el servidor pueda enviar una respuesta de error para informar al cliente que no pudo manejar la solicitud.</p>
304
+
<p><aclass="p_ident" id="p-LQFPuDuYA9" href="#p-LQFPuDuYA9" tabindex="-1" role="presentation"></a>Cuando la promesa de un manejador de solicitud es rechazada, la llamada a <code>catch</code> traduce el error en un objeto de respuesta, si aún no lo es, para que el servidor pueda enviar una respuesta de error para informar al cliente que no pudo manejar la solicitud.</p>
305
305
306
306
<p><aclass="p_ident" id="p-1mh3Zz7i88" href="#p-1mh3Zz7i88" tabindex="-1" role="presentation"></a>El campo <code>status</code> de la descripción de la respuesta puede omitirse, en cuyo caso se establece en 200 (OK) por defecto. El tipo de contenido, en la propiedad <code>type</code>, también puede omitirse, en cuyo caso se asume que la respuesta es texto plano.</p>
0 commit comments