繁体   English   中英

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

[英]Is it bad practice to embed method parameter expressions?

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

(Android代码段为例)

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

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

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

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(...)的事实,只是使用不同的资源名称。

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

我要说这取决于具体情况。

player.setName(User.getName());

没关系,如下面的火车破坏......

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

我说这是不好的做法,并且在Bob Martin的清洁代码中提到了火车残骸的危险性。 @Jon Skeet提到的重复调用也是使用变量而不是方法调用的另一个原因。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM