Ruby — мощный скриптовый язык программирования, который создавался с целью сделать программирование максимально «человечным». В этом языке очень много идиоматики, то есть принципов, как делать те или иные штуки: правильно и в стиле Ruby Way. Это очень похоже на Python с его Pythonic, но Ruby Way местами идёт в противоположную сторону. В этом месте программисты делятся на два лагеря. Одним Ruby Way приходится по душе, другие же его не принимают.
Ruby создавался таким, чтобы одну и ту же задачу можно было сделать большим количеством способов. Например, у многих методов существуют алиасы, которые не добавляют новой функциональности — они просто существуют для логичности (стройности) языка. Пример из Rails: 1.day + 5.days
. У обоих операндов вызывается один и тот же метод, но у него разные названия — для того, чтобы можно было легко прочесть написанное.
Ruby, благодаря лаконичному синтаксису с минимумом шума и наличию блоков, позволяет создавать DSL буквально под каждую задачу, чем программисты с удовольствием пользуются. Это одна из причин, почему язык стал популярен в DevOps-среде, где было создано множество инструментов, написанных на Ruby (Chef, Puppet и другие).
# Вроде бы просто роутинг, но он не выглядит как код
Rails.application.routes.draw do
root to: "pages#main"
resources :posts do
get :preview
resources :comments, only: [:new, :create, :destroy]
end
end
Подводя итог, можно сказать, что Ruby очень приятный и удобный для разработки язык. Попробуйте взять код ниже и написать на вашем текущем языке, а затем сравните:
# Что делает этот код?
sentence = ' Ruby one love '
sentence.strip.split.last.size # 4
В мире существует множество разных билетов: на транспорт, в кино, в театр и так далее. И, как правило, у каждого билета есть свой индивидуальный номер. Считается, что билет счастливый, если сумма цифр, входящих в этот билет с самого начала и до середины, равна сумме цифр после середины этого числа. Например, если номер билета 723428, то нам нужно сложить 7 + 2 + 3 и сравнить это с 4 + 2 + 8. Данный билет счастливым не является.
Напишите функцию happy?()
, которая определяет, счастливый ли перед нами билет. Если билет счастливый, функция должна вернуть true
, если нет — false
. Функция должна работать только с числом, состоящим из чётного количества цифр:
happy?(77) # true
happy?(7881) # false
happy?(732930) # true
Алгоритм функции достаточно простой. Нужно превратить число в строку, поделить пополам (можно взять подстроку), и пройтись по каждой половине, считая сумму цифр. Для подсчета лучше написать отдельную функцию, чтобы не дублировать эту логику.
Для решения этой задачи вам могут понадобится:
to_s()
– метод конвертации в строкуto_i()
– метод конвертации в числоЕсли вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1# frozen_string_literal: true
2
3require 'test_helper'
4require_relative 'index'
5
6describe 'function' do
7 it 'should works' do
8 assert { happy? 33 }
9 assert { !happy? 3833 }
10 assert { happy? 123_321 }
11 assert { happy? 666_666 }
12 assert { !happy? 123_456 }
13 end
14end
15
Решение учителя откроется через: