| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
168 バイト追加 、 2020年2月16日 (日) 04:31
編集の要約なし
==[[Scala]]==
{{amazon|4798119873}}
==セットアップ==
===ランタイム===
====Javaランタイム[[Java]]ランタイム====
*http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html
====Scalaランタイム[[Scala]]ランタイム====
*http://www.scala-lang.org/downloads
===[[Eclipse]]=======Scala IDE for [[Eclipse]]====
*http://scala-ide.org/
=====アップデートサイトのURLをコピーアップデートサイトのU[[R]]Lをコピー=====
[[File:1103_scala01.jpg]]
=====[[Help ]] - Install New Software に上記URLを指定してインストール=====
[[File:1104_scala02.jpg]]
==チュートリアル==
===実行===
====scala====
=====HelloScalaHello[[Scala]].scala===== object HelloScala Hello[[Scala]] {
def main(args:Array[String]):Unit = {
println("hello [[Scala]]")
}
}
*ソースコードを指定すると、Javaクラスファイルにコンパイルしてから実行するソースコードを指定すると、[[Java]]クラスファイルにコンパイルしてから実行する >scala HelloScalaHello[[Scala]].scala hello [[Scala]]*指定しないと対話型シェル(REPL[[R]]EPL)が起動する
**:quit で終了
>scala
Welcome to [[Scala ]] version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_04).
Type in expressions to have them evaluated.
Type :help for more information.
=====タブキーを押すと、補完される=====
scala> import java.io.Buffered
BufferedInputStream BufferedOutputStream BufferedReader Buffered[[R]]eader BufferedWriter
===コンパイル===
====scalac====
*[[Java ]] VMで動作するクラスファイルが生成される >scala HelloScalaHello[[Scala]].scala
[[File:1105_scala03.jpg]]
==変数==
<console>:8: error: reassignment to val
i=2
<blockquote>Scalaで関数型スタイルのプログラミングを行う場合の助けとなる。変数をどのタイミングで参照しても同じ値であることが保証される[[Scala]]で関数型スタイルのプログラミングを行う場合の助けとなる。変数をどのタイミングで参照しても同じ値であることが保証される(参照透過性)。同様にイミュータブル(変更不可)のコレクションも提供</blockquote>
===var===
*varで宣言した変数は再代入可能
====Any====
*全ての型の基底クラス
====AnyRefAny[[R]]ef====
*参照型の基底クラス
====AnyVal====
**プリミティブ型ラッパークラスの基底クラス
====Unit型====
*[[Java ]] のvoidに対応
====Null====
*参照型に適合
==型推論==
*Scalaでは、変数やフィールド、メソッド定義において型の記述を省略できるケースがある[[Scala]]では、変数やフィールド、メソッド定義において型の記述を省略できるケースがある
*メソッドの戻り値の型も省略できるが、すべての型を同じにしないと、戻り値の型は、Anyになってしまう
=====すべての型を合わせた場合=====
cal: java.util.Calendar = java.util.GregorianCalendar[time=1382275606352,areFieldsSet=true,areAllFie
ldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=
0,useDaylight=false,transitions=10,lastRulelast[[R]]ule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERAE[[R]]A=1,YE ARA[[R]]=2013,MONTH=9,WEEK_OF_YEARWEEK_OF_YEA[[R]]=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=20,DAY_OF_YEARDAY_OF_YEA[[R]]=293,DAY_OF_WEEK=1,DAY_OF _WEEK_IN_MONTH=3,AM_PM=1,HOURHOU[[R]]=10,HOUR_OF_DAYHOU[[R]]_OF_DAY=22,MINUTE=26,SECOND=46,MILLISECOND=352,ZONE_OFFSET=3240
0000,DST_OFFSET=0]
<blockquote>暗黙の型変換を行うことで、継承を行わずに型を拡張できる(finalクラスも拡張できる)が、該当部分のソースを見ただけでは処理がわかりにくくなるので、濫用は避ける</blockquote>
i: Int = 123
=====Javaラッパー型とScala型Javaラッパー型と[[Scala]]型=====
==制御==
===if===
9
10
=====scala.collection.immutable.Range [[R]]ange の例===== scala> for (i <- Range[[R]]ange(1,3))
| println(i)
1
for (変数名 <- コレクション if 条件)
=====例=====
scala> for (o <- Range[[R]]ange(1,10) if o % 2 == 0) {
| println(o)
| }
}
=====例=====
scala> for (o <- Range[[R]]ange(1,10) if o % 2 == 0) yield {
| o
| }
for (変数名 <- コレクション; 変数名 <- コレクション )
===match 式===
=====他言語のswitchにあたる他[[言語]]のswitchにあたる=====
式 match {
case パターン=>{処理}
=====Listや配列のパターンマッチ=====
=====タプルのパターンマッチ=====
=====正規表現のパターンマッチ[[正規表現]]のパターンマッチ==========XMLのパターンマッチ[[XML]]のパターンマッチ=====
=====パターンマッチに条件=====
case (x,y) if x == y =>{
・Some
=====例外処理=====
*[[Java ]] 同様
**try - catch - finally
・式なので値を返せる
def bar(b:String) = {}
}::外側の関数からしかアクセスできない
====[[クロージャ]]====
=====関数の生成時に外部の変数を取り込んで動作する=====
=====取り込む変数を自由変数という=====
=====def multi(times:Int) = (i:Int) => i * times=====
*Int引数の無名関数部分がクロージャInt引数の無名関数部分が[[クロージャ]]
var tenTimes = multi(10)
tenTimes(3) // 30
multi(100)(3) // 300!![[正規表現]]====scala.util.matching.Regex[[R]]egex====
====生成====
var r = """\d{3}""".r

案内メニュー