首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核实某人的年龄

核实某人的年龄
EN

Code Review用户
提问于 2016-12-18 17:03:55
回答 10查看 3.8K关注 0票数 24

在编写代码时,我注意到我开始养成不使用if- get语句的习惯,而else块只有一行代码。例如,如果我有可以像这样求解的代码:

代码语言:javascript
复制
public Person(int initialAge) {
    if(initialAge < 0){
        System.out.println("Age is not valid, setting age to 0.");
        age = 0;
    }
    else{
        age = initialAge;
    }
   }

相反,我将完全删除else语句,以减少几行代码。这使我的代码看起来更像这样:

代码语言:javascript
复制
public Person(int initialAge) {
    age = initialAge;
    if(initialAge < 0){
        System.out.println("Age is not valid, setting age to 0.");
        age = 0;
    }
   }

我想知道这是否是一个坏的编码习惯,我是否应该打破这种编码习惯,或者继续这样做是否可以。当我谈到更复杂的程序时,这样做会不会是一个更大的问题呢?

编辑:只是想提供一些更多的信息,为什么部分代码是这样写的。提供的代码段是编码挑战的一部分,其中一个要求是将输入的任何负数设置为0。

EN

回答 10

Code Review用户

回答已采纳

发布于 2016-12-18 19:18:13

  1. 如果值无效,则应抛出异常。正如Simon所建议的那样,您可以抛出IllegalArgumentException,或者如果您想要自定义它,也可以创建用户定义的异常。
  2. 您应该完全避免这种习惯,因为在提供的问题中,您有一段简单的代码,但是在某些方面,您需要处理复杂的数据结构和值/数据库交互。如果你一直遵循这个习惯,总有一天你会在检查东西之前初始化要返回的值,然后被你认为可能不会发生的异常所困。
票数 6
EN

Code Review用户

发布于 2016-12-18 17:37:20

我在这里看到的最大问题是,您正在向System.out打印一条警告消息,然后对一些听起来像是异常的东西使用默认值。

为什么要允许负值呢?

代码语言:javascript
复制
if (initialAge < 0) {
    throw new IllegalArgumentException("Initial age cannot be negative, was specified as " + initialAge);
}
age = initialAge;

这样,总是由调用方传递一个有效年龄,而不是默认为零的方法,这将带来其他问题。与其打印一条可能表示错误的警告消息,不如让您的程序因错误而提前中断。

票数 39
EN

Code Review用户

发布于 2016-12-19 11:30:19

将主要功能放在输入验证之前。要么先核实

代码语言:javascript
复制
if(!foo) {
  throw new IllegalArgumentException("not foo");
}
doStuff();

或者首先使用具有主要功能的if- the。

代码语言:javascript
复制
if(foo) {
  doStuff();
} else {
  handleWrongFoo();
}

对我来说,你的解决方案中最丑陋的部分是做一些无效的事情,然后说“不,等等”。

代码语言:javascript
复制
do {
  doStuff();
} ormaybeif(!foo) {
  handleWrongFoo();
}
票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/150215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档