Мы собираемся создать метод с именем string_to_signed_number, который будет использовать предыдущий метод string_to_number для преобразования строки цифр в целое число. Новый метод позаботится только о знаке.
Первое, что нам нужно сделать в нашем новом методе, это посмотреть на первую цифру заданной строки. Нам нужно определить, является ли это знаком плюс, минус или просто обычная цифра.
Если первый символ — это знак «+» или «-», мы вырезаем его из строки и сохраняем в переменной:
sign = string.slice!(0) if string.start_with?('+', '-')
Мы только что посмотрели на первый символ переданной строки и определили, является ли он «+» или «-», используя метод String#start_with?.
start_with? в этом случае принимает 2 параметра и возвращает значение true, если хотя бы один из них верен. Итак, если строка начинается с плюса или минуса, она вернет true. В противном случае он вернет false, что означает, что строка начинается с обычной цифры и не имеет знака перед ней.
Если перед строкой стоит знак, мы используем метод String#slice!, чтобы удалить знак из строки и сохранить его в переменной с именем sign.
slice! изменит вызывающую программу, поэтому, если заданная строка была «-123», она будет преобразована в «123» после вызова slice!.
Использование предыдущего метода string_to_integer
Теперь, когда у нас есть строка без какого-либо знака перед ней, мы можем вызвать метод string_to_integer, как и раньше, и преобразовать строку в целое число. Мы присвоим возвращаемое значение переменной с именем result.
result = string_to_integer(string)
Но нам еще предстоит разобраться со знаком.
Если знак был плюс или нет, нам действительно больше нечего делать, и мы можем вернуть этот результат и выйти из метода.
Работа со знаком минус
Если знак был минус, нам нужно сделать еще один шаг и сделать целое число отрицательным, прежде чем мы вернем его. Для этого мы просто добавляем знак «-» перед нашим результатом, например:
-result
Итак, нам нужно еще одно условие if, которое проверяет, есть ли у нас sign и является ли эта переменная sign знаком "-". Если это так, мы возвращаем -result:
return -result if sign && sign == '-'
Это полный метод:
def string_to_signed_integer(string) sign = string.slice!(0) if string.start_with?('+', '-') result = string_to_integer(string) return -result if sign && sign == '-' result end
Следующий шаг
В будущих постах мы сделаем обратное: напишем методы, преобразующие целое число в строку. Быть в курсе.