6

讨论一个业务代码判断的写法问题,这两种写法你们更喜欢那种?

 1 year ago
source link: https://www.v2ex.com/t/860261
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Java

讨论一个业务代码判断的写法问题,这两种写法你们更喜欢那种?

  nuanshen · 4 小时 49 分钟前 · 1608 次点击
//写法 1 ,不满足条件跳过业务处理
for(){
  if(!condition){
    continue;
  }
  //businessCode
}

//写法 2,满足条件执行业务处理
for(){
  if(condition){
    //businessCode
  }
}
37 条回复    2022-06-17 17:25:14 +08:00
RedBeanIce

RedBeanIce      4 小时 48 分钟前 via iPhone

分场景。绝大部分提前返回。1
May725

May725      4 小时 46 分钟前

更倾向于提前返回,避免嵌套
TWorldIsNButThis

TWorldIsNButThis      4 小时 34 分钟前 via iPhone

一般不用 for
使用语义化的迭代工具
map filter
yazinnnn

yazinnnn      4 小时 31 分钟前   ❤️ 3

collection.filter { } //过滤满足条件
.map { } //执行业务,返回业务结果
.reduce { } //聚合业务结果
yolee599

yolee599      4 小时 27 分钟前 via Android

提前 return ,可以提高运行效率,代码也美观
chendy

chendy      4 小时 18 分钟前

看内容多长……
如果不长的话就套在写法 1 里
如果比较长就写成写法 2 提前退出

但是还有一种情况是好几个 contine / break 的( sonar 会警告
这种情况一般就抽个方法,在方法里 return
newaccount

newaccount      4 小时 18 分钟前

看情况。business 部分行数不多用 2 ,多了用 1 。但用 1 的时候可能会声明变量以去掉 not 判断,因为快速浏览时感叹号不明显导致漏看。如果感叹号左右增加空格提高可读性又得配置 checkstyle ,麻烦
dcsuibian

dcsuibian      4 小时 17 分钟前

喜欢第 1 种,少一层嵌套。
AlekoShen

AlekoShen      3 小时 53 分钟前

一般 1 不过如果判断条件复杂会用 3,4 楼的写法
VeryZero

VeryZero      3 小时 51 分钟前

大多数情况肯定第一种好啊,可以显著降低阅读时的心智负担
DrakeXiang

DrakeXiang      3 小时 50 分钟前

我一般都是 2 ,除非业务逻辑比较长,然后只有一个 condition 的情况下可能会选择 1
Detector

Detector      3 小时 50 分钟前

第一种,不管是写起来是读起来,对我而言都舒服太多
ericls

ericls      3 小时 47 分钟前 via iPhone

@yazinnnn 有些语言这样写会产生实际的性能问题 虽然看起来比较舒服

我个人喜欢第一种 但是你要写成别的 我也没意见
MakHoCheung

MakHoCheung      3 小时 13 分钟前

第一种是一个模式,忘了叫啥,Swift 的 guard 语句就是这样
xuelu520

xuelu520      3 小时 10 分钟前

写法一吧,
第二种如果业务代码很多,很容易造成多重嵌套。
buried

buried      3 小时 5 分钟前

写法一,避免太多的缩进
hidemyself

hidemyself      3 小时 4 分钟前

第一种,卫语句
SteveWoo

SteveWoo      3 小时 3 分钟前

看这个模块重不重要。 如果出错了风险大不大。 一般情况第一种。
重要场景,个人一定会 if 和 else 成对出现来实现,宁愿有一堆 if else 嵌套
for(){
if {
if {
} else{
}
} else {
if {
} else{
// 根据算法多次与产品确认,这个场景就是啥也不做
}
}
}
fkname

fkname      2 小时 58 分钟前

排除其他条件更喜欢第二种,因为第一种加了一个非,有时候变量命名又是什么 notSuccess 之类的,再加个非脑子里就要多想一下,如果疏忽了就可能导致判断错误。
exmario

exmario      2 小时 48 分钟前

一般选 2 ,业务流程更清晰
aababc

aababc      2 小时 41 分钟前

我感觉我是分情况,在循环里不太喜欢使用 break ,continue, 在非循环的场景下,喜欢提前返回!
yfugibr

yfugibr      2 小时 32 分钟前

看情况,一般会选用嵌套层数少的,逻辑看着清晰一点
zakokun

zakokun      2 小时 25 分钟前

一般都提前返回 防止嵌套太多层
fpure

fpure      2 小时 23 分钟前

@MakHoCheung Avoid Else, Return Early?
seaiaddca

seaiaddca      2 小时 20 分钟前 via iPhone

我反正从来不用 continue…
jorneyr

jorneyr      2 小时 12 分钟前

喜欢第一种守卫式写法,并且后面的代码也不用多一层缩进。
potatowish

potatowish      2 小时 8 分钟前 via iPhone

判断条件很多,就用第一种,判断条件少用第二种
Morii

Morii      47 分钟前

目前我的代码尽量都是一次缩进,二次缩进就有阅读成本了
dexterque

dexterque      29 分钟前

一般推荐 1 吧
cnoder

cnoder      28 分钟前

有没有可能 他某个语言,没有 continue 0.0
daimubai

daimubai      24 分钟前

第 1 种,可读性高。可以解放思维,continue 的就不用再管了
Rache1

Rache1      24 分钟前

@cnoder TWIG 😂,虽然不算语言,是一个模板引擎,实现了自己的流程控制语句,但是就是没有 continue 和 break
Xusually

Xusually      24 分钟前

在循环里,没有特殊情况的话,我一般用 2.

但是在循环外,可以直接 return 的时候经常用 1.
littlewing

littlewing      21 分钟前

unregister

unregister      9 分钟前 via Android

用 continue 感觉有点多余
libook

libook      3 分钟前

如果代码很长,提前返回可能不利于可读性;甚至建议除非有必要不写 else ,有 if 必有 else ,这样能规避一些逻辑盲区的 bug ,让任何情况都有所处理。

当然代码风格没有完全之策,最好是在每个项目的迭代过程中进行归纳整理,然后沉淀为 lint 规则。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK