Ensimmäinen Scala-kokeilu

Elokuu 14th, 2006

Testailin tuossa viikonloppuna Juhan suosittelemaa Scala-kieltä kirjoittamalla uusiksi autoetulaskurin. Itse sovellus oli hetkessä valmis, mutta rationaalilukuluokan kirjoittelu vei pari kahvikupillista. Scalassa sen kirjoittaminen nimittäin jätetään kehittäjille jonkinmoiseksi initiaatioriitiksi kieleen.

Jos jotakuta sattuisi kyseinen kieli kiinnostamaan, niin tässä on kyhäelmäni:

package autoetulaskuri

import java.math.RoundingMode

object Laskuri
{
    val autoetukerroinIkaryhmalleA: Rational = Rational.create("0.014") // -> 7 / 500

    def lisavarusteidenVerotettavaHinta
        (lisavarusteidenHinta: BigInt): BigInt
        = vahintaanNolla(lisavarusteidenHinta - 850)

    def autonVerotettavaHinta
        (perushinta : BigInt): BigInt
        = vahintaanNolla(perushinta - 3400)

    def uushankintahinta
        (perushinta: BigInt, lisavarusteidenHinta: BigInt): BigInt
        = autonVerotettavaHinta(perushinta) +
          lisavarusteidenVerotettavaHinta(lisavarusteidenHinta)

    def autoetukerroin
        (uushankintahinta: BigInt): Rational
        = autoetukerroinIkaryhmalleA * uushankintahinta

    def tarkkaAutonKayttoetu
        (uushankintahinta: BigInt): Rational
        = autoetukerroin(uushankintahinta) + 90

    def tarkkaVapaaAutoetu
        (uushankintahinta: BigInt): Rational
        = autoetukerroin(uushankintahinta) + 230

    def autonKayttoetu
        (perushinta: BigInt, lisavarusteidenHinta: BigInt): String
        = pyoristaKymmenenTarkkuuteen(
            tarkkaAutonKayttoetu(
              uushankintahinta(perushinta, lisavarusteidenHinta)))

    def vapaaAutoetu
        (perushinta: BigInt, lisavarusteidenHinta: BigInt): String
        = pyoristaKymmenenTarkkuuteen(
            tarkkaVapaaAutoetu(
              uushankintahinta(perushinta, lisavarusteidenHinta)))

    def pyoristaKymmenenTarkkuuteen
        (number: Rational): String
        = number.toDecimalString(-1, RoundingMode.FLOOR)

    def vahintaanNolla
        (arvo: BigInt): BigInt
        = if (arvo < 0) 0 else arvo
}

Laskuri ei sisällä ikäryhmä B:tä tai ajokilometreihin perustuvaa laskentaa. Jos joku on niistä kiinnostunut, niin eikun jatkokehittelemään. :-)

Artikkeli on luettu 787 kertaa. Kuuluu luokkiin: Ohjelmointi, Scala

Jätä kommentti

(ei näy sivuilla)

(kirjoita kuvassa näkyvät merkit, pakollinen)

Sallitut HTML-elementit:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Kalenteri

Elokuu 2006
M T K T P L S
« Hei   Syy »
 123456
78910111213
14151617181920
21222324252627
28293031  

Uusimmat kirjoitukset

Sivusto

To be without some of the things you want is an indispensable part of happiness.
- Bertrand Russell