Комментарии по программе

  1. Этот файл описания обязательно должен быть в репозитории, содержание я описал тут в рыбках - https://github.com/Kortium/Ruby-Fishes/pull/1/files#diff-04c6e90faac2675aa89e2176d2eec7d8
  2. С тестами отлично - один только упал, остальные рабочие, на этом этапе все принимается.
  3. По зпуску программы - если добавила гем, сделай Gemfile чтобы можно было дотянуть зависимости, сразу программа так не запускается без изучения кода и ошибок вызова чтобы ее стартануть.
  4. В целом очень хорошая работа, хотел бы выделить один момент который пронизывает всю твою работу, критичным сейчас не является, но на перспективу я хотел бы чтобы ты на этот момент обратила внимание, и аккуратно гачала пробовть писать код именно так. Это и есть зарождение твоего стиля.

Общий комментарий по всему коду - все усвоено и применено в нужных местах, но для понимания общей картины твоего погружения в руби рассмотрим детально один пример:

У тебя есть код:

# lib/vechicle.rb:32
def stop!
  if !@motion
    puts "#{get_vehicle_name} already stopped"
  else
    @motion = false
    puts "#{get_vehicle_name} stopped"
  end
end

Для хорошего читабельного кода старайся вести диалог (используй глаголы) если дело касается дейсвтий или состояний, то есть такая конструкция читается легче и тебе и мне:

def stop!
  if stopped?
    puts "#{get_vehicle_name} already stopped"
  # ....  cutted code
end

Мы детально не рассматривали еще одну интересную конструкцию, но есть еще алиас not для !-отрицания, то есть:

!@motion
# то же самое что и
not @motion
# консоль:
irb(main):001:0> @motion = true
=> true
irb(main):002:0> !@motion
=> false
irb(main):003:0> not @motion
=> false
irb(main):004:0> not !@motion
=> true

Это нам дает возможность записать код например таким образом:

def stop!
  if not moving?
    puts "#{get_vehicle_name} already stopped"
  # ....  cutted code
end

Пример не самый лучший для выразительности, но читабельности в плане передачи "смысла" от тебя мне через код в виде логики рассуждения и ее воплощение в коде.

Что дает такое описание в принципе - когда ты хочешь что-то описать словами, тебе необходимо побдирать слова чтобы выразить то что ты хочешь сообщить. В момент осознания и рефлексии ситуации ты эти слова начинаешь формировать из своего культурного опыта (скилы, образование - твоя библиотека в голове) и делаешь самое главное - формулируешь мысль.

Так вот на этапе формулировки происходит самое важное в мышлении (в мыследеятельности) - ты формализуешь результат своего мышления, таким образом получая "закрепление" того что ты сейчас сделала у себя в голове (на полочке) в виде конкретного "гробика для мысли" который к которому ты всегда вернешься очень быстро, и так как конструкция будет "законченой".

Таки образом нечно сформулированное можно положить на полочку и использовать далее, то это значит что ты работу выполнила, "проработала" ситуацию и в будущем ты не будешь ее заново "обдумывать" а просто будешь видя знакомый констекст ее применения пользоваться результатом своего мышления, без необходимости тратить на это еще раз время.

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

def stop!
  # Тут не нужно выполнить две операции. Первая - хранить в голове значение @motion так как не сразу очевидно что такое "движение"
  if !@motion
  # ...  
end

Простое переименование в глагол / дейсвтие сразу рефакторит этот момент:

if stopped?
# ...  

А если мы хотим не перебрасывать из контекста в контекст то мы как бы пишем рассказ который связан строчками кода и у нас получается "повествование" и мы можем как-бы рассказ вести:

Остановить технику: если она не движется то сообщить "техника уже остановлена" ...

if not moving?
  puts "#{get_vehicle_name} already stopped"
# ...  

Это основной комментарий который тебе будет полезен, в остальном ты тему понимаешь очень хорошо, работаем дальше.