印度人的代码

蝈蝈俊 2001-02-16 12:22:00
以前在论坛上听说印度人的代码拖塌冗长,这两天在看
美国印度人的代码,发现果真不错,看得我都快找不到北了 : )

这是一段处理文本的Java代码,先请看美国印度人的代码:

if(osname.startsWith("Windows"))
{
if(runcmd.stdout == null)
return null;
StringTokenizer stringtokenizer = new StringTokenizer(runcmd.stdout.toString());
Hashtable hashtable = null;
Object obj = null;
String s2 = null;
String s5 = null;
while(stringtokenizer.hasMoreTokens())
{
String s6 = stringtokenizer.nextToken();
if(s6.equals("Type"))
break;
}
while(stringtokenizer.hasMoreTokens())
{
String s1 = stringtokenizer.nextToken();
if(stringtokenizer.hasMoreTokens())
{
s2 = stringtokenizer.nextToken();
if(stringtokenizer.hasMoreTokens())
s5 = stringtokenizer.nextToken();
}
if(s5 == null || !s5.equals("invalid"))
{
if(hashtable == null)
hashtable = new Hashtable();
if(s1 != null && s2 != null && !s2.equals("00:00:00:00:00:00"))
hashtable.put(s1, s2);
}
}
return hashtable;
}

这是我对整个程序结构调整后的部分代码:

if(strOSName.startsWith("Windows"))
{
StringTokenizer stringtokenizer = new StringTokenizer(strCommandResult);
String[] strValue = new String[3];

while(stringtokenizer.hasMoreTokens() && (! stringtokenizer.nextToken().equals("Type")))
{//发现"Type"关键字后退出}
while(stringtokenizer.hasMoreTokens())
{
for(int i = 0; i < 3; i++)
if(stringtokenizer.hasMoreTokens())
strValue[i] = stringtokenizer.nextToken();

if(strValue[2] == null || !strValue[2].equals("invalid"))
if(strValue[0] != null && strValue[1] != null && !strValue[1].equals("00:00:00:00:00:00"))
hashtable.put(strValue[0], strValue[1]);
}
}

大家看了之后感觉如何?

转贴之http://seforum.yeah.net 论坛的邮件列表

...全文
1716 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
keiga 2001-02-23
  • 打赏
  • 举报
回复
规模较大的软件最注重的是安全,易读,易维护,特别是大型系统,第一种的优点就更突出了。第二种方法甚至是禁止的。
yoursoft 2001-02-23
  • 打赏
  • 举报
回复
印度人第一行 == null的判断应该有,不过变量过多,反而不易看懂,变量过多意味着关系连接便复杂,我不喜欢.变量过多反而容易出错.(原因:数据传送的中间变量过多会导致更多的机会更改此数据而导致错误的机会增多)
印度人的while循环中的条件语句简单化(与下一个while保持一致),我喜欢.这对读懂程序有帮助.他传达的意思很明确,第一个while遍历Tokens,找出符合条件的一个.
在美国写程序的中国人,同样也会这样写程序的,也许写的更出色.因为美国的公司更讲究软件工程学,讲究风格,讲究集体开发的规范.这是公司要求.
:)
haichuang 2001-02-22
  • 打赏
  • 举报
回复
团体开发:第一种代码(适合做大型工程)
个人开发:第二种代码(适合做共享软件)
vampirelord 2001-02-22
  • 打赏
  • 举报
回复
没有任何意义。
agz123 2001-02-19
  • 打赏
  • 举报
回复
毫无疑问真正的专业程序员是第一种,后面的根本还没入门.
pc00000 2001-02-19
  • 打赏
  • 举报
回复
hehe ......
if语句最简单嘛!
niceguy123 2001-02-19
  • 打赏
  • 举报
回复
要比代码精炼,是后一种;
但编码更重要的是是否易读,是否易维护修改!!!(在实现功能的前提下)
现在软件开发已进入产业化阶段,不再是几个手工作坊的老师傅比手艺的时代了。
记得几年前,我到新疆去玩,买了把当地有名的“英吉沙”小刀,问一个新疆朋友
这刀好不好用,他说这刀是漂亮,手工制作的,收藏还不错,但说到实用,它比内地
的乡镇企业的产品都不如。
现在的大多数的软件开发工作,都是按软件工程方法的分工合作的团队开发;做出易读,
易维护的代码,对于系统的功能变更、运用维护甚至于开发人员的变动的对应,都是
基本要求;
炫耀个人技巧,编出一段精炼的代码,可以娱己,但更应考虑对别人是否好用,
是否整体效率最高!
蝈蝈俊 2001-02-19
  • 打赏
  • 举报
回复


老印的代码易于测试,或可测性,可维护性较好,也易于用自动测试,写test case
时,case数据能够精简。
越是标准化高的东西,越是简单可行,越是高度复杂的越难标准化,
只要实现的功能一样,为什么不选择看起来罗嗦,但标准化好可测性高可维护性较好的
代码?
英国人的代码也是如此,但他们更具有一些条理性,也许与他们的民族习惯有关。
国内许多程序员的代码一般技巧,技术上处理较好,但有许多自作聪明在里面,多数不

考虑自己的代码的标准化,可测性,与可维护性,我过去也是这样。
也就是说一个国人开发,也许很好,
一群国人开发,就很难。过去是WPS的个人开发时代,而现在是团队合作时代。
团队合作需要管理,不光是中国的软件业,就是许多其它行业的管理仍远远落后于别
人。


----- Original Message -----
From: shun
To: selab@yahoogroups.com
Sent: Thursday, February 15, 2001 11:06 PM
Subject: 答复: [selab] 印度人的代码

++++++++++++++++++++ 诚邀您加盟SE Forum Team ++++++++++++++++++++
本论坛主页在http://seforum.yeah.net
You receive this message because you have subscribed to the SE
Forum China.
To Post a message, send it to: selab@yahoogroups.com
To Subscribe, send empty messageto: selab-subscribe@yahoogroups.com
To Unsubscribe, send a blank message to: selab-unsubscribe@yahoogroups.com



haor 2001-02-19
  • 打赏
  • 举报
回复
比较认同第一种写法,第二种比较危险,也没必要。
shouqb 2001-02-18
  • 打赏
  • 举报
回复
同意楼上的,印度人写的代码易读,而且对于写代码和看代码的人的要求也很低,这样对于完成作一项工程来说到了后期维护和查错的时候就会非常容易,后面那位高手写的代码虽然简洁,但读起来.....我只是说相比之下.

只有简单易读的程序才更适合大工程的开发!
scissor 2001-02-18
  • 打赏
  • 举报
回复
我觉得印度代码虽然不错,但属于教学水平,我上学时学BASIC就那么编

国产代码嘛,后来常见,都是老头子们把一段用了几十年的代码浓缩后而成,只用于向你展示一下他的水平。

再说,人家编好你精简,这叫什么比法!
daiguan 2001-02-18
  • 打赏
  • 举报
回复
如果代码太长,即使看的懂我也会晕,因为我的内存太小,其实关键要找到易懂与简洁的最佳结合点,但我还是不赞成太长,因为我得化更多的时间去看代码。而没有思考的时间,我愿意化更多的时间去思考,而不是去读没意义的代码
skybblue 2001-02-17
  • 打赏
  • 举报
回复
我认为印度人写的代码还是不错的,条理清楚,逻辑紧密。这样的代码除了易用,还比较稳定,出现错误也比较容易查找。
aoao 2001-02-16
  • 打赏
  • 举报
回复
晕~
panan 2001-02-16
  • 打赏
  • 举报
回复
阿三的看得更明白
舟中夜起 2001-02-16
  • 打赏
  • 举报
回复
我喜欢印度人的代码风格
蝈蝈俊 2001-02-16
  • 打赏
  • 举报
回复
转:

先看程序:
印度人代码中,有不少防御性代码,如,if(runcmd.stdout == null) return null;等等;
这些代码看上去冗余,却是必要的。
保存值时,印度人使用的是单个变量,而kent zeng使用字符串数组。对于数目
固定且值又不大的个数(3)来说,不用字符串数组更为合理。
说实话,印度人的代码的确比你改进后的要好一点。当然,也不是说他的好到哪
里去,比如,第一个while就可以如你所修改的那样改进。

上次看论坛上有位大侠说,看一个程序员,也许以后不是问他程序如何如何写,而
是文档如何如何写了。
对于这个不算复杂的程序段,考虑怎么样写出来的代码“好”,依我看,是没有必
要的。而怎么样用一段注释,来说明这个程序段完成什么工作,包括正常情况、异常
情况、边界条件、对输入参数的影响等等,才是更为重要的。

印度软件水平,是强在软件工程的水平上。而不是编码的水平。代码人人会写,软件
就不是谁都能做好的了。
-----原始邮件-----
发件人: Kent Zeng [mailto:zczc365@etang.com]
发送时间: 2001年2月16日 11:53
收件人: selab@yahoogroups.com
主题: [selab] 印度人的代码


以前在论坛上听说印度人的代码拖塌冗长,这两天在看
美国印度人的代码,发现果真不错,看得我都快找不到北了 : )

这是一段处理文本的Java代码,先请看美国印度人的代码:

if(osname.startsWith("Windows"))
{
if(runcmd.stdout == null)
return null;
StringTokenizer stringtokenizer = new StringTokenizer(runcmd.stdout.toString());
Hashtable hashtable = null;
Object obj = null;
String s2 = null;
String s5 = null;
while(stringtokenizer.hasMoreTokens())
{
String s6 = stringtokenizer.nextToken();
if(s6.equals("Type"))
break;
}
while(stringtokenizer.hasMoreTokens())
{
String s1 = stringtokenizer.nextToken();
if(stringtokenizer.hasMoreTokens())
{
s2 = stringtokenizer.nextToken();
if(stringtokenizer.hasMoreTokens())
s5 = stringtokenizer.nextToken();
}
if(s5 == null || !s5.equals("invalid"))
{
if(hashtable == null)
hashtable = new Hashtable();
if(s1 != null && s2 != null && !s2.equals("00:00:00:00:00:00"))
hashtable.put(s1, s2);
}
}
return hashtable;
}

这是我对整个程序结构调整后的部分代码:

if(strOSName.startsWith("Windows"))
{
StringTokenizer stringtokenizer = new StringTokenizer(strCommandResult);
String[] strValue = new String[3];

while(stringtokenizer.hasMoreTokens() && (! stringtokenizer.nextToken().equals("Type")))
{//发现"Type"关键字后退出}
while(stringtokenizer.hasMoreTokens())
{
for(int i = 0; i < 3; i++)
if(stringtokenizer.hasMoreTokens())
strValue[i] = stringtokenizer.nextToken();

if(strValue[2] == null || !strValue[2].equals("invalid"))
if(strValue[0] != null && strValue[1] != null && !strValue[1].equals("00:00:00:00:00:00"))
hashtable.put(strValue[0], strValue[1]);
}
}

大家看了之后感觉如何?



++++++++++++++++++++ 诚邀您加盟SE Forum Team ++++++++++++++++++++
本论坛主页在http://seforum.yeah.net
You receive this message because you have subscribed to the SE
Forum China.
To Post a message, send it to: selab@yahoogroups.com
To Subscribe, send empty messageto: selab-subscribe@yahoogroups.com
To Unsubscribe, send a blank message to: selab-unsubscribe@yahoogroups.com



蝈蝈俊 2001-02-16
  • 打赏
  • 举报
回复
只要注释好,我还是喜欢下面的
trtror 2001-02-16
  • 打赏
  • 举报
回复
有个性
wt13 2001-02-16
  • 打赏
  • 举报
回复
拒绝发表任何评论





(因为我没看 ^^)
加载更多回复(6)

1,268

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧