Методы

Метод в Ruby - это блок кода, который имеет имя и может быть вызван из другого блока кода. Метод определяется с помощью ключевого слова def, за которым следует имя метода и его параметры, если они нужны. Внутри блока кода метода можно использовать различные операторы, условия, циклы, переменные и тд. Методы в Ruby имеют значение, которое возвращается с помощью последней строки кода внутри иметода - что вернется в последней строчке, то и будет результатом метода. Кроме того, вернуть значение можно с помощью ключевого слова return, если нужно выйти из метода заранее.

Давайте разберем примеры:

# Пример метода без параметров
def hello_world
  # последней строкой является `puts`, который ничего не возвращает
  # значит и наш метод не возвращает значения
  puts "Hello, world!"
end

# вызов метода
hello_world

# пример метода с параметрами (аргументами)
def sum(first, second)
    # результат последней строки кода будет сумма чисел
    first + second
end

puts sum(10, 20) # = 30. значит результатом метода будет сумма 10 и 20

# Пример метода с переменным числом аргументов
def sum(*numbers)
  result = 0
  for number in numbers
    result += num
  end
  # последняя строка - результат метода
  result
end

puts sum(1, 2, 3, 4, 5) # = 15. вызываем метод и выводим результат

Методы в Ruby используются для избежания повторения кода и упрощения программирования. Они позволяют определить блок кода и повторно использовать его в разных местах программы, а также передавать аргументы и получать результаты выполнения.

# Метод для расчета суммы двух чисел
def sum(a, b)
  return a + b
end

# Вводим числа для сложения
puts "Введите число А:"
num_a = gets.chomp.to_i

puts "Введите число B:"
num_b = gets.chomp.to_i

# Рассчитываем и выводим сумму
s1 = sum(num_a, num_b)
puts "Сумма чисел равна: #{s1}"

# Вводим еще одно число для сложения
puts "Введите число C:"
num_c = gets.chomp.to_i

# Рассчитываем и выводим общую сумму трех чисел
s2 = sum(s1, num_c)
puts "Общая сумма равна: #{s2}"

Методы в Ruby наиболее эффективно используются при создании больших, сложных программ. Их использование облегчает понимание кода, упрощает его тестирование и поддержку.

# Метод для конвертации числа из десятичной системы счисления в бинарную
def decimal_to_binary(decimal)
  binary = ""
  while decimal > 0
    binary = (decimal % 2).to_s + binary
    decimal = decimal / 2
  end
  binary
end

# Метод для проверки, является ли слово палиндромом
def palindrome?(word)
  word.downcase == word.downcase.reverse
end

# Использование методов для работы с числами и строками
number = 137
puts "Число #{number} в бинарном виде: #{decimal_to_binary(number)}"

word = "шалаш"
puts "Слово '#{word}' является палиндромом: #{palindrome?(word)}"

Этот код демонстрирует, как методы decimal_to_binary и palindrome? могут использоваться для обработки разных типов данных и решения разных задач. Их использование делает код более читаемым, понятным и легко тестируемым и поддерживаемым.

Важно: Так как Ruby выполняет код построчно сверху-вниз, то если объявить метод после его использования в программе, то можно получить ошибку. Тоже самое и с переменнными, которые используются внутри метода. Если переменная объявлена после объявления метода, который использует эту переменную, то можно увидеть ошибку, что программа не знает о существовании такой переменной

Аргументы по-умолчанию

Также мы можем давать аргументам в методах значение по умолчанию.

def method_name(parameter_one = "default value one", parameter_two = "default value two")
  puts "param one - #{parameter_one}, param two - #{parameter_two}"
end

В этом случае мы можешь не передавать никакого значение в эти методы и тогда будут использоваться значения по умолчанию

method_name() # param one - default value one, param two - default value two

method_name("new param one") # param one - new param one, param two - default value two

Именные параметры

Кроме того мы можешь делать значения по умолчанию с помощью двоеточия :. В отличии от знака равенства мы можем передавать аргументы в метод по их названию

def method_name(parameter_one: "default value one", parameter_two: "default value two")
  puts "param one - #{parameter_one}, param two - #{parameter_two}"
end

method_name(parameter_two: "new param two") # param one - default value one, param two - new param two

Задание income_calculator

есть программа:

MIN_INCOME = 200_000
MAX_INCOME = 900_000

OFFICE_RENT_CHARGE = 140_000
TELEPHONY_CHARGE = 12_000
INTERNET_ACCESS_CHARGE = 7200

ASSISTANT_SALARY = 45_000
FINANCE_MANAGER_SALARY = 90_000

MAIN_TAX_PERCENT = 0.24
MANAGER_PERCENT = 0.15

MIN_INVESTMENTS_AMOUNT = 100_000

loop do
  puts "Введите сумму доходов компании за месяц (от 200 до 900 тысяч рублей): "
  income = gets.to_i
  next unless check_income_range(income)

  manager_salary = income * MANAGER_PERCENT
  pure_income = income - manager_salary - calculate_fixed_charges
  tax_amount = MAIN_TAX_PERCENT * pure_income
  pure_income_after_tax = pure_income - tax_amount
  can_make_investments = pure_income_after_tax >= MIN_INVESTMENTS_AMOUNT
  puts "Зарплата менеджера: #{manager_salary}"
  puts "Общая сумма налогов: #{tax_amount.positive? ? tax_amount : 0}"
  puts "Компания может инвестировать: #{can_make_investments ? 'да' : 'нет'}"
  puts "Бюджет в минусе! Нужно срочно зарабатывать!" if pure_income.negative?
end 

def calculate_fixed_charges
  OFFICE_RENT_CHARGE +
  TELEPHONY_CHARGE +
  INTERNET_ACCESS_CHARGE +
  ASSISTANT_SALARY +
  FINANCE_MANAGER_SALARY
end

def check_income_range(income)
  if income < MIN_INCOME
    puts "Доход меньше нижней границы"
    false
  elsif income > MAX_INCOME
    puts "Доход выше верхней границы"
    false
  else
    true
  end
end
  • Прочтите код, попытайтесь понять, что он делает.

  • Запустите код и посмотрите на выдачу. Прочтите ошибку, попытайтесь понять, что она означает.

  • Исправьте ошибку

  • Запустите еще раз код, убедитесь, что программа работает корректно.

  • Опишите общее назначение программы.

  • Напишите к каждой строчке кода комментарий о том, что выполняется в данной строке.

  • напишите метод для расчета минимальной сумму дохода calculate_min_income_for_investments, при вводе которой программа ответит, что инвестировать можно.

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

Рекомендации:

  • Примените существующие выражения в программе и выведите обратную формулу, удовлетворяющую условию инвестирования.

  • Задачу можно решить с помощью циклов или с помощью математического уровнения путем упрощения множителей. Ваша задача решить задачу, а не сделать это самым эффективным способом, поэтому оба решения будут считаться верным.

Last updated