Capítulo 8. Retomando los ejemplos sencillos

Tabla de contenidos
Factoriales
Cadenas
Expresiones regulares

Vamos ahora a desmontar el código de nuestros anteriores programas ejemplo. Para que sirva de referencia vamos a numerar las líneas de todos los guiones.

Factoriales

El siguiente guión aparece en el capítulo Ejemplos sencillos.

  01 def fact(n)
  02 if n == 0
  03  1
  04 else
  05  n * fact(n-1)
  06 end
  07 end
  08 print fact(ARGV[0].to_i), "\n"
  

Debido a que es la primera explicación de un código, vamos a ir línea por línea.

  01 def fact(n)
  

En la primera línea, def es la sentencia que define una función (o con mayor precisión, un método; trataremos con más detalle los métodos en un capítulo posterior). Aquí se indica que la función fact toma un único argumento, que se llama n.

  02 if n == 0
  

Con if comprobamos una condición. Si la condición es cierta, se evalúa la siguiente línea; sino independientemente de lo que siga se evalúa el else

  03  1
  

Si la condición es cierta el valor del if es 1.

  04 else
  

Si la condición no es cierta, se evalúa el código desde esta línea hasta el end.

  05  n * fact(n - 1) 
  

Si no se satisface la condición el valor de if es el resultado de multiplicar fact(n-1) por n.

  06 end
  

El primer end cierra la sentencia if.

  07 end
  

El segundo end cierre la sentencia def.

  08 print fact(ARGV[0].to_i), "\n"
  

Llama a la función fact() con el argumento especificado en la línea de comandos, e imprime el resultado.

ARGV es un array que contiene los argumentos de la línea de comandos. Los miembros de ARGV son cadenas por lo que hay que convertirlos a números enteros con to_i. Ruby no convierte automáticamente las cadenas a números como hace Perl.

Hmmm... ¿Qué pasa si alimentamos este programa con un número negativo? ¿Se ve cuál es el problema? ¿Cómo se podría solucionar?