Ruby 零基础教程

Ruby 数据类型

数据类型决定了一个变量所持有值的种类。

Ruby 作为一门动态类型语言,不需要你显式地声明变量的数据类型。Ruby 解释器会根据赋给变量的值自动推断出其数据类型。

在本章中,我们将探索 Ruby 中的三个核心数据类型:数字 (Numbers)字符串 (Strings)布尔值 (Booleans)

1. Ruby 中的数字 (Numbers)

Ruby 中的数字用于表示数值,主要分为两大类:整数 (Integers)浮点数 (Floating-Point Numbers)

1.1 整数 (Integers)

整数是没有小数部分的完整数字。

(注:在 Ruby 2.4 之前,整数被分为 FixnumBignum。但从 2.4 版本开始,它们被统一到了单一的 Integer 类中。你无需担心区分它们,Ruby 会自动为你处理内存大小。)

# 整数示例
age = 30
quantity = 100
negative_number = -5

你可以对整数执行各种算术运算:加法、减法、乘法、除法和取模(求余数)。

a = 10
b = 5

sum = a + b       # 加法: 15
difference = a - b  # 减法: 5
product = a * b     # 乘法: 50
quotient = a / b    # 除法: 2 (注意:整数除法会直接舍去小数部分)
modulo = a % b      # 取模 (求余数): 0

1.2 浮点数 (Floating-Point Numbers)

浮点数是带有小数部分的数字。它们是 Float 类的实例。

# 浮点数示例
price = 19.99
temperature = 25.5
pi = 3.14159

浮点数的算术运算与整数类似,但会保留小数部分。

x = 10.0
y = 3.0

sum = x + y       # 加法: 13.0
difference = x - y  # 减法: 7.0
product = x * y     # 乘法: 30.0
quotient = x / y    # 除法: 3.3333333333333335

1.3 常用的数字运算方法

Ruby 提供了丰富的内置方法来处理数字。以下是一些非常有用的方法:

  • abs: 返回数字的绝对值。
  • round: 将浮点数四舍五入为最接近的整数。
  • floor: 向下取整(返回小于或等于该数字的最大整数)。
  • ceil: 向上取整(返回大于或等于该数字的最小整数)。
number = -7.5

absolute_value = number.abs   # 绝对值: 7.5
rounded_value = number.round  # 四舍五入: -8 (注意负数的四舍五入规则)
floor_value = number.floor    # 向下取整: -8
ceil_value = number.ceil      # 向上取整: -7

2. Ruby 中的字符串 (Strings)

字符串代表字符的序列。它们是 String 类的实例,用于存储和操作文本。你可以使用单引号 (')双引号 (") 来创建字符串。

2.1 单引号字符串

单引号字符串几乎会原样输出你输入的内容。它只解析两个特殊的转义字符:\' (输出单引号) 和 \\ (输出反斜杠)。

# 单引号字符串示例
name = 'Alice'
message = 'Hello, world!'
escaped_quote = '这是一个 \'单引号\' 字符串。'
escaped_backslash = '这是一个反斜杠:\\'

2.2 双引号字符串与字符串插值

双引号字符串更加强大。它不仅支持多种转义字符(如 \n 表示换行,\t 表示制表符),最重要的是,它支持字符串插值 (String Interpolation)

字符串插值允许你使用 #{} 语法,将 Ruby 表达式的结果直接嵌入到字符串中。

# 双引号字符串示例
name = "Bob"
greeting = "Hello, #{name}!"  # 字符串插值:结果为 "Hello, Bob!"
newline = "这是第一行\n这是第二行"

# 更复杂的插值
age = 30
message = "我今年 #{age} 岁了。" 

x = 5
y = 10
sum_message = "#{x} 加 #{y} 的结果是 #{x + y}。" # 内部可以直接进行数学运算

2.3 常用的字符串操作

  • 拼接 (Concatenation): 将多个字符串连接在一起(使用 + 号)。
  • 截取 (Substring): 提取字符串的一部分(使用索引范围)。
  • 长度 (Length): 获取字符串包含的字符数(使用 .length 方法)。
  • 大小写转换: 改变字母的大小写(使用 .upcase.downcase)。
first_name = "John"
last_name = "Doe"

full_name = first_name + " " + last_name  # 拼接: "John Doe"
substring = full_name[0..3]               # 截取 (索引 0 到 3): "John"
length = full_name.length                 # 长度: 8
uppercase = full_name.upcase              # 转大写: "JOHN DOE"
lowercase = full_name.downcase            # 转小写: "john doe"

3. Ruby 中的布尔值 (Booleans)

布尔值代表逻辑上的真或假:即 truefalse。它们分别是 TrueClassFalseClass 的实例。

布尔值是编程中进行决策的基础,广泛应用于条件判断和逻辑运算中。

# 布尔值示例
is_valid = true
is_empty = false

3.1 逻辑运算符

Ruby 提供了逻辑运算符来组合和操作布尔值:

  • && (逻辑与 AND): 只有当两边的操作数都为 true 时,结果才返回 true
  • || (逻辑或 OR): 只要两边的操作数中至少有一个为 true,结果就返回 true
  • ! (逻辑非 NOT): 反转操作数的值(truefalsefalsetrue)。
a = true
b = false

result_and = a && b  # false (true AND false)
result_or = a || b   # true (true OR false)
result_not_a = !a    # false (NOT true)

3.2 比较运算符

比较运算符用于比较两个值,并返回一个布尔结果(truefalse)。

  • ==: 等于
  • !=: 不等于
  • >: 大于
  • <: 小于
  • >=: 大于或等于
  • <=: 小于或等于
x = 10
y = 5

is_equal = x == y       # false
is_not_equal = x != y   # true
is_greater = x > y      # true
is_less = x < y         # false

3.3 重要概念:真值与假值 (Truthiness and Falsiness)

在 Ruby 中,有一个极其重要的规则:只有 falsenil(一个代表“空”或“不存在”的特殊值)被认为是“假值 (falsy)”。

除了这两个之外,所有其他的一切——包括数字 0、空字符串 ""、甚至空数组——在条件判断中都被认为是 “真值 (truthy)”

# 只有 false 和 nil 不会执行 if 里面的代码

if 0
  puts "数字 0 是真值" # 这行会被打印
end

if ""
  puts "空字符串也是真值" # 这行会被打印
end

if nil
  puts "nil 是假值" # 这行 不会 被打印
end

if false
  puts "false 显然是假值" # 这行 不会 被打印
end