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 logy que nodeya 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 nodeno 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.js
  • process.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)

Array

String

Referències