122 lines
3.0 KiB
Markdown
122 lines
3.0 KiB
Markdown
---
|
|
status: seed
|
|
type: knowledge
|
|
tags:
|
|
- programming
|
|
- ruby
|
|
created: 2026-05-17
|
|
updated: 2026-05-17
|
|
title: Ruby - основы языка
|
|
source: "[[Ruby - основы языка]]"
|
|
---
|
|
|
|
# Ruby — основы языка
|
|
|
|
Ruby — объектно-ориентированный язык, но допускает процедурный стиль написания кода. Всё является объектом, включая числа и булевы значения.
|
|
|
|
Связанные темы: [[Ruby On Rails]]
|
|
|
|
## Синтаксис
|
|
|
|
- Знак препинания в конце строки не нужен
|
|
- Отступы не несут синтаксического смысла (в отличие от Python)
|
|
- Несколько команд в одной строке разделяются через `;`
|
|
|
|
```ruby
|
|
puts "Hello World!"
|
|
puts 42; puts "next line"
|
|
```
|
|
|
|
## Комментарии
|
|
|
|
```ruby
|
|
# однострочный комментарий
|
|
|
|
=begin
|
|
многострочный
|
|
комментарий
|
|
=end
|
|
```
|
|
|
|
## Типы данных
|
|
|
|
```ruby
|
|
"Hello".class # => String
|
|
true.class # => TrueClass
|
|
5.class # => Integer
|
|
6.4.class # => Float
|
|
nil.class # => NilClass
|
|
```
|
|
|
|
### Именование
|
|
|
|
- Переменные — с маленькой буквы: `my_var`
|
|
- Классы — с большой буквы: `MyClass`
|
|
- Ключевые слова языка использовать нельзя
|
|
|
|
### Преобразование типов
|
|
|
|
**Явное:**
|
|
|
|
| Метод | Что делает |
|
|
|--------|-----------------------------------------|
|
|
| `to_i` | к целому числу (дробная часть отсекается) |
|
|
| `to_f` | к вещественному числу |
|
|
| `to_s` | к строке |
|
|
|
|
**Неявное:** при математических операциях `Integer + Float` → `Float`.
|
|
|
|
## Управляющие конструкции
|
|
|
|
```ruby
|
|
# if без ветвления
|
|
if a > 0
|
|
action
|
|
end
|
|
|
|
# if-elsif-else
|
|
if a > 0
|
|
...
|
|
elsif a == 0
|
|
...
|
|
else
|
|
...
|
|
end
|
|
|
|
# unless — выполнится, если условие ложно
|
|
unless a > 0
|
|
action
|
|
end
|
|
|
|
# case
|
|
case a
|
|
when 1 then puts "один"
|
|
when 2 then puts "два"
|
|
else puts "другое"
|
|
end
|
|
```
|
|
|
|
## Циклы
|
|
|
|
| Оператор | Назначение |
|
|
|----------|-----------|
|
|
| `loop` | бесконечный цикл; выход через `break` |
|
|
| `while` | цикл с условием выполнения |
|
|
| `until` | цикл, пока условие ложно |
|
|
| `for` | итератор по перечислимому объекту |
|
|
| `next` | пропустить текущий шаг |
|
|
| `redo` | повторить текущий шаг заново |
|
|
|
|
**Диапазоны в `for`:**
|
|
|
|
```ruby
|
|
for i in 1..5 # от 1 до 5 включительно
|
|
for i in 1...5 # от 1 до 4 (5 не входит)
|
|
```
|
|
|
|
**Деление с остатком:**
|
|
|
|
```ruby
|
|
x, r = x.divmod(n)
|
|
```
|