El lenguaje JavaScript, al igual que todo lenguaje de programación, está constituido por tres componentes: léxico, sintaxis y semántica.
El léxico es el conjunto de palabras, vocablos y símbolos que son reconocidos por el lenguaje.
Hasta el momento, se han presentado y empleado algunos elementos de ese conjunto. Los operadores matemáticos: +, -, *, /, % y ** son símbolos que forman parte de ese conjunto, igualmente son parte de ese conjunto los paréntesis, los números (del 0 al 9) el punto decimal (.), así como el objeto Math (conjuntamente las funciones y constantes que incorpora).
Para que una instrucción sea reconocida por un lenguaje, debe ser escrita empleando únicamente los elementos que forman parte de su léxico.
Por ejemplo, para calcular el valor de la siguiente expresión matemática:
\[\sqrt{{2^{3.2}-6.25\cos(3.4)} \over {4.5+ \sin({9.5}/{1.9})}}\] |
Se escribe (y evalúa con Shift+Enter) la siguiente instrucción, empleando únicamente elementos del léxico de JavaScript:
Si se emplean elementos que no forman parte del léxico del lenguaje, como ocurre en el siguiente caso:
El lenguaje genera el error "ReferenceError", informándonos que no conoce (que no forma parte de su léxico) la palabra "rcuad" y que tampoco existe una función definida por el usuario, con ese nombre. Cuando JavaScript encuentra un término que no forma parte de su léxico, busca un identificador (creado por el usuario) con es nombre y si no lo encuentra (como en este caso) genera el error. Corrigiendo ese error, se obtiene:
El lenguaje genera el error "TypeError", porque "Math." forma parte de su léxico, pero dentro de "Math" no existe la función "coseno". Corrigiendo ese error:
El lenguaje vuelve a genera el error "TypeError", porque, una vez más no existe la función "seno" dentro del objeto "Math". Finalmente, corrigiendo ese error:
Se obtiene el resultado correcto.
Como se ha podido comprobar en estos ejemplos, las instrucciones tienen que ser escritas empleando únicamente elementos que forman parte del léxico del lenguaje. El no hacerlo ocasiona que el lenguaje no pueda procesar la instrucción y genere una serie de errores.
A medida que se estudien los diferentes temas de la materia, se irán introduciendo otros elementos del léxico de JavaScript.
La sintaxis es el conjunto de reglas que se deben seguir para escribir instrucciones en un lenguaje de programación.
Hasta el momento se han presentado y empleado algunas de las reglas de sintaxis de JavaScript. Por ejemplo, se sabe que para calcular el valor de una función matemática, se debe escribir primero el nombre del objeto Math, seguida de un punto (.), luego el nombre de la función (por ejemplo, cos, para el coseno) y, entre paréntesis, el número para el cual se quiere conocer el valor de la función (por ejemplo 1.23 radianes), es decir:
Igualmente, una de las reglas de sintaxis dicta que para calcular la potencia de un número, se debe escribir primero la base, luego el operador de potencia (**) y finalmente la potencia (el exponente) al cual se elevará el número. Por ejemplo, para calcular la potencia: 3.230.72, se escribe:
Aunque no han sido explícitamente enunciadas, porque concuerda con las reglas matemáticas equivalentes, para calcular la suma (+), la resta (-), la multiplicación (*), la división (/) y el residuo (%), se debe escribir el primer número, luego el operador aritmético y finalmente el segundo número. Por ejemplo, para calcular el residuo de 27/4, se escribe:
Igualmente, aunque no ha sido explícitamente enunciado, los números en JavaScript deben ser escritos empleando los dígitos del 0 al 9 sin espacios y pueden incluir, o no, un punto decimal (.) sin separador de miles. Por ejemplo, si al calcular la suma de los números: 1234.5+2351.3, es escribe:
Se genera el error "SyntaxError" (error de sintaxis), porque no se ha respetado la regla: un número sólo puede tener un punto decimal y en este caso tienen 2, por eso nos informa que ha encontrado un número donde no esperaba uno, pues después del segundo punto, JavaScript, espera el nombre de un método de la clase "Number" pero no un número. Corrigiendo ese error, se obtiene el resultado correcto:
Por lo tanto, para que una instrucción esté correctamente escrita, se deben emplear únicamente los elementos de su léxico, pero además, dichos elementos deben ser escritos respetando las reglas de sintaxis del lenguaje.
La semántica es el signficado (el sentido) que tienen los elementos y estructuras de un lenguaje.
Para escribir instrucciones es imprescindible no sólo conocer el léxico y la sintaxis del lenguaje, sino y sobre todo, su significado. Sólo así es posible escribir instrucciones que sean de utilidad real.
Hasta el momento se han escrito únicamente expresiones matemáticas, por lo que el significado de los elementos empleados es claro: el símbolo +, permite sumar dos números, el símbolo %, permite calcular el residuo de una división, etc.
A medida que se avance en el contenido de la asignatura, se irán introduciendo otros elementos y estructuras cuyo significado deberá ser comprendido perfectamente, pues de lo contrario no es posible emplearlos correctamente en la solución de problemas.
En conclusión, para escribir instrucciones en un lenguaje de programación, es necesario emplear su léxico, respetar su sintaxis y comprender perfectamente el significado de sus elementos y estructuras.
En programación, los nombres que se asignan a los diferentes elementos del programa tienen el denominativo general de identificadores. Los nombres de las variables y constantes son también identificadores y, en consecuencia, deben seguir las reglas generales para nombrar identificadores (la sintaxis).
En general, los identificadores pueden ser nombrados empleado letras, números, guiones bajos (_) y el símbolo de dólar ($), pero el nombre debe comenzar siempre con una letra, un guión bajo (_) o el símbolo $.
No obstante, JavaScript es mucho más flexible y permite emplear como primer carácter acentos, eñes, letras griegas y en general cualquiera de los cientos de caracteres Unicode que tienen la propiedad Id_Start. El resto del nombre puede contener cualquiera de los caracteres del conjunto Unicode (más amplio) con la propiedad ID_Continue.
Las variables en programación, al igual que en álgebra, son símbolos que representan algún tipo de información. En JavaScript, en particular, las variables pueden representar (hacer referencia) a todos los tipos de datos disponibles en el lenguaje. A diferencia de C/C++, las variables en JavaScript no tienen un tipo de dato fijo, por lo que pueden almacenar cualquier tipo de información.
A diferencia de C/C++, JavaScript es un lenguaje interpretado, es decir que ejecuta las instrucciones inmediatamente a medida que las va leyendo en el código. Esta característica confiere gran flexibilidad a todos sus componentes, incluidas las variables.
Aunque su nombre sugiere lo contrario, las constantes en JavaScript (y en otros lenguajes) son en realidad variables, sólo que el valor que se les asigna no puede ser modificado, por esa razón son conocidas también como variables inmutables.
Para crear (declarar) una variable se emplean las palabras reservadas var y let. Mientras que para crear una constante se emplea la palabra const.
Una variable puede ser sólo creada (declarada) sin asignarle ningún valor o puede ser creada y se le puede asignar un valor al mismo tiempo (variable iniciada).
Por ejemplo, para crear las variables "a", "b", "c", "d" y "e" sin asignarles ningún valor, se escribe:
Como no se les asigna ningún valor (son variables declaradas, no iniciadas), JavaScript les asigna el valor undefined (indefinido):
Observe que las variables pueden ser declaradas una por una (como ocurre con las variables a y b), o dos o más al mismo tiempo (separándolas con comas) como ocurre con las variables c, d y e.
Observe también que, al final de cada instrucción, se escribe un punto y coma (;). En realidad, el punto y coma sólo es necesario si la instrucción no termina con un salto de línea, no obstante, como no constituye un error el escribir un punto y coma (aún antes de un salto de línea) se aconseja escribirlo siempre. En el caso de la calculadora JavaScript, el punto y coma es prácticamente imprescindible porque la calculadora elimina los saltos de línea (y espacios innecesarios) antes de evaluar las instrucciones.
En el ejemplo se ha empleado también la instrucción print. Esta instrucción imprime (en la calculadora) el valor de las variables o datos que se le mandan. Se emplea en este ejemplo porque se imprime el valor de cinco variables a la vez. Si sólo se quiere imprimir el valor de una variable y esa variable se encuentra en la última línea de la calculadora (o es la única instrucción) simplemente se escribe su nombre, por ejemplo, para imprimir el valor de la variable "b", simplemente se escribe b:
Igualmente, se emplea print, cuando el valor a imprimir no es la última de las instrucciones, como en el siguiente ejemplo:
El equivalente aproximado a print, en las consolas de los navegadores y otras herramientas de desarrollo, es console.log.
Para asignar un valor a una variable se debe emplear el operador de asignación =, que tiene la siguiente sintaxis:
Es decir que la sentencia de asignación puede estar precedida (cuando se crean variables) por var, let o const. Si la variable fue creada previamente, para asignarle un nuevo valor, se escribe directamente el nombre de la variable (sin var, let o const). Las variables declaradas con const no pueden ser modificadas, por lo que no es posible asignarles un nuevo valor.
Por ejemplo, con las siguientes instrucciones se crean las variables "x", "y" y "z" con los valores 4, 5 y 7.213×106:
Al igual que ocurre con las variables no iniciadas, las variables iniciadas pueden ser declaradas en una sola instrucción, separándolas con comas, por ejemplo, la siguiente instrucción crea las variables "r", "s", "t" y "u", con los números 10, 20, 30 y 40:
Observe que, en este ejemplo, la instrucción ha sido escrita en varias líneas (la instrucción termina recién en el punto y coma). En una instrucción, los saltos de línea y espacios adicionales, son ignorados por JavaScript, por lo que se aprovecha esa característica para escribir un código más legible, sin que ello afecte ni a la instrucción ni al resultado. Para JavaScript la anterior instrucción es equivalente a la siguiente:
Que es más corta y hace exactamente lo mismo, pero es más difícil de leer.
Como se dijo, las variables pueden ser declaradas también con let y const. Así, la siguiente instrucción crea las variables "var1" y "var2" con los números 1.2 y 2.3:
Sin embargo, cuando se declara una variable con let, no es posible volver a declararla. Por ejemplo, si se quiere volver a declarar las variables con los valores 2.2 y 3.3, en lugar de 1.2 y 2.3, se genera un error:
El mensaje de error informa que ya existe una variable con el nombre "var1", lo que es conveniente al momento de escribir programas, porque el declarar una variable, con el nombre de una variable existente, es un error de programación. Por esa razón se debe emplear let cuando se escriben programas. Sin embargo, cuando se escriben instrucciones independientes en la calculadora, es más práctico emplear var, porque permite corregir más fácilmente los errores.
Si se emplea let en la calculadora, pero se asigna un valor erróneo, para corregir el error cometido, se debe asignar el valor correcto a la variable, pero sin emplear let, porque como se dijo, let no permite declara una variable con el mismo nombre que otra variable existente. Por ejemplo para asignar nuevos valores a las variables "var1" y "var2", se escribe:
Finalmente, las variables creadas con const se comportan igual que las creadas con let, excepto que, una vez creadas, no pueden ser modificadas. Por lo tanto, cuando se emplea en la calculadora y se comete un error, ese error no puede ser corregido.
Por ejemplo, en la siguiente instrucción se crea la constante "c1", con un valor igual a 123:
Pero si se cometió un error y el número que debía ser asignado a "c1"', era 125, no 123, no es posible corregir el error:
Al igual que sucede con let, JavaScript informa que la variable "c1" ya fue creada, pero a diferencia de let, no es posible asignar un nuevo valor a la variable:
Porque al ser una variable inmutable (una constante) su valor no puede ser modificado. Por esa razón const se emplea, casi exclusivamente, al interior de los programas.
Una vez creada una variable (en cualquiera de las formas) puede ser empleada de la misma forma en que se emplearía el valor que guarda. Así, las variables y constantes creadas previamente pueden ser sumadas:
Y, por supuesto, pueden ser empleadas en cualquier tipo de operación válida con números, por ejemplo se puede calcular la raíz cuadrada de la suma de los cuadrados de "x" y "y".
JavaScript cuenta con dos tipos de datos numéricos: Number y BigInt.
El tipo numérico por defecto es Number. Para emplear variables de este tipo simplemente deben ser escritos, tal como se ha hecho hasta ahora en todos los ejemplos y ejercicios.
Como se ha visto, el tipo Number admite tanto números enteros como reales. Tiene una precisión aproximada de 17 dígitos, es decir que puede almacenar un número con hasta 17 dígitos y en el caso de los números reales permite números en el rango de \(\pm5\times10^{-324} \text{ a } \pm1.79\times10^{308}\).
Los valores máximos y mínimos permitidos, tanto para números enteros como reales, se obtienen con las constantes MAX_SAFE_INTEGER, MIN_SAFE_INTEGER, MAX_VALUE y MIN_VALUE, del objeto Number:
Como se puede ver en los límites de los números reales y como ya se ha visto en un ejemplo previo, para escribir números en notación científica, se emplea la letra e para la parte exponencial.
En las aplicaciones de ingeniería, los números son los tipos de datos más empleados y el tipo Number tiene la precisión suficiente para la mayoría de los cálculos ingenieriles.
El otro tipo disponible BigInt (enteros grandes), permite trabajar sólo con números enteros y soporta únicamente los operadores matemáticos (suma, resta, multiplicación, división, residuo y potencia). Se crean escribiendo una n al final del número entero:
Debido a que sólo soporta los operadores matemáticos básicos y trabaja sólo con números enteros (por ejemplo, la división: /, devuelve sólo el cociente), tienen aplicación práctica más limitada, sin embargo, son una opción útil cuando es necesario realizar operaciones de mucha precisión, pues los enteros grandes son de precisión arbitraria, siendo la única limitante la memoria disponible.
Dado que en la asignatura se resuelven problemas simples y frecuentemente se trabaja con números reales, se empleará, casi exclusivamente, el tipo Number.
Con los conocimientos adquiridos hasta ahora, es posible resolver algunos problemas simples, como los que se presentan en los siguientes ejemplos:
Calcule la altura (en pies) que deberá tener un cilindro de 4 pies de diámetro, para que pueda almacenar 55 pies cúbicos de agua.
En este y en los siguiente ejemplos (y ejercicios), las unidades que se empleen serán compatibles. Así, en este caso, las unidades están en pies, por lo que el resultado calculado estará en pies.
Para resolver este problema, se debe recordar que el volumen de un cilindro se calcula multiplicando el área transversal del cilindro por su altura y que el área transversal de un cilindro es el área de un círculo, es decir:
\[V = \pi \cdot r^2 \cdot h\] |
Si además se toma en cuenta que el radio de un cilindro es la mitad de su diámetro, la ecuación queda en la forma:
\[V = \pi \cdot \left(\dfrac{d}{2}\right)^2 \cdot h\] |
De donde se despeja la altura del cilindro:
\[h = \dfrac{4 \cdot V}{\pi \cdot d^2}\] |
Por lo tanto, para resolver, el problema se deben guardar los datos conocidos: el diámetro y el volumen del cilindro y, con esos datos, calcular la altura del cilindro, es decir:
Calcule la distancia horizontal (en metros) que alcanza un proyectil disparado con un ángulo de 38 grados y una velocidad inicial de 45.72 metros por segundo (valor de la aceleración de la gravedad: 9.8 m/s2).
Para calcular la distancia horizontal "x" que alcanza un proyectil, se emplea la ecuación del movimiento parabólico (física):
\[x = \dfrac{v_0^2 \cdot sin(2\theta)}{g}\] |
Para resolver el problema, simplemente se guarda la velocidad inicial (v0), el ángulo (θ) en radianes (porque todas las funciones trigonométricas trabajan con ángulos en radianes), así como el valor promedio de la aceleración de la gravedad (g). Luego, con esos valores se calcula la distancia horizontal (x):
En consecuencia el proyectil alcanza una distancia de 202.9 metros.
Asumiendo un comportamiento ideal, calcule el volumen (en litros) que deberá tener un depósito para almacenar 453592 gramos de gas natural de petróleo (metano), a una temperatura de 299.26 Kelvin y una presión de 10 atmósferas. Peso molecular del metano (M) 16.04 g/mol, constante de los gases (R) 0.082057 l*atm/K*mol.
La ecuación del gas ideal, es:
\[ \begin{aligned} P\cdot V &= n\cdot R\cdot T \\[2mm] \text{donde:\quad} n &= \dfrac{m}{M} \\ \end{aligned} \] |
Como en este caso se quiere calcular el volumen (V), se despeja de la ecuación:
\[ V = \dfrac{n\cdot R\cdot T}{P} \\[2mm] \] |
Para resolver el problema se guardan los datos conocidos: la masa (m), la temperatura (T), la presión (P), la constante de los gases (R) y el peso molecular (M), luego, se calcula el número de moles (n) y con la ecuación despejada, se calcula el volumen (V):
Por lo tanto (en la práctica) se necesita un depósito de 28279 litros.