質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

5294閲覧

scalaで定数のみのクラスの定義

退会済みユーザー

退会済みユーザー

総合スコア0

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/05/12 00:43

Javaなどで定数のみのクラスやインターフェースを作成したりしますが、scalaでも可能でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

###定数のみのクラス
object(シングルトンオブジェクト)が用途に向いていると思います。

scala

1object Test { 2 val value = "value!" 3} 4 5object Main { 6 def main(args:Array[String]) = { 7 println(Test.value) 8 } 9} 10 11//value!

###インターフェース
interfaceそのものは無いですが、traitで関数宣言だけして
実装を省くとinterfaceのような振る舞いになるようです。

scala

1trait TTrait { 2 def put:String 3} 4 5class Test extends TTrait { 6 def put:String = {"trait!"} 7} 8 9object Main { 10 def main(args:Array[String]) = { 11 val t = new Test 12 def requireTTrait(t:TTrait) = {t.put} 13 println(requireTTrait(t)) 14 } 15} 16 17//trait!

投稿2016/05/12 22:41

nnssn

総合スコア1221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/23 07:34

ご丁寧にありがとうございます。 シングルトンオブジェクト用途なんですね。 構文に少し違和感があってなれなかったのですが、徐々になれてきました。 ありがとうございました。
guest

0

ベストアンサー

"package object"と呼ばれるものもあります。

Scala

1package com 2 3package object example { 4 5 val msgSpring :String = "春は暖かいですね。" 6 val msgMoring :String = "おはようございます。" 7 def msgHello(name:String) = s" $name さん、こんにちは!" 8}

同じパッケージ内であれば、こんな感じで呼ぶことができます。

Scala

1println(msgMoring) 2>おはようございます。 3 4println(msgHello("Sam")) 5> Sam さん、こんにちは!

元々Scala は、"val"宣言で定数扱いとなります。

参考にしたURLを張り付けておきます。
http://www.atmarkit.co.jp/ait/articles/1205/22/news134_2.html

https://github.com/spray/spray/blob/master/spray-util/src/main/scala/spray/util/package.scala

また、少し質問と異なりますが、いわゆる列挙型はこんな感じで表現されます。

Scala

1package com.example 2 3sealed trait MitsubishiEnum 4 5case object eKwagon extends MitsubishiEnum 6case object Days extends MitsubishiEnum 7

こんな感じで使えます。

Scala

1 2val myCar:MitsubishiEnum = eKwagon 3 4val jpName = myCar match { 5 case `eKwagon` => "eKワゴン" 6 case `Days` => "デイズ" 7 } 8 9println(jpName) 10>eKワゴン

http://dev.classmethod.jp/server-side/scala-algebra-data-type/

投稿2016/05/13 14:31

simple-teq

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/23 07:34

ご丁寧にありがとうございます。 非常にわかりやすくサンプルもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問