Метод в Ruby - это блок кода, который имеет имя и может быть вызван из другого блока кода. Метод определяется с помощью ключевого слова def, за которым следует имя метода и его параметры, если они нужны. Внутри блока кода метода можно использовать различные операторы, условия, циклы, переменные и тд. Методы в Ruby имеют значение, которое возвращается с помощью последней строки кода внутри иметода - что вернется в последней строчке, то и будет результатом метода. Кроме того, вернуть значение можно с помощью ключевого слова return, если нужно выйти из метода заранее.
Давайте разберем примеры:
# Пример метода без параметровdefhello_world# последней строкой является `puts`, который ничего не возвращает# значит и наш метод не возвращает значенияputs"Hello, world!"end# вызов методаhello_world# пример метода с параметрами (аргументами)defsum(first, second)# результат последней строки кода будет сумма чисел first + secondendputs sum(10,20) # = 30. значит результатом метода будет сумма 10 и 20# Пример метода с переменным числом аргументовdefsum(*numbers) result =0for number in numbers result += numend# последняя строка - результат метода resultendputs sum(1,2,3,4,5) # = 15. вызываем метод и выводим результат
Методы в Ruby используются для избежания повторения кода и упрощения программирования. Они позволяют определить блок кода и повторно использовать его в разных местах программы, а также передавать аргументы и получать результаты выполнения.
# Метод для расчета суммы двух чиселdefsum(a, b)return a + bend# Вводим числа для сложенияputs"Введите число А:"num_a =gets.chomp.to_iputs"Введите число 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 наиболее эффективно используются при создании больших, сложных программ. Их использование облегчает понимание кода, упрощает его тестирование и поддержку.
# Метод для конвертации числа из десятичной системы счисления в бинарнуюdefdecimal_to_binary(decimal) binary =""while decimal >0 binary = (decimal %2).to_s + binary decimal = decimal /2end binaryend# Метод для проверки, является ли слово палиндромомdefpalindrome?(word) word.downcase == word.downcase.reverseend# Использование методов для работы с числами и строкамиnumber =137puts"Число #{number} в бинарном виде: #{decimal_to_binary(number)}"word ="шалаш"puts"Слово '#{word}' является палиндромом: #{palindrome?(word)}"
Этот код демонстрирует, как методы decimal_to_binary и palindrome? могут использоваться для обработки разных типов данных и решения разных задач. Их использование делает код более читаемым, понятным и легко тестируемым и поддерживаемым.
Важно: Так как Ruby выполняет код построчно сверху-вниз, то если объявить метод после его использования в программе, то можно получить ошибку. Тоже самое и с переменнными, которые используются внутри метода. Если переменная объявлена после объявления метода, который использует эту переменную, то можно увидеть ошибку, что программа не знает о существовании такой переменной
Аргументы по-умолчанию
Также мы можем давать аргументам в методах значение по умолчанию.
defmethod_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 twomethod_name("new param one") # param one - new param one, param two - default value two
Именные параметры
Кроме того мы можешь делать значения по умолчанию с помощью двоеточия :. В отличии от знака равенства мы можем передавать аргументы в метод по их названию
defmethod_name(parameter_one: "default value one", parameter_two: "default value two")puts"param one - #{parameter_one}, param two - #{parameter_two}"endmethod_name(parameter_two: "new param two") # param one - default value one, param two - new param two
Задание income_calculator
есть программа:
MIN_INCOME=200_000MAX_INCOME=900_000OFFICE_RENT_CHARGE=140_000TELEPHONY_CHARGE=12_000INTERNET_ACCESS_CHARGE=7200ASSISTANT_SALARY=45_000FINANCE_MANAGER_SALARY=90_000MAIN_TAX_PERCENT=0.24MANAGER_PERCENT=0.15MIN_INVESTMENTS_AMOUNT=100_000loopdoputs"Введите сумму доходов компании за месяц (от 200 до 900 тысяч рублей): " income =gets.to_inextunless 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_AMOUNTputs"Зарплата менеджера: #{manager_salary}"puts"Общая сумма налогов: #{tax_amount.positive? ? tax_amount :0}"puts"Компания может инвестировать: #{can_make_investments ?'да':'нет'}"puts"Бюджет в минусе! Нужно срочно зарабатывать!"if pure_income.negative?enddefcalculate_fixed_chargesOFFICE_RENT_CHARGE+TELEPHONY_CHARGE+INTERNET_ACCESS_CHARGE+ASSISTANT_SALARY+FINANCE_MANAGER_SALARYenddefcheck_income_range(income)if income <MIN_INCOMEputs"Доход меньше нижней границы"falseelsif income >MAX_INCOMEputs"Доход выше верхней границы"falseelsetrueendend
Прочтите код, попытайтесь понять, что он делает.
Запустите код и посмотрите на выдачу. Прочтите ошибку, попытайтесь понять, что она означает.
Исправьте ошибку
Запустите еще раз код, убедитесь, что программа работает корректно.
Опишите общее назначение программы.
Напишите к каждой строчке кода комментарий о том, что выполняется в данной строке.
напишите метод для расчета минимальной сумму дохода calculate_min_income_for_investments, при вводе которой программа ответит, что инвестировать можно.
Вызовете этот метод до получения пользовательского ввода, чтобы пользователь заранее знал с каким доходом он сможет инвестировать
Рекомендации:
Примените существующие выражения в программе и выведите обратную формулу, удовлетворяющую условию инвестирования.
Задачу можно решить с помощью циклов или с помощью математического уровнения путем упрощения множителей. Ваша задача решить задачу, а не сделать это самым эффективным способом, поэтому оба решения будут считаться верным.