Ta treść została automatycznie przetłumaczona z ukraińskiego.
Dość proste na pierwszy rzut oka pytanie może pojawić się na rozmowie kwalifikacyjnej na stanowisko junior ruby dev. Co zwróci wynik dodawania 10.5 i 10? Gdzie tkwi haczyk?
10.5 + 10
Rozważmy przykład. Jaka jest różnica między 10.5 a 10? Zwróć uwagę na .5, czyli na przecinek dziesiętny. Sprawdźmy klasy tych dwóch obiektów.
10.5.class => Float 10.class => Integer
Oto haczyk. Dodajemy obiekty dwóch klas. Jaki będzie wynik, jeśli dodamy Float i Integer?
(10.5 + 10).class => Float
To znaczy, że po dodaniu Float i Integer otrzymamy Float. Co to oznacza? Oznacza to, że w obecności przecinka - wynik będzie z przecinkiem.
10.5 + 10 => 20.5
Aby to udowodnić - możemy napisać testy. Sprawdzimy również, czy otrzymamy obiekt klasy Integer, jeśli dodamy 10 + 10.
Stwórzmy plik operations_spec.rb:
require 'rspec'
RSpec.describe 'Operacje dodawania' do
context 'gdy dodajemy Float i Integer' do
it 'zwraca Float' do
result = 10.5 + 10
expect(result).to be_a(Float)
expect(result).to eq(20.5)
end
end
context 'gdy dodajemy Integer i Integer' do
it 'zwraca Integer' do
result = 10 + 10
expect(result).to be_a(Integer)
expect(result).to eq(20)
end
end
end
Uruchamiamy i otrzymujemy wynik, który potwierdza wszystko, o czym pisaliśmy powyżej.
rspec operations_spec.rb .. Finished in 0.01617 seconds (files took 0.31407 seconds to load) 2 examples, 0 failures
Wszystko jest dość proste. Ale musisz znać te niuanse.
Ten post nie ma jeszcze żadnych dodatków od autora.