|
|
- ## 4 Oma moduuli, nimiavaruus
-
- **Tehtävä:**
-
- Seitsämännen luvun viimeinen tehtävä on luoda oma moduuli, joka sisältää oman nimiavaruuden. Myös tälläkin kertaa tarkoituksena on luoda itse moduuli, jota käytetään jo olemassaolevan ohjelman toimesta.
-
- Ohjelmaa varten on luotu seuraavanlainen koodi, joka käyttöönottaa moduulin MuuntajaModuuli ja kutsuu siihen määriteltyjä metodeja:
-
- ```
- require "7-4"
-
- include MuuntajaModuuli
-
- MuuntajaModuuli::muunna("Vesihiisi sihisee")
- tulos = MuuntajaModuuli::parillinen?(1024)
-
- if tulos == true
- puts "Testattu luku oli parillinen!"
- end
- ```
-
- Tehtävänäsi on siis luoda tämä moduuli, ja määritellä siihen kaksi metodia `muunna` ja `parillinen?`. Metodi `parillinen?` ottaa vastaan yhden kokonaisluvun, ja kokeilee onko luku parillinen vai ei. Jos luku on parillinen, palautetaan `true`, jos pariton tai epäkelpo arvo, palautetaan `false`. Testinä voidaan käyttää yksinkertaisesti "jakojäännös kahdella"-testiä. Metodi muunna taas vastaanottaa yhden merkkijonon, josta se muuttaa "i"-kirjaimet tähtimerkiksi ("*"), "h"-kirjaimet väliviiväksi ("-") ja "s"-kirjaimet alaviivoiksi ("_"). Tämän jälkeen metodi tulostaa muunnetun merkkijonon.
-
- Kun moduuli toimii oikein, tulostaa ohjelma seuraavaa:
-
- Example output:
-
- ```
- Ve_*_uk_* lu*_taa
- ```
-
- **Vastaus**
-
- ```
- #!/usr/bin/env ruby
- # coding: utf-8
-
- require "./7-4_omamoduuli.rb"
-
- include MuuntajaModuuli
-
- MuuntajaModuuli::muunna("Vesihiisi sihisee")
- tulos = MuuntajaModuuli::parillinen?(1024)
-
- if tulos == true
- puts "Testattu luku oli parillinen!"
- end
- ```
-
- Tiedosto 7-4_omamoduuli.rb:
-
- ```
- # coding: utf-8
-
- module MuuntajaModuuli
-
- def muunna(lause)
- # muuttaa kaikki i-kirjaimet tähtimerkeiksi
- # muuttaa h-kirjaimet väliviivoiksi
- # muuttaa s-kirjaimet alaviivoiksi
- chars = { "i" => "*", "h" => "-", "s" => "_" }
- chars.each { |avain,arvo| lause = lause.gsub(avain, arvo) }
- puts lause
- end
-
- def parillinen?(luku)
- # kokeilee, onko luku parillinen vai ei
- # palauta true, jos parillinen
- # palauta false, jos pariton tai epäkelpo arvo
- return true if luku % 2 == 0
- return false
- end
-
- end
- ```
|