0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Comparableモジュールと<=>演算子

Posted at

<=>演算子

3 <=> 5
基本的な比較演算子。ほかの比較演算子はこの演算子を元に Comparable モジュールで定義されています。左が大きければ 1, 等しければ0, 右が大きければ -1 を返すように作ることが期待されています。

irb(main):001> 2 <=> 1
=> 1
irb(main):002> 2 <=> 2
=> 0
irb(main):003> 1 <=>2
=> -1
irb(main):004> 2 <=> "abc"
=> nil
irb(main):005> 'xyz' <=> 'abc'
=> 1
irb(main):006> 'abc' <=> 'abc'
=> 0
irb(main):007> 'abc' <=> 'xyz'
=> -1
irb(main):008> 'abc' <=> '123'
=> 1
irb(main):009> 'abc' <=> 123
=> nil
irb(main):010> 2 >1
=> true
irb(main):011> 2 <= 1
=> false
irb(main):012> 2 === 1
=> false
irb(main):013> 'abc' > "xyz"
=> false
irb(main):014> 'abc' <= 'xyz'
=> true
irb(main):015> 'abc' == 'xyz'

<=>も定義してsortする

比較演算を許すクラスのための Mix-in です。このモジュールをインクルードするクラスは、基本的な比較演算子である <=> 演算子を定義している必要があります。

irb(main):017* class Tempo
irb(main):018*   include Comparable
irb(main):019*
irb(main):020*   attr_reader :bpm
irb(main):021*
irb(main):022*   def initialize(bpm)
irb(main):023*     @bpm = bpm
irb(main):024*   end
irb(main):025*
irb(main):026*   def <=>(other)
irb(main):027*     if other.is_a?(Tempo)
irb(main):028*       bpm <=> other.bpm
irb(main):029*     else
irb(main):030*       nil
irb(main):031*     end
irb(main):032*   end
irb(main):033*
irb(main):034*   def inspect
irb(main):035*     "#{bpm}bpm"
irb(main):036*   end
irb(main):037> end
=> :inspect
irb(main):038> t_120 = Tempo.new(120)
=> 120bpm
irb(main):039> t_120 = Tempo.new(180)
=> 180bpm
irb(main):040> t_180 = Tempo.new(180)
=> 180bpm
irb(main):041> t_120 = Tempo.new(120)
=> 120bpm
irb(main):042> t_120 > t_180
=> false
irb(main):043> t_120 <= t_180
=> true
irb(main):044> t_120 == t_180
=> false

<=>演算子とsort

配列の内容をソートします。要素同士の比較は <=> 演算子を使って行います。sort はソートされた配列を生成して返します。

irb(main):045> tempos = [Tempo.new(180), Tempo.new(60), Tempo.new(120)]
=> [180bpm, 60bpm, 120bpm]
irb(main):046> tempos.sort
=> [60bpm, 120bpm, 180bpm]

感想

あるモジュールをincludeするには特定のメソッドを作っておかなければならない。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?