Apprenticeship Day 11
Advent of Code
Hemos trabajado en el primer problema de Advent of Code
Algunas ideas para avanzar programando: pensar el problema antes de escribir el código, utilizar lápiz y papel o pizarra para esbozar el funcionamiento, escribir código y ejecutarlo a menudo para comprobar que cada paso funciona, utilizar console.log para hacer debugging y entender lo que ocurre, utilizar ejemplos muy pequeños para avanzar antes de pasar a datos más grandes, etc. A veces la solución llega después de descansar o dejarlo hasta el día siguiente.
Repaso ecosistema JavaScript
Para crear un proyecto JavaScript creamos un nuevo paquete con npm
npm init
Para ejecutar un fichero de JavaScript necesitamos un intérprete que transforme el código escrito con las sintaxis adecuada y lo ejecute:
node file.js
Crear un archivo ejecutable
Como alternativa para ejecutar un archivo se puede crear un archivo ejecutable. Para ello el archivo tiene que tener permisos de ejecución, ls -l nos muestra los permisos:
-r-xr-xr-x 1 root wheel 1296640 1 Jan 2020 bash*
-rwxr-xr-x 1 root wheel 121968 1 Jan 2020 cat*
-rwxr-xr-x 1 root wheel 107552 1 Jan 2020 chmod*
La primer columna nos muestra los permisos que están agrupados en 3 partes: usuario, grupo y otros. Y los valores que son r (read), w (write) y x (execution).
Hemos creado un archivo y le hemos cambiado los permisos para que sea ejecutable: chmod +x file.js
Ahora podemos ejecutar el archivo ./myfile o si añadimos su ubicación al PATH, estará disponible desde cualquier localización del sistema como myfile,
Un aspecto importante al crear un ejecutable es la shebang, la primera línea de nuestro archivo indica cómo tiene que interpretar el contenido el sistema operativo, por ejemplo en el caso de este ejemplo será node el encargado de interpretar nuestro fichero. #!/usr/bin/env node
console.log(‘Hi’);
JavaScript usando require
module.exports = input;
const input = require("./api");
JavaScript usando import
Tenemos que modificar el fichero package.json para que el proyecto se configure como ES6
"type": "module"
export default input;
import input from "./api.js";