「重載」的正確讀音是什麼?

函數或方法的「重載」是面向對象程序設計的重要概念之一,指「在同一作用域中指定多個同名函數」(MSDN)。「重載」一詞翻譯自英文"overload"。根據韋氏詞典,其原意是「過度地填或裝」。那麼問題來了:「重載」二字應該如何發音?chong2zai3看似是最順口的讀法,但事實上zai3指「年」或「記載」,而zai4才是「承載」、「裝載」的意思,因此無疑zai4是「載」的正確發音。但「重」又應該如何讀呢?「重複」「多重」符合「多個相同名稱」之意;但"overload"一詞和「過重」「超載」密切相關,取zhong4音,將「多個同名函數」理解成「這個名字承載的比平常多,就像超重了一樣」似乎也未嘗不可。


謝邀。

我見到的大部分人(包括我自己)都是念 chong2zai3 的。

「載」按理說應該第四聲,但是「載」的整個第四聲都在消亡中,並不是程序員特別要讀錯它。參見:「下載」一詞讀音會隨著時代變化還是堅持? - 漢語

而「重」到底應該念chong2還是zhong4?理論上要問最初創造這個譯名的人是怎麼想的。問題是現在已經不可考到底是誰首創了這個譯名。

我猜測也許最初的譯者就是想用chong2。如果要直接表達 overload 的本意,那麼直接用 超載 或 過載 即可,沒有必要用生造的「zhong4載」。實際上確實有人翻譯為「過載」。當用「chong2載」時,實際上是用其「重複使用名字」的意思。

當然,「重載」這個譯名實際上挺糟糕。因為很容易跟 reload(重新載入)混淆。同時也很容易跟 override (覆蓋、重寫)混淆。話說回來,英文原詞(override、overload、reload)本來也長得挺像的。所以,比較徹底的解決方案是徹底換用其他名詞。比如 override 改用「動態單分派」,overload 改用「靜態多分派」,嘿嘿。


首先,over 是覆蓋的意思,不是過重的意思,所以念chong2沒問題

其次,load,對應是裝載,載入,應該念zai4


幾年前見到這個詞的時候,以為讀chong載。這幾年沒有聽過任何人讀個這個詞(本人機械專業)。直到今天看到百度百科說這個詞的讀音是zhong載,懵掉了。

重載方法,英文單詞對應的是overloaded method。overloaded是什麼意思呢?

我想看完圖片應該能明白為什麼chong載有點問題了吧。這個overloaded通常應該是載荷過重的意思。

如果問讀音到底讀那個,我可以說,就像呆板的呆字讀音應該是一聲還是二聲一樣,如果讀chong的人多,最後這重載個字應該是讀chong了。

但是重應該是讀哪個發音,做如何理解?我不想說太多。我想對翻譯者或者讀者有幾個教訓:

  1. 翻譯過程中盡量不要使用多音字,用的時候考慮是否會有歧義。重zhong,意思有分量多、程度深、價格高、數量多。這些詞有重病、重創、重金、重任。通過這些詞,我們了解到「重」讀zhong的時候確實有很嚴重的意思。但是如果要用重載的話,還不夠形容上面那張圖超載到瀕臨崩潰邊緣的情形。例如,重病、重金,我們知道確實很重,但也沒有重到令人吃驚的地步,這種情況下還是用瀕死、巨額比較好。重載是沒辦法體現出那種瀕臨崩潰的情形。
  2. 順其自然。優勝劣汰,留下來的雖然不是最好的,但是也有存在的道理。重載念chong,體現了重載方法的精髓,而zhong載無法讀出該方法的精髓。

  3. 永遠不要用自己的思路揣測真實的歷史,保留對一切可能性認可的態度。 overloaded我查了這個詞,確實給出的都是過載、超載這樣的含義,包括一些國外的解釋網站。然而,over本身也有覆蓋的意思,override就是重寫的意思,over不一定要表示超過了這個含義,他也可以表示覆蓋,重做的含義。如果第一個使用overloaded的外國人,就是想表達重新載入的意思呢?如果overloaded方法里沒有使用英語里過載這個含義呢?而是使用了和overloaded和普通意思不一樣但是也可以表達的通的意思呢?我們看看方法里overloaded 和overriding 的意思:

Method Overloading is a feature that allows a class to have two or more methods having same name, if their argument lists are different.(Method Overloading in Java with examples)

Method overriding, in object oriented programming, is a language feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its superclasses or parent classes.(Method overriding)

可以看到國外的解釋也有點細微的差異。第一條解釋,明顯受到了overload這個詞的通常意思的影響,多個方法載入到同一個類上,過載。第二條解釋,already這個詞,體現了再次覆蓋的含義,重新寫入。這說明外國人對over這個詞也有不同的理解(我認為)。

我覺得歷史總是相似的,正如英文overloaded中的over導致了多個理解,中文中重載的兩個讀音也表現出兩種不同的解釋。不過中文中,over到底是哪個意思通過讀音就能分辨。overloaded對重載,確實翻譯的很有意思。相比台灣翻譯的overloaded,直接使用了過載這個莫名其妙的翻譯,我覺得大陸重載翻譯的還是很到位的。


reload chongzai

overloaded zhongzai


隨大流的話,念chong2zai4。想追根究底弄清真相的話,念zhong4zai4。可以參考台灣地區的翻譯「過載」,該念什麼一目了然。


載應該是四聲。三聲的話應該指的是年的意思


就是zhong4zai4啊,沒啥好糾結的。


推薦閱讀:

如何理解js的面相對象?
清華大學的面向對象程序設計的教材是什麼?
Python中的類(class)相比與函數(function)有什麼異同?
C#/WPF DataGrid綁定的集合操作, 跨線程, 如何解決耦合度問題?

TAG:讀音 | 翻譯 | 面向對象編程 | 術語 | 多音字 |