или не быть', на самом деле я говорю: self.puts 'быть или не быть'. Но что же такое self? Это специальная переменная, которая указывает на тот объект, в котором вы находитесь. Мы пока что не знаем, как находиться внутри объекта, но покуда мы это не выяснили, мы всегда будем находиться в большом объекте, которым является… вся наша программа! И к счастью для нас, у этой программы есть несколько собственных методов, наподобие puts и gets. Посмотрите:
iCantBelieveIMadeAVariableNameThisLongJustToPointToA3 = 3 puts iCantBelieveIMadeAVariableNameThisLongJustToPointToA3 self.puts iCantBelieveIMadeAVariableNameThisLongJustToPointToA3 3 3
Если вы не совсем въехали во всё это, это нормально. Самое важное, что нужно из всего этого уяснить, это то, что каждый метод выполняется некоторым объектом, даже если перед ним не стоит точка. Если вы понимаете это, то вы вполне готовы двигаться дальше.
Забавные строковые методы
Давайте изучим несколько забавных строковых методов. Вам не нужно их все запоминать; достаточно просто ещё раз взглянуть на эту страницу, если вы их позабудете. Я только хочу показать вам небольшую часть того, что могут делать строки. На самом деле, я и сам не могу запомнить даже половины строковых методов – но это нормально, потому что в Интернете есть замечательные справочники, где перечислены и объяснены все строковые методы. (Я покажу вам, где их найти в конце этого учебника.) Серьёзно, я даже не хочу знать все строковые методы: это всё равно, что знать каждое слово в словаре. Я прекрасно могу говорить по-английски, не зная всех слов в словаре… и ведь не в этом же заключается сам смысл словаря? Вам ведь не требуется знать всё, что в нём содержится?
Итак, наш первый строковый метод это reverse, который выдаёт значение строки, перевёрнутое задом наперёд:
varl = 'барк' var2 = 'телекс'
var3 = 'Вы можете произнести это предложение наоборот?'
puts varl.reverse
puts var2.reverse
puts var3.reverse
puts varl
puts var2
puts var3
краб
скелет
?торобоан
еинежолдерп отэ итсензиорп
етежом ыВ
барк
телекс
Вы можете
произнести это предложение
наоборот?
Как видите, reverse не переворачивает значение исходной строки, он просто создаёт её новую перевёрнутую копию. Вот почему в vari по-прежнему содержится 'барк' даже после того, как мы вызвали reverse у vari.
Другой строковый метод это length, который сообщает нам количество символов (включая пробелы) в строке:
puts 'Как Ваше полное имя?' name = gets.chomp
puts 'Вы знаете, что Ваше имя состоит из '+name.length+' символов,
'+name+'?'
Как Ваше полное имя?
Christopher David Pine
#
Ой-ё-ёй! Что-то не сработало, и, кажется, это случилось где-то после строки name = gets.chomp… Вы понимаете, в чём дело? Поглядим, сможете ли вы разобраться с этим.
Причина заморочки – в методе length: он выдаёт нам число, а нам нужна строка. Исправить это довольно просто: мы только воткнём to_s (и скрестим пальцы на удачу):
puts 'Как Ваше полное имя?' name = gets.chomp
puts 'Вы знаете, что Ваше имя состоит из '+name.length.to_s+' символов, '+name+'?'
Как Ваше полное имя?
Christopher David Pine
Вы знаете, что Ваше имя состоит из 22 символов, Christopher David Pine?
Нет, я этого не знал. Внимание: это количество символов в моём имени, а не количество букв (сосчитайте их). Думаю, мы могли бы написать программу, которая спрашивает ваше имя, отчество и фамилию по отдельности, а затем складывает их длины… эй, почему бы вам это не сделать? Давайте, я подожду.
И что, сделали? Хорошо! Нравится программировать, не так ли? А вот после нескольких следующих глав вы сами изумитесь тому, что вы сможете делать.
Итак, есть ещё несколько строковых методов, которые изменяют регистр букв (заглавных или строчных) в вашей строке. upcase изменяет каждую строчную букву на заглавную, а downcase изменяет каждую заглавную букву на строчную. swapcase переключает регистр каждой буквы в строке, и наконец, capitalize работает совсем как downcase за исключением того, что он переводит первую букву в заглавную (если это буква).
letters = 'aAbBcCdDeE'
puts
letters
upcase
puts
letters
downcase
puts
letters
swapcase
puts
letters
capitalize
puts
'a'.capitalize
puts
letters