0Pricing
Ruby Academy · 课时

编写代码

组织 Gem

编写代码 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

组织 Ruby 包中的代码

优秀的 Ruby 包代码易于阅读、易于加载,并使用命名空间,从而不会与其他库发生冲突。关键工具是一个包裹全部内容的顶层模块。

  • 每个 Ruby 包使用一个命名空间模块。
  • 每个类使用一个文件,并与命名空间保持对应。
  • 保持小巧的公开接口。

命名空间模块

将所有类包裹在一个以 Ruby 包命名的模块中。这样可以防止您的 Client 与其他人的 Client 发生冲突。

module Greeter
  class Hello
    def message
      "Hi there"
    end
  end
end

puts Greeter::Hello.new.message

文件命名约定

Ruby 工具要求文件路径与常量名称相匹配:

  • Greeter 位于 lib/greeter.rb。
  • Greeter::Hello 位于 lib/greeter/hello.rb。

这一约定可以让自动加载器自动找到文件。

加载内部文件

入口文件通过 require_relative 将所有内容连接起来。每个类文件只加载一次,因此整个库只需执行一次 require 'greeter' 就能加载。

清晰的公开接口

只公开用户实际调用的一小组方法。一种常见模式是使用模块级便捷方法,将调用委托给内部类。

module Greeter
  def self.say(name)
    "Hello, " + name + "!"
  end
end

puts Greeter.say("Ada")

隐藏内部实现

将辅助方法标记为 private,这样它们就不会成为公开契约的一部分。任何公开内容都是对用户的承诺;应有意识地保持公开接口小而明确。

class Calculator
  def total(a, b)
    add(a, b)
  end

  private

  def add(x, y)
    x + y
  end
end

puts Calculator.new.total(2, 3)

配置模式

许多 Ruby 包提供配置代码块,让用户一次性设置选项。一个简单的实现方式是将设置存储在配置对象中。

module App
  class Config
    attr_accessor :api_key
  end

  def self.config
    @config ||= Config.new
  end

  def self.configure
    yield(config)
  end
end

App.configure { |c| c.api_key = "secret" }
puts App.config.api_key

自定义错误

在您的命名空间下定义 Ruby 包专用的错误类,这样用户就能精确捕获您定义的错误。请继承 StandardError。

module Payment
  class Error < StandardError; end
  class DeclinedError < Error; end
end

begin
  raise Payment::DeclinedError, "card declined"
rescue Payment::Error => e
  puts "Handled: " + e.message
end

避免猴子补丁

请避免全局修改 String 等核心类。这样会给其他代码带来意外行为。如果必须扩展,请使用细化机制将改动限制在特定作用域内,或者在您自己的类中添加辅助方法。

保持依赖精简

您添加的每个运行时依赖,都会成为所有用户的依赖。在合理的情况下,请优先使用标准库;只有在确实值得增加负担时,才添加 Ruby 包。

依赖越少,版本冲突就越少,安装速度也越快。

记录公开接口

添加注释,描述每个公开方法的参数和返回值。YARD 等工具可以将这些注释转换为可浏览的文档,而包含示例的优质 README 往往决定了人们是否会采用您的 Ruby 包。

快速检查

检查您对 Ruby 包代码组织方式的理解。

回顾:编写代码

您学习了如何组织 Ruby 包的内部实现:

  • 将所有内容包裹在命名空间模块中。
  • 让文件路径与常量名称匹配。
  • 保持公开接口小巧,并将辅助方法标记为 private。
  • 定义自定义错误类,避免全局猴子补丁。
  • 保持依赖精简,并记录接口。

接下来,我们将添加测试并进行版本管理。

常见问题解答

「编写代码」课时是免费的吗?

是的 — 「编写代码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「编写代码」这节课中我会学到什么?

组织 Gem 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「编写代码」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Gem 结构
  2. 编写代码
  3. 测试与版本管理
  4. 发布到 RubyGems
← 返回 Ruby Academy