[英]Is trimming the method input String parameter a bad practice?
我正在爭論自己修剪方法的輸入字符串 arguments 是否是一種不好的做法? 我個人不喜歡修改輸入 arguments 但想知道修剪是否可以?
我編寫了如下代碼
private Order retrieveOrderDetails(String productId, String cardNumber, Date purchaseDate) {
validateInputs(trim(productId), trim(cardNumber), purchaseDate);
List<Order> orders = pullOrdersByCardNumber(trim(cardNumber));
return retrieveOrderDetails(orders, trim(productId), purchaseDate);
}
除了在多個地方使用 trim() 之外,是否可以執行以下操作?
private Order retrieveOrderDetails(String productId, String cardNumber, Date purchaseDate) {
productId = trim(productId);
cardNumber = trim(cardNumber);
validateInputs(productId, cardNumber, purchaseDate);
List<Order> orders = pullOrdersByCardNumber(cardNumber);
return retrieveOrderDetails(orders, productId, purchaseDate);
}
字符串在到達時應該已經被修剪了retrieveOrderDetails()
。
需要修剪字符串意味着它們來自用戶輸入:表單字段、配置文件等。從用戶輸入中修剪空格是用戶界面代碼或文件讀取代碼的工作。 您不應該混合抽象層,在同一個 function 中處理 UI 和業務邏輯。
不要在這里修剪字符串,也不要檢查它們是否被修剪。 完全不用擔心修剪。 這是調用者的問題,而不是這個函數的問題。
如果您想真正純粹,您甚至可以用特定於域的類替換字符串。 您已經擁有Date purchaseDate
而不是String purchaseDate
。 對其他兩個參數執行相同的操作。 然后修剪所屬的地方變得清晰:不在這里。
Order retrieveOrderDetails(ProductId productId, CardNumber cardNumber, Date purchaseDate) {
...
}
與約翰的觀點正交(這是“你不應該在這里這樣做”),你似乎在問是否可以接受修改方法參數變量。
這真的歸結為可讀性。 >>you<< 認為這三個版本中哪一個更具可讀性?
public void test(String arg) {
// repeat the trim computation
use(trim(arg));
use2(trim(arg));
}
public void test(String arg) {
// modify the argument
arg = trim(arg);
use(arg);
use2(arg);
}
public void test(String arg) {
// use a local variable
String trimmedArg = trim(arg);
use(trimmedArg);
use2(trimmedArg);
}
您的答案可能取決於上下文。
但實際上,這取決於您自己的判斷。 我們無法告訴您哪個版本更具可讀性。 重要的是您和您的同事的可讀性。 畢竟,您將是(可能)需要在 N 年內閱讀此代碼的人。
會有小的性能差異,但這不應該是您的主要標准或決定,除非您有強有力的證據表明此代碼對性能至關重要。
如果您的業務 function 在輸入被修剪或不修剪時不會改變,那么修剪就可以了。
但是如果修剪和不修剪之間存在不同的邏輯,那么默認情況下您不能這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.