乐者为王

Do one thing, and do it well.

checked/unchecked应该翻译成什么?

翻译有关Java异常的文章时,总是犹豫是否该把checked/unchecked也翻译过来。原因是,不是很清楚该如何优雅传神地翻译这两个单词。

《Java核心技术》将它们翻译成“已检查/未检查”。《Java编程思想》和《Effictive Java中文版》则翻译成“被检查的/不检查的”。至于技术文章的翻译更是花样百出,有“检测/非检测”、“可检测/非检测”、“可查/不可查”、“受查/非受查”、“检查型/非检查型”、“检查/非检查”等。

到底该翻译成什么呢?在回答这个问题前,让我们先确定什么是checked/unchecked异常?

exception-hierarchy

上图是Java中的异常层次结构图。Java语言规范将派生自RuntimeException类和Error类的所有异常称为“unchecked异常”,其它的异常称为“checked异常”。

The unchecked exception classes are the run-time exception classes and the error classes.

The checked exception classes are all exception classes other than the unchecked exception classes. That is, the checked exception classes are Throwable and all its subclasses other than RuntimeException and its subclasses and Error and its subclasses.

并且,在编译时编译器会检查程序是否为所有的“checked异常”提供处理器。

This compile-time checking for the presence of exception handlers is designed to reduce the number of exceptions which are not properly handled.

从上述的描述可以得出,“checked异常”和“unchecked异常”是两种异常类型,且“checked异常”隐含有必须要检查的思想。

紧紧围绕这些描述,细细地思考和比较,个人认为:1. 《Java核心技术》的翻译存在问题,“已检查”和“未检查”说明的是异常的检查状态,没有表达出异常的分类这个概念。2. 《Java编程思想》和《Effictive Java中文版》的翻译则正确地表达了异常的分类,但“被检查”翻译的有点无厘头,如果能改成“要检查”则会更好,缺陷是连接“异常”这个词组后是短语,而非名词,读来费劲,也不上口;如果去掉“的”的话,后者会有歧义,听起来像是命令。3. “检测/非检测”和“检查/非检查”是同个意思。4. “可检测”这个翻译看上去似乎表示异常是可以检查的,和Java语言规范要求的该类异常必须要检查不符。5. “可查/不可查”也是如此。6. “受查/非受查”的翻译则有些莫名其妙的感觉。7. “检查型/非检查型”翻译的很好,既表达了异常的分类,也表达了一种异常是要检查的,另一种异常是不要检查的意义,只是前者还缺少点强制的意味。

分析到这里,结果已经是不言而明。“要检查的/不检查的”和“检查型/非检查型”是两种更好的翻译,都能把Java语言规范对checked/unchecked异常的描述尽量地表述出来。而后者在实际使用中更为简洁适宜。

接下来的事情就是把以前译文中未翻译的checked/unchecked修改成“检查型/非检查型”。在以后的翻译中也继续使用这个翻译结果,除非能找到更好的表述方式。

Comments