Ruby 基础语法

环境装好后,我们来系统过一遍 Ruby 的基础语法。这一章不涉及复杂概念,只讲程序"长什么样"——结构、注释、关键字、命名约定。读完你就能看懂任何 Ruby 代码的大致框架。

1. Ruby 程序的基本结构

Ruby 比 C/Java 简单得多:不需要 package,不需要 main 函数,不需要类。文件第一行就能直接写代码:

# 一个最简单的 Ruby 程序
puts "Hello, Ruby!"

# 也可以定义方法,然后调用
def greet(name)
  puts "你好, #{name}!"
end

greet("小明")    # 输出: 你好, 小明!
greet "小红"     # 括号可以省略,完全等价

几个要点:

2. 注释

Ruby 的注释规则简单:

# 单行注释:井号开头,到行尾结束
puts "代码"   # 行尾也可以注释

=begin
这是多行注释(块注释)
用 =begin 和 =end 包裹
注意:等号必须顶格写,前面不能有空格
社区其实很少用,大家更倾向多个 #
=end

puts "块注释结束"

实际项目里 几乎没人用 =begin/=end 块注释,大家都习惯用多个 #。块注释偶尔用来临时禁用一大段代码。

3. 方法调用可省略括号(重要!)

这是 Ruby 读起来像自然语言的核心原因之一。调用方法时括号可以省略:

# 括号能省,让代码读起来更像英文句子
puts("hello")      # 标准写法
puts "hello"       # 省略括号,更常用

# 但有参数优先级时,括号还是加上更清晰
puts (1 + 2) * 3   # 9
puts 1 + 2 * 3     # 7(乘法优先)

# 调用别人的方法时,如果一眼能看懂,就省括号
# Rails 里到处都是:
link_to "首页", root_path
render json: @users
redirect_to @post

这条规则有副作用:有运算符优先级时,不加括号可能出错。原则是:一行代码无歧义就省,有歧义或参数复杂就加。看 Rails 代码你会发现,大家写得很随意,但读起来反而更顺。

4. 命名约定

Ruby 社区有非常强烈的命名共识,几乎所有项目都遵守:

# 命名约定:Ruby 社区有强烈的风格共识

# 1. 局部变量 / 方法名:蛇形命名(snake_case)
user_name = "小明"
def calculate_total
  # ...
end

# 2. 类名 / 模块名:大驼峰(PascalCase)
class ShoppingCart
end

module UserAuth
end

# 3. 常量:尖叫蛇(SCREAMING_SNAKE_CASE)
MAX_RETRIES = 3
API_BASE_URL = "https://api.example.com"

# 4. 实例变量:前缀 @
@count = 0

# 5. 类变量:前缀 @@
@@total = 0

# 6. 全局变量:前缀 $(少用)
$app_name = "myapp"

记住这套约定,你写出来的代码就是"地道"的 Ruby 风格。换种命名(比如 JS 的 camelCase 写变量)虽然能跑,但会被 RuboCop 风格检查器警告。

5. Ruby 的真假规则(踩坑点)

Ruby 的真假判断只有两个对象是假:nilfalse。其他所有都是真——包括 0、空字符串、空数组。这跟 C、JS、Python 都不一样,新手容易踩坑:

# Ruby 的真假规则:只有 nil 和 false 是假,其他都是真
if 0          # 0 在 Ruby 里是真!(不像 C/JS)
  puts "0 是真"
end

if ""         # 空字符串也是真
  puts "空字符串是真"
end

if []         # 空数组也是真
  puts "空数组是真"
end

# 想判断"非空",用 present?(Rails 提供)或手动
# 想判断 nil,用 .nil? 方法

所以判断"是否为零"用 n.zero?,判断"是否为空"用 .empty?,判断"是否为 nil"用 .nil?——不要靠 if 隐式判断。

6. Ruby 的关键字

Ruby 大约有 40 多个关键字,比 Go 多但比 Java 少。常用的分组:

7. 代码风格:RuboCop

Ruby 社区有官方风格指南(The Ruby Style Guide),配套工具 RuboCop 自动检查/格式化代码。它是 Ruby 版的 gofmt/prettier:

VS Code 装 RuboCop 插件后,保存时会自动修复大部分风格问题,跟着它学就对了。

8. 一个稍微完整的程序

把上面学的串起来,看一个稍微像样的 Ruby 程序:

# 一个最简单的 Ruby 程序
puts "Hello, Ruby!"

# 也可以定义方法,然后调用
def greet(name)
  puts "你好, #{name}!"
end

greet("小明")    # 输出: 你好, 小明!
greet "小红"     # 括号可以省略,完全等价

这就是 Ruby 程序的常见长相:直接写逻辑,用 def 定义方法,最后调用。没有冗余的样板。

小结

这一章你了解了 Ruby 程序的整体骨架:不需要 main 函数、不需要类、括号可省、有强烈的命名约定。还踩了一个真假规则的坑(0 是真)。下一篇我们看 Ruby 的变量——五种变量的作用域各不相同。

← 上一篇 Ruby 环境安装

下一篇 Ruby 变量

✈️💬