我有一个同事写代码特别精简。。如:
public OutVoGlobal list(BatteryOrderDTO dto, UserInfo user) {
return new OutVoGlobal(EnumRetCode.SUCCESS).setData(orderMapper.list(dto.setBelong(user.getUserNo())));
}
之后这段代码有一些问题,让我来修改这段代码。。我就觉得这段代码的可读性特别的差。昨天和他讨论了一下,他觉得代码行数多影响阅读,他这样他看起来很舒服。以下是我加了判断后的:
public OutVoGlobal list(BatteryOrderDTO dto, UserInfo user) {
OutVoGlobal outVoGlobal=new OutVoGlobal(EnumRetCode.SUCCESS);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if(!StringUtils.isEmpty(dto.getStartTime())){
try {
sdf.parse(dto.getStartTime());
dto.setStartTime(dto.getStartTime()+" 00:00:00");
} catch (ParseException e) {
dto.setStartTime("");
}
}
if(!StringUtils.isEmpty(dto.getEndTime())){
try {
sdf.parse(dto.getEndTime());
dto.setEndTime(dto.getEndTime()+" 23:59:59");
} catch (ParseException e) {
dto.setEndTime("");
}
}
dto.setBelong(user.getUserNo());
PageHelper.startPage(dto.getPageNo(), dto.getPageSize());
List<BatteryOrder> list=orderMapper.list(dto);
outVoGlobal.setData(list);
return outVoGlobal;
}
如果没有改动的话这段代码我一定会这么写:
public OutVoGlobal list(BatteryOrderDTO dto, UserInfo user) {
OutVoGlobal outVoGlobal=new OutVoGlobal(EnumRetCode.SUCCESS);
dto.setBelong(user.getUserNo());
PageHelper.startPage(dto.getPageNo(), dto.getPageSize());
List<BatteryOrder> list=orderMapper.list(dto);
outVoGlobal.setData(list);
return outVoGlobal;
}
确实是代码增加了很多行,但是我觉得这样写当我要进行断点调试的时候会很舒服。而且当别人要改我代码的时候也能一目了然。。 然后他说如果你要加上面的新需求的话可以这么写
public OutVoGlobal list(BatteryOrderDTO dto, UserInfo user) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if(!StringUtils.isEmpty(dto.getStartTime())){
try {
sdf.parse(dto.getStartTime());
dto.setStartTime(dto.getStartTime()+" 00:00:00");
} catch (ParseException e) {
dto.setStartTime("");
}
}
if(!StringUtils.isEmpty(dto.getEndTime())){
try {
sdf.parse(dto.getEndTime());
dto.setEndTime(dto.getEndTime()+" 23:59:59");
} catch (ParseException e) {
dto.setEndTime("");
}
}
return new OutVoGlobal(EnumRetCode.SUCCESS).setData(orderMapper.list(dto.setBelong(user.getUserNo()))
}
我一想,这么写也可以呢。但是我还是觉得他最后那个 return 看起来太麻烦了,我又没有理由反驳他。 其实在写代码的过程中我发现他有好多的习惯我都不习惯。比如说我一般都是这么写:
OutVoGlobal outVoGlobal=new OutVoGlobal(EnumRetCode.SUCCESS);
…… if(StringUtils.isEmpty(XXX)){
outVoGlobal.setCode("1000");
outVoGlobal.setInfo(XXX+"不能为空");
// return outVoGlobal.setCode("1000").setInfo(XXX+"不能为空");
return outVoGlobal;
} if(StringUtils.isEmpty(SSSS)){
outVoGlobal.setCode("1000");
outVoGlobal.setInfo(SSS+"不能为空");
return outVoGlobal;
} …… return outVoGlobal;
如果我也用了插件的话我会这么写
OutVoGlobal outVoGlobal=new OutVoGlobal(EnumRetCode.SUCCESS);
…… if(StringUtils.isEmpty(XXX)){
return outVoGlobal.setCode("1000").setInfo(XXX+"不能为空");
} if(StringUtils.isEmpty(SSSS)){
return outVoGlobal.setCode("1000").setInfo(SSS+"不能为空");
} …… return outVoGlobal;
他如果写的话会这么写:(加了 @Accessors(chain = true)的前提下)
…… if(StringUtils.isEmpty(XXX)){
return new OutVoGlobal().setInfo(XXX+"不能为空").setCode("1000");
} if(StringUtils.isEmpty(SSSS)){
return new OutVoGlobal().setInfo(SSS+"不能为空").setCode("1000");
} …… return new OutVoGlobal(EnumRetCode.SUCCESS);
大家觉得是先把这个变量在开始的时候声明了好还是在用到的时候直接返回好呢?
然后还有别的:
if (userData == null) return outError(outVo, EnumRetCode.NO_REGISTER, "未查询到用户信息, userNo -->{}", user.getUserNo()); else if (!userData.getPwd().equals(pwd = encrypt(user.getUserNo(), user.getPwd())))
return outError(outVo, EnumRetCode.ERROR_PWD, "密码错误, userNo -->{} | pwdData -->{} | pwdInput -->{}", user.getUserNo(), userData.getPwd(), pwd);
else if (!StringUtils.isEmpty(userData.getOpenId()) && !openid.equals(userData.getOpenId())) // 删除上一个用户信息
redisUtil.delMapKey(param.getUserKey() + userData.getOpenId(), "userInfo", "null");
这种。。。if 和 else if 他后面都跟了一行,之后 他就省去了{} 他特别喜欢这么写代码。可是我每次看都要自己看一下才知道他是怎么做的。。虽然说他只写了一行,但是我看的时候还是会脑补成我写的那样。。
if (!"0000".equals(TokenUtil.verify(outVo, tokenMap).getCode()))
return outVo;
他还喜欢把变量声明写在一行上。。
String openid = (String) tokenMap.get("openid"),userMapKey;
这样的代码我找 userMapKey 就很懵逼。。
再贴一段代码: if (userMap == null || userMap.get("userInfo") == null) {
// 获取已绑定的用户信息
if ((user = userInfoDao.getByOpenId(openid)) == null) return null;
redisUtil.saveMapSecond(userMapKey, "userInfo", JSONObject.toJSONString(user), appParam.getCacheTime());
} else
user = JSONObject.parseObject(userMap.get("userInfo").toString(), UserInfo.class);
反正我是看不习惯。。。大家觉得呢。这么写是好还是不好呢。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.