Про ключове слово self в Ruby

Ключове слово self в Ruby використовується для посилання на поточний об’єкт чи контекст, в якому код виконується. Його використання залежить від контексту, у якому воно використовується: в методі класу, звичайному методі або блоку коду.

В методі класу.
В методах класу ключове слово self вказує на сам клас, на якому вони визначені. Це дозволяє визначати статичні методи або методи класу.

Приклад виклику статичного методу за допомогою класу

class MyClass
  def self.my_method
    puts "Це статичний метод класу"
  end
end

MyClass.my_method

В звичайних методах
У звичайних методах ключове слово self вказує на поточний об’єкт класу, коли метод викликається на екземплярі цього класу.

class Bird
    def initialize(name_bird)
      @name_bird = name_bird
    end

    def name_bird
      @name_bird
    end

    def change_name_bird(new_name_bird)
      self.name_bird
      @name_bird = new_name_bird  
      self.name_bird
    end
end

one_bird = Bird.new('Воробэй')
one_bird.change_name_bird('Горобець')

puts "Ця пташка - #{one_bird.name_bird}"

В блоках коду
У блоках коду self вказує на область, в якій вони викликаються. У більшості випадків це буде об’єкт, на якому викликається блок.

class MyClass
  attr_accessor :value

  def initialize(value)
    @value = value
  end

  def my_block
    yield
  end
end

obj = MyClass.new(10)
obj.my_block { puts "Значення об'єкта: #{self.value}" }

В середині модулю. В модулі self також вказує на модуль, і його можна використовувати, наприклад, для визначення методів модулю.

module MyModule
  def self.module_method
    puts "This is a module method"
  end
end

MyModule.module_method

Отже, self в Ruby допомагає звертатися до поточного контексту: це може бути клас, екземпляр класу чи в блоках коду. Його використання допомагає уникнути конфліктів і дозволяє чітко вказувати, на що саме посилається об’єкт у конкретному місці коду.