【问题标题】:Android whats the best way to name a boolean function that also performs logic?Android 命名一个也执行逻辑的布尔函数的最佳方法是什么?
【发布时间】:2013-12-18 22:25:43
【问题描述】:

这与 Android 上的 API 设计有关:

我想拥有良好的编码风格,是的,我意识到这非常小,但是假设我有类似的东西:

public boolean validateSomeInputAndDoLogicIfNot(Context context, MyObject myObject) {
    if (someObject.isCaseOne()) {
        Toast.makeToast...
        return true;
    } else if (someObject.isCaseTwo()) {
        doSomethingCrazyHere();
        return true;
    }
    doSomethingMinorHere();
    return false;
}

首先,我看到很多代码将它们的函数命名为isValid(input)。但假设它无效,我希望该函数做不同的事情。现在,另一件事是:我将多次使用此功能。

所以,在我看来,像isValid() 这样的命名意味着它不做任何逻辑,它只是做一些检查,不做任何花哨的事情。

但是命名validateObject() 之类的东西让我觉得它应该是一个可以做不同事情的 void 函数,但当然不能返回布尔值。

所以我的问题是:这种特定类型的函数的正确名称是什么?

**更新:

首先,感谢您将其分为两个功能的建议。我不喜欢它的唯一原因是someObject 可以有多个状态,导致它有效或无效或其他。因此,someObject.isCaseOne()someObject.isCaseTwo()。所以如果我要检查每个状态,我将不得不为一个对象的多个状态创建一个枚举?我觉得这是引入不必要的代码:(

【问题讨论】:

  • 您是否考虑过将功能一分为二?验证并(分别)对无效值采取措施?
  • @T.J.Crowder 请看我的更新。感谢您的建议。

标签: java android coding-style refactoring


【解决方案1】:

我想我会使用两个单独的函数:一个用于验证,一个 separate 函数用于在值无效的情况下执行某些操作。

如果您真的很想要将它们结合起来,那么我会说得很明确,例如:validateAndIfInvalidThenX。 (即使那样,我也会有两个独立的函数,它只会调用它们。)

【讨论】:

  • 看,如果您尝试验证,someObject 可以是多种情况,并且您希望在每个结果中做一些不同的事情。我不想做一个枚举来定义someObject.isCaseOne() 的每个不同场景——我觉得这只会添加不必要的代码,但我可以相信否则。
【解决方案2】:

将其命名为fixIfInvalid

其中“修复”是在输入无效的情况下它将执行的任何操作。例如capitalizeIfInvalid

同意 TJ 的观点,通常最好有两个功能。但“通常”总是有例外。

编辑:在大多数情况下,我建议此函数应返回正在修复(或未修复)的对象。

所以,

ImaginaryFormInputClass myFormInput = WebPage.readInput();

myFormInput.fixIfInvalid().submitToDatabase();
// OR
Database.submit(myFormInput.fixIfInvalid());

关于您关于必须检查 someObject.isCaseOne()someObject.isCaseTwo() 的最后评论...这正是 someObject.checkIsValid() 函数的工作 - 您可以使用该函数调用其他函数来检查对象的状态,并且根据通过的函数(通常不超过 2 个或 3 个)做出总体决策。

方法调用其他方法的目的是结合方法调用使事情变得更简单,同时保持代码在不同的地方做不同的事情。

多年来(如果不是几十年的话)它一直被认为是软件工程的基本“最佳实践”,通过使用一个验证事物的函数和另一个修复无效事物的函数来解决您所描述的问题。

每条一般规则都有例外,但如果没有更清楚地了解为什么您的项目可能符合这些例外之一,就很难得到更具体的信息。如果没有清楚地了解为什么要违反此约定,那么您似乎在走很长一段路,并且在努力简化其他事情时使事情变得更加复杂。

【讨论】:

  • 对我来说,虽然它读作是一个无效函数 :( 函数的第一个单词中的任何动词似乎都是一个动作,而且通常是无效的?
  • 他们将函数命名为 isThis()hasSomething()shouldDoThis() ,很明显它返回的是 true 或 false。
  • @DavidT.:它基本上一个动作。这似乎是一个很好的名字。您感受到的紧张感是两种不同事物(检查和纠正)混为一谈的结果。
  • @T.J.Crowder 绝对。您是否碰巧知道 AAndroid API 通常是否可以将这两个功能结合起来,如果可以,它们将函数命名为什么?
  • @T.J.Crowder 我赞成你的回答。谢谢你的建议。我对细节很好奇,因为在 iOS 上使用 Objective-C 时,方法命名非常长。但是,假设您使用脚本语言。我相信您已经确切地看到了这些变量是多么简洁。
猜你喜欢
  • 2011-05-06
  • 2011-04-10
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2012-11-21
  • 2021-04-11
相关资源
最近更新 更多