回忆多年前与C程序员共事后的总结

我曾在某大型项目组与某些高端人事共事(当然我只是个外包),从代码变量命名上可以看出,对方是做C出身,半路出家转JAVA,除了用下划线命名之外,做C的程序员在很多细节上表现与JAVA的编程习惯不一致。

  1. 不善于利用异常
    C语言中经常出现这样的代码

/***
返回:1代表成功,0代表失败
***/
int do_some_thing(int i ){
	....
}

int stat = do_some_thing(int i);

if(!stat){

}

C语言或者像Go的语言中,函数经常返回一个int类型,代表成功或失败。但java中往往利用异常机制。以下是我在H项目组中在Service层中常见的代码片断

Result doSomeThing(...) throws SysException

Result表明成功失败的状态。还有失败原因,以及正确时返回的数据。这个接口很含糊:它申明了一个业务异常,但在编码时经常不知道是抛异常好,还是直接返回Result好,很多做C的返回了Result,他们也不管事务会不会rollback。很多做java的选择了抛异常。

2.从不在condition中调用方法

以下是我在项目中的读流的程序片断,

int i ;
while((i=stream.readInt())!=-1){

}

以上的代码在java中非常普遍,但在H项目中却要求改成:

int i = stream.readInt();
while(i !=-1){
	....
	i = stream.readInt()
}

c语言中的condition往往不包含方法调用之类的,但在java中很常见,而且这样写可以减少很多代码,以下是java线程池中的代码片断

  if (isRunning(c) && workQueue.offer(command)) {
           
        }

如果禁用Condition中的方法调用,程序多出的可不止一行:

bool isRun = isRunning(c);
if(isRun){
	bool offered =  workQueue.offer(command);
	if(offered){
		...
	}
}

不只多了两个变量,为了完成 && 的逻辑,还要添加一层嵌套。

3.不知道面向对象的专业知识。

在H公司项目组,我做过唯一有成就感的事情是利用面像对象的那套思想,重构了项目中的计费模块。在视检时,项目组H公司的人分成两派,java底子出身的人,很兴奋地看到我用到了工厂和策略模型,没有用到那么多if-else。C出身的一头雾水,他们平时很少用接口,能new的对像就不交给spring管理。
我以前以为或许是C语言没有面向对象的那套东西。但我在了解Linux内核编程知识时,经常看到某个结构体包含了一堆函数指针。我就明白了,原来C的思想中(或者说底层系统中),也有面向对象的概念,只不过实现起来比较麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值