Menu
Coddy logo textTech

Шпаргалка по Ruby

Последнее обновление

Hello World и запуск кода

Ruby не требует шаблонного кода - запускается одна строка.

ОперацияСинтаксис
Вывести с переводом строкиputs "Hello, World!"
Вывести без перевода строкиprint "Hello"
Осмотреть значениеp [1, 2, 3]
Интерполяция строкputs "Hi #{name}"
Комментарий# this is a comment
Многострочный комментарий=begin ... =end
Запустить файлruby app.rb
Интерактивная оболочкаirb

Переменные и типы

Ruby динамически типизирован; всё является объектом.

ОперацияСинтаксис
Локальная переменнаяage = 30
КонстантаPI = 3.14
Переменная экземпляра@name = "Ada"
Глобальная переменная$count = 0
Символ:status
Nil / логическиеnil, true, false
Узнать тип42.class возвращает Integer
Преобразовать тип"42".to_i, 42.to_s, "3.5".to_f

Строки

Строки - изменяемые объекты с богатым набором методов.

ОперацияСинтаксис
Длина"hello".length
Верхний / нижний регистрs.upcase, s.downcase
Убрать пробелы по краямs.strip
Заменитьs.gsub("a", "b")
Разбить в массив"a,b,c".split(",")
Содержит подстрокуs.include?("ell")
Срез символовs[0..2]
Конкатенация"foo" + "bar", s << "!"
Повтор"ab" * 3
Форматированиеformat("%05d", 42)

Массивы

Упорядоченные коллекции с целочисленными индексами.

ОперацияСинтаксис
Создатьnums = [1, 2, 3]
Доступ по индексуnums[0], nums[-1]
Добавить в конецnums.push(4), nums << 4
Удалить с концаnums.pop
Длинаnums.length
Mapnums.map { |n| n * 2 }
Фильтрацияnums.select { |n| n.even? }
Свёрткаnums.reduce(0) { |sum, n| sum + n }
Сортировкаnums.sort
Объединить в строкуnums.join(", ")

Хеши

Коллекции ключ-значение, часто с символами в качестве ключей.

ОперацияСинтаксис
Создатьuser = { name: "Ada", age: 30 }
Получить значениеuser[:name]
Задать значениеuser[:email] = "a@x.com"
Проверить ключuser.key?(:name)
Удалить ключuser.delete(:age)
Ключи / значенияuser.keys, user.values
Переборuser.each { |k, v| puts "#{k}: #{v}" }
Значение по умолчаниюHash.new(0)
Слияниеh1.merge(h2)

Управление потоком

Условия и циклы; обратите внимание на завершающие модификаторы Ruby.

ОперацияСинтаксис
If / elsif / elseif x > 0 ... elsif x < 0 ... else ... end
Однострочный if (модификатор)puts "hi" if ready
Unlessunless done ... end
Тернарный операторx > 0 ? "pos" : "neg"
Case / whencase n; when 1 then ...; else ...; end
Цикл whilewhile i < 10 ... end
Цикл untiluntil done ... end
Times5.times { |i| puts i }
Итерация по диапазону(1..5).each { |i| puts i }
Break / nextbreak, next

Методы

Последнее выражение возвращается неявно.

ОперацияСинтаксис
Определить методdef add(a, b) ... end
Неявный возвратdef square(x) x * x end
Аргумент по умолчаниюdef greet(name = "World") ... end
Именованные аргументыdef box(w:, h:) ... end
Splat (вариативный)def sum(*nums) ... end
Метод, оканчивающийся на ?def valid? ... end
Метод, оканчивающийся на !def normalize! ... end
Вызов без скобокgreet "Ada"

Блоки, proc и лямбды

Блоки - это фрагменты кода, передаваемые методам; proc и лямбды их хранят.

ОперацияСинтаксис
Блок (фигурные скобки)[1, 2].each { |n| puts n }
Блок (do/end)[1, 2].each do |n| puts n end
Передать управление блоку (yield)def run; yield; end
Проверка наличия блокаblock_given?
Захватить блок как параметрdef run(&blk); blk.call; end
Создать procsquare = proc { |x| x * x }
Создать лямбдуsquare = ->(x) { x * x }
Вызвать proc / лямбдуsquare.call(3), square.(3)

Классы и модули

Классы хранят состояние и поведение; модули подмешивают общие методы.

ОперацияСинтаксис
Определить классclass Point ... end
Конструкторdef initialize(x, y) @x = x; @y = y; end
Метод экземпляраdef dist ... end
Сокращения для аксессоровattr_accessor :x, :y
Создать экземплярp = Point.new(1, 2)
Наследованиеclass Circle < Shape ... end
Метод классаdef self.origin ... end
Определить модульmodule Drawable ... end
Подмешать модульinclude Drawable
Вызвать supersuper(args)

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

Всё здесь - чистый Ruby, который работает на любом стандартном интерпретаторе. Копируйте нужное или попробуйте каждый фрагмент вживую в playground для Ruby - без установки.

Часто задаваемые вопросы по шпаргалке Ruby

Эта шпаргалка по Ruby бесплатна?
Да. Эта шпаргалка по Ruby полностью бесплатна, регистрация не требуется. Добавьте её в закладки и возвращайтесь, когда нужно посмотреть метод строки, операцию с хешем или синтаксис блока.
В чём разница между блоком, proc и лямбдой?
Блок - это анонимный фрагмент кода, передаваемый методу через { ... } или do ... end; сам по себе он не является объектом. proc оборачивает блок в вызываемый объект, который можно хранить и передавать. lambda - это особый proc, который строго проверяет количество аргументов и трактует return как возврат из самой лямбды, тогда как обычный proc возвращает управление из окружающего метода.
Что такое символы в Ruby?
Символ вроде :name - это неизменяемый, переиспользуемый идентификатор. Поскольку один и тот же символ всегда указывает на один объект в памяти, символы быстрее и экономнее по памяти, чем строки, для таких вещей, как ключи хешей и имена методов - поэтому хеши часто записывают как { name: "Ada" }.
Можно ли практиковать Ruby онлайн?
Да. Откройте playground для Ruby, чтобы выполнить любой фрагмент из этой шпаргалки прямо в браузере - без установки Ruby. А если нужна структура, бесплатный интерактивный курс Ruby от Coddy шаг за шагом проведёт вас от переменных и строк до блоков и классов.
Подходит ли эта шпаргалка для начинающих?
Да. Она построена от самых распространённых тем (переменные, строки, управление потоком) к продвинутым (блоки, proc, классы), так что верхние разделы можно использовать с первого дня и постепенно осваивать остальное.
Coddy programming languages illustration

Изучайте Ruby с Coddy

НАЧАТЬ