嵌入方法参数表达式是不好的做法吗?

时间:2013-10-04 14:51:15

标签: java code-structure

在方法参数中使用嵌入式表达式构造代码通常被认为是不好的做法吗?应该声明变量吗?

(Android示例代码段)

((EditText)view.findViewById(R.id.fooEditText))
  .setText(
    someExpression
      ? getResources().getString(R.string.true_expression_text)
      : getResources().getString(R.string.false_expression_text)
  );

我个人觉得它看起来很好,但我只是想知道这是否被认为是排斥:)

3 个答案:

答案 0 :(得分:2)

我几乎肯定会以多种方式简化:

EditText editText = (EditText) view.findViewById(R.id.fooEditText);
String resourceName = someExpression ? R.string.true_expression_text
                                     : R.string.false_expression_text;
editText.setText(getResources().getString(resourceName));

在一个语句中完成所有这一切使得更难以阅读更难调试,IMO。请注意,我在这里也删除了重复,但是使用了在条件运算符的两个操作数中调用getResources().getString(...)的事实,只是使用不同的资源名称。

我对原始代码的主要看法是对一个演员的结果调用一个方法 - 除了其他任何东西之外,它引入了比你需要的更多的括号,这通常是令人困惑的。

答案 1 :(得分:1)

我说这取决于具体情况,例如。

player.setName(User.getName());

然而,如下面的火车破坏会很好......

player.setName(getGroup().getUsers().get(0).getName());

我说这是不好的做法,Clean Code by Bob Martin提到了火车残骸的危险性。另外,@ Jon Skeet提到的重复调用是使用变量而不是方法调用的另一个原因。

答案 2 :(得分:0)

“排斥”这个词是你的,但它肯定描述了我的反应。我不能专注于这个语句正在做什么,因为它有一个if语句,一个搜索,并且在它开始之前至少发生了5个解引用。

我发现三元运算符特别有害,因为在我解析其他所有内容时,我必须在脑海中持有两个不相交的状态。有些人喜欢简洁到局部变量(我不是其中之一),但嵌入在其他语句中的三元运算符(或任何其他分支)尤其不可爱。如果你忽略了其余的清洁代码或类似的作品,因为你喜欢复杂的陈述,至少将条件分开。