Capítulo 8. Retomando los ejemplos sencillos
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.
8.1. 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; si no 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 cierra 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?