Tehtävä:
Tässä tehtävässä jatkamme toisessa tehtävässä luodun Laatikko-luokan kanssa työskentelyä. Lisää siis Laatikko-luokkaan seuraavat ominaisuudet:
(1) Metodi nollaa, joka tyhjentää jäsenmuuttujan sisus asettamalla sen arvoksi tyhjän merkkijonon, sekä (2) lisää jäsenmuuttuja koko, joka saa alustuksessa arvokseen jäsenmuuttujan sisus pituuden, tai jos sitä ei määritellä, arvon 0. Lopuksi tee vielä (3) metodi suuri?, joka palauttaa arvon true jos koko on suurempi kuin 25 ja false jos pienempi kuin 25.
Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
Varasto = Laatikko.new()
Varasto.sisus = "hirviömeikkilaukkutelinetukijalka"
tulos = Varasto.suuri?
puts "Kokotestin tulos oli: #{tulos}."
Varasto.nollaa
tulos = Varasto.suuri?
puts "Kokotestin tulos oli: #{tulos}."
Toimiessaan oikein ohjelma tulostaa seuraavaa:
Example output:
Kokotestin tulos oli: true.
Kokotestin tulos oli: false.
Vastaus
#!/usr/bin/env ruby
# coding: utf-8
class Laatikko
# alustaja
def initialize(sisalto=nil, koko=0)
@sisus = sisalto
if not @sisus.nil? then @koko = @sisus.length end
end
# set-metodi
def sisus=(sisalto)
@sisus = sisalto
@koko = @sisus.length
end
# get-metodi
def sisus
@sisus
end
def nollaa
@sisus = nil
@koko = 0
end
def suuri?
# Tehtävänannossa on sanottu:
# "palauttaa arvon true jos koko on suurempi
# kuin 25 ja false jos pienempi kuin 25."
#
# Mitä tämän luokkametodin pitäisi palauttaa,
# jos arvo on tasan 25?
# Alla oleva implementaatio ei vastaa
# tehtävänannon kuvausta kyseisin osin.
#return @koko > 25 ? true : false
# Tämä vastaa tehtävänannon määrittelyyn,
# mutta ei ota kantaa, jos @koko == 25
#
return true if @koko > 25
return false if @koko < 25
end
end
Varasto = Laatikko.new()
Varasto.sisus = "hirviömeikkilaukkutelinetukijalka"
tulos = Varasto.suuri?
puts "Kokotestin tulos oli: #{tulos}."
Varasto.nollaa
tulos = Varasto.suuri?
puts "Kokotestin tulos oli: #{tulos}."