Rubyの基本シンタックスまとめてみた~Part 2~
Rubyの基本シンタックスまとめてみた、続きです。 前回の記事はこちらを御覧ください。
クラス
クラス定義
class Foo end
継承
class Bar < Foo end
クラス定義の追加
class Foo < Array def hoge end end class Foo def piyo end end class Foo < Fixnum end #=> superclass mismatch for class Foo (TypeError)
内部クラス
class Foo class Bar end end
class Foo end class Foo::Bar end
特異クラス
class Foo class << self end end
変数
インスタンス変数
class Foo def hoge @instance_var = 'This is instance variable' end def self.hoge_hoge @instance_var = 'This is instance variable' end end foo = Foo.new p foo.hoge #=> This is instance variable p foo.hoge_hoge #=> nil
クラス変数
class Foo @@class_var = 100 def hoge @@class_var += 1 end def self.piyo @@class_var = 0 end end foo = Foo.new p f.hoge #=> 101 foo2 = Foo.new p foo2.hoge #=> 102 p Foo.piyo #=> 0
クラスインスタンス変数
class Foo @class_instance_var = 'class instance var' def hoge @class_instance_var end def self.piyo @class_instance_var end end class Bar < Foo end foo = Foo.new p foo.hoge #=> nil p Foo.piyo #=> class instance var p Bar.piyo #=> nil
attr_accessor・attr_writor・attr_reader
def Foo attr_accessor :name def initialize @name = 'kobaken' end end foo = Foo.new p foo.name #=> kobaken foo.name = 'koba'
def Foo attr_writer :name def initialize @name = 'kobaken' end def get_name @name end end foo = Foo.new p foo.name #=> NoMethodError: undefined method `name' for #<Bar:(barインスタンスのアドレス) @name="koba"> p foo.get_name #=> kobaken foo.name = 'koba' p foo.get_name #=> koba
def Foo attr_reader :name def initialize @name = 'kobaken' end end foo = Foo.new p foo.name #=> kobaken foo.name = 'koba' #=> NoMethodError: undefined method `name=' for #<Piyo:(piyoインスタンスのアドレス) @name="kobaken">
メソッド
インスタンスメソッド
class Foo def hoge 'hogehoge' end end foo = Foo.new p foo.hoge #=> hogehoge p Foo.hoge #=> NoMethodError: undefined method `hoge' for Foo:Class
クラスメソッド(特異メソッド)
class Foo def self.hoge 'hoge' end end p Foo.hoge #=> hoge p Foo::hoge #=> hoge
class Foo class << self def hoge 'hoge' end def piyo 'piyo' end end p Foo.hoge #=> hoge p Foo::hoge #=> hoge p Foo.piyo #=> piyo p Foo::piyo #=> piyo
class Foo end foo = Foo.new def foo.hoge 'hoge' end p foo.hoge #=> hoge other_foo = Foo.new p other_foo.hoge #=> NoMethodError: undefined method `hoge' for #<Foo:(other_fooのアドレス)>
引数
class Foo def hoge(str) "#{str}_hogehoge" end def piyo(str, num) num.times { p "#{str}_piyo" } end end foo = Foo.new p foo.hoge('koba') #=> koba_hogehoge foo.piyo('koba', 3) #=> koba_piyo koba_piyo koba_piyo
class Foo def hoge(str='koba') "#{str}_hoge" end def piyo(str, num=3) num.times { p "#{str}_piyo" } end end foo = Foo.new p foo.hoge #=> koba_hoge foo.piyo('koba') #=> koba_piyo koba_piyo koba_piyo foo.piyo('koba', 1) #=> koba_piyo
可変長引数
def hoge(*args) p args end hoge('hoge', 'piyo', 'foo', 'bar') #=> ["hoge", "piyo", "foo", "bar"]
キーワード引数
def hoge(name: 'kobaken', age: 21) p "My name is #{name}, I am #{age}." end hoge #=> My name is kobaken, I am 21. hoge('こばけん', 18) #=> My name is こばけん, I am 18.
オプション引数
def hoge(**options) p options end hoge(hobby: '声優', age: 21, name: 'kobaken') #=> {:hobby=>"声優", :age=>21, :name=>"kobaken"}
ブロック引数
def hoge(name, &block) bloack.call(name) end hoge('kobaken') { |n| p n } #=> kobaken
今回はここまで。
次回はブロック、Proc、yield、クロージャ、正規表現についてまとめていきます。
ではノシ