なんか驚くことばっかりなんですが。Scala。
ということでstaticという概念がないらしい。
mainメソッドのクラスではclass ~ではなくobject ~ってかんじで宣言したのだけど、
このobjectって宣言したものはシングルトンが保証されるらしい。なにそれすげえ。
同名のclassとobjectの共存もできるっぽい。でもなんかそれやりたくない。できなくすりゃいいのに。
ということで宣言の仕方が二種類。これはなんとなくいわれなくても空気読めたけど。
・var : ふつうの変数。再代入とか可能。
・val : final変数。
そして型推論があるので、
かっけー(@ ̄Д ̄@;)
ちなみに型を明示して宣言したいときはx:Intみたいに右にくっつけてやるだけ。
あと、Scalaでは宣言時に初期化しちゃわないとだめみたい。
なんかPersonクラスとかでもしれっとやってたけども。
こういう感じ。
例によって例のごとく戻り値の型は省略できる。
実際はこんなん。
|l、{ j} /,,ィ//| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
i|:!ヾ、_ノ/ u {:}//ヘ | あ…ありのまま 今 起こった事を話すぜ!
|リ u' } ,ノ _,!V,ハ | < 『おれは関数の最後でreturnしなかったと
fト、_{ル{,ィ'eラ , タ人. | 思ったらいつのまにかIntの値が返ってきた』
ヾ|宀| {´,)⌒`/ |<ヽトiゝ | 催眠術だとか超スピードだとか
ヽ iLレ u' | | ヾlトハ〉. | そんなチャチなもんじゃあ 断じてねえ
ハ !ニ⊇ '/:} V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ…
/:::丶'T'' /u' __ /:::::::/`ヽ \____________________
いったいどういうことなの・・・
Scalaではreturnすら省略可能らしい。
省略した場合、最後に評価した式の値が返ってくる。
これは、Scalaでは関数は必ず戻り値を持つことを保証しているから。
(ちなみに関数型言語ってのはそうらしい。)
となると・・・戻り値voidはどーなるの?
その場合は、Unit っていう「値ではない」値を返すんだと。(°д°;)
Java屋さんは、とりあえずこのUnitをまあvoidだと思ってだまされろと。
うーん、勉強になるなあ。。。
ちなみにreturnは省略可能ってだけで、Javaとおんなじように使えるらしい。
なんだよ!エラーになったじゃねえか!ヽ(`Д´)ノ
return使いたいときは戻り値の型を明示してやんないといけないみたい。
1) static?なにそれおいしいの?
ということでstaticという概念がないらしい。
mainメソッドのクラスではclass ~ではなくobject ~ってかんじで宣言したのだけど、
このobjectって宣言したものはシングルトンが保証されるらしい。なにそれすげえ。
同名のclassとobjectの共存もできるっぽい。でもなんかそれやりたくない。できなくすりゃいいのに。
2) 変数宣言はvarとval
ということで宣言の仕方が二種類。これはなんとなくいわれなくても空気読めたけど。
・var : ふつうの変数。再代入とか可能。
・val : final変数。
そして型推論があるので、
scala> var x = 3
x: Int = 3
scala> var x = "hoge"
x: java.lang.String = hoge
scala> x = 6
<console>:5: error: type mismatch;
found : Int(6)
required: java.lang.String
x = 6
^
かっけー(@ ̄Д ̄@;)
ちなみに型を明示して宣言したいときはx:Intみたいに右にくっつけてやるだけ。
あと、Scalaでは宣言時に初期化しちゃわないとだめみたい。
scala> val x:Int
<console>:4: error: only classes can have declared but undefined members
val x:Int
^
scala> var x:Int
<console>:4: error: only classes can have declared but undefined members
(Note that variables need to be initialized to be defined)
var x:Int
^
3) 関数と戻り値と
なんかPersonクラスとかでもしれっとやってたけども。
こういう感じ。
def 関数名(引数名:型[,引数名:型...])[:戻り値型]{
処理
}例によって例のごとく戻り値の型は省略できる。
実際はこんなん。
scala> def hoge(x:Int,y:Int) = {x+y}
hoge: (Int,Int)Int
scala> hoge(8,9)
res10: Int = 17|l、{ j} /,,ィ//| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
i|:!ヾ、_ノ/ u {:}//ヘ | あ…ありのまま 今 起こった事を話すぜ!
|リ u' } ,ノ _,!V,ハ | < 『おれは関数の最後でreturnしなかったと
fト、_{ル{,ィ'eラ , タ人. | 思ったらいつのまにかIntの値が返ってきた』
ヾ|宀| {´,)⌒`/ |<ヽトiゝ | 催眠術だとか超スピードだとか
ヽ iLレ u' | | ヾlトハ〉. | そんなチャチなもんじゃあ 断じてねえ
ハ !ニ⊇ '/:} V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ…
/:::丶'T'' /u' __ /:::::::/`ヽ \____________________
いったいどういうことなの・・・
Scalaではreturnすら省略可能らしい。
省略した場合、最後に評価した式の値が返ってくる。
これは、Scalaでは関数は必ず戻り値を持つことを保証しているから。
(ちなみに関数型言語ってのはそうらしい。)
となると・・・戻り値voidはどーなるの?
その場合は、Unit っていう「値ではない」値を返すんだと。(°д°;)
Java屋さんは、とりあえずこのUnitをまあvoidだと思ってだまされろと。
うーん、勉強になるなあ。。。
ちなみにreturnは省略可能ってだけで、Javaとおんなじように使えるらしい。
scala> def hoge(x:Int,y:Int) = {return 6}
<console>:4: error: method hoge has return statement; needs result type
def hoge(x:Int,y:Int) = {return 6}
^なんだよ!エラーになったじゃねえか!ヽ(`Д´)ノ
scala> def hoge(x:Int,y:Int):Int = {return 6}
hoge: (Int,Int)Int
scala> hoge(3,1)
res11: Int = 6return使いたいときは戻り値の型を明示してやんないといけないみたい。