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.
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; sino 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 cierre 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?