1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса(ов)

Изучаем Ruby. Привет мир! Вывод на экран и ввод с клавиатуры

По устоявшейся традиции начнём с программы «Привет, мир!» (Hello world!)

Для вывода на экран в Ruby используется функция puts.

Код Ruby:
  1. puts "Привет, мир!"
  2. irb(main):001:0> puts "Привет, мир!"
  3. Привет, мир!
  4. => nil

Первая программа на языке Ruby

В Ruby есть несколько способов вывода на экран. Например, мы могли бы написать нашу первую программу таким образом

print "Привет, мир!"

Код Ruby:
  1. irb(main):002:0> print "Привет, мир!"
  2. Привет, мир!=> nil

или даже так:

p "Привет, мир!" 

При этом обратите внимание, что p – это вовсе не сокращенная запись команды print, как может показаться с первого взгляда. Это отдельный метод. И вывод на экран будет выглядет по другому.

Код Ruby:
  1. irb(main):003:0> p "Привет, мир!"
  2. "Привет, мир!"
  3. => "Привет, мир!"
  4.  
  5. irb(main):003:0> pp "Привет, мир!"
  6. "Привет, мир!"
  7. => "Привет, мир!"

В чём разница между этими методами вывода?

puts и print почти аналогичны, оба они выводят на экран результат и возвращают nil, но puts добавляет перевод строки в конце вывода, а print – не добавляет. 

p как и puts выводит результат, добавляет в конце перевод строки, но он также возвращает значение результата, а не nil.

pp является расширенной (более красивой - «pretty print») версией p и его возможности не заметны на примере со строкой (она и так достаточно красива).

Вывод "Привет мир" на Ruby разными способами

Главной особенность Ruby является гибкость его методов. Например для вывода на экран массива Вам не придется создавать цикл. Вывод на экран можно осуществить при помощи тех же функций. Я сознательно ввел в массив пустой элемент. И мы видим, что метод puts на его месте поставил просто перевод строки

Код Ruby:
  1. irb(main):001:0> puts [1, 2, 3, nil, 4]
  2. 1
  3. 2
  4. 3
  5.  
  6. 4
  7. => nil
  8. irb(main):002:0> print [1, 2, 3, nil, 4]
  9. [1, 2, 3, nil, 4]=> nil
  10. irb(main):003:0> p [1, 2, 3, nil, 4]
  11. [1, 2, 3, nil, 4]
  12. => [1, 2, 3, nil, 4]
  13. irb(main):004:0> pp [1, 2, 3, nil, 4]
  14. [1, 2, 3, nil, 4]
  15. => [1, 2, 3, nil, 4]

Вывод массива на языке Ruby

Но мы снова не увидели разницы между p и pp!

Для того чтобы её заметить, будем использовать более сложные типы данных, хэши (так в Ruby называются ассоциативные массивы).

Код Ruby:
  1. irb(main):001:0> h = {first:1, second:2, "third" => {sf:"false", ss:3}, "fourth" => {tf:"flag", ts:4}, fifth:5}
  2. => {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}
  3. irb(main):002:0> puts h
  4. {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}
  5. => nil
  6. irb(main):003:0> print h
  7. {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}=> nil
  8. irb(main):004:0> p h
  9. {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}
  10. => {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}
  11. irb(main):005:0> pp h
  12. {:first=>1,
  13. :second=>2,
  14. "third"=>{:sf=>"false", :ss=>3},
  15. "fourth"=>{:tf=>"flag", :ts=>4},
  16. :fifth=>5}
  17. => {:first=>1, :second=>2, "third"=>{:sf=>"false", :ss=>3}, "fourth"=>{:tf=>"flag", :ts=>4}, :fifth=>5}

Красивый вывод ассоциативного массива (хэша) на языке Ruby

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

Логично предположить, что если для вывода используется метод puts, то для ввода — gets. Так оно и есть…

Код Ruby:
  1. irb(main):001:0> n = gets
  2. 15
  3. => "15\n"

Ввод данных в языке Ruby

Но почему в конце строки стоит символ перевода строки, и как его убрать? А может его на самом деле и нет? Проверим

Код Ruby:
  1. irb(main):002:0> puts n
  2. 15
  3. => nil
  4. irb(main):003:0> print n
  5. 15
  6. => nil
  7. irb(main):004:0> p n
  8. "15\n"
  9. => "15\n"

Проверяем наличие перевода строки

puts и print нам не показывают перевод строки в явном виде. Хотя если присмотреться, мы заметим, что в выводе print появился «лишний» перевод строки. А вот метод p нам явно предъявляет его наличие.

Но что делать, если нам этот перевод строки не нужен?

Код Ruby:
  1. irb(main):005:0> n = gets.chomp
  2. 16
  3. => "16"
  4. irb(main):006:0> puts n
  5. 16
  6. => nil
  7. irb(main):007:0> print n
  8. 16=> nil
  9. irb(main):008:0> p n
  10. "16"
  11. => "16"

Но до сих пор мы выводили на экран только чистые данные. А как вывести на экран что-то типа «2 + 1 = 3» , где 2 — переменная, введенная с клавиатуры?

Для подмены имени на значение переменной при выводе используется конструкция #{n}

Поэтому мы могли бы использовать такую конструкцию:

Код Ruby:
  1. puts "#{a} + 1 = #{a + 1}"

Но… В ответ мы получаем ошибку

TypeError (no implicit conversion of Integer into String)

Дело в том, что переменная a у нас имеет тип «строка». Ruby не производит автоматического приведения типов, в отличии от, например PHP. В итоге Ruby не может понять, что от него хотят, когда пытаются прибавить число к строке.

Слава богу, в Ruby привести типы — не проблема. Например, приведение строки к целому осуществляется методом to_i самой строки.

Код Ruby:
  1. puts "#{a} + 1 = #{a.to_i + 1}"
  2. irb(main):001:0> a = gets.chomp
  3. 2
  4. => "2"
  5. irb(main):002:0> puts "#{a} + 1 = #{a + 1}"
  6. Traceback (most recent call last):
  7. 5: from D:/Program Files/Ruby30-x64/bin/irb.cmd:31:in '<main>'
  8. 4: from D:/Program Files/Ruby30-x64/bin/irb.cmd:31:in 'load'
  9. 3: from D:/Program Files/Ruby30-x64/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in '<top (required)>'
  10. 2: from (irb):2:in '<main>'
  11. 1: from (irb):2:in '+'
  12. TypeError (no implicit conversion of Integer into String)
  13. irb(main):003:0> puts "#{a} + 1 = #{a.to_i + 1}"
  14. 2 + 1 = 3
  15. => nil
  16. irb(main):004:0> a = 7
  17. => 7
  18. irb(main):005:0> puts "#{a} + 1 = #{a.to_i + 1}"
  19. 7 + 1 = 8
  20. => nil

Вводим и выводим данные

Оставьте свой комментарий

Оставить комментарий как гость

0
  • Комментариев нет