30
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby の Integer#pred の pred って何?

Last updated at Posted at 2019-08-13

発端

ある日,式の評価値に 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. いや,関連の深いメソッドへの参照が必ずあるとは限らないけれど。

30
7
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?