Dal linguaggio C a JavaScript: introduzione con esempi

Dal linguaggio C a JavaScript: introduzione con esempi

Questo articolo si rivolge agli amanti del C e ai programmatori di questo nobile linguaggio per mostrare loro cos'è di fatto JavaScript attraverso una serie di esempi mirati (tutti facenti parte dell'arsenale storico del C). Invece che presentare JavaScript partendo dall'inizio, ho pensato che per persone esperte sia più facile intuire la struttura e il funzionamento di un linguaggio visionando degli esempi piuttosto che annoiarli rispiegando loro cos'è una variabile. Spero che troviate utili gli argomenti presentati.

Funzioni


int add( int, int); 		

main()
{
  int i=1;
  printf("i starts out life as %d.", i);

  i = add(1, 1);

  printf(" And becomes %d after function is executed.\n", i);
}


int add( int a, int b) 
{
  int c;
  c = a + b;
  return c;
}

In JavaScript diventa:


var add = function(a, b) {

	return a + b;

}

var n = 1;

console.log('n starts out life as ' + n);

n = add(1, 1);

console.log('And becomes ' + n + ' after function is executed.');

Lettura di una password


#include <curses.h>

main()
{
  int  i;
  char buffer[80];			/* work buffer			*/

  initscr();				/* initialize the screen	*/

  printw("Please enter a password => ");	/* update screen image		*/
  refresh();				/* Update screen with screen image */
  noecho();				/* Suppress echo to the screen	*/
					/* Read characters until C/R	*/ 
  while((buffer[i] = getch()) != '\n') i++;

  printw("\nPassword is %s - press return to continue.",buffer);
  refresh();
  getch();

  endwin();				/* Shut down curses		*/
}

In JavaScript diventa:


var message = prompt('Please enter a password => ', 'xyz');

if (message != null && message != "") {
	console.log(message);
}

Invertire i caratteri in una stringa


void reverse(char s[]);

main()
{
  char text[80]="martin";

  printf("string is %s\n", text);
  reverse(text);
  printf("string is %s\n", text);
}

void reverse(char s[])
{
  int c, i, j;
   
  for (i=0, j=strlen(s)-1; i < j;i++, j--)
  {
    c = s[i];
    s[i] = s [j];
    s[j] = c;
  }
}

In JavaScript diventa:


function reverseString(str) {

	var chars = str.split('');
	var reversed = chars.reverse();
	
	return reversed.join('');

}

Ordinare i numeri in un array


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void display_nums(int *, int);
int comp_nums(const int *, const int *);

main()
{
  int numbers[]=			/* Numbers to be sorted.	*/
  {43,76,23,1,100,56,23,99,33,654};

  int how_many=10;			/* Number of numbers entered	*/


  puts("\nThese are the unsorted numbers\n");
  display_nums(numbers, how_many);

					/* SORT the numbers held in 
					 * 'numbers'.			*/
  qsort(
        numbers, 			/* Pointer to elements		*/
        how_many, 			/* Number of elements		*/
        sizeof(int),  			/* size of one element.		*/
        (void *)comp_nums		/* Pointer to comparison function */
       );

  puts("\nThese are the sorted numbers\n");
  display_nums(numbers, how_many);
}

int comp_nums(const int *num1, const int *num2)
{
  if (*num1 <  *num2) return -1;
  if (*num1 == *num2) return  0;
  if (*num1 >  *num2) return  1;
}

void display_nums(int *array, int count)
{
					/* Print all the elements in 
					 * the array.               	*/
  while ( count-- )
  {
    printf("%d ",*array);
    array++;
  }
  puts("");
}

In JavaScript diventa:


var numbers = [43,76,23,1,100,56,23,99,33,654];

var sorted = numbers.sort(function(a, b) {

	return a - b;

});
console.log(sorted);

Restituire la dimensione di diversi tipi di dati


#include <stdio.h>


main()
{
  char array[10];
  struct s 
  {  
    int a;
    float b;
  } structure;


  printf(" array  is %i\n", sizeof array);
  printf(" struct is %i\n", sizeof structure);
}

JavaScript non è in grado di reperire la dimensione fisica di un tipo di dati, ma solo il numero di elementi in esso contenuti. In JavaScript, che è un linguaggio loose per quanto riguarda i tipi di dati, si può ottenere il numero di elementi di un array in questo modo:


var len = arr.length;
console.log(len);

ossia tramite la proprietà length unita a ciascun oggetto array. JavaScript inoltre non ha le strutture ma possiede gli oggetti letterali che, seppur vagamente, possono essere ricondotti alle strutture del C:


var structure = {

   a: 1,
   b: 3.14

};

Come si può notare, in JavaScript non si dichiara il tipo di dati, ma si lascia all'interprete il compito di desumerlo dal valore. Nel nostro caso a è un intero e b è un numero in virgola mobile.

Gli oggetti in JavaScript di tipo Object non hanno, ad eccezione di Array, una proprietà length associata. In questo caso è JavaScript che deve implementare una funzione simile a quella del C:


var sizeOf = function(obj) {

	var n = 0, i;
	
	for(i in obj) {
	
		var prop = obj[i];
		
		if(obj.hasOwnProperty(prop)) {
		
			n++;
		
		}
	
	}
	
	return n;

};

var size = sizeOf(structure); // 2
Torna su