1 Capitulo 1 en La Programacion
1 Capitulo 1 en La Programacion
1 Código
Declaraciones
```js
a = b * 2;
```
Los caracteres `a` y `b` se llaman variables \(vea "Variables"\), que son como
simples cajas en las que puede almacenar cualquiera de sus cosas. En los
programas, las variables contienen valores \(como el número 42\) que debe usar el
programa. Piense en ellos como marcadores de posición simbólicos para los valores
mismos.
Los programas son sólo colecciones de muchas declaraciones de este tipo, que en
conjunto describen todos los pasos que se requieren para realizar el propósito de
su programa.
Expresiones
Por ejemplo:
```js
a = b * 2;
```
```js
b * 2;
```
```js
alert( a );
```
Ejecutar un programa
1.10 Funciones
Del mismo modo, su programa casi seguramente querrá dividir las tareas del código
en piezas reutilizables, en lugar de repetir repetidamente repetidamente \(juego de
palabras!\). La forma de hacerlo es definir una función.
Una función es generalmente una sección con el nombre del código que puede ser
"llamada" por ese nombre, y el código dentro de ella se ejecutará cada vez que se
llama. Considere:
```js
function printAmount() {
console.log( amount.toFixed( 2 ) );
}
var amount = 99.99;
printAmount(); // "99.99"
amount = amount * 2;
printAmount(); // "199.98"
```
```js
function printAmount(amt) {
console.log( amt.toFixed( 2 ) );
function formatAmount() {
amount = formatAmount();
```
La función `printAmount(..)` toma un parámetro que llamamos `amt`. La función
`formatAmount()` devuelve un valor. Por supuesto, también puedes combinar esas
dos técnicas en la misma función.
Las funciones se usan a menudo para el código que se planea llamar varias veces,
pero también pueden ser útiles sólo para organizar fragmentos de código
relacionados en las colecciones con nombre, incluso si sólo planea llamarlas una
vez.
Considere:
```js
function calculateFinalPurchaseAmount(amt) {
return amt;
```
Un nombre de variable tiene que ser único dentro del mismo ámbito - no puede
haber dos variables diferentes una al lado del otro. Pero el mismo nombre de
variable podría aparecer en diferentes ámbitos.
```js
function one() {
var a = 1;
console.log( a );
function two() {
var a = 2;
console.log( a );
}
one(); // 1
two(); // 2
```
También, un scope puede estar anidado dentro de otro scope, apenas como si un
payaso en una fiesta del cumpleaños sopla encima de un globo dentro de otro globo.
Si un scope está anidado dentro de otro, el código dentro del ámbito más interno
puede acceder a las variables desde cualquiera de los ámbitos.
Considere:
```js
function outer() {
var a = 1;
function inner() {
var b = 2;
console.log( a + b ); // 3
inner();
console.log( a ); // 1
outer();
```
Las reglas de ámbito léxico dicen que el código en un ámbito puede acceder a la
variable `a` de ese ámbito o de cualquier ámbito fuera de él.
Por lo tanto, el código dentro de la función `inner()` tiene acceso a las variables `a`
y `b`, pero el código en `outer()` sólo tiene acceso a `a` - no puede acceder a `b`
porque esa variable sólo está dentro de `inner()`.
```js
function calculateFinalPurchaseAmount(amt) {
return amt;
```
Nota: Para obtener más información sobre el ámbito léxico, consulte los tres
primeros capítulos del título Scope & Closures de esta serie.
1.12 Práctica
* Por último, compruebe la cantidad en contra del saldo de su cuenta bancaria para
ver si se lo puede permitir o no.
* Debe definir funciones para calcular el impuesto y para formatear el precio con un
"$" y redondear a dos decimales.
OK, adelante. Intentalo. ¡No eche un vistazo a mi lista de códigos hasta que lo haya
intentado usted mismo!
```js
var amount = 0;
function calculateTax(amount) {
function formatAmount(amount) {
}
// don't forget to pay the government, too
console.log(
);
console.log(
);
```
¿Cómo hiciste? No haría daño intentarlo otra vez ahora que usted ha visto mi
código. Y jugar con el cambio de algunas de las constantes para ver cómo se ejecuta
el programa con diferentes valores.
1.13 - Revisión
Estos actúan como bloques de construcción. Para construir una torre alta, empiece
primero colocando el bloque en la parte superior del bloque en la parte superior del
bloque. Lo mismo ocurre con la programación. Éstos son algunos de los elementos
fundamentales de la programación:
* Necesitas bucles para repetir las tareas hasta que una condición deja de ser
verdad.
Los comentarios de código son una manera eficaz de escribir un código más legible,
lo que hace que su programa sea más fácil de entender, mantener y corregir más
tarde si hay problemas.
```js
a = 21;
b = a * 2;
console.log( b );
```
### Salida
Usted puede haber adivinado, pero eso es exactamente cómo imprimimos el texto
\(aka salida al usuario\) en la consola del navegador. Hay dos características de esa
afirmación que debemos explicar.
Capítulo 2.
Otra forma de crear resultados que puede ver es ejecutar una instrucción de
alert\(..\). Por ejemplo:
```js
alert( b );
```
Entrada
La forma más común que ocurre es que la página HTML muestre elementos de
formulario \(como cuadros de texto\) en un usuario al que puedan escribir y, a
continuación, utilizar JS para leer esos valores en las variables del programa.
Pero hay una manera más fácil de obtener información para fines sencillos de
aprendizaje y demostración, como la que estará haciendo a lo largo de este libro.
Utilice la función de prompt \(..\):
```js
console.log( age );
```
Como ya habrás adivinado, el mensaje que pasas al prompt \(..\) - en este caso,
"Por favor, dime tu edad:" - se imprime en el popup.
Una vez que envíe el texto de entrada haciendo clic en "Aceptar", observará que el
valor que escribió se almacena en la variable de edad, que luego se emite con
console.log \(..\):
Para mantener las cosas simples mientras estamos aprendiendo conceptos básicos
de programación, los ejemplos en este libro no requerirán entrada. Pero ahora que
has visto cómo usar el prompt \(..\), si quieres desafiarte puedes intentar usar la
entrada en tus exploraciones de los ejemplos.
1.3 Operadores
Los operadores son la forma en que realizamos acciones sobre variables y valores.
Ya hemos visto dos operadores de JavaScript, el `=` y el `*`.
Considere:
```js
a = 2;
b = a + 1;
```
Siempre debe declarar la variable por nombre antes de usarla. Pero sólo es
necesario declarar una variable una vez para cada ámbito \(ver "Alcance"\); Se
puede utilizar tantas veces como sea necesario. Por ejemplo:
```js
var a = 20;
a = a + 1;
a = a * 2;
console.log( a ); // 42
```
* Asignación: = como en a = 2.
* Lógico: && \(y\), \|\| \(O\), como en a \|\| b que selecciona a o b. Estos operadores
se usan para expresar condicionales compuestos \(ver "Condicionales"\), como si a
o b es verdadero.
Cuando más tarde pregunte si el teléfono incluye un cargador, esa respuesta sólo
podría haber sido "sí" o "no".
* Cuando necesite imprimir un valor en la pantalla, necesita una cadena \(uno o más
caracteres, palabras, oraciones\).
Considere:
```js
"I am a string";
42;
true;
false;
```
Más allá de los tipos de valores string / number / boolean, es común que los
lenguajes de programación proporcionen arrays, objetos, funciones y más.
Cubriremos mucho más sobre valores y tipos a lo largo de este capítulo y el
siguiente.
```js
var a = "42";
var b = Number( a );
console.log( a ); // "42"
console.log( b ); // 42
```
El uso de Number \(..\) \(una función incorporada\) como se muestra es una coerción
explícita de cualquier otro tipo al tipo de número. Eso debería ser bastante sencillo.
Pero un tema polémico es lo que sucede cuando se intenta comparar dos valores
que ya no son del mismo tipo, lo que requeriría coerción implícita.
Así que si usas el operador == loose igual para hacer la comparación "99.99" ==
99.99, JavaScript convertirá el lado izquierdo "99.99" a su número equivalente
99.99. La comparación entonces se convierte en 99.99 == 99.99, que es por
supuesto verdad.
Si bien está diseñado para ayudarlo, la coerción implícita puede crear confusión si
no se ha tomado el tiempo para aprender las reglas que rigen su comportamiento.
La mayoría de los desarrolladores de JS nunca lo tienen, por lo que la sensación
común es que la coerción implícita es confusa y daña los programas con errores
inesperados, por lo que debe evitarse. Incluso a veces se llama un defecto en el
diseño del lenguaje.
Pero otra parte importante es los comentarios del código. Éstos son pedacitos de
texto en su programa que se insertan puramente para explicar cosas a un ser
humano. El intérprete / compilador siempre ignorará estos comentarios.
Hay un montón de opiniones sobre lo que debe ser un buen código comentado; No
podemos definir reglas universales absolutas. Pero algunas observaciones y
directrices son muy útiles:
* Los comentarios deben explicar por qué, no qué hacen. Opcionalmente pueden
explicar cómo si eso es particularmente confuso.
```js
/* But this is
a multiline
comment.
*/
```
Considere:
```js
```
```js
```
```js
console.log( a ); // 42
```
1.6 Variables
La mayoría de los programas útiles necesitan rastrear un valor a medida que cambia
a lo largo del programa, pasando por diferentes operaciones según lo solicitado por
las tareas previstas de su programa.
Otros idiomas enfatizan tipos para valores en lugar de variables. La tipificación débil,
también conocida como escritura dinámica, permite que una variable contenga
cualquier tipo de valor en cualquier momento. Se suele citar como un beneficio para
la flexibilidad del programa al permitir que una única variable represente un valor sin
importar la forma de tipo que el valor pueda tomar en un momento dado en el flujo
lógico del programa.
JavaScript utiliza el último enfoque, el tipo dinámico, lo que significa que las
variables pueden contener valores de cualquier tipo sin ningún tipo de aplicación.
```js
amount = amount * 2;
```
De cualquier manera, notará que `amount` tiene un valor de ejecución que cambia
a lo largo del programa, ilustrando el propósito principal de las variables: administrar
el estado del programa.
```js
amount = amount * 2;
amount = amount + (amount * TAX_RATE);
```
```js
// as of ES6:
// ..
```
Las constantes son útiles al igual que las variables con valores sin cambios, excepto
que las constantes también evitan el cambio accidental de valor en algún otro lugar
después de la configuración inicial. Si intentó asignar un valor diferente a
`TAX_RATE` después de esa primera declaración, su programa rechazaría el
cambio \(y en modo estricto, fallará con un error; consulte "Modo estricto" en el
Capítulo 2\).
Por cierto, ese tipo de "protección" contra los errores es similar al tipo de tipificación
estática, por lo que puede ver por qué los tipos estáticos en otros idiomas pueden
ser atractivos!
Nota: Para obtener más información sobre cómo se pueden utilizar diferentes
valores en las variables en sus programas, consulte el título Tipos y Gramática de
esta serie.
1.7 Bloques
El cliente de la tienda telefónica debe pasar por una serie de pasos para completar
la compra mientras compra su nuevo teléfono.
```js
// un bloque general
amount = amount * 2;
}
```
```js
amount = amount * 2;
```
Vamos a explicar las declaraciones `if` en la siguiente sección, pero como puede
ver, el bloque `{..}` con sus dos declaraciones se adjunta a `if (amount > 10)`; Las
declaraciones dentro del bloque sólo se procesarán si pasa el condicional.
1.8 Condicionales
```js
```
La instrucción `if` requiere una expresión entre los paréntesis `()` que puede tratarse
como verdadero o falso. En este programa, hemos proporcionado la expresión
`amount < bank_balance`, que de hecho se evaluará a `true` o `false` dependiendo
de la cantidad en la variable `bank_balance`.
```js
amount = amount * 2;
// otherwise:
else {
```
Los condicionales existen en otras formas además del `if`. Por ejemplo, la
instrucción `switch` puede usarse como una abreviatura para una serie de
instrucciones `if..else` \(vea el Capítulo 2\). Los bucles \(ver "Loops"\) usan un
condicional para determinar si el bucle debe continuar o detenerse.
Nota: Para obtener información más detallada sobre las coerciones que pueden
ocurrir implícitamente en las expresiones de prueba de condicionales, consulte el
Capítulo 4 del título de Tipos y Gramática de esta serie.
1.9 Bucles
Durante las horas pico, hay una lista de espera para los clientes que necesitan
hablar con el empleado de la tienda telefónica. Aunque todavía hay personas en
esa lista, sólo tiene que seguir sirviendo al próximo cliente.
Repetir un conjunto de acciones hasta que cierta condición falla - en otras palabras,
repetir sólo mientras la condición se mantiene - es el trabajo de los bucles de
programación; Los bucles pueden tomar diferentes formas, pero todos satisfacen
este comportamiento básico.
Por ejemplo, el bucle `while` y las formas de bucle `do..while` ilustran el concepto
de repetir un bloque de sentencias hasta que una condición ya no se evalúa como
verdadera:
```js
numOfCustomers = numOfCustomers - 1;
// versus:
do {
numOfCustomers = numOfCustomers - 1;
A veces usted está haciendo un bucle con el propósito de contar un cierto conjunto
de números, como de 0 a 9 \(diez números\). Puede hacerlo estableciendo una
variable de iteración de bucle como `i` en el valor `0` e incrementándola en `1` cada
iteración.
```js
var i = 0;
while (true) {
break;
console.log( i );
i = i + 1;
// 0 1 2 3 4 5 6 7 8 9
```
Advertencia: esto no es una forma práctica en la que desearía utilizar sus bucles.
Se presenta aquí sólo con fines ilustrativos.
Mientras que un `while` \(o `do..while`\) puede realizar la tarea manualmente, hay
otra forma sintáctica llamada un bucle `for` sólo para ese propósito:
```js
console.log( i );
// 0 1 2 3 4 5 6 7 8 9
```
Como puede ver, en ambos casos el condicional` i <= 9` es verdadero para las
primeras 10 iteraciones \(`i `de valores de 0 a 9\) de cualquier forma de bucle, pero
se convierte en falso una vez que `i` es un valor 10.