为什么是 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

社区与工具

  • RubyGemsgem install 安装第三方库
  • RuboCop:Ruby 代码风格检查工具
  • VS Code + Ruby 插件RubyMine:推荐的开发环境

开始你的 Ruby 之旅吧!

Ruby 是一门对初学者友好、对专家强大的语言。无论你是想开发 Web 应用、编写自动化脚本,还是纯粹享受编程的乐趣,Ruby 都会是一个绝佳的选择。

打开终端,输入 irb,然后敲下你的第一行 Ruby 代码吧!

puts "Hello, Ruby World!"

Happy coding! 🎉