Поиск по сайту:

Как использовать IRB для изучения Ruby


Введение

IRB, сокращение от Interactive Ruby, — это быстрый способ изучить язык программирования Ruby и опробовать код без создания файла. IRB — это цикл чтения-оценки-печати, или REPL, инструмент, предлагаемый многими современными языками программирования. Чтобы использовать его, вы запускаете исполняемый файл irb и вводите код Ruby в командной строке. IRB оценивает введенный вами код и отображает результаты.

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

В этом руководстве вы будете использовать IRB для запуска некоторого кода, проверки его вывода, добавления внешних библиотек и настройки сеанса IRB.

Запуск и остановка IRB

Если у вас установлен Ruby, у вас будет IRB. Вы можете запустить его на любом компьютере, где установлен Ruby, выполнив команду irb из интерфейса командной строки.

  1. irb

Вас встретит приглашение IRB:

IRB session
irb(main):001:0>

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

Примечание. Если вы установили Ruby с RVM, приглашение может выглядеть немного иначе, вместо него будет отображаться номер версии:

IRB session from RVM
2.4.0 :001 >

Чтобы получить подсказку, показанную в этом руководстве, запустите IRB с помощью irb --prompt inf-ruby.

IRB принимает синтаксис Ruby, который вы можете ввести по запросу. Попробуйте, сложив два числа вместе:

  1. 2 + 2

Нажмите клавишу ENTER, и IRB покажет вам результат:

IRB session
=> 4

Символ => сообщает, что это значение, возвращаемое выражением Ruby.

Чтобы выйти из IRB, введите exit в командной строке или нажмите CTRL+D. Вы вернетесь к командной строке.

Давайте углубимся в IRB и посмотрим, как вы можете использовать его для изучения кода.

Выполнение кода в сеансе IRB

IRB — отличный способ попробовать код, чтобы убедиться, что он является хорошим решением вашей проблемы. Почти все в Ruby возвращает какое-то значение, и каждый раз, когда вы выполняете оператор в IRB, вы будете видеть это возвращаемое значение, напечатанное на экране.

Чтобы продемонстрировать это, выполните этот оператор в новом сеансе IRB:

  1. puts "Hello World"

Когда вы нажмете клавишу ENTER, вы увидите два результата IRB:

OUTPUT
Hello World => nil

Первый результат — это вывод метода puts, который печатает указанную вами строку, за которой следует разрыв строки. Метод puts выводит текст на стандартное устройство вывода, которым является ваш экран. Но метод puts имеет возвращаемое значение, потому что каждый метод в Ruby имеет возвращаемое значение. Метод puts возвращает nil, и это то, что показывает вам IRB.

Каждый раз, когда вы выполняете инструкцию, подсказка меняется, указывая новый номер строки:

irb(main):001:0> puts "Hello World"
Hello World
=> nil
irb(main):002:0>

Это может помочь вам отлаживать операторы при выполнении более сложных выражений в сеансе IRB, поскольку сообщения об ошибках будут ссылаться на номера строк.

Вы можете присваивать значения переменным в сеансе IRB точно так же, как и в своих автономных программах на Ruby. Выполните этот оператор, введя его в сеансе IRB и нажав ENTER:

  1. birth_year = 1868

Вы увидите возвращаемое значение этого оператора:

IRB session
=> 1868

Переменная birth_year содержит это значение, но, поскольку большинство инструкций в Ruby возвращают значения, IRB также показывает здесь возвращаемое значение.

Добавьте еще две переменные. Сначала создайте переменную с именем death_year:

  1. death_year = 1921

Затем создайте переменную age_at_death, вычитая birth_year из death_year:

  1. age_at_death = death_year - birth_year

IRB присваивает значение переменной, но также показывает вам результат:

IRB session
=> 53

Когда вы находитесь в сеансе IRB, вам не нужно использовать явное выражение puts или print, если вы этого не хотите, так как вы увидите отображаются возвращаемые значения.

Иногда вам может понадобиться написать код, который занимает несколько строк. IRB поддерживает это интуитивно. IRB выполняет только синтаксически завершенный код. Следующий код Ruby использует метод select для возврата только тех акул, которые содержат букву \a в своем имени. Введите этот код в сеанс IRB, нажимая ENTER после каждой строки:

["Tiger", "Great White", "Angel"].select do |shark|
shark.include?("a")
end

IRB позволяет вам вводить несколько строк кода, но он выполняет код только тогда, когда считает, что код синтаксически завершен. Обратите внимание, что подсказка меняется, чтобы указать, что IRB еще не оценивает ваш код, используя звездочку (*) и изменяя последний ноль на единицу, чтобы указать другую область действия:

IRB session
irb(main):005:0> ["Tiger", "Great White", "Angel"].select do |shark| irb(main):006:1* shark.include?("a") irb(main):007:1> end

Поскольку первая строка содержит ключевое слово do, IRB не пытается ничего выполнить, пока не встретит ключевое слово end. Затем он отображает результат:

IRB session
=> ["Great White"]

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

Использование библиотек и драгоценных камней

Вы можете импортировать библиотеки в свой сеанс IRB с помощью оператора require, точно так же, как в программе Ruby. Этими библиотеками могут быть компоненты, включенные в стандартную библиотеку Ruby, написанные вами самостоятельно, или gems, библиотеки Ruby, распространяемые через Rubygems.org, которые вы устанавливаете с помощью команды gem.

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

Используйте оператор require для импорта Net/HTTP из стандартной библиотеки Ruby. Введите следующую строку кода в сеанс IRB и нажмите ENTER:

require 'net/http'

IRB указывает, что этот оператор возвращает true, что означает, что библиотека была успешно загружена. Теперь введите этот код в IRB, чтобы отправить запрос на icanhazip.com для получения вашего внешнего IP-адреса:

uri = URI.parse("http://icanhazip.com")
response = Net::HTTP.get_response uri
response.body

Когда вы вводите каждую строку, IRB показывает вам возвращаемое значение, поэтому вы можете отлаживать каждый шаг:

IRB session
irb(main):010:0> uri = URI.parse("http://icanhazip.com") => #<URI::HTTP http://icanhazip.com> irb(main):011:0> response = Net::HTTP.get_response uri => #<Net::HTTPOK 200 OK readbody=true> irb(main):012:0> response.body => 203.0.113.52\n

Если библиотеку найти не удалось, вы увидите другой ответ. Попробуйте импортировать библиотеку HTTParty, которая немного упрощает работу с HTTP-запросами:

require 'httparty'

Вы увидите это сообщение:

IRB session
LoadError: cannot load such file -- httparty

Это сообщение говорит о том, что нужная вам библиотека недоступна. HTTParty распространяется как гем, поэтому вам придется его установить. Выйдите из сеанса IRB с помощью CTRL+D или введите exit, чтобы вернуться к подсказке. Затем используйте команду gem, чтобы установить гем httparty:

  1. gem install httparty

Теперь снова запустите irb.

  1. irb

Попробуйте загрузить модуль еще раз. В сеансе IRB введите этот код:

require 'httparty`

На этот раз IRB отобразит true, сообщая вам, что ему удалось загрузить библиотеку. Введите этот код в IRB, чтобы попробовать:

response = HTTParty.get("http://icanhazip.com")
response.body

Вы увидите вывод, напечатанный на экране:

IRB session
=> 203.0.113.52\n

Теперь давайте посмотрим, как исследовать и тестировать собственный код Ruby с помощью IRB.

Загрузка вашего кода в IRB

Если вы запускаете сеанс IRB и используете переключатель -r, вы можете указать библиотеки или гемы, которые хотите загрузить при запуске IRB. Например, irb -r httparty запустит сеанс IRB с уже загруженным гемом httparty, что означает, что вы можете пропустить явный оператор require httparty.

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

Выйдите из сеанса IRB, введя exit или нажав CTRL+D.

Создайте новый файл Ruby с именем ip_grabber.rb, который определяет объект IPGrabber с методом get, который при предоставлении URL-адреса возвращает внешний IP-адрес машины. Вы будете использовать библиотеку HTTParty для получения ответа от icanhazip.com. Вы могли бы использовать этот объект IPGrabber в своей собственной программе, чтобы изолировать свой код от внешних изменений; использование вашего объекта позволит вам отключить базовую библиотеку и сайт, который вы используете для разрешения IP-адреса, без необходимости изменять работу остального кода.

Добавьте этот код в файл, чтобы определить класс:

require 'httparty'
class IPGrabber

def initialize()
@url = "http://icanhazip.com"
end

def get
response = HTTParty.get(@url)
response.body.chomp # remove the \n if it exists
end
end

Сохраните файл и выйдите из редактора.

Затем запустите IRB и загрузите этот файл. Поскольку это локальный файл, а не гем или встроенная библиотека, вам нужно указать путь. Вам также не нужно указывать расширение файла .rb.

  1. irb -r ./ip_grabber

Сеанс IRB загружается, и вы можете начать использовать этот новый объект в своем сеансе следующим образом:

ip = IPGrabber.new
ip.get

Вы увидите этот вывод:

IRB session
=> 203.0.113.52

Загружая собственный код в сеанс IRB, вы можете проверять код и работать с собственными библиотеками, прежде чем включать их в полноценную программу.

Теперь, когда вы знаете, как работать с кодом в сеансе IRB, давайте посмотрим, как настроить сеанс IRB.

Настройка IRB

Вы можете создать файл конфигурации с именем .irbrc, который позволит вам настроить сеанс IRB. Затем вы можете добавить поддержку автозаполнения, отступов и истории команд.

Создайте этот файл в своем домашнем каталоге:

  1. nano ~/.irbrc

Во-первых, настройте поддержку автозаполнения в IRB. Это позволит вам использовать клавишу TAB для автозаполнения объектов, имен переменных и имен методов в IRB:

require 'irb/completion'

Затем добавьте поддержку сохранения истории команд во внешний файл.

IRB.conf[:SAVE_HISTORY] = 1000

Если эта функция включена, последние 1000 введенных вами операторов будут записаны в файл .irb_history в вашем домашнем каталоге.

Кроме того, когда вы открываете новый сеанс IRB, ваша история будет загружаться автоматически, и вы можете использовать клавиши со стрелками Вверх и Вниз для перемещения по этим записям или использовать CTRL+R, чтобы выполнить обратный поиск, как в оболочке Bash.

Если вы хотите указать другой файл истории, добавьте его в свой файл конфигурации:

IRB.conf[:HISTORY_FILE] = '~/your_history_filename'

Затем добавьте эту строку в свой файл конфигурации, чтобы включить автоматический отступ, который удобен при написании классов, методов и блоков:

IRB.conf[:AUTO_INDENT] = true

Ваш файл конфигурации может включать любой дополнительный допустимый код Ruby, что означает, что вы можете определить вспомогательные методы или использовать require для загрузки дополнительных библиотек. Например, чтобы добавить помощника history в ваш сеанс IRB, который будет отображать вашу историю, добавьте этот код в .irbrc:

def history
history_array = Readline::HISTORY.to_a
print history_array.join("\n")
end

При загрузке сеанса IRB введите history, чтобы просмотреть историю IRB. У вас может быть довольно много, поэтому вы можете изменить команду history, чтобы для отображения требовалось необязательное количество строк. Замените код функции history этим кодом, который принимает необязательный аргумент с именем count и использует его для ограничения отображаемых записей:


# history command
def history(count = 0)

# Get history into an array
history_array = Readline::HISTORY.to_a

# if count is > 0 we'll use it.
# otherwise set it to 0
count = count > 0 ? count : 0

if count > 0
from = history_array.length - count
history_array = history_array[from..-1]
end

print history_array.join("\n")
end

Сохраните файл и запустите новый сеанс IRB. Затем введите history 2, и вы увидите только две последние строки своей истории.

Хотя вы можете использовать .irbrc для загрузки часто используемых библиотек, помните, что каждая загружаемая библиотека увеличивает время загрузки сеанса IRB, что может сделать его менее приятным в использовании. Часто лучше загружать определенные библиотеки вручную с помощью инструкций require.

Заключение

IRB предоставляет место для экспериментов с кодом Ruby. Это отличный способ проработать логику программы, прежде чем поместить ее в файл.

Теперь, когда вы освоились с IRB, вы можете использовать его для изучения различных типов данных Ruby, следуя этим руководствам и используя IRB для запуска примеров.

  • Понимание типов данных в Ruby
  • Как работать со строками в Ruby
  • Как работать со строковыми методами в Ruby
  • Как работать с массивами в Ruby
  • Как использовать методы массива в Ruby