# Ruby: What is class instance variable

Class instance variables are variables that have punctual prefix `@` and are used inside class definition.

```ruby
class Shape 
  @count = 6

  def instance_method_x
    puts "No: '#{@count}'"
  end 

  class << self 
    def class_method_x
      puts "No: '#{@count}'"
    end 
  end 
end
```

They are not visible to instance methods

```ruby
Shape.new.instance_method_x #=> No: ''
```

They are visible to class methods

```ruby
Shape.class_method_x #=> No: '6'
```

You can expose class instance variable via `attr_reader`

```ruby
class Shape
  @count = 6
  
  class << self 
    attr_reader :count 
  end 
end 

# With that, you can access 
$> Shape.count 
#=> 6
```

Other points:

* They can be replaced by `@@` class variables.
    
* They can be confusing with ordinary instance variables. Without the punctuation `@@` or `@`, it can be difficult to understand whether the variable is associated with class or instance.
