代码之家  ›  专栏  ›  技术社区  ›  Finglas

您应该在Ruby中使用private、protected和public修饰符吗?

  •  4
  • Finglas  · 技术社区  · 15 年前

    给定类,就可以使它们的方法 private , public (默认)或 protected . 虽然我理解它们的用法,但是Ruby代码使用这样的修饰符是典型的吗?尽管Ruby是一种动态语言,在这种语言中用户可以很容易地重写访问权限?

    在使用类似 Send 允许用户访问私有方法,我只是想知道关于Ruby和访问修饰符的最佳实践是什么?换句话说,我应该在课堂上使用它们吗?

    3 回复  |  直到 13 年前
        1
  •  8
  •   John Feminella    15 年前

    给定类,可以使它们的方法私有、公共(默认)或受保护。虽然我理解它们的用法,但是Ruby代码使用这样的修饰符是典型的吗?尽管Ruby是一种动态语言,在这种语言中用户可以很容易地重写访问权限?

    它仍然是比较常见的,因为它传达了意图并最小化了您正在公开的接口。要遵守的一些惯例:

    • public ,因为除非另有说明,否则所有方法都是公共的,并且方法通常按访问修改分组。

    • 即使用户 可以 覆盖访问,并不意味着他们

    • 与C#相比,受保护的方法要少一些,因为Ruby实际上并不鼓励将继承作为传递行为的一种手段。常见行为通常可以重构为 Module include/extend -如有必要,进行必要的调整。

    • 因为私有方法不被认为是接口的一部分,所以您可以随意更改它们而不受惩罚。通过将它们私有化,您已经让其他人注意到这些方法及其实现或定义可能随时更改。

        2
  •  4
  •   Joshua Cheek    15 年前

    我一直认为这是关于暴露一个接口。你不想让你的用户被你的实现搞得不知所措,所以你把这样的东西变成私有的。它对他们更友好。例如,在处理数组时,您是否真的希望以您的方式使用另外71个方法(您几乎肯定不关心这些方法?)


    RUBY_VERSION                    # => "1.8.7"
    Array.new.public_methods.size   # => 149
    Array.new.private_methods.size  # => 71
    

    私有方法的另一个重要含义是“subjecttochange”,当您将自己提交到一个接口时,您必须支持它。你不能每次下载新版本的时候都破坏每个人的代码。私人的事情被认为是不稳定的。它们不会暴露出来,所以这意味着你可以随意改变它们。如果用户构建的代码依赖于私有方法,那么这不是你的错(假设他们没有这样做b/c,那么你给了他们一个垃圾接口)。所以你可以私下给自己空间,让自己在将来变得更好。

        3
  •  2
  •   cpjolicoeur    15 年前

    我仍然会在你的代码中使用它们,因为它向代码读取器传达了一个明确的意图,同时也为你提供了所需的保护。如果另一个开发人员要重写你的方法或者直接通过send调用它们,那么他们很可能有充分的理由或者至少理解为什么要这样做。

    在代码中使用Private/Protected可以让将来的开发人员更清楚地了解这些方法,如果没有人重写它们,他们也可以为您正常工作