Github pràctic: correcció d'errors en script de Javascript

De wikijoan
La revisió el 09:23, 17 març 2022 per Joan (discussió | contribucions) (Es crea la pàgina amb «=Introducció= Tenim un script amb 12 errors de sintaxi, i cada alumne n'haurà de corregir un, de manera que de forma col·laborativa entre tots corregirem el script....».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Introducció

Tenim un script amb 12 errors de sintaxi, i cada alumne n'haurà de corregir un, de manera que de forma col·laborativa entre tots corregirem el script.

En aquesta pràctica hi ha tasques que les ha de fer el professor, i d'altres que les ha de fer cadascú dels alumnes.

Professor. Pas 1. Crear el repositori

El professor crea el repositori corregir_errors amb un fitxer README i buit. Repositori public.

$ git clone https://github.com/jquintanabalmes/corregir-errors.git
$ cd corregir-errors

El professor crea el script arrays_javascript.js on s'han introduït 12 errors de sintaxi.

$ git add arrays_javascript.js
$ git commit -m "afegim el script arrays_javascript.js"
$ git push origin main

i ja tenim en el remot el fitxer script arrays_javascript.js.

Alumne1 i alumne2: correcció d'un error de sintaxi

Els alumnes es descarreguen el repositori. Treballarem amb alumne1 i alumne2, però serà general per a N alumnes.

$ git clone https://github.com/jquintanabalmes/corregir-errors.git
$ cd corregir_errors

L'alumne1 crea una branca nova:

$ git checkout -b correccio_alumne1 (on en comptes de ''alumne1'' posaràs el teu nom, per ex ''jordi'')

Executem el script. Com que és javascript:

$ node script arrays_javascript.js

i mirem els missatges d'error. Corregim un dels errors i posem un comentari dins del codi. Per ex:ç

//alumne: jordi. Corregit error de sintaxi en la línia 25 el 16-03-2022 18:00

Fem un commit dels canvis, posant la descripció adequada:

$ git add arrays_javascript.js
$ git commit -m "correcció alumne jordi el 16-03-2022 18:25"

I ara fem el push d'aquesta branca a github.com:

$ git push origin correccio_jordi
Username: 
Password: 
...
remote: Create a pull request for 'correccio_jordi' on GitHub by visiting:
remote:      https://github.com/jquintanabalmes/corregir-errors/pull/new/correccio_jordi
remote: 
To https://github.com/jquintanabalmes/corregir-errors.git
 * [new branch]      correccio_joan -> correccio_joan

El que diu el missatge és que per tal de fer el merge dels canvis proposats, s'ha de crear un pull request.

Fixem-nos que en el remot apareix de forma automàtica la nova branca. L'alumne amb el seu compte pot veure que hi ha dues branques, però no pot fer el pull-request. És el professor el que té permisos per fer el pull-request, doncs és el propietari del repositori. El professor també podria assignar aquests permisos a un alumne concret.

Un cop fet el push l'alumne ja pot canviar-se a la branca main, i eliminar la branca de desenvolupament:

$ git checkout main
S'ha canviat a la branca «main»
La vostra branca està al dia amb «origin/main».

$ git branch -D correccio_jordi

Professor: pull-request de la branca de l'alumne

Per tant, el professor crea un pull-request, que per defecte la descripció del pull-request serà la mateixa cadena que la descripció del commit que ha creat l'alumne.

Abans de fer el merge el professor mira les diferències en els fitxers que han canviat, mira els commits que hi ha en aquesta branca (en principi només un) i valida els canvis. Fa el merge.

Ja podem eliminar la branca que havia creat l'alumne.

A l'hora de fer el merge tenim tres possibilitats:

  • Create a merge commit: all commit from this branch will be added to the base branch via a merge commit
  • Squash and merge: the 1 commit from this branch will be added to the base branch
  • Rebase and merge: the 1 commit from this branch will be rebased and added to the base branch

L'opció per defecte és la primera, però totes són correctes i fan el merge sense conflicte.

Iteració 2. Alumne 2

Mentre el primer alumne ja ha fet el push dels seus canvis (i el professor ha validat o encara no aquests canvis), l'alumne 2 (Clara) també vol fer un canvi. El més correcte, quan un alumne es posa a treballar, és fer un pull del repositori remot:

$ git pull origin main

per tal de tenir la última versió del fitxer. Ara bé, potser el professor encara no ha validat els canvis pendents que han fet d'altres alumnes.

NOTA: el git clone ja l'havia fet prèviament, però ha passat un temps i és possible que el fitxer remot ja hagi incorporat canvis.

Igual que ha fet l'alumne jordi, l'alumna clara crea una nova branca, corregeix un dels errors, fa el commit i fa el push.

Professor: noves branques

I la història es repeteix. Ara la pilota està a la teulada del professor, i aquest ha d'anar fent el merge dels diferents canvis que es van incorporant. Per sort, el github ho fa de forma intel·ligent i normalment els merges es fan sense cap conflicte. En la branca main es van incorporant les diferents correccions dels alumnes.

script amb errors

En aquest script hi ha 12 errors. arrays_javascript_errors.js:

//https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array

//Crear un Array
let fruites = ["Poma", "Taronja];

console.log(fruites.length);

//Acceder a un elemento de Array mediante su índice
let primer = fruites[];
console.log(primer);

let ultim = fruites[fruites.lengt - 1];
console.log(ultim);

//Recórrer un Array
fruites.forEach(function(element, index, array) {
    console.log(element, index);
});

//Afegir un element al final d'un Array
console.log(fruites.push('Mandarina'); //push retorna la nova longitud
console.log(fruites);

//Eliminar l'últim element d'un Array
ultim = fruites.pop();

//Afegir un element al principi d'un Array
novaLongitud = fruites.unshif('Maduixa'); // Afegeix "Maduixa" a l'inici

//Eliminar el primer element d'un Array
primer = fruites.shift(); // Elimina "Maduixa" de l'inicio

//Tornem a afegir maduixa
fruites.push('Maduixa')

//Trobar l'índex d'un element de l'Array
let pos = fruites.indexof('Taronja'); // pos és la posició

//Eliminar un únic element mitjançant la seva posició
let elementEliminat = fruitessplice(pos, 1);

//Eliminar varis elements a partir d'una posició
let vegetals = ['Carbassó', 'Esbergínia', 'Rave', 'Pastanaga'];
console.log(vegetals);

pos = 1
let numElements = 2;

let elementsEliminats = vegetals.splice(pos numElements);

console.log(vegetals);

//Copiar un Array
let copiaArray = vegetals.slice(;

//Creació d'un array unidimensional
let missatges = [];
missatges[0] = "Hola";
missatges[99] = "món";

if (missatges.length === 100) 
   console.log("La longitud és de 100.");
}

//Creació d'una matriu de dues dimensions
let taulell = [
  ['T','C','A','D','R','A','C','T'],
  ['P','P','P','P','P','P','P','P'],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  ['p','p','p','p','p','p','p','p'],
  ['t','c','a','d','r','a','c','t'] ];

console.log(taulell.join('\n') + '\n\n';

// Avançar dues posicions el peó de rei
taulell[4][4] = taulell[6][4];
taulell[6][4] = ' ';
console.log(taulell.join('\n');

//Ús d'un array per a tabular un conjunt de valors
valors = [];
for (let x = 0; x < 10; x++){
 valors.push([
  2 ** x,
  2 * x ** 2
 ]);
}
console.table(valors);

creat per Joan Quintana Compte, març 2022