Ruby语法基础 #

一、Ruby程序结构 #

Ruby程序由一系列表达式和语句组成。与许多语言不同,Ruby不需要分号结尾,也不需要大括号来定义代码块。

1.1 最简单的Ruby程序 #

ruby
puts "Hello, Ruby!"

1.2 程序结构示例 #

ruby
#!/usr/bin/env ruby
# encoding: utf-8

require 'json'

module MyModule
  class MyClass
    def initialize(name)
      @name = name
    end

    def greet
      puts "Hello, #{@name}!"
    end
  end
end

obj = MyModule::MyClass.new("Ruby")
obj.greet

二、注释 #

注释用于解释代码,Ruby解释器会忽略注释内容。

2.1 单行注释 #

使用 # 开头:

ruby
puts "Hello"  name = "Ruby"

2.2 多行注释 #

使用 =begin=end

ruby
=begin
这是多行注释
可以跨越多行
通常用于文档说明
=end
puts "Hello"

2.3 文档注释 #

Ruby支持内嵌文档,使用 rdoc 格式:

ruby
def add(a, b)
  a + b
end

class Calculator
  attr_reader :value

  def initialize(value = 0)
    @value = value
  end
end

2.4 注释最佳实践 #

ruby
# 好的注释:解释为什么这样做
def calculate_discount(price, customer)
  price * 0.9
end

# 不好的注释:重复代码内容
def add(a, b)
  a + b
end

三、标识符 #

标识符用于命名变量、方法、类、模块等。

3.1 命名规则 #

类型 规则 示例
局部变量 小写字母或下划线开头 name, user_name
实例变量 @开头 @name, @user_id
类变量 @@开头 @@count, @@total
全局变量 $开头 $debug, $LOAD_PATH
常量 大写字母开头 MAX_SIZE, DefaultName
类名/模块名 驼峰命名法 MyClass, ApplicationController
方法名 小写字母,可用?!=结尾 name, empty?, sort!

3.2 命名约定 #

ruby
# 局部变量:snake_case
user_name = "Ruby"
total_count = 100

# 实例变量:@snake_case
@user_name = "Ruby"
@total_count = 100

# 类变量:@@snake_case
@@instance_count = 0

# 全局变量:$snake_case(尽量避免使用)
$global_config = {}

# 常量:SCREAMING_SNAKE_CASE
MAX_CONNECTIONS = 100
DEFAULT_TIMEOUT = 30

# 类名/模块名:PascalCase
class UserAccount
end

module PaymentGateway
end

# 方法名:snake_case,可带后缀
def calculate_total
end

def empty?
end

def save!
end

3.3 方法名后缀含义 #

后缀 含义 示例
? 返回布尔值(谓词方法) empty?, nil?, zero?
! 危险方法(修改原对象或抛异常) sort!, save!, destroy!
= 赋值方法(setter) name=, value=
ruby
arr = [3, 1, 2]
arr.sort    
arr.sort!   

class Person
  def name
    @name
  end

  def name=(value)
    @name = value
  end
end

3.4 合法标识符示例 #

ruby
name = "valid"
_name = "valid"
name123 = "valid"
名前 = "valid"

$global = "valid"
@instance = "valid"
@@class_var = "valid"

CONSTANT = "valid"
MyClass = "valid"

3.5 非法标识符示例 #

ruby
1name = "invalid"      @ = "invalid"         class = "invalid"     

四、关键字 #

Ruby的关键字是保留字,不能用作标识符。

4.1 关键字列表 #

类别 关键字
模块定义 module, class, end
方法定义 def, undef, return, yield
控制流 if, then, else, elsif, unless, case, when, while, until, for, break, next, redo, retry
异常处理 begin, rescue, ensure, raise
逻辑值 true, false, nil
定义检查 defined?
块相关 do, lambda, proc
访问控制 public, private, protected
类相关 self, super, alias
其他 BEGIN, END, __FILE__, __LINE__, __ENCODING__

4.2 关键字使用示例 #

ruby
if true
  puts "true"
elsif false
  puts "false"
else
  puts "nil"
end

case value
when 1
  puts "one"
when 2
  puts "two"
else
  puts "other"
end

while condition
  break if should_exit
  next if should_skip
end

begin
  risky_operation
rescue StandardError => e
  handle_error(e)
ensure
  cleanup
end

class MyClass
  def initialize
    @value = 0
  end

  def self.class_method
    puts "class method"
  end

  private

  def private_method
    puts "private"
  end
end

4.3 特殊关键字 #

ruby
__FILE__
__LINE__
__ENCODING__

defined?(puts)
defined?(unknown_var)

BEGIN {
  puts "程序开始时执行"
}

END {
  puts "程序结束时执行"
}

五、代码块与缩进 #

5.1 缩进规则 #

Ruby使用2个空格缩进(不推荐使用Tab):

ruby
class User
  def initialize(name)
    @name = name
  end

  def greet
    if @name
      puts "Hello, #{@name}"
    else
      puts "Hello, Guest"
    end
  end
end

5.2 end关键字 #

Ruby使用 end 关闭代码块:

ruby
if condition
  puts "yes"
end

def method
  puts "method body"
end

class MyClass
end

module MyModule
end

10.times do
  puts "block"
end

5.3 单行语法 #

ruby
puts "yes" if condition
puts "no" unless condition

result = if condition
           "yes"
         else
           "no"
         end

六、空白与换行 #

6.1 空白处理 #

Ruby通常忽略空白,但有些地方空白有意义:

ruby
a + b       
a +b        

def method(arg1, arg2)
end

def method arg1, arg2
end

[1, 2, 3]
{ a: 1, b: 2 }

6.2 换行规则 #

ruby
puts "Hello"
puts "World"

puts "Hello";
puts "World"

result = 1 +
         2 +
         3

result = 1
         + 2
         + 3

long_method_call(arg1,
                 arg2,
                 arg3)

七、代码风格指南 #

7.1 RuboCop #

RuboCop是Ruby代码风格检查工具:

bash
gem install rubocop
rubocop your_file.rb

7.2 常见风格规则 #

ruby
# 好的风格
class MyClass
  def my_method(arg1, arg2)
    result = arg1 + arg2
    result * 2
  end

  def predicate?
    true
  end

  def dangerous_method!
    save!
  end
end

# 不好的风格
class myClass
  def MyMethod(arg1,arg2)
    Result=arg1+arg2
    return Result*2
  end
end

7.3 方法调用风格 #

ruby
# 无参数
puts "hello"
puts("hello")

# 有参数
method(arg1, arg2)
method arg1, arg2

# 链式调用
user.posts.map(&:title).join(", ")

# 多行链式调用
user.posts
     .map(&:title)
     .join(", ")

# 块调用
[1, 2, 3].each { |n| puts n }

[1, 2, 3].each do |n|
  puts n
  puts n * 2
end

八、编码声明 #

8.1 默认编码 #

Ruby 2.0+ 默认使用UTF-8编码。

8.2 指定编码 #

ruby
# encoding: utf-8

# encoding: big5

# coding: utf-8

# -*- coding: utf-8 -*-

8.3 字符串编码 #

ruby
"你好".encoding
"你好".encode("GBK")
"你好".force_encoding("GBK")

九、总结 #

本章我们学习了Ruby的基础语法:

  1. 注释:单行注释用 #,多行注释用 =begin/=end
  2. 标识符:遵循命名规则和约定
  3. 关键字:保留字不能用作标识符
  4. 代码风格:使用2空格缩进,遵循社区规范
  5. 空白处理:了解空白有意义的场景

掌握这些基础知识后,让我们继续学习Ruby的数据类型!

最后更新:2026-03-27