Ruby: как создать первую программу от Hello World до калькулятора

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Начинающие разработчики, желающие освоить программирование
  • Люди всех возрастов, заинтересованные в обучении языку 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 Выводит текст без перевода строки 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 действительно создан, чтобы сделать программистов счастливыми, предлагая элегантный, читабельный и мощный синтаксис. Помните, что практика — ключ к мастерству. Экспериментируйте с кодом, модифицируйте примеры, и вскоре вы обнаружите, что способны создавать значительно более сложные программы.

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Кто создал язык программирования Ruby?
1 / 5

Загрузка...