Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.3 KiB

4 years ago
  1. ## 3 Luokka, varaston laajentaminen
  2. **Tehtävä:**
  3. Tässä tehtävässä jatkamme toisessa tehtävässä luodun Laatikko-luokan kanssa työskentelyä. Lisää siis Laatikko-luokkaan seuraavat ominaisuudet:
  4. (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.
  5. Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
  6. ```
  7. Varasto = Laatikko.new()
  8. Varasto.sisus = "hirviömeikkilaukkutelinetukijalka"
  9. tulos = Varasto.suuri?
  10. puts "Kokotestin tulos oli: #{tulos}."
  11. Varasto.nollaa
  12. tulos = Varasto.suuri?
  13. puts "Kokotestin tulos oli: #{tulos}."
  14. ```
  15. Toimiessaan oikein ohjelma tulostaa seuraavaa:
  16. Example output:
  17. ```
  18. Kokotestin tulos oli: true.
  19. Kokotestin tulos oli: false.
  20. ```
  21. **Vastaus**
  22. ```
  23. #!/usr/bin/env ruby
  24. # coding: utf-8
  25. class Laatikko
  26. # alustaja
  27. def initialize(sisalto=nil, koko=0)
  28. @sisus = sisalto
  29. if not @sisus.nil? then @koko = @sisus.length end
  30. end
  31. # set-metodi
  32. def sisus=(sisalto)
  33. @sisus = sisalto
  34. @koko = @sisus.length
  35. end
  36. # get-metodi
  37. def sisus
  38. @sisus
  39. end
  40. def nollaa
  41. @sisus = nil
  42. @koko = 0
  43. end
  44. def suuri?
  45. # Tehtävänannossa on sanottu:
  46. # "palauttaa arvon true jos koko on suurempi
  47. # kuin 25 ja false jos pienempi kuin 25."
  48. #
  49. # Mitä tämän luokkametodin pitäisi palauttaa,
  50. # jos arvo on tasan 25?
  51. # Alla oleva implementaatio ei vastaa
  52. # tehtävänannon kuvausta kyseisin osin.
  53. #return @koko > 25 ? true : false
  54. # Tämä vastaa tehtävänannon määrittelyyn,
  55. # mutta ei ota kantaa, jos @koko == 25
  56. #
  57. return true if @koko > 25
  58. return false if @koko < 25
  59. end
  60. end
  61. Varasto = Laatikko.new()
  62. Varasto.sisus = "hirviömeikkilaukkutelinetukijalka"
  63. tulos = Varasto.suuri?
  64. puts "Kokotestin tulos oli: #{tulos}."
  65. Varasto.nollaa
  66. tulos = Varasto.suuri?
  67. puts "Kokotestin tulos oli: #{tulos}."
  68. ```