为什么使用C [2]

2008-02-23 05:40:59来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  但是,换个角度想想,即使在这些领域,程式员在他们的代码中不使用那些高水平的抽象,还是有他们应该使用C 的理由。为什么呢?因为您的代码不使用类和模板并不意味着不使用类库。考虑任何便捷的C 类库工具(即将有校准扩展tr1/tr2)的实用性,我认为在这些情况下,有很充分的理由选择C ——编码的时候您能够仍然使用C的形式(以任何您想要的方式来保持KISS)。同时,您还能够使用强大的C 类库(例如,STL标准模板库,tr1/tr2组件等)。最终,就会发现这件可能会被很多人忽略的事情——有时KISS依靠抽象。我想,Matthew Wilson在他的新书“Extended STL,Vol1”的序言中,极其透彻地阐明了这个观点。书中提到了两段代码,分别用C和C 编写:

//C代码
DIR* dir = opendir(".");
if(NULL != dir)
{
struct dirent* de;
for(; NULL != (de = readdir(dir)); )
{
struct stat st;
if( 0 == stat(de->d_name, &st) &&
S_IFREG == (st.st_mode & S_IFMT))
{
remove(de->d_name);
}
}
closedir(dir);
}

//C 代码
readdir_sequence entries(".", readdir_sequence::files);
std::for_each(entries.begin(), entries.end(), ::remove);
And it’s even simpler in C 09:
// C 09代码
std::for_each(readdir_sequence(".", readdir_sequence::files), ::remove);

  我想,这能很清楚地说明,为什么即使人们无需使用类和模板的时候还是应该使用C ——您会发现便捷的C 类库是多么有用。类似地,假如一个高效的容器(或一个巧妙的指针)能够使您摆脱任何手工操作内存的麻烦工作,那么,更有什么理由要使用那些原始的malloc/free?假如一个好的string类(我不是在说std::string;人人都知道这不是C 做的最好的)或regex类能够使您摆脱任何您看都不想看的混乱的字符串处理代码,那么更有什么理由要选择手动做这件事情呢?假如一个“transform”(或‘for_each’)语句能够如此简单明了地一行就完成您的工作(当然,我知道C 做这件事需要lambda函数的支持),那么,更有什么理由要手动写for-loops循环?假如高定制的函数真的能实现您想要的功能,那么,更有什么理由使用笨拙的工作区来完成同样的事务呢?

  KISS并不意味着“粗糙”;KISS的意思是为您的工作选择最适合的工具,“最适合”意味着您所使用的工具能尽可能直接(和简洁)的帮助您表达您的想法。只要他不影响代码的可读性和易懂性。

  现实问题

  人们可能会说C 很容易会用错,而相反,C通常更容易管理和操控。一个中等水平的C 程式员可能会写出一大串联系紧密的类,而很快这些类就会变成一堆垃圾。但这实际上只是个别情况。一方面,在任何面向对象语言中都会经常发生这样的事情。总是有一些程式员,他们敢于在类之上再定义类,而他们甚至还不知道什么是HAS-A和IS-A;他们学习了任何定义一个类和从其他类继承一个类的语法,他们就觉得掌控了OOP的本质。另一方面,为什么问题会出现在C 中,是因为C 有很多阻止设计的复杂之处,是因为C 如此灵活,以至于每个用C 解决的问题都有很多可选的解决方案(考虑任何的GUI类库),以至于权衡选择哪种解决方案就成了艰巨的工作。C 的附属复杂性是个历史遗留问题,C 0X做了多番努力试图摆脱这个问题;关于设计的灵活性并不是一件坏事——假如您考虑到他能够帮助好的设计师做出好的设计;假如有人谴责他,因为这样浪费了自己很多脑细胞,那这只是个人问题,而不是语言问题,或许这样的人就不应该负责做设计。假如您担心您的C 编程伙伴因为受这些高水平特征的诱惑而使得您的工程代码一团遭,那么,或许您应该建立一个编码标准并强制执行他(或您能够遵循the collective wisdom,或坚持C规范,或带有C 类的C规范),而不是因为存在风险而退缩放弃(政策能够避免风险),因为假如不这样做,您将再也不能接触任何C 类库

  另一方面,存在着最重要的心理上问题——假如一个语言中存在一个稀奇古怪的性质,那么最终就会有人发现他,然后人们就会被他吸引,这就会吸引那些本来在努力做一些有用的事的人的精力(有点像墨菲法则),不要去打扰那些正在做完美解决方案的人。人们天生就会被一些稀有资源吸引。结论就是:诀窍和稀奇古怪的性质就是稀有资源,所以会引起人们的注意,更不必说掌控一种诀窍能够使人感觉自己和众不同。糟糕的是,即使是没有价值的诀窍也会引起人们的强烈注意。

[1] [2] [3]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 为什么使用C [3]

下一篇: 分部方法:应该纳入到C#中吗?

热门词条
热门标签