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的基础语法:
- 注释:单行注释用
#,多行注释用=begin/=end - 标识符:遵循命名规则和约定
- 关键字:保留字不能用作标识符
- 代码风格:使用2空格缩进,遵循社区规范
- 空白处理:了解空白有意义的场景
掌握这些基础知识后,让我们继续学习Ruby的数据类型!
最后更新:2026-03-27