Edited at

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

More than 3 years have 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