Понимание восклицательного знака (!) в Ruby: руководство по методам и соглашениям

В Ruby восклицательный знак (!) обычно называют «взрывом» и используется различными способами для изменения или обозначения потенциально деструктивного или мутирующего метода. Его часто используют как соглашение, чтобы различать две версии метода: одна версия выполняет операцию неразрушающим образом, а другая версия изменяет объект на месте.

Вот несколько распространенных случаев использования восклицательного знака в Ruby, а также примеры кода:

  1. Соглашение об именах методов:
    Ruby использует восклицательный знак в качестве соглашения об именах, чтобы указать, что метод потенциально опасен или имеет побочные эффекты. Он служит предупреждением программисту о том, что метод может изменить объект, для которого он вызывается.

    Пример:

    def sort!
     # Modifies the array in place
    end
    array = [3, 1, 2]
    array.sort!  # Sorts the array in place
  2. Логическое отрицание.
    Восклицательный знак можно использовать для отрицания истинности значения или выражения.

    Пример:

    value = true
    negated_value = !value  # false
  3. Инвертирование метода.
    Некоторые методы имеют соответствующую версию Bang, которая возвращает противоположный результат или изменяет объект на месте.

    Пример:

    array = [1, 2, 3]
    inverted_array = array.reverse!  # Modifies the array in place and returns [3, 2, 1]
  4. Разрушающее присвоение.
    Восклицательный знак можно использовать при параллельном присвоении, чтобы указать, что присвоение должно выполняться разрушительным образом, изменяя значения.

    Пример:

    x, y = 1, 2
    x, y = y, x  # Swaps the values of x and y destructively
  5. Метод с побочными эффектами.
    Некоторые методы имеют версию Bang, которая выполняет ту же операцию, но с побочными эффектами, такими как вывод на печать или изменение глобального состояния.

    Пример:

    def log!(message)
     puts "Log: #{message}"
    end
    log!("Hello, world!")  # Prints "Log: Hello, world!"