domenica 29 settembre 2013

Come creare una funzione con parametri in JavaScript?

Nell'ultimo articolo ti ho spiegato come creare una funzione in JavaScript. Le funzioni in JavaScript possono accettare dei parametri, che possono essere utilizzati per influenzare il comportamento della funzione.

Come passare dei parametri ad una funzione?

Ti basta dichiarare i parametri tra le parentesi tonde alla dichiarazione della funzione. All'invocazione, passa i valori che vuoi utilizzare:

function saluta(nome) {
    return "Ciao, " + nome;
}

saluta("Giustino");
// "Ciao, Giustino"

giovedì 26 settembre 2013

Come creare una funzione in JavaScript?

Problema

Vuoi creare una funzione in JavaScript, ovvero un blocco di codice da poter riutilizzare a tuo piacimento.

Soluzione

Crea una funzione utilizzando l'istruzione function:

function salutaMondo() {
    alert("Hello, World");
}

sempliceFunzione();

Approfondimento

Una funzione creata utilizzando la parloa chiave function è chiamata static function. La struttura di base è:

function nomefunzione() {
    // istruzione 1
    // istruzione 2
    // ecc.
}

Puoi dare alla funzione un qualsiasi nome valido per le variabili in JavaScript. Però, dato che le funzioni effettuano un'azione, è comune inserire un verbo nel nome, come nell'esempio salutaMondo.

Esercizi

1.Sapresti scrivere una funzione che effettua la somma di due numeri?

mercoledì 25 settembre 2013

Eliminare gli spazi da una stringa in JavaScript

Problema

Vuoi eliminare gli spazi iniziali e finali da una stringa.

Soluzione

Utilizza il metodo trim:

var stringa_con_spazi = "      ciccio       ";
var stringa_senza_spazi = stringa_con_spazi.trim(); // "ciccio"

Discussione

Questo metodo è stato introdotto in ECMAScript5: prima era necessario utilizzare le espressioni regolari ed il metodo replace per poter effettuare la stessa operazione.

Tutti i browser moderni supportano il metodo trim: l'unica eccezione è Internet Explorer 8. Se dovesse essere necessario supportare questo browser, puoi integrare nel tuo codice una funzione di fallback, tipo la seguente:

if (typeof String.trim === "undefined") {
    String.prototype.trim = function() {
        //(^\s*) -> tutti gli spazi all'inizio, zero o più volte
        //(\s*$) -> tutti gli spazi alla fine, zero o più volte
        return this.replace(/(^\s*)|(\s*$)/g, "");
    }
}

Una volta eseguito questo codice, potrai utilizzare il metodo trim come per ogni altra stringa.

Con ECMAScript5 sono stati introdotti anche i metodi trimLeft e trimRight che eliminano gli spazi a sinistra e a destra, rispettivamente.

martedì 24 settembre 2013

Come suddividere una stringa in JavaScript?

Problema

Hai una stringa composta da varie parole, separate da virgole. Vuoi dividere la stringa nelle singole parole.

Soluzione

Usa il metodo split sulla stringa.

var stringa = "uno, due, tre, quattro, cinque";
var lista = stringa.split(',');

console.log(lista); 
// ["uno", " due", " tre", " quattro", " cinque"]

Discussione

Il metodo split prende in ingresso due parametri: un primo parametro obbligatorio che rappresenta il separatore (ovvero in base a quale carattere suddividere la stringa) ed un secondo parametro opzionale che indica il numero di divisioni da eseguire. Ad esempio, potremmo scrivere:

var stringa = "uno, due, tre, quattro, cinque";
var lista = stringa.split(',', 2);

console.log(lista); 
// ["uno", " due"]

split può essere utilizzato per suddividere una stringa in singoli caratteri: basta semplicemente passare la stringa vuota come primo parametro:

"divisione".split(""); 
//["d", "i", "v", "i", "s", "i", "o", "n", "e"]

lunedì 23 settembre 2013

Estrarre una sottostringa in JavaScript

Problema

Hai una stringa da cui vuoi estrarre una porzione delimitata da < e >.

Soluzione

Utilizzando il metodo indexOf puoi recuperare l'indice del carattere < e quello del carattere >. Poi puoi passare questi due indici al metodo substring per estrarre la stringa.

var frase = "Sai che 4 > 3? Queste sono le <cose che sto scrivendo> in questa frase."

var inizio = frase.indexOf('<');
var fine = frase.indexOf('>', inizio+1);

var extract = frase.substring(inizio+1, fine);

Discussione

La porzione di stringa che vogliamo estrarre è delimitata dai caratteri < >. Nella prima ricerca il metodo indexOf è utilizzato senza il secondo parametro. Nella seconda ricerca invece, il secondo parametro (che denota l'indice da cui comincia la ricerca) è necessario, altrimenti il metodo avrebbe restituito l'indice del primo >.

Una volta recuperati gli indici dell'inizio e della fine della sottostringa, utilizziamo il metodo substring per l'estrazione. Il primo parametro è l'indice del primo carattere da estrarre, il secondo parametro rappresenta l'ultimo.

domenica 22 settembre 2013

Ricerca in una stringa JavaScript

Problema

Vuoi sapere se una sottostringa è presente in una data stringa.

Soluzione

Utilizza il metodo .indexOf() dell'oggetto String per trovare l'indice a cui si trova la sottostringa, se esiste:

var testo = 'Questa è una frase di esempio';
var daCercare = 'una';

var result = testo.indexOf(daCercare); // 9

if(result != -1) {
    // la sottostringa esiste
} else {
    // la sottostringa non è stata trovata
}

Discussione

Il metodo .indexOf() restituisce un numero che rappresenta l'indice ovvero la posizione del primo carattere della sottostringa. Ricordati che il primo carattere della stringa corrisponde al numero zero, quindi nell'esempio la sottostringa inizia dal decimo carattere.

Per verificare se la sottostringa non esiste, basta confrontare il valore restituito con -1, valore che indica il fatto che la sottostringa non è stata trovata.

Il metodo .indexOf() prende in ingresso due parametri: la sottostringa e un secondo parametro opzionale, l'indice numerico da cui iniziare la ricerca:

var testo = "Ciccio formaggio è nato di maggio"

testo.indexOf('maggio') // 10

testo.indexOf('maggio',11) // 27

Oltre a .indexOf(), esiste anche il metodo .lastIndexOf() che ha lo stesso comportamento e firma, ma comincia da destra anziché da sinistra

sabato 21 settembre 2013

Come confrontare le stringhe in JavaScript?

Problema

Vuoi confrontare due stringhe per decidere se sono uguali.

Soluzione

Usa l'operatore ==:

var nome = prompt("Come ti chiami?", "");

if(nome == 'Ciccio') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
}

Discussione

Due stringhe vengono confrontate con l'operatore ==. Quando questo operatore viene utilizzato in un test condizionale, il blocco di codice che segue viene eseguito solo se il test è vero (le stringhe sono uguali):

if(nome == 'Ciccio') {
    //Questo alert viene eseguito
    alert('Ti chiami Ciccio');
}

Se le stringhe non sono uguali, ed è presente il blocco else, sarà quest'ultimo ad essere eseguito:

if(nome == 'Ciccio') {
    //Questo NON viene eseguito    
    alert('Bene!')
} else {
    //Questo viene eseguito
    alert('Non ti chiami Ciccio!');
}

Ci sono diversi fattori che possono influenzare l'uguaglianza di due stringhe. Per esempio, le stringhe potrebbero essere uguali, ma differire per una lettera maiuscola/minuscola come nel caso "Ciccio/ciccio".

In questi casi conviene convertire tutte le lettere in maiuscole o minuscole utilizzando i metodi .toUpperCase() e .toLowerCase() rispettivamente, e poi effettuare il confronto.

if(nome.toLowerCase() == 'CICCIO') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
} 

Cosa succede se confrontiamo un numero con una stringa? Ad esempio se avessimo:

25 == "25" //vero

Questo codice risulta vero perché viene effettuato un cast (ovvero una conversione automatica) del numero alla stringa "25".

Ci sono volte in cui potresti non volere questa conversione automatica e sapere se effettivamente due oggetti sono identici. In questi casi devi utilizzare l'operatore ===:

25 === "25" //falso

A volte potresti voler sapere quando due stringhe non sono uguali. In questi casi devi utilizzare gli operatori != e !==. Questi operatori funzionano allo stesso modo degli operatori di uguaglianza, solamente verificano se gli oggetti sono diversi:

25 !== "25" //vero

Puoi utilizzare anche gli operatori minore e maggiore per confrontare le stringhe.

'ala' < 'barca' //vero
'erba' > 'cena' //vero

Non c'è differenza tra maggiore (>) e maggiore o uguale (>=). Questo vale anche per gli operatori minore (<) e minore o uguale (<=).

venerdì 20 settembre 2013

Come concatenare le stringhe in JavaScript?

Problema

Vuoi unire due o più stringhe in una

Soluzione

Concatena le stringhe utilizzando l'operatore più (+):

var string1 = "Ciao, sono una ";
var string2 = "stringa";
//Crea una nuova stringa contenente "Ciao, sono una stringa"
var string3 = string1 + string2