1
avatasia OP 再增加个问题, 返回类型为void的方法有什么意义? 如果做一件事情,肯定要知道结果的,想不通
|
2
zicjin 2011-12-29 14:32:36 +08:00
1 建议看看进攻型代码,可以尽量减少if else嵌套。
2 抛出异常也是一种返回结果,而且是一种更优秀的设计 |
3
myrual 2011-12-29 14:34:00 +08:00
从一开始就按着业务逻辑写代码。而不是实现逻辑写。
可能有帮助。 另外就是经常重构代码,从最简单的命名开始,好的命名可以有效的减少混乱。 |
4
keakon 2011-12-29 14:37:03 +08:00
有的函数确实不需要返回值啊,比如swap
|
5
leiz 2011-12-29 14:39:30 +08:00
|
6
kojp 2011-12-29 14:39:40 +08:00
建议 import this 一下~~~
|
8
myrual 2011-12-29 14:48:34 +08:00
@avatasia 知道结果的方法有很多种,除了函数返回结果,还可以传入一个指针/引用,用于存取结果。
返回多个结果的函数似乎不是普遍存在的。 |
9
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. |
10
avatasia OP |
12
zicjin 2011-12-29 16:16:52 +08:00
没看过think in c++,但写过几年代码的我从来不觉得异常有什么好,或者性能问题,真有性能问题那也是框架设计的问题。
没有返回为什么不能算是一种结果?它代表一切正常的结果。 你纠结在这些字眼里还不如多写点大型架构切身体验一下。 |
14
avatasia OP @zicjin 貌似这个就是大型架构的基础啊,例如windows消息机制,核心就是sendmessage postmessage,就算调用postmessage,那么这个postmessage的操作如何保证成功。
|
15
keakon 2011-12-29 16:38:10 +08:00
@avatasia swap是交换引用或指针,逻辑上不可能出现失败的情况……如果真的因为未知原因(例如CPU缺陷)而失败的话,你的返回值就不会因为这种未知原因而弄错么?
|
16
avatasia OP @keakon 分析一下swap吧, 假如swap出错,可能什么原因呢? 内存占满,如果你中间使用了临时变量,这个临时变量没有stack分配内存,导致出错,那么你获得返回值,然后就可以进行出错处理,例如后面的操作不进行,输出日志,等待下一次继续运行。 我们平常为什么不考虑这些情况,那是因为我们的思维习惯都允许这种极限情况发生。
|
17
skydark 2011-12-29 16:49:44 +08:00
没有返回不意味着失去控制,或者说你为啥认为没有返回就失去控制了?
如果你担心交换失败,那还不如抛出异常,虽然我想象不出怎样失败,而且还是能返回返回值通告的那种失败。 另外语言有异。在Python里捕捉异常没有什么性能损失。 |
18
libei 2011-12-29 16:57:03 +08:00
the art of readable code pdf文件 页数不多,很实用。
|
19
keakon 2011-12-29 17:09:37 +08:00
@avatasia 这个临时变量的大小是sizeof(void*),优化情况下会是寄存器。函数调用时会分配足够多的栈空间(例如1MB),这是在编译期就由编译器保证的。更进一步,如果连sizeof(void*)的空闲内存都没有,当内存分配失败时,你如何获知失败并返回一个失败值?你根本没内存去捕捉异常哦。
|
20
Mr_Vangogh 2011-12-29 17:14:15 +08:00
"目前碰到的一个很严重的问题, 代码长了,改动的地方一多,就会忘掉某些东西,导致到处补漏"各个模块耦合太厉害了?考虑重构。
|
21
Ricepig 2011-12-29 17:36:07 +08:00
@avatasia @Mr_Vangogh 除了耦合厉害之外,还有一个可能是重复代码太多,没有做很好的抽象。
|