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

Вступление

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

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

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

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

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

irb

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

IRB sessionirb(main):001:0>

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

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

2 + 2

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

IRB session=> 4

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

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

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

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

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

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

puts "Hello World"

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

OUTPUTHello World
=> nil

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

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

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

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

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

birth_year = 1868

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

IRB session=> 1868

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

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

death_year = 1921

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

age_at_death = death_year - birth_year

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

IRB session=> 53

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

Иногда вам захочется написать код, который занимает несколько строк. IRB поддерживает это интуитивно. IRB выполняет только тот код, который синтаксически завершен. Следующий код Ruby использует array акул и использует https://www.digitalocean.com Метод / community / tutorials / how-to-use-array-method-in-ruby # find-and-filtering-elements [select] возвращает только акул с буквой «а» в названии. Введите этот код в сеанс IRB, нажимая + ENTER + после каждой строки:

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

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

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

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

IRB session=> ["Great White"]

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

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

Вы можете импортировать библиотеки в ваш сеанс IRB, используя оператор + require +, так же, как вы это делаете в Ruby-программе. Этими библиотеками могут быть вещи, включенные в стандартную библиотеку Ruby, вещи, которые вы написали сами, или gems, библиотеки Ruby, распространяемые через http://rubygems.org [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 sessionirb(main):010:0> uri = URI.parse("http://icanhazip.com")
=>
irb(main):011:0> response = Net::HTTP.get_response uri
=>
irb(main):012:0> response.body
=>

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

require 'httparty'

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

IRB sessionLoadError: cannot load such file -- httparty

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

gem install httparty

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

irb

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

require 'httparty`

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

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

Вы увидите вывод на экран:

IRB session=>

Теперь давайте посмотрим, как исследовать и тестировать свой собственный код 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-адреса, без необходимости изменять работу остальной части нашего кода.

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

ip_grabber.rb

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 +».

irb -r ./ip_grabber

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

ip = IPGrabber.new
ip.get

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

IRB session=>

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

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

Настройка IRB

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

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

nano ~/.irbrc

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

~ / .Irbrc

require 'irb/completion'

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

~ / .Irbrc

IRB.conf[:SAVE_HISTORY] = 1000

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

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

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

~ / .Irbrc

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

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

~ / .Irbrc

IRB.conf[:AUTO_INDENT] = true

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

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

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

irbrc
# 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 = hist.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 для запуска примеров.