---
# System prepended metadata

title: Ruby 實體變數與類別變數

---

# Ruby 實體變數與類別變數

## 實體變數 (instance variable)
1. 實體變數是 @ 開頭的
2. 實體變數存活在每個獨立的實體內
3. 在實體裡面可自由取用的變數，實體外不行
4. Ruby 可以適時的省略小括號，方法看起來像屬性，Ruby是沒有屬性的

範例

```ruby=
class Cat ##建立Cat類別
    def initialize(name)
        @name = name #指定實體變數 
    end

    
    def name #getter
        @name
    end
#ruby沒有屬性，所以=視作方法的一部分
    def name= (sayname) #setter
        @name = sayname
        
    end
end

kitty = Cat.new("kk") ##長出kitty實體方法
puts kitty.name #印出kk
puts kitty.name = ("kkkkk") #印出 kkkkk

```

attr_reader/attr_writer/attr_accesssor 可以簡化getter和writer，做出可讀可寫的方法


```ruby=
class Cat
    # attr_reader :name # getter
    # attr_writer :name # setter

    attr_accessor :name #結合 attr_reader 跟 writer
    def initialize(name)
        @name = name
    end
end

kitty = Cat.new("kk")
puts kitty.name
puts kitty.name = "nancy"


```


## 類別變數 Class variable
1. 實體變數是 @@ 開頭的
2. 類別變數是在類別方法中可以取用的變數
3. 在實體裡面可自由取用的變數，實體外不行
4. Ruby 可以適時的省略小括號，方法看起來像屬性，Ruby是沒有屬性的
