是否有良好的命名约定来绕过长变量名,而不必依赖注释以获得更好的可读性?

问题描述 投票:0回答:1

基本上我总是尽量避免评论。看了很多Bob大叔的视频,他想表达的东西,有很多我是赞同的

他曾经提到,理想情况下,每当我们倾向于使用注释来提供更多信息,说明为什么我们在某个函数中以我们的方式做事时,这就是我们可能应该反思代码质量的地方其实已经写好了

我当然知道,在更大的系统中,某些东西的背景,如果没有任何注释,仅靠代码本身是很难解释清楚的。但我仍然觉得也许我还不够了解,某些事情确实可以用实际代码本身来表达(假设我使用正确的命名约定等)

这是一个具体的例子:
我正在开发一个 Telegram Bot,它需要从通道内的消息中检索数据,然后转发到系统其余部分的其他组件。由于该项目的限制,我只能通过使用 Selenium Webdriver 来做到这一点。目前我真的很难选择正确的命名约定。

我发现目前,我可以通过可点击的 WebElement 对象检查特定 Telegram Channel 是否有 urnead 消息。如果没有可用的未读消息,它有一个包含 3 行的字符串成员变量“text”。但是,如果有未读消息可用,则成员变量“text”将有 4 行。本例中的附加行包含未读消息的数量。

所以我最不想做的就是写一个这样的函数:

    def isUnreadMessageAvailable(self):
        if len(self.__buttonElement.text.splitlines()) <= 3:
            return False

        return True

首先我当然不喜欢的是那里的硬编码“3”。我可能需要在其他 python 文件中的其他几个地方使用那个确切的阈值。另外这个“3”可能随时改变,所以当适应新的阈值时,我显然不想在 100 个不同的地方编辑它。

相反,我宁愿使用这样的东西:

    def isUnreadMessageAvailable(self):
        if len(self.__buttonElement.text.splitlines()) <= Constants.AMOUNT_OF_LINES_IF_MESSAGES_READ:
            return False

        return True

如您所见,我将“3”替换为的变量名称非常长。我的意思是它包含六个词。最近我觉得我在为变量、文件和函数起好名字方面比写逻辑让我的程序做我想做的事更费劲。

对于这个冗长的问题,我深表歉意,但在这种情况下,如果不使用包含较少单词的变量,我无法提供一种方法来为代码提供可读性。 感谢您对您的经历提出任何意见。也许你的一些意见/解决方案可以在我以后遇到类似的事情时帮助我。

python coding-style naming-conventions readability
1个回答
0
投票

您的代码适用于三个受众:

  1. 运行它的机器。
  2. 任何其他必须处理它的人。
  3. 未来的自己。一旦您的代码生效,您就是它最重要的受众。

编写您的代码,以便您未来的自己能够理解它。

您向我们展示的方法包含一些假设。你的三行、两行、七行或未来的任何一行都有一些特别之处。

方法头注释在这里是合适的,Uncle Bob 尽管如此。它应该解释三行的特别之处,并简要说明原因或给出解释原因的参考。

长的、解释性的名字也对你未来的自己有帮助。原因之一:它们允许您搜索所有代码以查找对它们的引用。

并且,您可以通过任何命名对象的声明放置注释以进一步解释。

所以使用好的声明和方法注释以及有意义的符号。

记住这一点。调试代码的难度是编写代码的两倍。因此,如果您使用所有的聪明才智来编写它,那么调试它就会困难得多。为未来的自己编写它有助于应对调试的困难。

现代 IDE、编辑器和运行时不会惩罚长名称。如果您将鼠标悬停在名称上,IDE 会向您显示声明注释。两者配合得很好。

© www.soinside.com 2019 - 2024. All rights reserved.