发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sun Apr 13 20:19:15 2008) 最近在看一个新项目的代码,有感。 例如看到一个函数调用,不能马上反应上来哪些传入参数会被修改,尤其code很长很多 ,记不住function signature的时候。 用之前的call-by-value,通过指针修改传入参数,函数调用看一眼参数列表,看到&基 本就能知道这个参数要被修改了。 还有带默认参数的函数也是,若有好几个默认参数,挺容易搞混的。 这些功能减少了写程序人的工作量,但是读程序的工作量却增加了。但我觉得现在对程 序员来说读代码也越来越重要。 IDE要有添加信息功能就好了。比如在函数调用里加上哪些参数是call-by-ref,哪些是 启用了参数默认值等。 另外有没有度量程序可读性方面的研究?比如给定源代码,分析一遍之后给出可读性分 析,再给些改进建议什么的。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 192.94.]
发信人: coconut (向唐僧大师学习中), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sun Apr 13 20:28:40 2008), 站内 你的 IDE sucks。甚至 Eclipse 都可以看这 signature 。 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 最近在看一个新项目的代码,有感。 : 例如看到一个函数调用,不能马上反应上来哪些传入参数会被修改,尤其code很长很多 : ,记不住function signature的时候。 : 用之前的call-by-value,通过指针修改传入参数,函数调用看一眼参数列表,看到&基 : 本就能知道这个参数要被修改了。 : 还有带默认参数的函数也是,若有好几个默认参数,挺容易搞混的。 : 这些功能减少了写程序人的工作量,但是读程序的工作量却增加了。但我觉得现在对程 : 序员来说读代码也越来越重要。 : IDE要有添加信息功能就好了。比如在函数调用里加上哪些参数是call-by-ref,哪些是 : 启用了参数默认值等。 : ................... -- Imagine the most witty and concise verbal gem ever uttered. Now imagine I said it, and quoted it here. ※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 71.105.]
发信人: goodbug (好虫), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sun Apr 13 21:11:46 2008), 转信 俺觉得都没有可读性最好,Java只能传值进去,接口很清晰。 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 最近在看一个新项目的代码,有感。 : 例如看到一个函数调用,不能马上反应上来哪些传入参数会被修改,尤其code很长很多 : ,记不住function signature的时候。 : 用之前的call-by-value,通过指针修改传入参数,函数调用看一眼参数列表,看到&基 : 本就能知道这个参数要被修改了。 : 还有带默认参数的函数也是,若有好几个默认参数,挺容易搞混的。 : 这些功能减少了写程序人的工作量,但是读程序的工作量却增加了。但我觉得现在对程 : 序员来说读代码也越来越重要。 : IDE要有添加信息功能就好了。比如在函数调用里加上哪些参数是call-by-ref,哪些是 : 启用了参数默认值等。 : ................... -- ※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 99.227.]
发信人: thrust (WoW 无限期冬眠中), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sun Apr 13 21:13:32 2008), 转信 call-by-ref本来就不是让你滥用的. 你看看STL的定义, 有几个call-by-ref的? 可以数得出来的: auto_ptr, 这个本来使用就很受限制. iostream里显式或隐式的extractor, >>或者getline之类, 这些很难搞错. swap(), 这个几乎不可能搞错. 剩下的, 基本上全是call-by-const-ref. 还是那句话, 语言允许的东西,不代表可以滥用. 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 最近在看一个新项目的代码,有感。 : 例如看到一个函数调用,不能马上反应上来哪些传入参数会被修改,尤其code很长很多 : ,记不住function signature的时候。 : 用之前的call-by-value,通过指针修改传入参数,函数调用看一眼参数列表,看到&基 : 本就能知道这个参数要被修改了。 : 还有带默认参数的函数也是,若有好几个默认参数,挺容易搞混的。 : 这些功能减少了写程序人的工作量,但是读程序的工作量却增加了。但我觉得现在对程 : 序员来说读代码也越来越重要。 : IDE要有添加信息功能就好了。比如在函数调用里加上哪些参数是call-by-ref,哪些是 : 启用了参数默认值等。 : ................... -- ※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 75.61.]
发信人: jejune (孑孓), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sun Apr 13 23:56:48 2008) 楼主肯定没有尽量使用const的习惯 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 70.53.]
发信人: DBECera (按钮), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 00:25:43 2008) 同感。 【 在 jejune (孑孓) 的大作中提到: 】 : 楼主肯定没有尽量使用const的习惯 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 75.41.]
发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 01:02:35 2008) 我当然知道Eclipse可以这样。我用slickedit,F12跳到signature也不难。 但是要启用这个功能有个假定,就是你知道这个函数可能有call-by-ref或者默认参数 ,然后你才会把光标移过去确定是什么。而我期望的是在对代码没有多少了解的情况下 能一目了然地读过去。 BTW, Eclipse CDT的indexer不是一般的弱。凭这一点就可以淘汰了。 【 在 coconut (向唐僧大师学习中) 的大作中提到: 】 : 你的 IDE sucks。甚至 Eclipse 都可以看这 signature 。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 24.6.]
发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 01:04:51 2008) 我觉得语言的演进不能从总是“可写性”做改进,这样往往牺牲了“可读性” 【 在 goodbug (好虫) 的大作中提到: 】 : 俺觉得都没有可读性最好,Java只能传值进去,接口很清晰。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 24.6.]
发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 01:06:13 2008) 你说的是reference的另一个功用,即节省参数传递时间。跟我说的是两回事。 【 在 jejune (孑孓) 的大作中提到: 】 : 楼主肯定没有尽量使用const的习惯 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 24.6.]
发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 01:14:23 2008) 这么说吧。如果你自己的代码需要在函数中修改外部变量的值,你是认为用call-by- ref,将此变量按变参传入呢,还是用指针? 当然还有个观点是尽量用返回值在函数调用处修改。但如果有好几个变量的话挺麻烦的。 【 在 thrust (WoW 无限期冬眠中) 的大作中提到: 】 : call-by-ref本来就不是让你滥用的. 你看看STL的定义, 有几个call-by-ref的? : 可以数得出来的: : auto_ptr, 这个本来使用就很受限制. : iostream里显式或隐式的extractor, >>或者getline之类, 这些很难搞错. : swap(), 这个几乎不可能搞错. : 剩下的, 基本上全是call-by-const-ref. : 还是那句话, 语言允许的东西,不代表可以滥用. -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 24.6.]
发信人: DBECera (按钮), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 02:27:21 2008) 如果你自己的代码需要在函数中修改外部变量的值, 用call-by-ref, no const, 这样 别人一看就知道你要修改或更新这个变量值. 否则就call-by-ref const, 这样传递变 量自身不做变化. 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 这么说吧。如果你自己的代码需要在函数中修改外部变量的值,你是认为用call-by- : ref,将此变量按变参传入呢,还是用指针? : 当然还有个观点是尽量用返回值在函数调用处修改。但如果有好几个变量的话挺麻烦 的。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 75.41.]
发信人: thrust (WoW 无限期冬眠中), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 02:33:45 2008), 转信 基本上, 函数不应该修改外部变量的值, 除了返回之外. 如果有好几个变量的话, 就应该有个结构 或者就用指针显式的标明这是call-by-ref 除非函数名就明确指出这是call-by-ref, 比如swap(a, b), 或者trim_left_space( string), sort_in_place(array)等等 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 这么说吧。如果你自己的代码需要在函数中修改外部变量的值,你是认为用call-by- : ref,将此变量按变参传入呢,还是用指针? : 当然还有个观点是尽量用返回值在函数调用处修改。但如果有好几个变量的话挺麻烦 的。 -- ※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 75.61.]
发信人: vvs (vvs1991), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Mon Apr 14 11:31:20 2008), 转信 我同意thrust的意见。 特别是现在OO的程序,你要改变量,应该调用人家的method去 改。 带副作用的函数很不爽,不美。 【 在 thrust (WoW 无限期冬眠中) 的大作中提到: 】 : 基本上, 函数不应该修改外部变量的值, 除了返回之外. : 如果有好几个变量的话, 就应该有个结构 : 或者就用指针显式的标明这是call-by-ref : 除非函数名就明确指出这是call-by-ref, 比如swap(a, b), 或者trim_left_space( : string), sort_in_place(array)等等 : 的。 -- ※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 64.235.]
发信人: southwood (minimax), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Thu Apr 17 22:38:37 2008) C#在这些问题上处理的比较好,声明调用都是显式的。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 127.0.]
发信人: floyd (新长征路上的痞子), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Sat May 10 17:44:50 2008) 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : 最近在看一个新项目的代码,有感。 : 例如看到一个函数调用,不能马上反应上来哪些传入参数会被修改,尤其code很长很多 : ,记不住function signature的时候。 : 用之前的call-by-value,通过指针修改传入参数,函数调用看一眼参数列表,看到&基 : 本就能知道这个参数要被修改了。 : 还有带默认参数的函数也是,若有好几个默认参数,挺容易搞混的。 : 这些功能减少了写程序人的工作量,但是读程序的工作量却增加了。但我觉得现在对程 : 序员来说读代码也越来越重要。 : IDE要有添加信息功能就好了。比如在函数调用里加上哪些参数是call-by-ref,哪些是 : 启用了参数默认值等。 : ................... 这是个问题, 不过与其怪语言, 不如怪写程序的人. 要不改参数, 多用CONST不就行了? 想起来汇编够难读的, 可有人能写的通俗易读. -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 70.68.]
发信人: gandjmitbbs (Nothing), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Fri May 16 05:23:17 2008) thrust老大这是标准教科书回答啊。呵呵。 主要有时候是代码演进中打补丁累计多了的问题。真要重设计也不现实。毕竟老代码很 稳定。 【 在 vvs (vvs1991) 的大作中提到: 】 : 我同意thrust的意见。 特别是现在OO的程序,你要改变量,应该调用人家的method去 : 改。 : 带副作用的函数很不爽,不美。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.207.]
发信人: acectl (磨), 信区: Programming 标 题: Re: call-by-ref降低了C++程序可读性 发信站: BBS 未名空间站 (Fri May 16 11:58:05 2008) 这其实就是现有软件开发工业模式的恶果:觉得CS简单,用些没什么基础的人,觉得随便 怎么改一下就可以用了,多年后就积累出问题来了.老是赶deadline,好象年轻人就能加 班,不去仔细思考怎么做最好,凡是都是勉强凑活过去,以后就知道这种匆忙的bug fix结 果是产生了更多的bug. 【 在 gandjmitbbs (Nothing) 的大作中提到: 】 : thrust老大这是标准教科书回答啊。呵呵。 : 主要有时候是代码演进中打补丁累计多了的问题。真要重设计也不现实。毕竟老代码很 : 稳定。 -- ※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 71.251.]