一个简单低级的代码逻辑问题

2022 年 1 月 4 日
 kayseen

假设存在多个判断条件,以下以修改用户信息为例,哪种代码结构会更清晰而且性能会好一点? 以下 python 伪代码:

一:

if 用户存在:
	if 密码符合规范:
		if 手机号符合规范:
			if 邮箱符合规范:
				do 修改用户信息
			else:
				return 邮箱不符合规范
		else:
			return 手机号不符合规范
	else:
		return 密码不符合规范
else:
	return 用户不存在

二:

if 用户不存在:
	return 用户不存在
if 密码不符合规范:
	return 密码不符合规范
if 手机号不符合规范:
	return 手机号不符合规范
if 邮箱不符合规范:
	return 邮箱不符合规范
do 修改用户信息
4691 次点击
所在节点    Python
44 条回复
xiao109
2022 年 1 月 4 日
那肯定是第二种啊,起码不用数空格
WoWTxT
2022 年 1 月 4 日
性能不用考虑,清晰肯定第二种
Vinceeeent
2022 年 1 月 4 日
第一种看着都累啊
wangtian2020
2022 年 1 月 4 日
第二种

从代码的“面相”来看,第一种长的像“回调地狱”,第二种就长得像 async 方法了( JavaScript )
xingshu1990
2022 年 1 月 4 日
原先在 Python 高级编程里看到过第二种 这种优化:

Python 下,第二种属于短路原则。

Python 里的“短路原则”:在条件语句中,如果存在多个条件需要判断时,位置靠前的条件导致整个判断语句为 True ( or 语句)或者为 False ( and 语句),就不再进行后续条件的判断。
looyer
2022 年 1 月 4 日
第二种 另外表单输入判断前置 涉及到数据库查询结果的判断后置 只有表单数据都确认规范了 再去请求数据库做进一步判断
Jooooooooo
2022 年 1 月 4 日
第二种清晰.
66beta
2022 年 1 月 4 日
第二种是几乎适合所有语言的短路原则
shyrock
2022 年 1 月 4 日
必须是二啊。
第一种我是没想出来哪种场景有用。
xingshu1990
2022 年 1 月 4 日
@shyrock 第一种是无任何编程基础的新人学着写的。
FutherAll
2022 年 1 月 4 日
提前返回
ayase252
2022 年 1 月 4 日
无疑是第二种,early return

第一种可读性太差
Droi
2022 年 1 月 4 日
可以试试设计模式了。不知道职责链模式能不能解决你的这个问题。
adoal
2022 年 1 月 4 日
Monad 了解一下
EchoDeveloper
2022 年 1 月 4 日
第二种就是卫语句,显然更好. 把不该出现的情况提前返回.
ianEros
2022 年 1 月 4 日
Fail-fast
qiaobeier
2022 年 1 月 4 日
肯定第二种啊,连你这种伪代码第二种也是漂亮太多了。
ccraohng
2022 年 1 月 4 日
if 密码不符合规范:
return 密码不符合规范
if 手机号不符合规范:
return 手机号不符合规范
if 邮箱不符合规范:
return 邮箱不符合规范


都是校验,先走规则校验
dengji85
2022 年 1 月 4 日
@Droi 借楼问一下,这种业务判断多少人会真的去用设计模式,用了会不会增加复杂度
PiersSoCool
2022 年 1 月 4 日
肯定第二种

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/826136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX