还是写代码风格的问题,如果设计代码布局

2011-12-29 14:15:36 +08:00
 avatasia
目前碰到的一个很严重的问题, 代码长了,改动的地方一多,就会忘掉某些东西,导致到处补漏,而本人脑子也不好使,请问如何能写出短小简洁的代码,方便整理思维的。某些DSL确实对这个有帮助,希望有经验的人能分享下。
4666 次点击
所在节点    问与答
24 条回复
avatasia
2011-12-29 14:23:41 +08:00
再增加个问题, 返回类型为void的方法有什么意义? 如果做一件事情,肯定要知道结果的,想不通
zicjin
2011-12-29 14:32:36 +08:00
1 建议看看进攻型代码,可以尽量减少if else嵌套。

2 抛出异常也是一种返回结果,而且是一种更优秀的设计
myrual
2011-12-29 14:34:00 +08:00
从一开始就按着业务逻辑写代码。而不是实现逻辑写。
可能有帮助。

另外就是经常重构代码,从最简单的命名开始,好的命名可以有效的减少混乱。
keakon
2011-12-29 14:37:03 +08:00
有的函数确实不需要返回值啊,比如swap
leiz
2011-12-29 14:39:30 +08:00
@avatasia
1、在设计阶段尽量把你的东西切割开。
2、每个方法完成一个简单的任务。
3、设计好你的方法(函数)声明。

至于void,有时候更多的是达到目的的不同手段。
kojp
2011-12-29 14:39:40 +08:00
建议 import this 一下~~~
9hills
2011-12-29 14:45:48 +08:00
@avatasia 有时一个函数就是做某件事,比如让PC喇叭响一下,要啥返回值。。
myrual
2011-12-29 14:48:34 +08:00
@avatasia 知道结果的方法有很多种,除了函数返回结果,还可以传入一个指针/引用,用于存取结果。
返回多个结果的函数似乎不是普遍存在的。
zephyro
2011-12-29 15:02:02 +08:00
可以学习一下LISP,书里都有很好的函数式编程的风格介绍,如何设计函数式的程序等等。虽然一个应用程序做到纯函数式过于偏激了,但是对于一些核心逻辑,按照函数式的理念进行设计是很棒的。
按照LISP的风格写下来,整个程序似乎都变成了自制DSL的使用。
还有这个,
http://avdi.org/talks/confident-code-rubymidwest-2011/confident-code.html
How-to write Confident Code.
avatasia
2011-12-29 16:06:47 +08:00
@zephyro @myrual @9hills @kojp @leiz @keakon @zicjin 返回异常不算是优秀设计把,我记得think in c++的作者说过,异常是一个很搞的东西,会降低性能。 我的意思是人在自然界里做什么事情都是要知道结果的,尤其是程序,没有返回,是不是意味着失去控制,失去控制意味着什么大家一定明白,就像swap,你swap的值肯定要用的,不用为什么要swap,如果交换失败怎么办?
leiz
2011-12-29 16:15:55 +08:00
@avatasia 你想太多。
zicjin
2011-12-29 16:16:52 +08:00
没看过think in c++,但写过几年代码的我从来不觉得异常有什么好,或者性能问题,真有性能问题那也是框架设计的问题。
没有返回为什么不能算是一种结果?它代表一切正常的结果。
你纠结在这些字眼里还不如多写点大型架构切身体验一下。
nswutong
2011-12-29 16:21:47 +08:00
@avatasia 返回是给其他部分代码用的,不是给自己用的
avatasia
2011-12-29 16:28:39 +08:00
@zicjin 貌似这个就是大型架构的基础啊,例如windows消息机制,核心就是sendmessage postmessage,就算调用postmessage,那么这个postmessage的操作如何保证成功。
keakon
2011-12-29 16:38:10 +08:00
@avatasia swap是交换引用或指针,逻辑上不可能出现失败的情况……如果真的因为未知原因(例如CPU缺陷)而失败的话,你的返回值就不会因为这种未知原因而弄错么?
avatasia
2011-12-29 16:45:50 +08:00
@keakon 分析一下swap吧, 假如swap出错,可能什么原因呢? 内存占满,如果你中间使用了临时变量,这个临时变量没有stack分配内存,导致出错,那么你获得返回值,然后就可以进行出错处理,例如后面的操作不进行,输出日志,等待下一次继续运行。 我们平常为什么不考虑这些情况,那是因为我们的思维习惯都允许这种极限情况发生。
skydark
2011-12-29 16:49:44 +08:00
没有返回不意味着失去控制,或者说你为啥认为没有返回就失去控制了?
如果你担心交换失败,那还不如抛出异常,虽然我想象不出怎样失败,而且还是能返回返回值通告的那种失败。
另外语言有异。在Python里捕捉异常没有什么性能损失。
libei
2011-12-29 16:57:03 +08:00
the art of readable code pdf文件 页数不多,很实用。
keakon
2011-12-29 17:09:37 +08:00
@avatasia 这个临时变量的大小是sizeof(void*),优化情况下会是寄存器。函数调用时会分配足够多的栈空间(例如1MB),这是在编译期就由编译器保证的。更进一步,如果连sizeof(void*)的空闲内存都没有,当内存分配失败时,你如何获知失败并返回一个失败值?你根本没内存去捕捉异常哦。
Mr_Vangogh
2011-12-29 17:14:15 +08:00
"目前碰到的一个很严重的问题, 代码长了,改动的地方一多,就会忘掉某些东西,导致到处补漏"各个模块耦合太厉害了?考虑重构。

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

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

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

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

© 2021 V2EX