Ruby力を一段アップするために読んだほうが良い公式ドキュメント集

More than 1 year has passed since last update.

Rubyの言語仕様で重要なものをピックアップ。

Class

http://www.ruby-doc.org/core-1.9.3/Class.html

RubyではClassはClassオブジェクトとして定義されている。

methods
::new #allocate #inherited #new #superclass

インスタンス化に関係する

::new, #new, #allocate

と継承に関係する

#superclass, #inhereted

しか定義されていない。

その他のメソッドはすべてスーパークラスであるModuleに定義されている。Classはインスタンス化できるModuleと考えれば良い。

SuperClassの関係

[1] pry(main)> Class.superclass
=> Module
[2] pry(main)> Module.superclass
=> Object
[3] pry(main)> Object.superclass
=> BasicObject
[4] pry(main)> BasicObject.superclass
=> nil
[5] pry(main)> nil.superclass
NoMethodError: undefined method `superclass' for nil:NilClass
[6] pry(main)> NilClass.superclass
=> Object

Classの関係

[1] pry(main)> Class.class
=> Class
[2] pry(main)> Module.class
=> Class
[3] pry(main)> Object.class
=> Class
[4] pry(main)> BasicObject.class
=> Class
[5] pry(main)> nil.class
=> NilClass
[6] pry(main)> NilClass.class
=> Class

Moduleも含めた祖先

[1] pry(main)> Class.ancestors
=> [Class, Module, Object, PP::ObjectMixin, Kernel, BasicObject]

ここで、PP::ObjectMixinpryが出力の整形用に勝手に突っ込んだもの。通常は入っていない。

irb(main):001:0> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]

Module

http://www.ruby-doc.org/core-1.9.3/Module.html

methods
::constants ::nesting ::new #< #<= #<=> #== #=== #> #>= #alias_method #ancestors #append_features #attr #attr_accessor #attr_reader #attr_writer #autoload #autoload? #class_eval #class_exec #class_variable_defined? #class_variable_get #class_variable_set #class_variables #const_defined? #const_get #const_missing #const_set #constants #define_method #extend_object #extended #freeze #include #include? #included #included_modules #instance_method #instance_methods #method_added #method_defined? #method_removed #method_undefined #module_eval #module_exec #module_function #name #private #private_class_method #private_instance_methods #private_method_defined? #protected #protected_instance_methods #protected_method_defined? #public #public_class_method #public_instance_method #public_instance_methods #public_method_defined? #remove_class_variable #remove_const #remove_method #to_s #undef_method

基本機能

  • 比較関係

#< #<= #<=> #== #=== #> #>=

  • 文字列化

#name #to_s

  • freeze

#freeze

Constants関係

::constants ::nesting #const_defined? #const_get #const_missing #const_set #constants #remove_const

Module機能

::new #ancestors

  • autoload

#autoload #autoload?

  • include

#append_features #include #include? #included #included_modules

  • extend

#extend_object #extended

Class関係

  • class_variables (@@foo etc.)

#class_variable_defined? #class_variable_get #class_variable_set #class_variables #remove_class_variable

  • methods

#alias_method #define_method #method_added #method_defined? #method_removed #method_undefined #remove_method #undef_method

#instance_methods

#module_function

  • attr

#attr #attr_accessor #attr_reader #attr_writer

  • eval, exec

#class_eval #class_exec #module_eval #module_exec

private,protected,publicのスコープ概念の導入

#private #private_class_method #private_instance_methods #private_method_defined?

#protected #protected_instance_methods #protected_method_defined?

#public #public_class_method #public_instance_method #public_instance_methods #public_method_defined?

Object

http://www.ruby-doc.org/core-1.9.3/Object.html

methods
#!~ #<=> #=== #=~ #class #clone #define_singleton_method #display #dup #enum_for #eql? #extend #freeze #frozen? #hash #inspect #instance_of? #instance_variable_defined? #instance_variable_get #instance_variable_set #instance_variables #is_a? #kind_of? #method #nil? #object_id #public_method #public_send #remove_instance_variable #respond_to? #respond_to_missing? #send #singleton_class #singleton_methods #taint #tainted? #tap #to_enum #to_s #trust #untaint #untrust #untrusted?

基本機能

  • 比較関係

#!~ #<=> #=== #=~ #eql? #nil?

  • 文字列化

#to_s #inspect

  • Enum関係

#enum_for #to_enum #tap

  • copy

#clone #dup

  • Hash値, Object値

#hash #object_id

  • display

#display

  • freeze

#freeze #frozen?

  • マーク付け

#taint #tainted? #untaint
#trust #untrust #untrusted?

Instance機能

  • classとの関係性チェック

#instance_of? #is_a? #kind_of? #class

  • instance_valiable (@foo etc.)

#instance_variable_defined? #instance_variable_get #instance_variable_set #instance_variables #remove_instance_variable

  • method check

#method #public_method
#respond_to? #respond_to_missing?

  • method call

#send #public_send

  • extend

#extend

  • singleton_method、singleton_class

#define_singleton_method #singleton_class #singleton_methods

これは日本語では特異メソッド、特異クラスと呼ばれている。これの解説は以下がわかり易かった。
結局、Rubyの特異メソッドって何なの? - (゚∀゚)o彡 sasata299's blog
これを読めば、class << selfとかの意味もわかるはず!

BasicObject

http://www.ruby-doc.org/core-1.9.3/BasicObject.html

すべてオブジェクトで共通で使える、Objectの親に当たるクラス。Kernelモジュールがincludeされていないのが特徴。

methods
::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec #method_missing #singleton_method_added #singleton_method_removed #singleton_method_undefined
  • 比較関係

#! #!= #== #equal?

  • eval, exec

#instance_eval #instance_exec

  • method_missing

#method_missing

  • singleton_methodのチェック関係

#singleton_method_added #singleton_method_removed #singleton_method_undefined

  • その他

# ::new #__id__ #__send__

Kernel

http://www.ruby-doc.org/core-1.9.3/Kernel.html

open, system, eval, exit, raise, putsなどのprint系関数, Array, Integer, Stringなどのキャストのような関数など、一般的な言語でメソッドではなく関数として定義されているような、基本的な動作が定義されているモジュール。

ここに定義されているすべてのメソッドは一度見ておくと良さそう。

Proc/Method

http://www.ruby-doc.org/core-1.9.3/Proc.html
http://www.ruby-doc.org/core-1.9.3/Method.html

binding(束縛変数)を持つProcと、receiverを持つMethod。Blockを使う時なんかにも必要なので、理解しておくと良い。
Proc/Method, block/proc/lambdaの違いについては以下がわかり易かった。
Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo

その他、基本型

String/Symbol

Number/Math

Boolean

集合関係

Time/Date