💎 Ruby
概述:Ruby 是由松本行弘(Matz)于 1995 年发布的动态面向对象编程语言,设计理念是"让程序员快乐"。Ruby 以优雅的语法和强大的元编程能力著称,Ruby on Rails 框架更是开创了 Web 开发的新时代。
概述
Ruby 属于 脚本 & 运维语言 分类。Ruby 的设计哲学强调"人性化"——程序首先是写给人看的,其次才是给机器执行的。
语言特点
- 一切皆对象:包括数字、nil、true/false 都是对象
- 优雅语法:大量语法糖,代码可读性极高
- 元编程:强大的动态特性,可以在运行时修改类和方法
- 块(Block):Ruby 独特的闭包机制,是函数式编程的基础
- 开发者幸福:Matz 的设计理念是让编程变得愉悦
Hello World
ruby
puts "Hello, World!"基础语法
变量与数据类型
ruby
# 动态类型,无需声明类型
age = 25
name = "Ruby"
price = 99.99
is_active = true
# 符号(Symbol)
status = :active
# 一切皆对象
5.class # => Integer
"hello".class # => String
nil.class # => NilClass
# 字符串插值
greeting = "Hello, #{name}!"
# 数组
fruits = ["Apple", "Banana", "Cherry"]
# 哈希
person = { name: "Alice", age: 30 }
# 等同于
person = { :name => "Alice", :age => 30 }控制流
ruby
# if-elsif-else
if age >= 18
puts "成年人"
elsif age >= 12
puts "青少年"
else
puts "儿童"
end
# 修饰符形式
puts "成年人" if age >= 18
# unless(除非)
unless stopped
keep_going
end
# case
case status
when :active then puts "活跃"
when :inactive then puts "不活跃"
else puts "未知"
end
# 循环
5.times { |i| puts i }
(1..10).each { |i| puts i }
fruits.each { |fruit| puts fruit }
# while
while condition
# ...
end块与迭代器
ruby
# 块(Block)
[1, 2, 3].each do |num|
puts num * 2
end
# 单行块
[1, 2, 3].map { |n| n ** 2 } # => [1, 4, 9]
# 常用迭代器
numbers = [1, 2, 3, 4, 5]
numbers.select { |n| n.even? } # => [2, 4]
numbers.reject { |n| n.even? } # => [1, 3, 5]
numbers.reduce { |sum, n| sum + n } # => 15
numbers.any? { |n| n > 3 } # => true
numbers.all? { |n| n > 0 } # => true方法与类
ruby
# 方法定义
def greet(name = "World")
"Hello, #{name}!"
end
# 类
class Animal
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def speak
"#{@name} makes a sound"
end
end
# 继承
class Dog < Animal
def speak
"#{@name} says: Woof!"
end
end
dog = Dog.new("Buddy", 3)
dog.speak # => "Buddy says: Woof!"元编程
ruby
# 动态定义方法
class Person
%i[name age email].each do |attr|
define_method(attr) { instance_variable_get("@#{attr}") }
define_method("#{attr}=") { |val| instance_variable_set("@#{attr}", val) }
end
end
# method_missing
class Proxy
def method_missing(name, *args)
puts "Called: #{name}(#{args.join(', ')})"
end
end应用领域
- Web 开发:Ruby on Rails 全栈框架
- 自动化测试:Capybara、RSpec 测试框架
- DevOps:Chef 配置管理、Vagrant 虚拟化
- 脚本工具:Homebrew 包管理器
- 数据处理:数据清洗和 ETL 脚本
- 静态网站:Jekyll 博客生成器
开发环境搭建
- 安装 rbenv:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash - 安装 Ruby:
rbenv install 3.3.0 && rbenv global 3.3.0 - 验证:
ruby --version - 包管理器:Bundler (
bundle install) - 编辑器:VS Code + Ruby 扩展、RubyMine
学习路线
- 入门阶段:基础语法 → 面向对象 → 块和迭代器
- 进阶阶段:元编程 → 模块和混入 → 异常处理
- 实战阶段:Ruby on Rails → 测试框架 → API 开发
- 高级阶段:性能优化 → 并发编程 → 开源贡献