Help us understand the problem. What is going on with this article?

Ruby の Integer#pred の pred って何?

More than 1 year has passed since last update.

発端

ある日,式の評価値に 1 を足した値を得るため,

ex1.next

のように書いた。
ex1 は何らかの式であり,その値は必ず整数)

なぜ

ex1 + 1

と書かなかったかというと,実は式はここで終わりではなく,

ex1.next.nantoka.kantoka

のようにメソッドチェーンの形で続いていたからだ。

その後,別の箇所で,式の評価値から 1 を引いた値を得る必要が出てきた。

「えっと,next の反対,なんだっけ? ぷ,プレ・・・」
Integer クラスに,1 を減ずるメソッドが存在することは 75% ほどの自信があった。確か前に使ったことが。
next の反対だから prev だろ。previous の略で」

ところが

ex2.prev

は NoMethodError となった。ううむ。

探索

こういうときは公式リファレンスマニュアルの Integer#next を見よう。きっと「SEE ALSO」として 1 を引くメソッドが挙がっているに違いない1

見ると,期待どおり「SEE ALSO」として Integer#pred が挙がっている。これだ!

疑問

しかし,この「pred」というメソッド名はどこから来たのか?
pred という英単語は無さそうなので,何かの略だろう。
英和辞典を引くと,「pred」で始まる単語はけっこうあるので,一つ一つ見ていくのはだるい。

リファレンスマニュアルにメソッド名の由来まで書いてあればいいのだが,書いてはいない。

氷解

こういうときは,英文の説明を見ると分かる場合がある。

さきほど見た Integer#pred のページを再び訪れよう。
すると,ページの右上に [permalink][rdoc] という二つのリンクがある。
このうち,rdoc のほうは,英文のリファレンスへのリンクだ。さっそくジャンプ!
そこには

Returns the predecessor of int, i.e. the Integer equal to int-1.

とある。
predecessor だったのか。そんな単語知らんわ。こんな綴り覚えらんないし。

英和辞典を引くと「前任者」とかいくつか語義が載ってるけど,要するに successor の対義語であるらしい。
Integer#nextInteger#succ は同じメソッドで,succ は successor の略だってのは知ってたので,まあ合点がいった。

predecessor の関連語で predecease(先立つ)なんて動詞もあるみたい。ふむふむ。
predecessor が「先行するもの」で,successor が「後続するもの」みたいに思えばいいのか。

未来

これでもう人に訊かれても説明できるようになったぞ。
「ああ,pred ね。英語が得意じゃないと分からないだろうなあ。successor っていう単語は知ってるかな? 『あとに来るもの』っていうような意味だよね。pred っていうのはこれの対義語でね,ぷ,プレ・・・,プレ・・・デ??? おおっといけない,午前中にアレをデプロイする予定だったんだ,忘れてた。それはそうと,例の案件は進捗どうなってる? 来週にはデモを見せられるようにしないとねえ。それに・・・」


  1. いや,関連の深いメソッドへの参照が必ずあるとは限らないけれど。 

scivola
主に Ruby 使ってます。 二十年来のコンパイラー恐怖症が Rust で治癒するか?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away