Introducció
Crea una màquina virtual Ubuntu i instal.la l'última versió de node
:
$ nvm install node
Si no tens instaladt nvm
segueix les instruccions que es detallen a node.
Executa l'ordre node
per iniciar una sessió REPL:
$ node
Welcome to Node.js v20.11.1.
Type ".help" for more information.
>
Números
Tots els llenguatges de programació fan servir nñumeros, i pots fer operacions aritmétiques amb aquets números.
Escriu l'ordre 3 + 7
i prem la tecla Enter
:
> 3 + 7
10
Pots veure que node
evalua l'expressió 3 + 7
i torna el resultat d'evaluar aquesta expressió.
Con javascript puedes realizar las operaciones aritméticas habituales.
Puedes restar dos números:
> 20 - 15
5
Puedes mutiplicar dos números:
> 3 * 7
21
Puedes dividir dos números:
> 10 / 5
2
Puedes obtener el resto (o módulo) de una división:
> 8 % 3
2
Puedes elevar un número a una potencia:
> 5 ** 2
25
Puedes construir cualquier expresión compleja para obtener un resultado:
> (5 + 20 ) / 3
8.333333333333334
Constantes
Para calcular el area de un círculo debes utilitzar la fórumla πr²
, donde r
es el radio del círculo y π
és el número Pi.
El area de un círculo de diametro 5 és ...
> 3.141592653 * (5 ** 2)
78.539816325
Seguro que te acuerdas de memoria del número Pi y no te importa escribirlo tantas veces como sea necesario.
Pero un buen programador se caracteriza siempre por ser una persona que siempre busca el mínimo esfuerzo para conseguir el máximo resultado!
Si tenemos que calcular muchas veces el area de un circúlo és mejor guardar el número Pi en una constante, y utilizar la constante que guarda el número en lugar del número directamente.
> const PI = 3.141592653
undefined
En este caso node evalua la expresión, y devuelve como resultado undefined
para indicar que la expresión no devuelve ningún resultado.
Si escribimos la expresión PI
, Node.js nos devuelve el valor que guarda la constante PI
:
> PI
3.141592653
A continuación utilizaremos la constante PI
para calcular el area de un circulo de radio 12:
> PI * (12 ** 2)
452.389342032
Si intentamos modificar el valor de PI
, no nos dejarán. ¿No habíamos dicho que PI
era una constante?
> const PI = 22
Uncaught SyntaxError: Identifier 'PI' has already been declared
Ficheros
Para salir de la sesión REPL apretamos simultaneamente las letra Ctrl
y D
:
Si volvemos a iniciar una sesión REPL, podemos verificar que la constante PI
ha desaparecido:
> PI
Uncaught ReferenceError: PI is not defined
La solución es guardar la constante PI
y el cálculo del area en un fichero.
Crea un fichero area.js
con este código:
const PI = 3.141592653
PI * (8 ** 2)
Un programa és un conjunto de expresiones que se ejecutan una detrás de la otra tal com estan escritas en un fichero.
En el código anterior primero se creará la constante PI
con valor 3.141592653
, y a continuación se calculará el area de un círculo con radio 8.
Vamos a ejecutar el fichero con node
para que nos de el resultado:
$ node area.js
A lo mejor calcula alguna cosa, pero de ver no vemos nada.
Para que un programa muestre un resultado por pantalla hemos de decirlo expresamente con la función console.log()
:
const PI = 3.141592653
const area = PI * (5 ** 2)
console.log(area)
Ahora, cuando ejecutamos el programa area.js
, el resultado de la operación se muestra en pantalla:
$ node area.js
78.539816325
La función console.log
muestra por pantalla lo que haya entre (
y )
:
const PI = 3.141592653;
let area = PI * (5 ** 2);
console.log(22);
En este caso, console.log
imprime por pantalla 22 en lugar del area del círculo:
$ node area.js
22
Por cierto la función no és console.log()
, sinó log()
.
console
és un fichero donde está escrita la función log
y que node
ya sabe dónde buscarlo.
¿Y que és una función?
Són una líneas de código que se agrupan con el nombre de la función, y que le puedes pasar algo para que haga algo con lo que le has pasado, que en principio será lo que dice que hará la función.
En el caso de la función log
, imprimir por pantalla lo que le hayas pasado.
Legibilidad
Supongo que te habrás preguntado porque no hemos escrito antes éste código:
console.log(3.141592654 * (5 ** 2))
Puedes ver que es más corto y hace lo mismo:
$ node area.js
78.539816325
Pero es más difícil de entender, y pronto descubrirás que el arte de escribir código consiste en escribir de tal manera que se entienda perfectamente lo que está haciendo.
Y más importante todavía, que al cabo de unos días entiendas que has escrito!
En cambio, este código és más largo, y entendible:
const radius = 5
const PI = 3.141592653
const area = PI * (radius ** 2)
console.log(area);
Dice que:
- Definimos el valor del radio del círculo
- Definimos el valor de la constante PI
- Calculamos una area con PI
- Imprimimos por pantalla el area
A diferencia de este código
console.log(3.141592653 * (5 ** 2))
que dice que:
- Imprimimos por pantalla el cálculo de algo
Para node
no hay diferencia, lo transformará a su representación interna que seguramente será la misma en todos los casos, y todos los códigos se ejecutarán de la misma manera.
¡Escribimos bién para nosotros, no para la máquina que le da igual!
Escribir bién
Los ordenadores són capces de procesar millones de instrucciones por segundo, la inteligencia artifical puede escribir código mucho más rápido que nosotros, pero nunca serán capaces de determinar si un código está bién escrito o no.
Seguro que te habrás dado cuenta de un problema grave que tiene nuestre código: és difícil saber cual es el paràmetro del còdigo, aquello que varía y le da sentido a nuestro código.
En nuestro código el parámetro és el radio del círculo:
const radius = 7 // parameter
const PI = 3.141592653;
const area = PI * (radius ** 2);
console.log(area);
Además de ponder el parámetro al principio del fichero podemos añadir un comentario con //
: node
ignora todo lo que está escrito detrás de //
.
Podemos calcular el area de cualquier círculo: sólo tenemos que modificar el fichero ...
Se puede hacer mejor.
Argumentos
Al ejecutar node
, además de indicar que fichero .js
hay que utilitzar, también podemos pasar argumentos.
const process = require("process")
const radius = process.argv[2]
const PI = 3.141592653;
const area = PI * (radius ** 2);
console.log(area);
Con el nuevo código podemos calcular el area de cuaqluier círculo sin tener que modificar el fichero area.js
:
$ node area.js 11
380.13271113400003
Con require
importamos el módulo "process" que nos permite tener acceso al array argv
.
El array argv
contiene estos elementos:
process.argv[0]
és el "path" al fichero Node.jsprocess.argv[1]
és el "path" al fichero que ejecutamos ("script")process.argv[2]
és el primer argumento que se pasa al "script"process.argv[3]
és el segundo argumento que se pasa al "script", etc.
Crea este fichero con el nombre args.js
:
const process = require("process")
console.log(process.argv[0])
console.log(process.argv[1])
console.log(process.argv[2])
console.log(process.argv[3])
Ejecuta el script args.js
tal como se muestra a continuación:
$ node args.js
/usr/bin/node
/home/box/args.js
undefined
undefined
Como no hemos pasado ningún argumento, puedes ver que argv[2]
y argv[3]
no están definidos (undefined
).
Podemos pasar un argumento al script:
$ node args.js 1
/usr/bin/node
/home/box/args.js
1
undefined
O tres argumentos al script:
$ node args.js 1 2 3
/usr/bin/node
/home/box/args.js
1
2
Ejercicio
Crea un script coste.js
que:
- Reciba como argumentos las dimensiones en centímetros de una caja
- Calcule el volumen de la caja en centimetros.
- Calcule el coste de enviar la caja en función del volumen: 1 euro cada 5000 cm^2
- Muestre por consola el coste en euros de enviar esa caja.
A continuación tienes un ejemplo de una caja de 23x45x10 que tiene un coste de envío de 2.07€ :
$ node coste.js 23 45 10
2.07
Solución
const process = require("process")
const length = process.argv[2]
const width = process.argv[3]
const height = process.argv[4]
const volum = length * width * height
const cost = volum / 5000
console.log(cost)