## 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 ```