我看到了旧时的C语言疤痕

开发 后端
我知道,作为一个新语言学习者,学会用新的语言风格和思维习惯编程是很困难的。我记得当老师在课堂上教我们汇编语言时,很多人会先把作业用C语言写成,然后再写出汇编代码,因为他们更熟悉C语言。但是,如果你有了一定经验,而你的程 序中仍然有一些老的语言的痕迹,这说明你遇到了麻烦。
[[83207]]

一个月前,我正在写一个简单的应用,是用ruby去读pdf文件,不知道为什么,文件指针跑到了文件开始地址的前面。我不明白为什么会这样。于是,像往常一样,我到stackoverflow上发帖求助。得到的第一条回复是:

“你的代码有C语言的味道….”

有什么??进一步的阅读,我发现在ruby里有一个很方便的IO操作包,根本不需要使用getc(这是我的习惯用法)——除非在一些特殊情况下。

我想说的是,用一种新语言编程,在学会这种语言的正确语法前,你需要了解它的基本原理。当你说“我会XXX语言”时,你的意思并不是指知道它的语法。而是知道这种语言里有更好的算法实现方法和问题解决方案,否则,你学习这种新语言的意义在哪里呢?!

让我们来分析一个问题,假设我们需要找到一个文件的最后一行的开始处(这是我以前做过的一个任务)。

像我这样懂得一点C语言的人会这样写:

  1. fseek(fp,-1,SEEK_END); 
  2.                 do { 
  3.                      fseek(fp,-2,SEEK_CUR); 
  4.                 }while(fgetc(fp)!='\n'); 

用ruby也能写出类似的代码,让你一个新学习ruby的C程序员来写,他就会写出这样:

  1. i)   file.seek(-1,IO::SEEK_END) 
  2.        while file.getc != "\n" 
  3.              file.seek(-2,IO::SEEK_CUR) 
  4.        end 

但是,一个熟练的ruby程序员则会写成这样:

  1. ii)  buff = file.readlines 
  2.                  file.seek(-(buff.pop).length,IO::SEEK_END) 
  3.  
  4.             或 
  5.  
  6.            iii)  lastline = Elif.open("file.txt") { |f| f.gets } 
  7.              file.seek(-lastline.length, IO::SEEK_END) 
  8.        

对我来说,iii)是最好的实现方法,它能处理大型文件,不管日后它增长到多大。这个Elif工具包把文件切割成了很小的片段,把它们放到小的缓冲池里,分析完后从缓冲里清除掉。你可以看一下它的gem源文件。如果你研究源文件,你会发现,任何一个需要使用到的字符串对象方法都使用的非常聪明。

这只是一个简单的例子,来说明改变思维习惯是如何能巨大的提高你的代码效率。我知道,作为一个新语言学习者,学会用新的语言风格和思维习惯编程是很困难的。 我记得当老师在课堂上教我们汇编语言时,很多人会先把作业用C语言写成,然后再写出汇编代码,因为他们更熟悉C语言。但是,如果你有了一定经验,而你的程 序中仍然有一些老的语言的痕迹,这说明你遇到了麻烦。

所以,如果我学习一种新语言,过程会是:

原文链接:http://www.aqee.net/old-c-scars-i-see/

译文俩接:http://blog.bmahsh.com/old_c_scars_i_see.html

责任编辑:陈四芳 来源: 外刊IT评论
相关推荐

2017-06-15 08:52:36

数据分析可视化软件开发

2013-07-15 10:25:27

2020-09-20 17:50:38

编程语言PythonJava

2022-12-26 00:00:02

数据驱动业务

2017-06-14 18:04:10

2018-10-31 12:39:39

区块链电子证据安全

2024-03-07 09:40:37

2021-06-28 13:20:15

谷歌AI芯片

2010-08-19 15:48:06

DB2 diag.lo

2021-04-28 15:02:00

云计算华为云

2018-05-04 10:57:05

老农民

2023-02-10 13:57:41

2022-02-22 10:58:53

冬奥会5G运营商

2020-09-17 14:49:23

数据中心

2021-07-01 07:05:31

浏览器存储

2022-12-07 13:39:51

苹果造车

2021-05-10 19:17:54

GoInt128类型

2023-11-27 11:58:35

OpenAI人工智能

2024-03-20 12:43:57

点赞
收藏

51CTO技术栈公众号