Ruby小白学习路线 - 实践

Ruby小白学习路线 - 实践

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编程的基础,并能开发小型应用程序!加油!

风雨相关