LoginSignup
367
363

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-12-26

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

Class

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

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

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

すべてオブジェクトで共通で使える、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

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

367
363
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
367
363