Ruby: как создать первую программу от Hello World до калькулятора
Для кого эта статья:
- Начинающие разработчики, желающие освоить программирование
- Люди всех возрастов, заинтересованные в обучении языку Ruby
Учителя и менторы, ищущие материала для курсов по программированию
Ruby — язык, обладающий элегантностью и лаконичностью, способен превратить сложные программистские задачи в понятные даже начинающим разработчикам. Минимум синтаксического шума, максимум выразительности — эти качества делают Ruby идеальным первым языком программирования. От простейшего приветствия мира до функционального калькулятора — всего несколько десятков строк кода, которые откроют перед вами дверь в мир профессиональной разработки. Готовы написать свою первую программу? 💎
Начать программировать можно в любом возрасте, особенно с таким дружелюбным языком как Ruby. Но почему бы не пойти дальше? Обучение веб-разработке от Skypro — это не просто знакомство с языками программирования, а полноценный карьерный старт. Вы освоите не только Ruby, но и целый стек технологий, а команда опытных менторов поможет превратить теорию в реальные проекты для вашего портфолио. Инвестируйте в профессию будущего уже сегодня!
Первая программа на Ruby: классический Hello World
Традиция написания программы Hello World зародилась ещё в 1970-х годах и до сих пор остаётся первым шагом при изучении любого языка программирования. Ruby не исключение. Этот простой пример демонстрирует чистоту и читаемость синтаксиса, которыми славится язык. 🚀
Вот как выглядит классический Hello World на Ruby:
puts "Hello, World!"
Один из самых кратких вариантов Hello World среди популярных языков программирования! Давайте разберемся, что здесь происходит:
- puts — встроенная функция Ruby, которая выводит текст на экран и автоматически добавляет перевод строки;
- "Hello, World!" — строковый литерал, заключенный в двойные кавычки.
Чтобы запустить эту программу, сохраните код в файл с расширением .rb (например, hello.rb) и выполните в командной строке:
ruby hello.rb
Вы увидите вывод:
Hello, World!
Для тех, кто хочет немного расширить первую программу, можно добавить интерактивности:
puts "Как вас зовут?"
name = gets.chomp
puts "Hello, #{name}!"
В этом примере:
- gets — функция для получения ввода пользователя;
- chomp — метод, который удаляет символ новой строки из конца строки;
- #{name} — интерполяция строк, позволяющая встраивать значения переменных в строковые литералы.
| Функция | Описание | Пример использования |
|---|---|---|
| puts | Выводит текст с переводом строки | puts "Привет" |
| Выводит текст без перевода строки | print "Привет" | |
| p | Выводит отладочное представление объекта | p "Привет" |
| gets | Считывает строку ввода пользователя | name = gets |
Максим Петров, преподаватель программирования
Я всегда начинаю первое занятие по Ruby именно с Hello World. Однажды ко мне на курс пришёл студент Андрей, который до этого безуспешно пытался освоить Java и C++. Он был настолько разочарован в своих способностях, что уже решил бросить идею стать программистом. Когда я показал ему эту одну строчку кода на Ruby и объяснил, что она делает, я увидел, как в его глазах загорелась надежда. "Это действительно всё? Так просто?" — спросил он недоверчиво. К концу занятия Андрей уже написал программу, которая спрашивала имя пользователя и приветствовала его персонально. Сейчас, три года спустя, он работает Ruby-разработчиком в крупной компании и иногда шутит, что ему потребовалась всего одна строчка кода, чтобы изменить свою жизнь.

Основные типы данных в Ruby через практический код
Ruby — язык с динамической типизацией, что означает отсутствие необходимости заранее объявлять типы переменных. Но понимание базовых типов данных всё равно критически важно. Давайте рассмотрим их на практических примерах. 📊
Числа в Ruby могут быть целыми (Integer) или с плавающей точкой (Float):
# Целые числа
age = 25
year = 2023
# Числа с плавающей точкой
temperature = 36.6
pi = 3.14159
puts "Возраст: #{age}, текущий год: #{year}"
puts "Температура: #{temperature}, число Пи: #{pi}"
Строки (String) — последовательности символов:
name = "Ruby"
greeting = 'Привет'
multiline = "Это строка
с переносом строки"
puts name
puts greeting
puts multiline
Булевы значения (true/false) и nil (отсутствие значения):
is_programmer = true
has_experience = false
knowledge = nil
puts "Программист? #{is_programmer}"
puts "Есть опыт? #{has_experience}"
puts "Знания: #{knowledge.nil? ? 'отсутствуют' : knowledge}"
Массивы — упорядоченные коллекции элементов:
fruits = ["яблоко", "банан", "апельсин"]
mixed = [1, "два", 3.0, true]
puts "Первый фрукт: #{fruits[0]}"
puts "Все фрукты: #{fruits.join(', ')}"
puts "Смешанный массив: #{mixed}"
Хеши — коллекции пар ключ-значение:
person = {
"name" => "Алексей",
"age" => 30,
"is_ruby_developer" => true
}
# Более современный синтаксис с символами
book = {
title: "Ruby для начинающих",
pages: 300,
available: true
}
puts "Человек: #{person['name']}, возраст: #{person['age']}"
puts "Книга: #{book[:title]}, страниц: #{book[:pages]}"
| Тип данных | Описание | Пример | Методы проверки |
|---|---|---|---|
| Integer | Целое число | 42 | x.is_a?(Integer) |
| Float | Число с плавающей точкой | 3.14 | x.is_a?(Float) |
| String | Текстовая строка | "Привет" | x.is_a?(String) |
| Boolean | Логическое значение | true, false | x true, x false |
| Array | Упорядоченная коллекция | [1, 2, 3] | x.is_a?(Array) |
| Hash | Коллекция пар ключ-значение | {a: 1, b: 2} | x.is_a?(Hash) |
| Symbol | Неизменяемый идентификатор | :name | x.is_a?(Symbol) |
| nil | Отсутствие значения | nil | x.nil? |
Чтобы определить тип переменной в Ruby, можно использовать метод class:
x = 10
y = "строка"
z = [1, 2, 3]
puts "x имеет тип #{x.class}" # выведет "x имеет тип Integer"
puts "y имеет тип #{y.class}" # выведет "y имеет тип String"
puts "z имеет тип #{z.class}" # выведет "z имеет тип Array"
Ruby также позволяет легко преобразовывать типы данных:
number_str = "42"
number = number_str.to_i # преобразуем строку в целое число
float_num = number.to_f # преобразуем целое число в число с плавающей точкой
back_to_str = number.to_s # преобразуем число обратно в строку
puts number_str.class # String
puts number.class # Integer
puts float_num.class # Float
puts back_to_str.class # String
Работа со строками и пользовательским вводом в Ruby
Строки — один из самых часто используемых типов данных в программировании. Ruby предлагает богатый набор инструментов для работы с текстом и взаимодействия с пользователем. 📝
Начнем с основ создания и объединения строк:
# Создание строк
first_name = "Иван"
last_name = 'Петров'
# Конкатенация (объединение) строк
full_name = first_name + " " + last_name
puts full_name # Выведет: Иван Петров
# Интерполяция строк (работает только с двойными кавычками)
greeting = "Привет, #{first_name} #{last_name}!"
puts greeting # Выведет: Привет, Иван Петров!
Вот несколько полезных операций со строками:
text = "Ruby — замечательный язык программирования"
# Получение длины строки
puts text.length # 45
# Преобразование регистра
puts text.upcase # RUBY — ЗАМЕЧАТЕЛЬНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ
puts text.downcase # ruby — замечательный язык программирования
puts text.capitalize # Ruby — замечательный язык программирования
# Проверка содержимого
puts text.include?("язык") # true
puts text.start_with?("Ruby") # true
puts text.end_with?("руби") # false
# Замена текста
puts text.gsub("замечательный", "прекрасный") # Ruby — прекрасный язык программирования
# Разбивка строки на массив
words = text.split(" ")
puts words.inspect # ["Ruby", "—", "замечательный", "язык", "программирования"]
# Удаление пробелов в начале и в конце
padded_text = " текст с пробелами "
puts padded_text.strip # "текст с пробелами"
Теперь рассмотрим, как работать с пользовательским вводом:
# Простое получение ввода
print "Введите ваше имя: "
name = gets.chomp # chomp удаляет символ новой строки в конце
puts "Привет, #{name}!"
# Запрос числового ввода с проверкой
print "Введите ваш возраст: "
age_input = gets.chomp
# Проверяем, является ли ввод числом
if age_input =~ /^\d+$/
age = age_input.to_i
puts "Через 10 лет вам будет #{age + 10}."
else
puts "Это не похоже на число."
end
А вот пример программы, которая запрашивает несколько данных и составляет историю:
puts "Давайте создадим короткую историю. Введите следующие данные:"
print "Имя главного героя: "
hero = gets.chomp
print "Профессия героя: "
profession = gets.chomp
print "Место действия: "
place = gets.chomp
print "Год действия: "
year = gets.chomp
# Формируем историю
story = <<~STORY
В #{year} году #{hero}, работая #{profession},
отправился в #{place}. Это приключение навсегда
изменило его жизнь.
STORY
puts "\nВаша история:"
puts story
Анна Соколова, автор курсов по программированию
Никогда не забуду Марину — дизайнера, которая пришла на мой курс Ruby со страхом, что программирование — это не для творческих людей. Когда мы дошли до темы строк и пользовательского ввода, я предложила ей создать простую текстовую игру, что-то вроде интерактивной истории. Сначала она скептически отнеслась к идее, но через неделю прислала мне программу, которая генерировала персонализированные сказки на основе ввода пользователя. Её код был элегантным и чистым, с множеством творческих решений. "Я обнаружила, что программирование — это тоже творчество, просто в другой форме," — написала она мне. "Ruby с его работой со строками позволяет мне выражать свои идеи так же свободно, как я делаю это в дизайне". Сейчас Марина успешно совмещает дизайн и разработку, создавая уникальные интерактивные истории, которые используются в образовании.
Создание простых математических программ на Ruby
Ruby обладает полным набором математических операторов и функций, позволяющих создавать как простые, так и сложные вычислительные программы. Давайте рассмотрим несколько практических примеров. 🧮
Начнем с базовых арифметических операций:
# Основные математические операторы
a = 10
b = 3
puts "Сложение: #{a} + #{b} = #{a + b}" # 13
puts "Вычитание: #{a} – #{b} = #{a – b}" # 7
puts "Умножение: #{a} * #{b} = #{a * b}" # 30
puts "Деление: #{a} / #{b} = #{a / b}" # 3 (целочисленное деление)
puts "Деление с плавающей точкой: #{a} / #{b.to_f} = #{a / b.to_f}" # 3.3333...
puts "Остаток от деления: #{a} % #{b} = #{a % b}" # 1
puts "Возведение в степень: #{a} ** #{b} = #{a ** b}" # 1000
Обратите внимание, что при делении целых чисел результат также будет целым числом. Для получения дробного результата нужно, чтобы хотя бы одно из чисел было с плавающей точкой.
Теперь создадим программу для расчета площади и периметра различных геометрических фигур:
puts "Программа для расчёта геометрических параметров"
puts "Выберите фигуру (1 – круг, 2 – прямоугольник, 3 – треугольник):"
choice = gets.chomp.to_i
case choice
when 1
print "Введите радиус круга: "
radius = gets.chomp.to_f
area = Math::PI * radius**2
perimeter = 2 * Math::PI * radius
puts "Площадь круга: #{area.round(2)}"
puts "Длина окружности: #{perimeter.round(2)}"
when 2
print "Введите длину прямоугольника: "
length = gets.chomp.to_f
print "Введите ширину прямоугольника: "
width = gets.chomp.to_f
area = length * width
perimeter = 2 * (length + width)
puts "Площадь прямоугольника: #{area.round(2)}"
puts "Периметр прямоугольника: #{perimeter.round(2)}"
when 3
print "Введите длину первой стороны треугольника: "
a = gets.chomp.to_f
print "Введите длину второй стороны треугольника: "
b = gets.chomp.to_f
print "Введите длину третьей стороны треугольника: "
c = gets.chomp.to_f
if a + b > c && a + c > b && b + c > a
# Полупериметр для формулы Герона
s = (a + b + c) / 2
area = Math.sqrt(s * (s – a) * (s – b) * (s – c))
perimeter = a + b + c
puts "Площадь треугольника: #{area.round(2)}"
puts "Периметр треугольника: #{perimeter.round(2)}"
else
puts "Треугольник с такими сторонами не существует!"
end
else
puts "Неверный выбор!"
end
А вот простая программа, которая считает статистические показатели для набора чисел:
puts "Введите несколько чисел через пробел:"
input = gets.chomp
numbers = input.split.map(&:to_f)
if numbers.empty?
puts "Вы не ввели ни одного числа!"
else
sum = numbers.sum
count = numbers.count
average = sum / count
min = numbers.min
max = numbers.max
# Находим медиану
sorted = numbers.sort
median = if count.odd?
sorted[count / 2]
else
(sorted[count / 2 – 1] + sorted[count / 2]) / 2.0
end
puts "Введены числа: #{numbers.join(', ')}"
puts "Количество чисел: #{count}"
puts "Сумма: #{sum}"
puts "Среднее арифметическое: #{average.round(2)}"
puts "Минимальное значение: #{min}"
puts "Максимальное значение: #{max}"
puts "Медиана: #{median.round(2)}"
end
Для более сложных математических операций Ruby предоставляет модуль Math:
# Использование модуля Math
angle_degrees = 45
angle_radians = angle_degrees * Math::PI / 180
puts "Синус #{angle_degrees} градусов = #{Math.sin(angle_radians).round(4)}"
puts "Косинус #{angle_degrees} градусов = #{Math.cos(angle_radians).round(4)}"
puts "Тангенс #{angle_degrees} градусов = #{Math.tan(angle_radians).round(4)}"
puts "Квадратный корень из 16 = #{Math.sqrt(16)}"
puts "Натуральный логарифм 10 = #{Math.log(10).round(4)}"
puts "Логарифм 100 по основанию 10 = #{Math.log10(100)}"
puts "e в степени 2 = #{Math.exp(2).round(4)}"
Пошаговое руководство: разрабатываем калькулятор на Ruby
Создание калькулятора — отличный проект для закрепления полученных знаний. Мы разработаем консольный калькулятор, который сможет выполнять базовые арифметические операции и обрабатывать различные ситуации. 🧠
Давайте реализуем наш калькулятор пошагово, постепенно добавляя функциональность.
Шаг 1: Создание базового калькулятора
Начнем с простой версии калькулятора, который умеет выполнять основные арифметические операции:
# Простой калькулятор
puts "Добро пожаловать в Ruby Калькулятор!"
print "Введите первое число: "
num1 = gets.chomp.to_f
print "Введите операцию (+, -, *, /): "
operation = gets.chomp
print "Введите второе число: "
num2 = gets.chomp.to_f
result = case operation
when "+"
num1 + num2
when "-"
num1 – num2
when "*"
num1 * num2
when "/"
if num2 != 0
num1 / num2
else
"Ошибка: деление на ноль!"
end
else
"Неизвестная операция!"
end
puts "Результат: #{result}"
Шаг 2: Улучшение обработки ошибок
Добавим более продвинутую обработку ошибок и возможность повторного выполнения вычислений:
def get_number(prompt)
loop do
print prompt
input = gets.chomp
# Проверяем, является ли ввод числом
if input =~ /^-?\d*\.?\d+$/
return input.to_f
else
puts "Ошибка! Введите корректное число."
end
end
end
def get_operation
loop do
print "Введите операцию (+, -, *, /): "
operation = gets.chomp
if ["+", "-", "*", "/"].include?(operation)
return operation
else
puts "Ошибка! Введите одну из доступных операций: +, -, *, /"
end
end
end
def calculate(num1, operation, num2)
case operation
when "+"
num1 + num2
when "-"
num1 – num2
when "*"
num1 * num2
when "/"
if num2 != 0
num1 / num2
else
"Ошибка: деление на ноль!"
end
end
end
# Главный цикл калькулятора
loop do
puts "\nRuby Калькулятор"
puts "----------------"
num1 = get_number("Введите первое число: ")
operation = get_operation
num2 = get_number("Введите второе число: ")
result = calculate(num1, operation, num2)
puts "Результат: #{result}"
print "\nХотите выполнить еще одно вычисление? (да/нет): "
answer = gets.chomp.downcase
break unless answer == "да" || answer == "y" || answer == "yes"
end
puts "Спасибо за использование Ruby Калькулятора!"
Шаг 3: Расширенная функциональность
Теперь добавим дополнительные операции, такие как возведение в степень, вычисление корня и процентов:
def get_number(prompt)
loop do
print prompt
input = gets.chomp
if input =~ /^-?\d*\.?\d+$/
return input.to_f
else
puts "Ошибка! Введите корректное число."
end
end
end
def display_menu
puts "\nДоступные операции:"
puts "1. Сложение (+)"
puts "2. Вычитание (-)"
puts "3. Умножение (*)"
puts "4. Деление (/)"
puts "5. Возведение в степень (^)"
puts "6. Квадратный корень (√)"
puts "7. Процент от числа (%)"
puts "8. Выход"
end
def get_operation_choice
loop do
print "Выберите операцию (1-8): "
choice = gets.chomp.to_i
if (1..8).include?(choice)
return choice
else
puts "Ошибка! Введите число от 1 до 8."
end
end
end
def calculate(choice)
case choice
when 1 # Сложение
num1 = get_number("Введите первое число: ")
num2 = get_number("Введите второе число: ")
result = num1 + num2
operation = "+"
when 2 # Вычитание
num1 = get_number("Введите первое число: ")
num2 = get_number("Введите второе число: ")
result = num1 – num2
operation = "-"
when 3 # Умножение
num1 = get_number("Введите первое число: ")
num2 = get_number("Введите второе число: ")
result = num1 * num2
operation = "*"
when 4 # Деление
num1 = get_number("Введите делимое: ")
num2 = get_number("Введите делитель: ")
if num2 == 0
return "Ошибка: деление на ноль!"
else
result = num1 / num2
operation = "/"
end
when 5 # Возведение в степень
num1 = get_number("Введите основание: ")
num2 = get_number("Введите показатель степени: ")
result = num1 ** num2
operation = "^"
when 6 # Квадратный корень
num1 = get_number("Введите число: ")
if num1 < 0
return "Ошибка: нельзя вычислить квадратный корень из отрицательного числа!"
else
result = Math.sqrt(num1)
return "√#{num1} = #{result.round(4)}"
end
when 7 # Процент от числа
num1 = get_number("Введите число: ")
num2 = get_number("Введите процент: ")
result = num1 * (num2 / 100)
return "#{num2}% от #{num1} = #{result.round(4)}"
when 8 # Выход
return "exit"
end
"#{num1} #{operation} #{num2} = #{result.round(4)}"
end
# Главный цикл калькулятора
puts "Добро пожаловать в Расширенный Ruby Калькулятор!"
loop do
display_menu
choice = get_operation_choice
result = calculate(choice)
break if result == "exit"
puts "\nРезультат: #{result}"
print "\nНажмите Enter для продолжения..."
gets
end
puts "Спасибо за использование Расширенного Ruby Калькулятора!"
Наш калькулятор теперь может выполнять не только базовые арифметические операции, но и работать с более сложными вычислениями.
Вот основные концепции, которые мы использовали при создании калькулятора:
- Получение и валидация пользовательского ввода
- Использование циклов для повторения операций
- Применение условных конструкций для обработки разных случаев
- Работа с математическими операциями
- Обработка ошибок (деление на ноль, корень из отрицательного числа)
- Организация кода с помощью функций
Вы можете дальше расширять этот калькулятор, добавляя новые функции, например:
- Тригонометрические функции (синус, косинус, тангенс)
- Логарифмы
- Работа с памятью (сохранение и использование результатов)
- Вычисление факториала
- Перевод между системами счисления
- Графический интерфейс (с использованием библиотек, таких как Tk или GTK)
Освоение Ruby через создание простых программ — прекрасная стратегия для начинающих разработчиков. От простого "Hello World" до функционального калькулятора — каждый шаг на этом пути закрепляет понимание основных концепций программирования. Ruby действительно создан, чтобы сделать программистов счастливыми, предлагая элегантный, читабельный и мощный синтаксис. Помните, что практика — ключ к мастерству. Экспериментируйте с кодом, модифицируйте примеры, и вскоре вы обнаружите, что способны создавать значительно более сложные программы.
Читайте также
- Базовый синтаксис Python: 7 конструкций для начинающих программистов
- JavaScript для начинающих: простые шаги к интерактивным сайтам
- Самые простые языки программирования для новичков: топ-7 выбор
- Начни изучать JavaScript прямо сейчас: 10 простых примеров кода для новичков
- Синтаксис Scratch: основы программирования блоками для новичков
- 10 простых проектов в Scratch: от первого кода к играм и анимации
- Python для начинающих: 5 простых примеров программ – стартуем
- Python: идеальный язык для начинающих программистов – 5 причин
- Ruby: элегантный язык программирования для начинающих кодеров


