## 13.打破大型程序 并不是说你将编写全部放在一个文件中的专业程序。 你需要将它们分解成小块,将这些块放入单独的文件中,并根据需要将它们包括在其他程序中。 所以让我们看一个例子 ```rb # break_full.rb class Square attr_accessor :side_length def perimeter @side_length * 4 end end s = Square.new s.side_length = 5 puts "The squares perimeter is #{s.perimeter}" ``` 输出量 ```rb The squares perimeter is 20 ``` 因此,你会看到上述名为 [break_full.rb](code:break_full.rb) 的程序,该程序具有类定义,然后是一段代码,使用该定义来计算侧面 5 个单位的平方周长。 如果`Square`代码可以放入一个单独的文件中,从而可能需要在许多其他程序中将其用作需要的地方,这是否合乎逻辑? 如果程序很大,我们可以将它们分成较小的文件,并按逻辑命名它们,以使其易于阅读,重用和调试。 因此,遵循此原理,我将该程序分为两部分,第一个是 [break_square.rb](code/break_square.rb) ,如下所示,它只有`Square`类定义 ```rb # break_square.rb class Square attr_accessor :side_length def perimeter @side_length * 4 end end ``` 现在看下面的 [break_main.rb](code/break_main.rb) 程序, ```rb # break_main.rb require "./break_square.rb" s = Square.new s.side_length = 5 puts "The squares perimeter is #{s.perimeter}" ``` Output ```rb The squares perimeter is 20 ``` 参见`require "./break_square.rb"``行,现在可以完成操作,`./break_square.rb`代表 [break_square.rb](code/break_sqare.rb) 所在的路径。 `./`表示在此文件夹中搜索。 因此,一旦程序获得文件 [break_square.rb](code/break_sqare.rb) ,它就可以在该位置简单插入代码,并与 [break_full.rb](code/break_full.rb) 相同,但是这次代码在逻辑上进行了划分和 可能易于维护。