Track
/
JavaScript
JavaScript
/
Esercizi
/
Sensori di fabbrica
Sensori di fabbrica

Sensori di fabbrica

Esercizio di apprendimento

Introduzione

Errori

Gli errori sono utili per segnalare quando qualcosa non va o è inatteso in un programma o in una porzione di codice.

Sono oggetti JavaScript.

La proprietà principale di questo oggetto è message:

const error = new Error('Oops, something went wrong');

console.log(error.message);
// => "Oops, something went wrong"

Con la sintassi throw, puoi lanciare un errore.

throw new Error('Oops');

Quando viene lanciato un errore, l'esecuzione corrente si interrompe e riprende nel primo blocco catch del call stack.

try {
  throw new Error('Oops');
} catch (error) {
  console.log(error.message);
  // => "Oops"
}

Ereditarietà

L'ereditarietà è un modo per creare relazioni padre-figlio tra le classi. La classe figlia (a volte chiamata sottoclasse) ha accesso al comportamento e ai dati definiti dalla classe genitore (a volte chiamata superclasse).

class Pet {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    console.log(`This is my pet, ${this.name}.`);
  }
}

class Dog extends Pet {}

const dog = new Dog('Otis');
dog.introduce();
// => This is my pet, Otis.

La parola chiave extends nella dichiarazione della classe figlia stabilisce una relazione con la classe genitore attraverso la catena di prototipi.

Gli oggetti creati dal costruttore della classe figlia avranno il prototipo della classe genitore nella loro catena di prototipi, il che dà accesso a tutti i metodi o i dati definiti dalla classe genitore.

const dog = new Dog('Otis');

Dog.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(Dog.prototype); // => true

Pet.prototype.hasOwnProperty('introduce'); // => true
Dog.prototype.hasOwnProperty('introduce'); // => false
dog.hasOwnProperty('introduce'); // => false

Come per qualsiasi classe in JavaScript, le sottoclassi possono ereditare da Error per creare errori personalizzati usando la parola chiave extends. La sintassi instanceof verifica se l'errore catturato è un'istanza di una particolare sottoclasse di Error.

class CustomError extends Error {}

try {
  // ... Code that may throw an error
} catch (error) {
  if (error instanceof CustomError) {
    console.log('The error thrown is an instance of the CustomError');
  }
}

Istruzioni

Elena è la nuova responsabile qualità di una fabbrica di giornali. Dato che è appena arrivata in azienda, ha deciso di rivedere alcuni processi della fabbrica per vedere cosa si potrebbe migliorare. Ha scoperto che i tecnici fanno molti controlli di qualità a mano. Vede una buona opportunità di automazione e chiede a te, sviluppatore freelance, di realizzare un software per monitorare alcune delle macchine.

1. Monitorare il livello di umidità della stanza

La tua prima missione è scrivere un software per monitorare il livello di umidità della sala di produzione. C'è già un sensore collegato al software dell'azienda che restituisce periodicamente la percentuale di umidità della stanza.

Devi implementare nel software una funzione che lanci un errore se la percentuale di umidità è troppo alta. La funzione deve chiamarsi checkHumidityLevel e accettare la percentuale di umidità come parametro.

Devi lanciare un errore (il messaggio non è importante) se la percentuale supera il 70%.

checkHumidityLevel(60);
// => undefined
checkHumidityLevel(100);
// Throws an error

2. Rilevare il surriscaldamento

Elena è molto soddisfatta del tuo primo incarico e ti chiede di occuparti del monitoraggio della temperatura delle macchine. Mentre parli con un tecnico, Greg, scopri che se la temperatura di una macchina supera i 500°C, i tecnici iniziano a preoccuparsi del surriscaldamento.

La macchina è dotata di un sensore che misura la sua temperatura interna. Devi sapere che il sensore è molto sensibile e spesso si rompe. In questo caso, i tecnici dovranno cambiarlo.

Il tuo compito è implementare una funzione reportOverheating che accetta la temperatura come parametro e lancia un errore se il sensore è rotto o se la macchina inizia a surriscaldarsi. Sapendo che in seguito dovrai reagire in modo diverso a seconda dell'errore, ti serve un meccanismo per distinguere i due tipi di errore. Potresti affidarti ai messaggi di errore, ma questo renderebbe il codice fragile: si romperebbe se il messaggio venisse aggiornato. Quindi, per farlo come si deve, lancerai istanze di classi di errore diverse.

  • Se il sensore è rotto, la temperatura sarà null. In questo caso, devi lanciare un ArgumentError.
  • Quando tutto funziona, se la temperatura supera i 500°C, devi lanciare un OverheatingError. Questa classe di errore verrà istanziata con la temperatura come argomento. Assicurati che l'OverheatingError che lanci abbia una proprietà temperature associata.
reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError

3. Monitorare la macchina

Ora che la macchina sa rilevare gli errori, implementerai una funzione che reagisce a quegli errori in modi diversi:

  • Se il sensore è rotto, devi avvisare un tecnico
  • Se la temperatura è troppo alta, spegnerai la macchina se supera i 600°C, oppure accenderai una spia di allarme se è inferiore.
  • Se si verifica un altro errore, lo rilanci.

Implementa una funzione monitorTheMachine che accetta un argomento actions.

actions è un oggetto che ha 4 proprietà:

proprietà descrizione
check una funzione. Controlla la temperatura della macchina. Può lanciare vari errori.
alertDeadSensor una funzione. Avvisa un tecnico che il sensore della temperatura è guasto.
alertOverheating una funzione. Accenderà una spia di allarme sulla macchina.
shutdown una funzione. Spegnerà la macchina.

La funzione monitorTheMachine(actions) deve chiamare internamente check(). Se il controllo va a buon fine, la funzione non deve restituire nulla. Se quel throw produce un errore, ci si aspetta un comportamento diverso:

eccezione comportamento previsto
ArgumentError chiama la funzione alertDeadSensor.
OverheatingError esegui il protocollo di surriscaldamento.
(qualsiasi altra cosa) rilancia l'errore

Protocollo di surriscaldamento Se la temperatura è inferiore a 600 °C, accendi la spia di allarme chiamando la funzione alertOverheating. Se la temperatura supera i 600 °C, la situazione è critica, quindi chiama la funzione shutdown.

monitorTheMachine({
  check,
  alertDeadSensor,
  alertOverheating,
  shutdown,
});
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Sensori di fabbrica?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.