Track
/
JavaScript
JavaScript
/
Esercizi
/
Numeri fortunati
Numeri fortunati

Numeri fortunati

Esercizio di apprendimento

Introduzione

In JavaScript, i valori possono essere di tipi diversi. Il tipo di una variabile si può cambiare con una conversione di tipo esplicita. Oltre a questo, JavaScript esegue anche una coercizione di tipo (conversione implicita di tipo) quando il contesto lo richiede.

Conversione di tipo

A differenza di molti altri linguaggi, JavaScript non ha un costrutto per eseguire il cast verso un tipo (diverso), ma si possono usare alcune funzioni ausiliarie predefinite. In particolare, Boolean, Number e String si possono usare come funzioni per convertire un valore nel tipo corrispondente.

Conversione in un valore booleano (valori truthy e falsy)

Con Boolean(value) puoi convertire qualsiasi valore in un valore booleano. Esiste un insieme fisso di valori, i cosiddetti valori falsy, che si convertono in false. Soprattutto, false, 0, la stringa vuota, null, undefined e NaN sono falsy.

Per tutti gli altri valori, Boolean restituisce true. Questi valori si chiamano truthy.

Boolean(-1);
// => true

Boolean(0);
// => false

Boolean(' ');
// => true

Boolean('');
// => false

Nota che, per le regole descritte, '0', 'false', [] e {} sono truthy in JavaScript.

Conversione in un numero

Number(value) si può usare per convertire un valore in un numero. Gli spazi bianchi all'inizio e alla fine di una stringa vengono ignorati e una stringa vuota viene convertita in 0. Se provi a convertire un valore non primitivo o una stringa che non rappresenta un numero, il risultato è NaN (Not-A-Number).

Number('  -12.34  ');
// => -12.34

Number('1,2');
// => NaN

Number('');
// => 0

Number({ num: 123 });
// => NaN

Conversione in una stringa

Con String(value) puoi convertire un valore in una stringa. Per i valori primitivi, il risultato è quello che ti aspetti.

String(12.34);
// => '12.34'

String(false);
// => 'false'

String(null);
// => 'null'

String(undefined);
// => 'undefined'

Per gli array, la funzione String applica la conversione a stringa a ogni elemento e unisce i risultati con una virgola. Puoi anche applicare il metodo join direttamente, ad esempio per personalizzare il separatore. Nota che in questi casi null e undefined vengono convertiti in una stringa vuota.

String([42, null, true, 'abc']);
// => '42,,true,abc'

Per gli oggetti, per impostazione predefinita String restituisce un testo poco utile.

String({ key: 'value' });
// => '[object Object]'

Coercizione di tipo

In alcuni contesti, JavaScript converte automaticamente un valore in un altro tipo di dato prima di valutare un'istruzione. Questa conversione implicita si chiama coercizione di tipo.

Contesto booleano

Quando un valore non booleano viene usato in un contesto booleano, JavaScript applica le stesse regole della funzione Boolean per convertirlo implicitamente.

La coercizione a valore booleano si verifica comunemente nei casi seguenti:

  • la condizione di un'istruzione if
  • il primo operando dell'operatore ternario ?
  • l'operando dell'operatore logico NOT !
  • gli operandi degli operatori logici AND && e OR || (il risultato dell'espressione è uno degli operandi, non necessariamente un valore booleano)
const num = 0;
if (num) {
  // this block is NOT executed because 0 is falsy
}

Contesto delle stringhe

Se l'operatore di addizione + viene usato con valori primitivi e un operando è una stringa, anche l'altro subirà una coercizione a stringa. La logica di conversione è la stessa della funzione String. Successivamente, le due stringhe vengono concatenate.

let name;
'hello ' + name;
// => 'hello undefined'

Contesto numerico

Molti operatori applicano una coercizione numerica agli operandi (se necessario) secondo la logica della funzione Number spiegata sopra.

  • Operatori aritmetici: + (se non è coinvolta alcuna stringa), -, *, /, %, **
  • Operatori più e meno unari: +, -
  • Operatori relazionali (per operandi non stringa): >, >=, <, <=
  • Operatori bit a bit: |, &, ^, ~

Per maggiori dettagli su uno qualsiasi di questi operatori, consulta l'elenco degli operatori di MDN.

Per evitare errori, è buona pratica chiamare sempre Number esplicitamente prima di applicare questi operatori.

Istruzioni

Il tuo amico Kojo è un grande appassionato di numeri. Ha un piccolo sito web chiamato "fun-with-numbers". Kojo non è molto bravo a programmare, quindi ti ha chiesto aiuto.

Costruirai due funzioni ausiliarie per i nuovi giochi con i numeri sul sito di Kojo e una terza per convalidare l'input che un utente può inserire.

1. Calcola la somma dei numeri sulla slot machine

Uno dei giochi sul sito di Kojo assomiglia a una slot machine che mostra due gruppi di rotelle con delle cifre. Ogni gruppo di cifre rappresenta un numero. Per la meccanica del gioco, Kojo ha bisogno di conoscere la somma di quei due numeri.

Scrivi una funzione twoSum che accetta due array come parametri. Ogni array è composto da uno o più numeri tra 0 e 9. La funzione deve interpretare ogni array come un numero e restituire la somma di quei due numeri.

twoSum([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. Determina se un numero è palindromo

Un altro gioco sul sito è un piccolo quiz chiamato "Lucky Numbers". Un utente può inserire un numero e poi vede se il numero appartiene a una qualche sequenza o schema segreto. La sequenza o lo schema dei "lucky numbers" cambia ogni mese e ogni utente ha solo un numero limitato di tentativi per indovinarlo.

I numeri fortunati di questo mese devono essere numeri palindromi. I numeri palindromi restano uguali quando si invertono le cifre.

Implementa la nuova funzione luckyNumber che accetta un numero come parametro. La funzione deve restituire true se il numero è palindromo e false in caso contrario. Il numero di input sarà sempre un numero intero positivo.

luckyNumber(1441);
//=>  true

luckyNumber(123);
//=> false

3. Genera un messaggio di errore per input non validi dell'utente

In vari punti del sito ci sono campi di input dove gli utenti possono inserire numeri e fare clic su un pulsante per attivare qualche azione. Kojo vuole migliorare l'esperienza utente del suo sito. Vuole mostrare un messaggio di errore nel caso in cui l'utente faccia clic sul pulsante ma il campo contenga un valore di input non valido.

Ecco qualche informazione in più su come viene fornito il valore di un campo di input.

  • Se l'utente digita qualcosa in un campo, il valore associato è sempre una stringa, anche se ha digitato solo numeri.
  • Se l'utente digita qualcosa ma poi lo cancella, la variabile sarà una stringa vuota.
  • Prima ancora che l'utente inizi a digitare, la variabile può essere undefined o null.

Scrivi una funzione errorMessage che accetta l'input dell'utente come parametro. Se l'utente non ha fornito alcun input, errorMessage deve restituire 'Required field'. Se l'input non rappresenta un numero diverso da zero (secondo le regole di conversione di JavaScript), deve essere restituito 'Must be a number besides 0'. In tutti gli altri casi puoi assumere che l'input sia valido: il valore restituito deve essere una stringa vuota.

errorMessage('123');
// => ''

errorMessage('');
// => 'Required field'

errorMessage('abc');
// => 'Must be a number besides 0'
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Numeri fortunati?

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