8.1. Factoriales
El siguiente guión aparece en el capítulo Ejemplos sencillos.
Debido a que es la primera explicación de un código, vamos a ir línea por línea.
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.
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
Si la condición es cierta el valor del
if es 1.
Si la condición no es cierta, se evalúa el código desde esta línea hasta el
end.
Si no se satisface la condición el valor de
if es el resultado de multiplicar
fact(n-1) por
n.
El primer
end cierra la sentencia
if.
El segundo
end cierra la sentencia
def.
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?