簡體   English   中英

修剪方法輸入字符串參數是一種不好的做法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM