26.3. Organización del código
El intérprete de Ruby procesa el código conforme lo lee. No existe nada semejante a una fase de compilación; si algo no se ha leído todavía, sencillamente está sin definir.
Como cabría esperar a primera vista esto no fuerza a que se deba organizar el código de un modo estrictamente bottom-up. Cuando el intérprete encuentra la definición de un método puede incluir con seguridad referencias no definidas, siempre y cuando se asegure que se definirán antes de llamar realmente al método:
Aunque pueda parecer un poco menos adecuado que lo que se suele usar en Perl o Java, es menos restrictivo que intentar escribir código C sin prototipos (lo que obliga a mantener siempre una ordenación parcial de quién referencia a quién). Poner el código de más alto nivel al final del fichero, funciona siempre. Y esto no es una gran molestia aunque a primera vista lo pudiese parecer. Una forma sensata e indolora de conseguir el comportamiento que se desea es definir una función
main al principio del fichero y llamarla al final.
También sirve de ayuda que Ruby proporcione herramientas para dividir programas complicados en bloques legibles, reutilizables, y relacionados lógicamente. Se ha visto la utilización de
include para acceder a módulos. Pero también pueden ser útiles
load y
require.
load funciona como si el fichero al que referencia fuese copiado y pegado (algo parecido a la directiva
#include del preprocesador C).
require es un poco más sofisticada, carga el código como mucho sólo una vez y cuando se necesite. Existen otras diferencias entre
load y
require; para más información se puede acudir el manual del lenguaje o a la FAQ.