30分でわかる(かも知れない)Scala超々入門! (2/8)
作成:2013-01-10 08:11
更新:2013-01-10 08:11
更新:2013-01-10 08:11
■Scalaの値と変数
プログラミング言語の基本は「値」です。Scalaでも、もちろんさまざまな値が利用されます。Scalaでは、以下のような値が基本となる方として用意されています。
●Scalaの基本的な型
整数:Byte Short Int Long
実数:Float Double
文字関係:Char String
真偽値:Boolean
いずれもJavaでお馴染みのものですから、改めて説明しなくともわかりますね。ただし、一つだけ注してほしい点があります。これらは「プリミティブタイプ(基本型)」ではない、という点です。これらは、いずれも「オブジェクト」なのです。
Scalaでは、いわゆる基本型の値というのはありません。すべての値はオブジェクトとして扱われます。
●変数の宣言と利用
Scalaは、基本的に「静的型付け」の言語です。すなわち、変数はそれぞれ代入する型が静的に決められています。「じゃあ、型名をつけてない変数はどうなるのか?」と思うでしょうが、これは値を代入する際にそれが何の型かを類推して自動的にその型の変数として作成されるようになっているのです。これを「型推論」といいます。
●定数の宣言と利用
●演算子(?)について
Scalaにも、基本的な四則演算のための機能は普通に備えられています。+-*/%といったものですね。また()ももちろん使えます。例えば、こんな具合に実行すると、「ANSWER: 170」と表示されます。
Scalaには実は+-*/%といった演算子は、ないのです。これらは、実はすべて「メソッド」です。ここでの演算を行なっている文(var answer = a * b - c)は、正しくは以下のように処理されている、と考えるべきです。
●配列について
配列は、「Array」クラスを使います。これをnewしてインスタンスを作るやり方もありますし、Arrayの後に引数として初期値を指定して作る方法もあります。
※Scalaの「文」について
サンプルコードを見て気づいたことと思いますが、Scalaでは文の終りを示すのにセミコロン(;)を付ける必要はありません。Scalaは、改行があればそこで文の終わりと認識します。また、セミコロンで文の区切りを示すことも可能ですので、複数の文をセミコロンで1行にまとめて書くことも可能です。このあたりは、JavaよりJavaScriptの感覚に近いですね!
●Scalaの基本的な型
整数:Byte Short Int Long
実数:Float Double
文字関係:Char String
真偽値:Boolean
いずれもJavaでお馴染みのものですから、改めて説明しなくともわかりますね。ただし、一つだけ注してほしい点があります。これらは「プリミティブタイプ(基本型)」ではない、という点です。これらは、いずれも「オブジェクト」なのです。
Scalaでは、いわゆる基本型の値というのはありません。すべての値はオブジェクトとして扱われます。
●変数の宣言と利用
var 変数名 = 値変数の宣言は、「var 変数」という形で記述します。これにイコールで値を代入すれば、そのままその値が設定されます。変数を宣言するとき、値の型を指定することもできます。この場合は、「var 変数名:型名」というように、変数名の後にコロンで型名をつなげて記述します。
var 変数名 : 型名 = 値
Scalaは、基本的に「静的型付け」の言語です。すなわち、変数はそれぞれ代入する型が静的に決められています。「じゃあ、型名をつけてない変数はどうなるのか?」と思うでしょうが、これは値を代入する際にそれが何の型かを類推して自動的にその型の変数として作成されるようになっているのです。これを「型推論」といいます。
●定数の宣言と利用
val 変数名 = 値Scalaには、「定数」も用意されています。定数は、値を代入して初期化したら、それ以後、値の変更が行えない特殊な変数です。これは、宣言の際にvarではなく「val」を使います。
val 変数名 : 型名 = 値
●演算子(?)について
Scalaにも、基本的な四則演算のための機能は普通に備えられています。+-*/%といったものですね。また()ももちろん使えます。例えば、こんな具合に実行すると、「ANSWER: 170」と表示されます。
object myapp {ごくごく単純なことで、これ以上の説明は不要でしょう。が、実はあなたはこれらの演算を正しく理解していません。
def main(args: Array[String]) {
var a = 10
var b = 20
var c = 30
var answer = a * b - c
println("ANSWER: " + answer)
}
}
Scalaには実は+-*/%といった演算子は、ないのです。これらは、実はすべて「メソッド」です。ここでの演算を行なっている文(var answer = a * b - c)は、正しくは以下のように処理されている、と考えるべきです。
var answer = (a.*(b)).-(c)オブジェクトaの*メソッドを、変数bを引数にして呼び出し、更にその結果の値のオブジェクトの-メソッドを、変数cを引数にして呼び出す――このようなことを行なっている、と考えればわかりやすいでしょう。
●配列について
配列は、「Array」クラスを使います。これをnewしてインスタンスを作るやり方もありますし、Arrayの後に引数として初期値を指定して作る方法もあります。
変数 = new Array( 要素数 )また、保管する値の型を明示的に指定したい場合には、Arrayの後に[]で型名を指定します。以下のような形です。
変数 = Array( 値1, 値2, ……)
変数 = new Array[ 型名 ]( 要素数 )配列から特定の要素を指定して値をやり取りする場合には、()でインデックス番号を指定します。例えば、こんな具合です。
変数 = Array[ 型名 ]( 値1, 値2, ……)
var arr = Array[Int](10,20,30)
println( arr(0) + "," + arr(1) + "," + arr(2))
※Scalaの「文」について
サンプルコードを見て気づいたことと思いますが、Scalaでは文の終りを示すのにセミコロン(;)を付ける必要はありません。Scalaは、改行があればそこで文の終わりと認識します。また、セミコロンで文の区切りを示すことも可能ですので、複数の文をセミコロンで1行にまとめて書くことも可能です。このあたりは、JavaよりJavaScriptの感覚に近いですね!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
●リスト1――演算子の例 object myapp { def main(args: Array[String]) { var a = 10 var b = 20 var c = 30 var answer = a * b - c println("ANSWER: " + answer) } } ●リスト2――配列の例 var arr = Array[Int](10,20,30) println( arr(0) + "," + arr(1) + "," + arr(2))
※関連コンテンツ