Ruby 入门教程:从零开始掌握这门优雅的编程语言
为什么是 Ruby?
Ruby 是由日本程序员松本行弘(Yukihiro “Matz” Matsumoto)设计的一门动态、面向对象的编程语言。它的设计初衷是让程序员减少编程过程中的挫败感,享受编程的乐趣。
Ruby 以简洁、优雅的语法和开发者幸福感而闻名,被广泛用于 Web 开发(尤其是 Ruby on Rails 框架)、脚本编写和自动化任务。GitHub(早期)、Airbnb、Basecamp 等知名应用都是基于 Rails 开发的。
一句话总结:Ruby 是一门让程序员开心的语言。写 Ruby 代码,就像在用英语写句子。
一、安装 Ruby
检查是否已安装
打开终端,输入:
ruby -v
如果显示版本号(如 ruby 3.x.x),说明已安装。如果没有,请参考下面的安装方法。
各系统安装方式
- Linux(Ubuntu/Debian):
sudo apt-get install ruby-full - macOS:推荐使用 Homebrew
brew install ruby - Windows:访问 rubyinstaller.org 下载安装包
💡 小贴士:推荐使用版本管理器(如 rbenv 或 RVM),可以在不同 Ruby 版本间自由切换。
验证安装
ruby -v
# 输出类似:ruby 3.3.0 (2023-12-25 revision ...)
二、第一个 Ruby 程序
创建文件 hello.rb:
puts "Hello, Ruby!"
运行:
ruby hello.rb
# 输出:Hello, Ruby!
交互式运行(IRB)
Ruby 自带交互式控制台 irb,可以逐行执行代码,非常适合初学者实验。
irb
进入后直接输入 Ruby 代码即可实时看到结果:
irb(main):001:0> puts "Hello from IRB"
Hello from IRB
=> nil
按 Ctrl+D 或输入 exit 退出。
三、Ruby 核心特点
1. 一切皆对象
在 Ruby 中,一切皆对象——数字、字符串、甚至方法和运算符都是对象。这意味着你可以对任何东西调用方法:
# 数字也是对象,可以直接调用方法
5.times { puts "Hello" } # 打印 5 次 "Hello"
# 负数也有方法
-3.abs # 返回 3
# 字符串是对象
"ruby".upcase # 返回 "RUBY"
这种设计让代码逻辑更统一,避免了“基础类型”和“对象”的割裂。
2. 语法简洁优雅
Ruby 语法接近自然语言,冗余代码很少:
# 定义方法
def say_hello(name)
puts "Hello, #{name}!"
end
say_hello("Ruby") # 输出:Hello, Ruby!
- 不需要分号结尾(可以省略)
- 代码块用
{}或do...end包裹 - 方法返回值默认是最后一行的结果
3. 动态类型
变量无需声明类型,赋值时自动确定:
x = 10 # x 是整数
x = "Ruby" # x 变为字符串——完全合法!
4. 丰富的标准库与生态
Ruby 内置强大的标准库,涵盖字符串处理、文件操作、网络通信等场景。通过 RubyGems(Ruby 的包管理工具)可以轻松安装第三方库:
gem install rails # 安装 Rails 框架
gem install nokogiri # 安装 HTML/XML 解析库
四、基础语法速览
变量
name = "Ruby" # 局部变量
@name = "Ruby" # 实例变量
@@count = 0 # 类变量
NAME = "Ruby" # 常量(大写开头)
条件判断
age = 18
if age >= 18
puts "成年了"
elsif age >= 12
puts "青少年"
else
puts "小朋友"
end
Ruby 还支持单行写法:
puts "成年了" if age >= 18
循环
# times 循环
5.times { puts "Hello" }
# each 迭代
[1, 2, 3].each do |num|
puts num * 2
end
# while 循环
i = 0
while i < 5
puts i
i += 1
end
方法定义
def add(a, b)
a + b # 最后一行自动成为返回值
end
puts add(3, 5) # 输出 8
方法名可以用 ? 和 ! 结尾:
?结尾表示返回布尔值,如empty?!结尾表示有“破坏性”操作,如upcase!会直接修改原字符串
五、面向对象编程
类和对象
类是对象的蓝图,对象是类的实例。
class Person
# 构造函数
def initialize(name, age)
@name = name # 实例变量
@age = age
end
# 方法
def introduce
puts "我叫 #{@name},今年 #{@age} 岁"
end
end
# 创建对象
person = Person.new("小明", 18)
person.introduce # 输出:我叫 小明,今年 18 岁
继承
子类可以继承父类的所有方法:
class Student < Person
def study
puts "#{@name} 正在学习"
end
end
student = Student.new("小红", 16)
student.introduce # 继承自 Person
student.study # 子类特有
模块与混入(Mixin)
Ruby 是单继承语言(每个类只能有一个父类),但通过 模块(Module) 可以实现多重行为组合。
模块不能被实例化,但可以被类“混入”(include):
module Swimmable
def swim
puts "正在游泳"
end
end
module Flyable
def fly
puts "正在飞行"
end
end
class Duck
include Swimmable
include Flyable
end
duck = Duck.new
duck.swim # 输出:正在游泳
duck.fly # 输出:正在飞行
六、块(Block)与迭代器
块(Block) 是 Ruby 最富表现力的特性之一。它是一段可以传递给方法的代码,有两种写法:
# 花括号写法(单行)
5.times { |i| puts i }
# do...end 写法(多行)
5.times do |i|
puts "第 #{i} 次"
end
常用迭代器
# each - 遍历集合
[1, 2, 3].each { |n| puts n * 2 } # 输出 2, 4, 6
# map / collect - 转换集合并返回新数组
[1, 2, 3].map { |n| n * 2 } # 返回 [2, 4, 6]
# select - 筛选
[1, 2, 3, 4, 5].select { |n| n > 3 } # 返回 [4, 5]
yield 关键字
在方法内部可以用 yield 调用传入的块:
def greet
puts "开始"
yield if block_given?
puts "结束"
end
greet { puts "Hello!" }
# 输出:
# 开始
# Hello!
# 结束
七、推荐学习资源
官方资源
- Ruby 官方网站:ruby-lang.org — 下载、文档、入门指南
- 官方文档:doc.ruby-lang.org.cn — 核心类和模块参考
- 20 分钟入门教程:Ruby 官方的快速入门,适合零基础
在线互动学习
- Try Ruby:在浏览器中直接体验 Ruby
- Ruby Koans:通过练习学习 Ruby 语法、结构和文化
- Exercism:120+ 道 Ruby 练习题,带自动分析
书籍推荐
- 《Programming Ruby》(“镐头书”)— Ruby 经典教材
- 《The Well-Grounded Rubyist》 — 从入门到反射、线程等高级主题
- 《笨方法学 Ruby》 — 通过大量练习学习 Ruby
社区与工具
- RubyGems:
gem install安装第三方库 - RuboCop:Ruby 代码风格检查工具
- VS Code + Ruby 插件 或 RubyMine:推荐的开发环境
开始你的 Ruby 之旅吧!
Ruby 是一门对初学者友好、对专家强大的语言。无论你是想开发 Web 应用、编写自动化脚本,还是纯粹享受编程的乐趣,Ruby 都会是一个绝佳的选择。
打开终端,输入 irb,然后敲下你的第一行 Ruby 代码吧!
puts "Hello, Ruby World!"
Happy coding! 🎉