Методы
Метод в 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