LINUX.ORG.RU

Загвоздка в обучении.

 ,


0

1

Всем доброго времени суток. Изучаю RUBY с нуля, никогда не занимался кодированием, поэтому спросить совета особо не у кого. Есть задача: написать спецификацию к таймеру. Сам решить не смог, поэтому гуглил.

Файл .spec

# # Topics
#
# * classes
# * instance variables
# * string formats
# * modular arithmetic
#
# # Timer

require 'timer'

describe "Timer" do
  before(:each) do
    @timer = Timer.new
  end

  it "should initialize to 0 seconds" do
    @timer.seconds.should == 0
  end

  describe 'time_string' do
    it "should display 0 seconds as 00:00:00" do
      @timer.seconds = 0
      @timer.time_string.should == "00:00:00"
    end

    it "should display 12 seconds as 00:00:12" do
      @timer.seconds = 12
      @timer.time_string.should == "00:00:12"
    end

    it "should display 66 seconds as 00:01:06" do
      @timer.seconds = 66
      @timer.time_string.should == "00:01:06"
    end

    it "should display 4000 seconds as 01:06:40" do
      @timer.seconds = 4000
      @timer.time_string.should == "01:06:40"
    end
  end


  # One way to implement the Timer is with a helper method.
  # Uncomment these specs if you want to test-drive that
  # method, then call that method from inside of time_string.
  #
  # describe 'padded' do
  #   it 'pads zero' do
  #     @timer.padded(0).should == '00'
  #   end
  #   it 'pads one' do
  #     @timer.padded(1).should == '01'
  #   end
  #   it "doesn't pad a two-digit number" do
  #     @timer.padded(12).should == '12'
  #   end
  # end

end

Вариант решения из сети:

class Timer
  attr_accessor :seconds

  def initialize
    @seconds = 0
  end

  def time_string
    hours = @seconds/3600
    remainder = @seconds%3600
    sprintf("%02d:%02d:%02d", hours, remainder/60, remainder%60)
  end
  
end

Прошу помощи, разъясните код. Не понятно, как и почему используются операторы / и %, а так же что за запись «%02d:%02d:%02d»?

P.S. Прошу не ржать в голос за глупый вопрос.

Не понятно, как и почему используются операторы / и %

Чтобы получить из секунд минуты и часы.

что за запись «%02d:%02d:%02d»?

Форматная строка для sprintf.

Мой совет, научись пользоваться документацией, очень полезно.

PS. before(:each) do эквивалентно before do.

PPS. Синтаксис should для RSpec не рекомендуется использовать вот уже как шесть лет.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

theNamelessOne спасибо за пояснения.

Выражение should использованно не по собственной воле. Прохожу онлайн курс на одном ресурсе, там же выдают задания.

Использование оператора деления в принципе не вызывает вопросов, а вот с оператором деления по модулю... Буду искать в документации.

В общем спасибо.

kolobok874
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.