簡體   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