削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎ケースクラス: : コンストラクタ引数に val がなくても、自動的にフィールドが宣言されます。 :: var なフィールドを希望する場合は、var を明示します。 : インスタンス化する時、new は必要ありません。 :: コンパニオンオブジェクトが自動的に生えてきます。
タグ: 2017年版ソースエディター
761 行
 
== ケースクラス ==
;[https://paiza.io/projects/R2pOOT-Yp-xk-BURc_P9Xw?language=scala コード例]:<syntaxhighlight lang=Scala highlight="2,29-31" line>
object Main extends App {
case class GeoCoord(longitude: Double = 0.0, latitude: Double = 0.0) {
override def toString: String = {
var (ew, ns) = ("東経", "北緯")
var (long, lat) = (longitude, latitude)
if (long < 0.0) {
ew = "西経"
long = -long
}
if (lat < 0.0) {
ns = "南緯"
lat = -lat
}
s"(${ew}: ${long}, ${ns}: ${lat})"
}
def distance(other: GeoCoord): Double = {
val i = Math.PI / 180
val r = 6371.008
Math.acos(
Math.sin(this.latitude * i) * Math.sin(other.latitude * i) +
Math.cos(this.latitude * i) *
Math.cos(other.latitude * i) *
Math.cos(this.longitude * i - other.longitude * i)
) * r
}
}
 
val Sites = Map(
"東京駅" -> GeoCoord(139.7673068, 35.6809591),
"シドニー・オペラハウス" -> GeoCoord(151.215278, -33.856778),
"グリニッジ天文台" -> GeoCoord(-0.0014, 51.4778)
)
 
Sites.foreach { case (k, v) =>
println(s"${k}: ${v}")
}
 
val keys = Sites.map { case (k, v) => k }.toList
val len = keys.size
 
for (i <- 0 until len) {
val (ksi, ksx) = (keys(i), keys((i + 1) % len))
println(s"${ksi} - ${ksx}: ${Sites(ksi).distance(Sites(ksx))} [km]")
}
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 - シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス - グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 - 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
: コンストラクタ引数に val がなくても、自動的にフィールドが宣言されます。
:: var なフィールドを希望する場合は、var を明示します。
: インスタンス化する時、new は必要ありません。
:: コンパニオンオブジェクトが自動的に生えてきます。
 
== オブジェクト ==
== トレント ==