繁体   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