注意 この記事は当初,「Ruby の用語として,singular method を特異メソッドと訳したのは妥当でなかったのでは」というモチーフのもとに書いたものですが,コメントのやりとりを見ていただくと分かるように,英語を和訳したのではなく,日本語の「特異メソッド」が先にあったようです。従って「誤訳か」という記事名は適切ではありませんでした。(2016年10月20日付記)
ソフトウエア工学とやらを学んだこともなく,プログラミング用語に詳しいわけでもなく,英語が得意でもないので,的外れなことを書いているかもしれません。乞うご批判。
ほかのプログラミング言語でどうなのかは知らないので,Ruby だけを考えます。
追記(2021 年 8 月 4 日)
本記事では Ruby における「特異メソッド」の英語として一貫して「singular method」を採っていますが,どうやら圧倒的に「singleton method」のほうが流通しているようです。前者が間違いというわけではないようですが,後者のほうが少なくとも普通ではあるようですね。
この記事を書いたのは 2015 年。六年以上も前のことなので,何を見て「singular method」としたのかもはや思い出せません。
特異メソッドのおさらいと名称への疑問
メソッドはクラスやモジュールに書くこともできますが,以下のように特定のオブジェクトだけに持たせてやることもできます。
str = "yada"
def str.spam
puts self * 1024
end
str.spam #=> yadayadayadayadayadayadayadayadayadayadayadayada...
"yada".spam #=> NoMethodError(別のオブジェクトなので)
このようなメソッドをそのオブジェクトの「特異メソッド」と呼ぶわけですが,この名称は妥当なんでしょうか。
「特異」は「フツーじゃない」「けったいな」「そいつだけ変」という意味ですよね。特異メソッドってそんなに変か?
英語は singular method
「特異メソッド」は英語では「singular method」と言います。
singular という単語には,確かに「特異な」という意味があります。
数学で singular point は「特異点」。関数が微分可能でない点などをそう呼びます。まさにフツーじゃない点ですね。
また,人間の行動について,a singular behavior は「奇行」(奇妙な振る舞い)だそうです。
文法の「単数」も singular
でもふと思い出しました。英語などの文法で「単数形」「単数の」は singular ですよね。
single と関係のある語ですね。
英和辞典を引く
そこで思い立って『ランダムハウス英語辞典』で singular を引いてみると,「唯一の」とか「個々の」「各自の」といった意味が挙がっています。
また,論理学用語で「ある1個の対象に属することについていう」として,a singular concept(単独概念)という例が挙がっています。
単独概念というのは,「ナイル川」とか「このペン」といった概念のことだそうです。カテゴリー(「川」「ペン」)に対するインスタンスとも言えますね。
さらに,廃語ですが「個人所属の」といった意味も挙がっています。
「singular method」における「singular」って,まさにこの節で挙げたような意味ではありませんか。
singular method は特異なメソッドではなかったんですよ! 「特異メソッド」という訳語に強い疑問を抱きました。
いやもちろん,翻訳ルールとして,上記のような意味の singular を「特異」と訳すことに決めてしまう(その場合,日常語の「特異」からは意味が広がるけれども)という方針もあり得ないことではないでしょう。
学術用語はしばしばそのように,(日常語の語感に照らした自然さを犠牲にして)機械的に訳語を対応づけることがあります。
理解を妨げてない?
特異メソッドは初心者に理解しづらいようです。私も初めのうち,よく分りませんでした。
〈名称の悪さが理解を妨げている〉とまでは思いません。特異メソッドを学んでいて混乱する原因は主に,クラスも Class クラスのインスタンスだとか,クラスメソッドも実はクラスの特異メソッドなんだとか,特異メソッドも実はオブジェクトの特異クラスというものに定義されたインスタンスメソッドなんだとか,というメタメタな話に行っちゃうことなんだろうと思います。
ただ,「特異」という言葉は何かちょっと〈得体の知れないもの〉というイメージを喚起しませんか。それと,やはり特異メソッドの説明と名称とがなかなか結びつかなくて,モヤモヤした気持ちになりますよね。
では何と訳す?
「特異メソッド」に変わる用語として,これというアイデアはないのですが。
「個別メソッド」はどうでしょうか。
あるいは「個体メソッド」はどうでしょう。
「個体ってインスタンスじゃねえの?」と訊かれそうですが,「instance」はクラスに視点を置いた用語で,あらわに書かなくても常に「○○クラスのインスタンス」という含意があります。それに対し,ここでいう「個体」はクラスとの関係はどうでもよくて,「他ならぬそのオブジェクト」というニュアンスです。
たぶん,だれも賛同してくれませんね。
【余談】有理数と無理数
「特異メソッド」という名称について考えているうち,こんな話を思い出しました。
数学用語の「有理数」「無理数」はそれぞれ,rational number,irrational number の訳語であるようです。
「rational」には確かに「理に適った」「理性ある」という意味があります(irrational はその反対)。
「有理」「無理」は「理が有る」「理が無い」という意味なので,当てはまっていそう?
しかし,有理数の定義(整数の比で表せる数)を思えば,rational は「比(ratio)」から来ていると考えるべきでしょう。
実際,「比数/非比数と訳すべきだった」という数学者もいました。この訳語の支持者は少なくないようです。
※もっとも,上記を踏まえつつ,なお「有理数」「無理数」をうまい訳だと言っている人もいます。