3-ruby 获取终端输入的值、if语句、unless语句的使用
前言
上一篇中大概知悉了 ruby 的基本数据类型,那么下面继续来看看脚本语言经常需要的操作:
- 获取终端输入的值
- if语句、unless语句的基本使用
获取终端输入的值
交互模式操作示例
# 1. 通过 gets 方法,获取输入的内容为 hello
irb(main):037:0> a = gets
hello
=> "hello\n"
# 2. 使用 puts a 打印 a 的内容
irb(main):038:0> puts a
hello
=> nil
# 3. 字符串 a 是带有换行符 \n 的,可以使用 .chomp 方法去除
irb(main):039:0> a.chomp
=> "hello"
# 4. 可以使用 to_i 将字符串转为整型
irb(main):040:0> a.chomp.to_i
=> 0
irb(main):041:0>
获取输入值: 使用
gets
方法从终端获取用户输入,如a = gets会等待用户输入并将结果赋值给变量a输出值: 使用puts方法输出变量值,如puts a会打印变量a的值
输入值处理:
- 输入值默认带有换行符\n,可使用
chomp
方法去除 - 字符串转整数使用to_i方法,如
a.chomp.to_i
- 输入值默认带有换行符\n,可使用
文件模式操作示例
Ruby源文件以.rb
为扩展名,如我们创建一个input.rb
作为输入示例,如下:
# frozen_string_literal: true
puts "请输入内容:"
# 获取终端输入内容
inputs = gets
# 输出输入内容
puts "输出输入的内容:" + inputs.chomp
执行 input.rb
文件,并且输入内容 1000,如下:
# 执行 input.rb 文件,输入 10001
PS > ruby .\input.rb
请输入内容:
10001
输出输入的内容:10001
代码说明:
inputs = gets获取输入,puts inputs输出结果
if语句
if语句的定义和使用
基础 if
语句
- 基本语法:Ruby中if语句不需要分号,以回车换行符为代码分段标志
- 代码块结束:使用end作为代码块结束标志符
- 值存在判断:当值本身存在时,表达式即为true
- 基础if语句格式如下:
if 条件
# 条件为真时执行的代码
end
- 示例代码:
# if 基础语句的使用示例
age = 18
if age >= 18
puts "You are an adult."
end
执行 ruby 如下:
# 执行if语句的示例ruby脚本 if_base.rb
> ruby .\if_base.rb
You are an adult.
if-else
结构
- 语句格式如下:
if 条件
# 条件为真时执行
else
# 条件为假时执行
end
- 示例代码:
# if-else 语句的使用示例
temperature = 25
if temperature > 30
puts "It's hot outside!"
else
puts "It's not too hot."
end
多条件 elsif
- 语句格式如下:
if 条件1
# 条件1为真时执行
elsif 条件2
# 条件2为真时执行
else
# 其他情况执行
end
- 示例代码:
# if-elsif-else 语句的使用示例
score = 85
if score >= 90
puts "A"
elsif score >= 80
puts "B" # 这里会输出 "B"
else
puts "C"
end
单行写法(修饰符形式)
- 语句格式如下:
代码 if 条件
- 示例代码:
# 单行写法(修饰符形式)
puts "Hello, World!" if true
逻辑运算符结合
可与 &&
(与)、||
(或)、!
(非)结合使用:
# 逻辑运算符结合
# 可与 &&(与)、||(或)、!(非)结合使用:
age = 18
if age >= 18 && age <= 60
puts "You are eligible for retirement."
end
if age < 18 || age > 60
puts "You are not eligible for retirement."
end
is_major = true
if !is_major
puts "You are not a major."
end
if
作为表达式返回值
Ruby 中 if
会返回最后执行的表达式的值:
x = 10
result = if x > 0 then "positive" else "negative" end
# 输出 result: "positive"
puts result
三元运算符(简写):
a = 10
b = 20
# 三元表达式
max = (a > b) ? a : b
# 输出 max: 20
puts max
真假值规则
- 真值:除了
false
和nil
之外的所有值。 - 假值:仅
false
和nil
。
示例:
# 会执行(空字符串为真)
if ""
puts "if 空字符串: This is true."
end
# 会执行
if 0
puts " if 0: This is true."
end
# 不会执行
if nil
puts "if nil: This is false."
end
unless语句
unless语句的定义和使用
在 Ruby 中,unless
是 if
的反向条件语句,用于 “如果条件不成立,则执行” 的场景。它的逻辑等同于 if !condition
,但语法更简洁易读。以下是详细用法和示例:
基础 unless
语句
- 基础语句格式:
unless 条件
# 条件为假(false/nil)时执行
end
- 示例代码如下:
# 基础 unless 语句
rainy = false
unless rainy
# 除非下雨(rainy == false),否则执行
puts "rainy == false, Go outside and play!"
end
unless-else
结构
- 语句格式:
unless 条件
# 条件为假时执行
else
# 条件为真时执行(注意逻辑与if相反)
end
- 示例代码如下:
age = 18
unless age < 18
# 除非年龄小于 18,否则执行
puts "You are an adult."
else
# 否则执行
puts "You are not an adult."
end
单行写法(修饰符形式)
- 语句格式:
代码 unless 条件
- 示例代码如下:
def file_protected?
false # 假设文件不受保护
end
def delete_file
puts "File deleted."
end
# # 除非文件受保护,否则删除
delete_file unless file_protected?
与 &&
、||
结合
- 示例代码如下:
# 与 &&、|| 结合
age = 18
unless age < 18 && age > 60
# 除非年龄小于 18 或大于 60,否则执行
puts "You are eligible for retirement."
end
# 与 ! 结合
is_major = true
unless !is_major
# 除非不是专业的,否则执行
puts "You are a major."
end
常见应用场景
防御性编程:
def data_invalid?
false
end
def save_data
puts "Data saved successfully."
end
# 除非数据非法,才能保存数据,
save_data unless data_invalid?
默认值赋值:
# 除非name有值,否则设置 Guest
name = "Guest" unless name
puts "Hello, #{name}!"
跳过异常情况:
def process_file
puts "Processing file..."
end
# 假设文件不存在
file = nil
# 跳过异常情况
process_file unless file.nil?
对比 if
和 unless
场景 | if 写法 |
unless 写法 |
---|---|---|
条件成立时执行 | if active then run |
unless !active then run |
条件不成立时执行 | if !active then run |
unless active then run |
优先选择语义更清晰的写法,例如:
- 用
if
表达 “如果满足条件” - 用
unless
表达 “除非满足条件”(即“如果不满足”)