ラベル Scala の投稿を表示しています。 すべての投稿を表示
ラベル Scala の投稿を表示しています。 すべての投稿を表示

2011年10月17日月曜日

トレイトについて

さて、プログラミング言語Scalaにトレイトという機能があります。

…オレはよく知りませんが…

で、『東大英単』を読んでいたときに、「trait」という単語があったので、
それについて記事を書いて見ることにしました。

trait
意味
a distinctive characteristic
例文

The gray fox possesses a unique trait that distinguishes it from other members of the dog family: It is anatomically adapted for climbing.

訳

ハイイロギツネは他のイヌ科とことなる特徴を持っている。高所によじ登ることが出来る身体能力を持っているのだ。


というわけで、何か他のものとは異なるという特徴を表すときにトレイトという言葉が使われるようです。

たしかScalaのトレイトはJavaのインターフェースのようなものですが、
若干異なるような感じがしますね。






2011年1月13日木曜日

Scalaでユークリッドの互除法

単純なプログラムを書いてみた。
Scalaでユークリッドの互除法。


01
def baseEucledian(x:Int, y:Int):Int = {
02
  val a = if(x > 0) x else 1
03
  val b = if(y > 0) y else 1
04
  val tpl = if(a > b) (a, b) else (b, a)
05
  if(tpl._1 % tpl._2 == 0) tpl._2 else baseEucledian(tpl._2, tpl._1 % tpl._2)
06
}
07
def extEucledian(x:Int, y:Int):(Int, (Int, Int)) = {
08
  val q = baseEucledian(x, y)
09
  (q, (x / q, y / q))
10
}


02~04が美しくないので、少し書きなおしてみる。
02~04は交換をしているだけなので、交換を関数にする。


01
def baseChange(x:Int, y:Int):(Int,Int)  = {
02
  if(x > y) (x, y) else (y, x)
03
}


こうすると、02~04は次のように書き換えられる。


02
  val tpl = baseChange(baseChange(x, 1)._1, baseChange(y, 1)._1)


ずいぶん綺麗になった気がする。
scalaはリファクタリングが重要な言語らしい。