很多人一开始写ref="/tag/134/" style="color:#2B406D;font-weight:bold;">脚本,都是从一行行命令开始的。比如处理一批文件、整理日志、自动发邮件,直接写个Ruby脚本几下就搞定。但时间一长,代码越来越长,改起来头疼,加功能更头疼。这时候,面向对象编程(OOP)就成了你的救星。
为什么Ruby适合用面向对象写脚本
Ruby本身就是一门纯面向对象的语言。就连数字、字符串这些基础类型,也都是对象。这意味着你从写第一行代码起,就已经在和对象打交道了。把逻辑封装成类,不仅能让你的脚本结构更清晰,还能复用代码,减少重复劳动。
举个实际例子:你在公司每天要处理销售数据,生成报表。最开始可能就是一段长长的脚本,读文件、算总额、输出Excel。但需求一变——要支持不同格式、要加图表、要自动发邮件——脚本就变得臃肿不堪。
如果用面向对象的方式重构,可以拆成几个类:SalesData负责读取数据,ReportGenerator负责生成报表,EmailNotifier负责发送。每个类只关心自己的事,改起来互不干扰。
一个简单的例子
class SalesProcessor
attr_reader :file_path
def initialize(file_path)
@file_path = file_path
end
def total_sales
lines = File.readlines(file_path)
lines.map { |line| line.to_f }.sum
end
def save_report(output_file)
File.write(output_file, "总销售额:#{total_sales}")
end
end
# 使用
processor = SalesProcessor.new("sales.txt")
processor.save_report("report.txt")
这样写的脚本,下次要加个导出JSON的功能,只需要在类里加个方法,其他地方几乎不用动。而且别人接手也容易看懂。
小脚本也需要设计
别觉得“就几十行代码,搞什么类”。哪怕是一个小工具,提前用类封装好,后期扩展会轻松很多。Ruby的语法简洁,定义一个类不需要太多样板代码,反而能让你更快进入正题。
比如你写个天气提醒脚本,可以先定义一个WeatherClient类去请求API,再写一个Notifier类负责弹窗或发消息。测试的时候,还能单独mock某个部分,不用每次都调真实接口。
面向对象不是为了炫技,而是为了让代码更稳、更好改。Ruby的灵活性加上OOP的结构,特别适合从小脚本一步步演化成实用工具。