Ruby小白完全学习路线
🎯 学习路线总览(8-12周)
第一阶段:Ruby基础入门(1-2周)
第二阶段:核心概念掌握(2-3周)
第三阶段:面向对象编程(2-3周)
第四阶段:实战项目开发(3-4周)
📚 第一阶段:Ruby基础入门(1-2周)
第1步:环境搭建(1天)
ruby
# 检查Ruby安装
ruby -v
irb # 进入交互式Ruby环境
# 安装VS Code扩展:
# - Ruby
# - Ruby Solargraph
# - endwise (自动补全end)
第2步:基础语法(3-4天)
重点学习文件:
-
01_basics/01_variables.rb
-
01_basics/02_data_types.rb
-
01_basics/03_operators.rb
小白练习:
ruby
# practice_01_basic.rb
# 练习1:变量和数据类型
name = "你的名字"
age = 20
height = 1.75
is_student = true
puts "姓名: #{name}"
puts "年龄: #{age}"
puts "身高: #{height}"
puts "是学生吗: #{is_student}"
# 练习2:简单计算
a = 15
b = 4
puts "加法: #{a + b}"
puts "除法: #{a / b}" # 注意整数除法的结果
puts "除法: #{a / b.to_f}" # 浮点数除法
第3步:输入输出和控制流(3-4天)
重点学习文件:
-
01_basics/04_input_output.rb
-
02_control_structures/01_conditionals.rb
-
02_control_structures/02_loops.rb
小白练习:
ruby
# practice_02_control.rb
# 练习1:简单的条件判断
print "请输入你的分数: "
score = gets.chomp.to_i
if score >= 90
puts "优秀!"
elsif score >= 80
puts "良好!"
elsif score >= 60
puts "及格!"
else
puts "不及格,需要加油!"
end
# 练习2:循环练习
5.times do |i|
puts "这是第 #{i + 1} 次问候:你好!"
end
# 练习3:数字累加
sum = 0
1.upto(10) do |num|
sum += num
puts "当前数字: #{num}, 累计和: #{sum}"
end
puts "1到10的总和是: #{sum}"
🔑 第二阶段:核心概念掌握(2-3周)
第4步:方法学习(4-5天)
重点学习文件:
-
03_methods/01_methods_basics.rb
-
03_methods/02_method_arguments.rb
小白练习:
ruby
# practice_03_methods.rb
# 练习1:定义简单方法
def say_hello(name)
"你好, #{name}!"
end
def calculate_bmi(weight, height)
weight / (height ** 2)
end
# 测试方法
puts say_hello("小明")
puts "BMI: #{calculate_bmi(70, 1.75).round(2)}"
# 练习2:温度转换
def celsius_to_fahrenheit(celsius)
celsius * 9 / 5 + 32
end
def fahrenheit_to_celsius(fahrenheit)
(fahrenheit - 32) * 5 / 9.0
end
puts "25°C = #{celsius_to_fahrenheit(25)}°F"
puts "77°F = #{fahrenheit_to_celsius(77).round(2)}°C"
第5步:集合数据类型(5-6天)
重点学习文件:
-
04_collections/01_arrays.rb
-
04_collections/02_hashes.rb
-
04_collections/04_iterators.rb
小白练习:
ruby
# practice_04_collections.rb
# 练习1:数组操作
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
puts "我喜欢的水果:"
fruits.each_with_index do |fruit, index|
puts "#{index + 1}. #{fruit}"
end
# 添加新水果
fruits << "草莓"
fruits.push("芒果")
puts "更新后的水果列表: #{fruits}"
# 练习2:哈希使用
student = {
"name" => "张三",
"age" => 20,
"major" => "计算机科学",
"grades" => [85, 92, 78, 90]
}
puts "学生信息:"
student.each do |key, value|
puts "#{key}: #{value}"
end
# 计算平均分
grades = student["grades"]
average = grades.sum / grades.length.to_f
puts "平均分: #{average.round(2)}"
第6步:代码块和迭代器(3-4天)
重点学习文件:
03_methods/03_blocks_procs_lambdas.rb
小白练习:
ruby
# practice_05_blocks.rb
# 练习1:使用each迭代
numbers = [1, 2, 3, 4, 5]
puts "每个数字的平方:"
numbers.each { |num| puts "#{num}的平方是: #{num ** 2}" }
# 练习2:使用map转换数据
squared_numbers = numbers.map { |num| num ** 2 }
puts "平方后的数组: #{squared_numbers}"
# 练习3:使用select筛选
even_numbers = numbers.select { |num| num.even? }
puts "偶数: #{even_numbers}"
# 练习4:自定义迭代方法
def repeat_action(times)
times.times do |i|
yield(i + 1) if block_given?
end
end
repeat_action(3) do |count|
puts "第#{count}次执行操作"
end
🏗️ 第三阶段:面向对象编程(2-3周)
第7步:类和对象(5-6天)
重点学习文件:
05_oop/01_classes_objects.rb
小白练习:
ruby
# practice_06_oop_basic.rb
# 练习1:定义简单的类
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def introduce
"你好,我叫#{@name},今年#{@age}岁。"
end
def birthday
@age += 1
"我过生日了!现在#{@age}岁。"
end
end
# 使用类
person1 = Person.new("李四", 25)
puts person1.introduce
puts person1.birthday
# 练习2:银行账户类
class BankAccount
attr_reader :account_number, :balance
def initialize(account_number, initial_balance = 0)
@account_number = account_number
@balance = initial_balance
end
def deposit(amount)
@balance += amount
"存入 #{amount}元,当前余额: #{@balance}元"
end
def withdraw(amount)
if amount <= @balance
@balance -= amount
"取出 #{amount}元,当前余额: #{@balance}元"
else
"余额不足!当前余额: #{@balance}元"
end
end
end
# 测试银行账户
account = BankAccount.new("123456", 1000)
puts account.deposit(500)
puts account.withdraw(200)
puts account.withdraw(2000) # 测试余额不足
第8步:继承和模块(4-5天)
重点学习文件:
-
05_oop/02_inheritance.rb
-
05_oop/03_modules_mixins.rb
小白练习:
ruby
# practice_07_inheritance_modules.rb
# 练习1:继承
class Animal
def initialize(name)
@name = name
end
def speak
"动物发出声音"
end
end
class Dog < Animal
def speak
"#{@name} 汪汪叫!"
end
def wag_tail
"#{@name} 摇尾巴"
end
end
class Cat < Animal
def speak
"#{@name} 喵喵叫!"
end
end
# 测试继承
dog = Dog.new("小白")
cat = Cat.new("小花")
puts dog.speak
puts cat.speak
puts dog.wag_tail
# 练习2:模块
module Swimmable
def swim
"我会游泳!"
end
end
module Flyable
def fly
"我会飞行!"
end
end
class Duck < Animal
include Swimmable
include Flyable
def speak
"#{@name} 嘎嘎叫!"
end
end
duck = Duck.new("唐老鸭")
puts duck.speak
puts duck.swim
puts duck.fly
🚀 第四阶段:实战项目开发(3-4周)
第9步:小型项目实战
项目1:个人日记系统
ruby
# diary_app.rb
class Diary
def initialize
@entries = {}
end
def add_entry(date, content)
@entries[date] = content
"日记已添加:#{date}"
end
def view_entry(date)
if @entries[date]
"=== #{date} ===\n#{@entries[date]}"
else
"#{date} 没有日记记录"
end
end
def list_entries
if @entries.empty?
"还没有日记记录"
else
result = "所有日记:\n"
@entries.keys.sort.each do |date|
result += "- #{date}\n"
end
result
end
end
def delete_entry(date)
if @entries.delete(date)
"已删除日记:#{date}"
else
"找不到日记:#{date}"
end
end
end
# 使用示例
diary = Diary.new
diary.add_entry("2024-01-01", "新年第一天,学习Ruby!")
diary.add_entry("2024-01-02", "今天掌握了类和对象的概念")
puts diary.list_entries
puts diary.view_entry("2024-01-01")
项目2:简易计算器
ruby
# advanced_calculator.rb
class Calculator
def basic_calculator
print "请输入第一个数字: "
num1 = gets.chomp.to_f
print "请输入运算符 (+, -, *, /): "
operator = gets.chomp
print "请输入第二个数字: "
num2 = gets.chomp.to_f
result = case operator
when '+' then num1 + num2
when '-' then num1 - num2
when '*' then num1 * num2
when '/' then num2 == 0 ? "错误:除数不能为0" : num1 / num2
else "不支持的运算符"
end
puts "结果: #{result}"
end
def bmi_calculator
print "请输入体重(kg): "
weight = gets.chomp.to_f
print "请输入身高(m): "
height = gets.chomp.to_f
bmi = weight / (height ** 2)
category = case bmi
when 0...18.5 then "偏瘦"
when 18.5...24 then "正常"
when 24...28 then "超重"
else "肥胖"
end
puts "你的BMI: #{bmi.round(2)} (#{category})"
end
end
# 运行计算器
calc = Calculator.new
calc.basic_calculator
第10步:错误处理和文件操作(3-4天)
重点学习文件:
-
06_advanced/01_exceptions.rb
-
06_advanced/02_file_io.rb
小白练习:
ruby
# practice_08_error_file.rb
# 练习1:错误处理
def safe_divide(a, b)
begin
result = a / b
"结果是: #{result}"
rescue ZeroDivisionError
"错误:不能除以0!"
rescue => e
"发生错误: #{e.message}"
end
end
puts safe_divide(10, 2)
puts safe_divide(10, 0)
# 练习2:文件操作
def write_to_file(filename, content)
File.open(filename, 'w') do |file|
file.puts content
file.puts "写入时间: #{Time.now}"
end
"内容已写入 #{filename}"
end
def read_from_file(filename)
if File.exist?(filename)
content = File.read(filename)
"文件内容:\n#{content}"
else
"文件不存在: #{filename}"
end
end
# 测试文件操作
write_to_file("my_diary.txt", "今天学习了Ruby文件操作!")
puts read_from_file("my_diary.txt")
📅 每日学习计划示例
第1周计划
-
周一:环境搭建 + 变量数据类型
-
周二:运算符 + 输入输出
-
周三:条件语句if/else
-
周四:循环语句
-
周五:综合练习 + 复习
-
周末:完成所有基础练习
学习技巧
-
每天编码:哪怕只有30分钟
-
理解错误:仔细阅读错误信息
-
多写注释:帮助理解代码逻辑
-
小步快跑:每个概念都要动手实践
-
定期复习:每周回顾学过的内容
推荐资源
-
在线练习:Ruby Monk, Exercism
-
文档:Ruby官方文档
-
社区:Ruby China论坛
-
书籍:《Ruby基础教程》
按照这个路线,8-12周后你就能掌握Ruby编程的基础,并能开发小型应用程序!加油!💪