Scalaのお勉強
最近Scalaを少し勉強し始めました。とりあえず入門書が1冊終わって何か作りたくなったので、カラーコードの16進値とRGB値を入替えるようなものを作ってみた。
コード
import scala.io._ def extract(value: String): List[String] ={ val hexPattern = """#([\da-fA-F]{3,6})""".r val rgbPattern = """rgb\(\s?(\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3})\)""".r value match { case hexPattern(value) => List(value) case rgbPattern(r, g, b) => List(r, g, b) case _ => sys.error("おかしな値") } } def change(value: List[String]): String ={ if( bool(value) ) { val values = value(0).toList values match { case List(r, g, b) => "rgb(" + decode(r, r) + ", " + decode(g, g) + ", " + decode(b, b) + ")" case List(r1, r2, g1, g2, b1, b2) => "rgb(" + decode(r1, r2) + ", " + decode(g1, g2) + ", " + decode(b1, b2) + ")" case _ => sys.error("値の桁がおかしい") } } else { "#" + Integer.toString(value(0).toInt, 16) + Integer.toString(value(1).toInt, 16) + Integer.toString(value(2).toInt, 16) } } def bool(length: List[String]): Boolean ={ length match { case List(r, g, b) => false case List(value) => true } } def decode(value1: Char, value2: Char): String ={ Integer.decode("0x" + value1 + value2).toString } val hexOrRgb = args(0) val extractValue = extract(hexOrRgb) val changeValue = change(extractValue) println(changeValue)
結果
「キタ━━━━(゚∀゚)━━━━!!パターンマッチすごい!!」