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 802 kertaa. Kuuluu luokkiin: Ohjelmointi, Scala
Jätä kommentti
Sallitut HTML-elementit:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed