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

2022-01-04 16:34:28 +08:00
 kayseen

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

一:

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

二:

if 用户不存在:
	return 用户不存在
if 密码不符合规范:
	return 密码不符合规范
if 手机号不符合规范:
	return 手机号不符合规范
if 邮箱不符合规范:
	return 邮箱不符合规范
do 修改用户信息
3807 次点击
所在节点    Python
44 条回复
xiao109
2022-01-04 16:36:09 +08:00
那肯定是第二种啊,起码不用数空格
WoWTxT
2022-01-04 16:37:21 +08:00
性能不用考虑,清晰肯定第二种
Vinceeeent
2022-01-04 16:37:28 +08:00
第一种看着都累啊
wangtian2020
2022-01-04 16:38:52 +08:00
第二种

从代码的“面相”来看,第一种长的像“回调地狱”,第二种就长得像 async 方法了( JavaScript )
xingshu1990
2022-01-04 16:45:46 +08:00
原先在 Python 高级编程里看到过第二种 这种优化:

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

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

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


都是校验,先走规则校验
dengji85
2022-01-04 17:53:23 +08:00
@Droi 借楼问一下,这种业务判断多少人会真的去用设计模式,用了会不会增加复杂度
PiersSoCool
2022-01-04 17:56:56 +08:00
肯定第二种

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

https://www.v2ex.com/t/826136

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

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

© 2021 V2EX