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 = trueputs "姓名: #{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_iif score >= 90puts "优秀!" elsif score >= 80puts "良好!" elsif score >= 60puts "及格!" elseputs "不及格,需要加油!" end# 练习2:循环练习 5.times do |i|puts "这是第 #{i + 1} 次问候:你好!" end# 练习3:数字累加 sum = 0 1.upto(10) do |num|sum += numputs "当前数字: #{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}!" enddef 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 enddef fahrenheit_to_celsius(fahrenheit)(fahrenheit - 32) * 5 / 9.0 endputs "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 endrepeat_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 Personattr_accessor :name, :agedef initialize(name, age)@name = name@age = ageenddef introduce"你好,我叫#{@name},今年#{@age}岁。"enddef birthday@age += 1"我过生日了!现在#{@age}岁。"end end# 使用类 person1 = Person.new("李四", 25) puts person1.introduce puts person1.birthday# 练习2:银行账户类 class BankAccountattr_reader :account_number, :balancedef initialize(account_number, initial_balance = 0)@account_number = account_number@balance = initial_balanceenddef deposit(amount)@balance += amount"存入 #{amount}元,当前余额: #{@balance}元"enddef withdraw(amount)if amount <= @balance@balance -= amount"取出 #{amount}元,当前余额: #{@balance}元"else"余额不足!当前余额: #{@balance}元"endend 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 Animaldef initialize(name)@name = nameenddef speak"动物发出声音"end endclass Dog < Animaldef speak"#{@name} 汪汪叫!"enddef wag_tail"#{@name} 摇尾巴"end endclass Cat < Animaldef speak"#{@name} 喵喵叫!"end end# 测试继承 dog = Dog.new("小白") cat = Cat.new("小花") puts dog.speak puts cat.speak puts dog.wag_tail# 练习2:模块 module Swimmabledef swim"我会游泳!"end endmodule Flyabledef fly"我会飞行!"end endclass Duck < Animalinclude Swimmableinclude Flyabledef speak"#{@name} 嘎嘎叫!"end endduck = Duck.new("唐老鸭") puts duck.speak puts duck.swim puts duck.fly
🚀 第四阶段:实战项目开发(3-4周)
第9步:小型项目实战
项目1:个人日记系统
ruby
# diary_app.rb class Diarydef initialize@entries = {}enddef add_entry(date, content)@entries[date] = content"日记已添加:#{date}"enddef view_entry(date)if @entries[date]"=== #{date} ===\n#{@entries[date]}"else"#{date} 没有日记记录"endenddef list_entriesif @entries.empty?"还没有日记记录"elseresult = "所有日记:\n"@entries.keys.sort.each do |date|result += "- #{date}\n"endresultendenddef delete_entry(date)if @entries.delete(date)"已删除日记:#{date}"else"找不到日记:#{date}"endend 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 Calculatordef basic_calculatorprint "请输入第一个数字: "num1 = gets.chomp.to_fprint "请输入运算符 (+, -, *, /): "operator = gets.chompprint "请输入第二个数字: "num2 = gets.chomp.to_fresult = case operatorwhen '+' then num1 + num2when '-' then num1 - num2when '*' then num1 * num2when '/' then num2 == 0 ? "错误:除数不能为0" : num1 / num2else "不支持的运算符"endputs "结果: #{result}"enddef bmi_calculatorprint "请输入体重(kg): "weight = gets.chomp.to_fprint "请输入身高(m): "height = gets.chomp.to_fbmi = weight / (height ** 2)category = case bmiwhen 0...18.5 then "偏瘦"when 18.5...24 then "正常"when 24...28 then "超重"else "肥胖"endputs "你的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)beginresult = a / b"结果是: #{result}"rescue ZeroDivisionError"错误:不能除以0!"rescue => e"发生错误: #{e.message}"end endputs safe_divide(10, 2) puts safe_divide(10, 0)# 练习2:文件操作 def write_to_file(filename, content)File.open(filename, 'w') do |file|file.puts contentfile.puts "写入时间: #{Time.now}"end"内容已写入 #{filename}" enddef 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编程的基础,并能开发小型应用程序!加油!💪