迭代器

把 iterator 翻译成“迭代器”,很明显是收了数学术语中 iterate 翻译成“迭代”的影响。这样的结果,是让一个及其简单的概念显得复杂了许多,从而造成了不必要的学习门槛。小时候被数学老师刁难过的人,看到“迭代器”这种名词,恐怕都已经有点想躲着走了。

迭代这个词由来已久,随便举几个古文的例子吧:

  • 文選.張衡.東京賦:「於是春秋改節,四時迭代。」
  • 北周.庾信.哀江南賦序:「嗚呼!山岳崩頹,既履危亡之運,春秋迭代,必有去故之悲,天意人事,可以悽愴傷心者矣!」
  • 魏晋.陆机.齐讴行:「天道有迭代。人道无久盈。」

可以看到,这个词的意思基本上就是“交换替代”,季节轮回,

在数学中,把 iterate 翻译成“迭代”是贴切的,因为数学中的 iterate 操作,一般是重复调用一个函数,并且在每次调用完以后,把结果作为输入再次代入这个函数,“迭”是重复,“代”是代入。挺完美的。这里 iterate 是一个动词。

数学中不存在 iterator “迭代器”这一说法,这个词是计算机专业的人造出来的。我觉得造这个词的人也许根本没有参考数学术语,因为从其含义来看,可以说完全是风马牛不相及。编程中的 iterator 意思很简单,就是指一种对象,程序员可以用它来逐一访问容器中的内容,这个容器可以是列表,也可以是别的形式的容器型数据结构。

随便翻开一本字典,我们看到 iterate 的第一个解释都是“重复”,所以其实翻译成“遍历器”或者“重复器”都比翻译成“迭代器”贴切。参考一下日本的翻译,人家把 iterator 叫做“反復子”或者“繰返子”,就连既不懂日语,也不懂计算机编程的人,对这个词的意思也不会产生误解。然而,“迭代器”这一用法已经存在许多年,可以说已经约定俗成,无法纠正了。那么我们还是去适应吧。迭代器,迭代器迭代器迭代器。

例子:

英语:Iterate over a list. 翻译:对列表进行迭代。 意思:逐一取出列表元素。

英语:An iteration over a sequence using explicit iterators. 翻译:使用显式迭代器对一个序列进行了迭代操作。 意思:用显式语法定义一个可以进行重复取值操作的对象,然后使用这个对象,对一个序列进行了逐一取值的操作。

不管怎样,我还是要说一句,这个“迭代器”的翻译,就像是画了一条长了脚的蛇,然后让这条蛇爬到树上去捉鱼。

交換替代。 文選.張衡.東京賦:「於是春秋改節,四時迭代。」 北周.庾信.哀江南賦序:「嗚呼!山岳崩頹,既履危亡之運,春秋迭代,必有去故之悲,天意人事,可以悽愴傷心者矣!」 魏晋.陆机.齐讴行:「天道有迭代。人道无久盈。」