CoffeeScript - Gamas

En el capítulo anterior, hemos visto Arrays en CoffeeScript, mientras programamos nos enfrentaremos a algunos escenarios en los que tenemos que almacenar una secuencia de valores numéricos en un array como se muestra a continuación.

numbers =[1,2,3,4,5,6,7,8,9,10]

CoffeeScript proporciona una forma más corta de expresar las matrices que contienen una secuencia de valores numéricos, conocida como ranges. Esta característica de CoffeeScript está inspirada en Ruby.

Sintaxis

Los rangos se crean mediante dos valores numéricos, la primera y la última posición en el rango, separados por .. o .... Con dos puntos (1..4), el rango es inclusivo (1, 2, 3, 4); con tres puntos (1 ... 4), el rango excluye el final (1, 2, 3).

A continuación se muestra la sintaxis de los rangos en CoffeeScript. Definiremos los valores en un rango entre llaves[ ]al igual que las matrices. En rangos, mientras almacenamos una secuencia de valores numéricos, en lugar de proporcionar los valores de toda la secuencia, podemos simplemente especificar subegin y end valores separados por dos puntos (..) Como se muestra abajo.

range =[Begin..End]

Ejemplo

Aquí hay un ejemplo de rangos en CoffeeScript. Guarda esto en un archivo con nombreranges_example.coffee.

numbers =[0..9]
console.log "The contents of the range are: "+ numbers

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c ranges_example.coffee

Al compilar, le da el siguiente JavaScript. Aquí puede observar que el rango se convierte en una matriz CoffeeScript completa.

// Generated by CoffeeScript 1.10.0
(function() {
  var numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  console.log("The contents of the range are:: " + numbers);

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee ranges_example.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida.

The contents of the range are:: 0,1,2,3,4,5,6,7,8,9

Excluyendo el valor final

Los rangos se compilan en matrices completas que contienen todos los números. Si queremos excluir elend valor, entonces tenemos que separar el start y end elementos del rango usando tres puntos (...) Como se muestra abajo.

range =[Begin...End]

Ejemplo

Podemos reescribir el ejemplo anterior excluyendo el endvalor como se muestra a continuación. Guarde los siguientes contenidos en un archivo con nombrerange_excluding_end.coffee

numbers =[0...9]
console.log "The contents of the range are:: "+ numbers

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c ranges_example.coffee

Al compilar, le da el siguiente JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8];

  console.log("The contents of the range are:: " + numbers);

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee ranges_example.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida. Aquí, puede observar que el valor final9 está excluido.

The contents of the range are:: 0,1,2,3,4,5,6,7,8

Usar rangos con variables

También podemos definir un rango asignando los valores inicial y final a las variables.

Ejemplo

Considere el siguiente ejemplo. Aquí hemos definido un rango usando variables. Guarde este código en un archivo con nombrerange_variables.coffee

start=0
end=9
numbers =[start..end]
console.log "The contents of the range are: "+ numbers

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c range_variables.coffee

Al compilar, le da el siguiente JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var end, i, numbers, results, start;

  start = 0;

  end = 9;

  numbers = (function() {
    results = [];
    for (var i = start; start <= end ? i <= end : i >= end; start <= end ? i++ : i--) {
      results.push(i);
    }
    return results;
  }).apply(this);

  console.log("The contents of the range are:: " + numbers);

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee range_variables.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida. Aquí, puede observar que el valor final9 está excluido.

The contents of the range are:: 0,1,2,3,4,5,6,7,8,9

Rangos con matrices

Podemos dividir matrices usándolas con rangos. Siempre que especificamos rangos inmediatamente después de las matrices (variables), el compilador CoffeeScript lo convierte en unslice() llamada al método de JavaScript.

Supongamos que tenemos una matriz que tiene valores numéricos, digamos de 0 a 9, luego podemos recuperar los primeros 4 elementos como se muestra a continuación.

num  = [1, 2, 3, 4, 5, 6, 7, 8, 9]
data = num[0..5]

Los valores negativos representan los elementos del final, por ejemplo, -1 indica 9. Si especificamos un número negativo 3 seguido de dos puntos, se extraerán los últimos tres elementos de la matriz.

data = num[-3..]

Si especificamos solo dos puntos en el rango de una matriz como num[..], luego se extraerá la matriz completa. También podemos reemplazar un segmento de matriz con otros elementos usando rangos como se muestra a continuación.

num[2..6] = [13,14,15,16,17]

Ejemplo

El siguiente ejemplo demuestra el uso de rangos con matrices. Guarde este código en un archivo con nombrerange_arrays.coffee

#slicing an array using ranges
num  = [1, 2, 3, 4, 5, 6, 7, 8, 9]
data = num[0..5]
console.log "The first four elements of the array : "+data


#Using negative values
data = num[-3..]
console.log "The last 3 elements of the array : "+data

#Extracting the whole array
console.log "Total elements of the array : "+num[..]


#Replacing the elements of an array
num[2..6] = [13,14,15,16,17]
console.log "New array : "+num

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c range_arrays.coffee

Al compilar, le da el siguiente JavaScript. Aquí puede observar que todos los rangos se convierten en las llamadas al método slice () de JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var data, num, ref;

  num = [1, 2, 3, 4, 5, 6, 7, 8, 9];

  data = num.slice(0, 6);

  console.log("The first four elements of the array : " + data);

  data = num.slice(-3);

  console.log("The last 3 elements of the array : " + data);

  console.log("Total elements of the array : " + num.slice(0));

  [].splice.apply(num, [2, 5].concat(ref = [13, 14, 15, 16, 17])), ref;

  console.log("New array : " + num);

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee range_arrays.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida. Aquí, puede observar que el valor final9 está excluido.

The first four elements of the array : 1,2,3,4,5,6
The last 3 elements of the array : 7,8,9
Total elements of the array : 1,2,3,4,5,6,7,8,9
New array : 1,2,13,14,15,16,17,8,9

Rangos con cadenas

También podemos usar rangos con Strings. Si especificamos rangos después de Strings, CoffeeScript los corta y devuelve un nuevo subconjunto de caracteres.

Ejemplo

El siguiente ejemplo demuestra el uso de rangos con Strings. Aquí hemos creado una cadena y extraído una subcadena usando rangos. Guarde este código en un archivo con nombreranges_with_strings.coffee

my_string = "Welcome to tutorialspoint"
new_string = my_string[0..10]
console.log new_string

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c ranges_with_strings.coffee

Al compilar, le da el siguiente JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var my_string, new_string;

  my_string = "Welcome to tutorialspoint";

  new_string = my_string.slice(0, 6);

  console.log(new_string);

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee ranges_with_strings.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida. Aquí, puede observar que el valor final9 está excluido.

Welcome to

Comprensiones sobre rangos

Como objetos y matrices, también podemos iterar los elementos de un rango usando comprensiones.

Ejemplo

A continuación se muestra un ejemplo del uso de comprensiones en rangos. Aquí hemos creado un rango y recuperado los elementos usando comprensiones. Guarde este código en un archivo con el nombrecomprehensions_over_ranges.coffee

numbers =[0..9]
console.log "The elements of the range are: "
console.log num for num in numbers

Abre el command prompt y compile el archivo .coffee como se muestra a continuación.

c:\> coffee -c comprehensions_over_ranges.coffee

Al compilar, le da el siguiente JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var i, len, num, numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  console.log("The elements of the range are: ");

  for (i = 0, len = numbers.length; i < len; i++) {
    num = numbers[i];
    console.log(num);
  }

}).call(this);

Ahora, abre el command prompt nuevamente y ejecute el archivo CoffeeScript como se muestra a continuación.

c:\> coffee comprehensions_over_ranges.coffee

Al ejecutarse, el archivo CoffeeScript produce la siguiente salida. Aquí, puede observar que el valor final9 está excluido.

The elements of the range are:
0
1
2
3
4
5
6
7
8

De la misma forma también podemos cambiar este incremento usando la palabra clave by de comprensiones.

array = (num for num in [1..10] by 2)
console.log array