【问题标题】:Should you omit information in variable names that are already specified by properties of that class?您是否应该忽略已由该类的属性指定的变量名中的信息?
【发布时间】:2014-12-05 12:54:02
【问题描述】:

例如,当您拥有class Room 时,每个房间都获得(或至少应该获得)不同的房间号,您是否允许自己将变量命名为roomNumber 而不仅仅是room?因为您已经知道它属于 Room 类,所以您可以在 roomNumber 中省略 room,而将其保留为 number。为了保持一致性,我想要么包含该类已经指定的信息,要么总是忽略它。

Class Room {

    private int roomNumber;

    Room(int roomNumber) {
    this.roomNumber = roomNumber;
    }

}

Class Room {

    private int number;

    Room(int number) {
    this.number = number;
    }

}

我正在考虑如果你使用 room.getRoomNumber() 或 room.getNumber(); 会是什么样子在大多数情况下这会更有意义。

【问题讨论】:

  • 是否可以使用其他类型的数字?例如,床位数?
  • 好点。是的,一个房间也可以存储其中的床位数量是有意义的。
  • 应该减少这种冗余,但是您的示例选择得很好:“房间号”是一个众所周知的概念,而“数字”是一个无名的概念。在这里使用缩写“no”/“nr”可能更符​​合某些人的口味。一个更清晰的字符串(“Room 013”、“Room 12A”)。
  • DoorNumber 或类似的不重复“房间”但能更好地解释目的的东西怎么样。
  • 我们也应该在某一天开始质疑的另一个问题在于“get”前缀。我们可以询问房间的“号码”或“门号”(我喜欢这个),但询问房间获取它的号码是什么意思?问题是我们不得不说 get 来区分 getter 和 setter 方法。而且我们习惯于添加 get 以至于我们看不到它。使用 Smalltalk 语法的语言没有这个问题,因为你会说 doorNumber 用于 getter 和 doorNumber: 用于设置器(顺便说一句,没有括号)

标签: java variables naming-conventions readability consistency


【解决方案1】:

如果房间有其他数字属性,则使变量的名称更具体。如果房间号是唯一的数字属性我认为room.getNumber()就足够了。

【讨论】:

    【解决方案2】:

    (欢迎来到slowy的哲学编程课)

    getNumber() 可能听起来不错。但是,当房间多了十个属性时,它看起来如何?它如何寻找其他人?如果你有一个带有 employeeNumber 的 Employee 类型和一个带有 reservationNumber 的 Reservation 怎么办?企业如何谈论它?如何为该属性命名 web-gui 的标签?

    记住:

    1) 大多数时候,最好以某种方式命名方法和变量,这样更容易理解。如果您命名某些东西,请尝试命名它,这样您就不必评论它。如果变量比您的 24 英寸宽屏幕 tft 长,那么,出现了可怕的错误,呵呵。在您的情况下,我会评论说, getNumber() 将返回房间号,只是为了让它非常清楚。否则没有必要.

    2) 一致性:如果商家在谈论房间号,请将其命名为房间号。从成员变量到方法,再到表列。如果可能的话。它使一切变得更容易。这包括像“readRoomByRoomNumber()”这样的方法,而不是“readRoomByNumber()”。

    3) 变量命名:同时声明“Room room = new Room()”而不是“Room r = new Room()”。所以最后:“room.getRoomNumber”比“r.getNumber()”更容易阅读;-)

    希望这会有所帮助, 问候, 慢

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2018-09-12
      • 1970-01-01
      • 2021-12-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多