Posted at

第17章:Scalaの演算子

More than 5 years have passed since last update.

今回は 演算子 だ。

プログラミングの中では基本的なとこみたいだよ。

サラッと見てみよう!


演算子の種類

Scalaにはこれだけ演算子があるぞ!


  • 算術演算子

  • 関係演算子

  • 論理演算子

  • ビット演算子

これを1個ずつ見てみよう。


算術演算子

いわゆる四則演算ってやつだから大丈夫だよね?

演算子

意味

+
x + y
加算

-
x - y
減算

*
x * y
乗算

/
x / y
除算

%
x % y
剰余

動かしてみるよ!

scala> 1 + 2

res0: Int = 3

scala> 3 - 1
res1: Int = 2

scala> 4 * 2
res2: Int = 8

scala> 6 / 3
res3: Int = 2

scala> 7 % 2
res4: Int = 1


関係演算子

関係性を調べる演算子だ!

ここも他の言語を知っていれば、すんなりいけるね。

演算子

意味

>
a > b
aがbより大きいか

>=
a >= b
aがb以上か

<
a < b
aがbより小さいか

<=
a <= b
aがb以下か

==
a == b
aとbが等しいか

!=
a != b
aとbが等しくないか

これも動かしてみるよ!

scala> 2 > 1

res0: Boolean = true

scala> 2 >= 2
res1: Boolean = true

scala> 3 < 1
res2: Boolean = false

scala> 3 <= 2
res3: Boolean = false

scala> 1 == 1
res4: Boolean = true

scala> 1 != 1
res5: Boolean = false


== について

==はJavaとはちょっと違うんだ。

以下で書いているので見てね!

第16章:Scalaの等価性


論理演算子

演算子

意味

&&
a && b
論理AND

||
a  || b
論理OR

!
!a
論理否定

※論理ORの パイプ(|) は、本当は半角です。

scala> ( 2 == 2 ) && ( 1 == 1 )

res0: Boolean = true

scala> ( 2 == 2 ) && ( 1 > 1 )
res1: Boolean = false

scala> ( 2 == 2 ) || ( 1 > 1 )
res2: Boolean = true

scala> ( 2 < 2 ) || ( 1 > 1 )
res3: Boolean = false

scala> !( 2 == 2 )
res4: Boolean = false

scala> !( 2 > 2 )
res5: Boolean = true


ビット演算子

演算子

意味

&
a & b
AND演算


a | b
OR演算

^
a ^ b
XOR演算

~
a ^ b
補数演算

<<
a << b
左シフト

>>
a >> b
右シフト

>>>
a >>> b
符号なし右シフト

※論理ORの パイプ(|) は、本当は半角です。

scala> 5 & 6

res1: Int = 4

scala> 5 | 6
res2: Int = 7

scala> 5 ^ 6
res3: Int = 3

scala> ~3
res4: Int = -4

scala> 5 << 1
res5: Int = 10

scala> 5 >> 2
res6: Int = 1

scala> -1 >>> 31
res7: Int = 1


優先順位と結合性

他の言語と同様に、Scalaでも演算子の優先順位があるんだ。

月並みだけど、纏めておくね。 優先度が高い順 だよ。

優先順位

その他全ての特殊文字

* / %

+ -

:

= !

< >

&

^

全ての英字

全ての代入演算子

ただし、末尾が等号になっている代入演算子は扱いが異なる。

+=とか*=とかだ!

優先度が高い*で見てみよう。

以下の2つの式は同じ意味になる。

a *= 4 + 1a*= (4 + 1)

実際に動かしてみるとわかるよ。

scala> var a = 3

a: Int = 3

scala> a *= 4 + 1

scala> a
res2: Int = 15

scala> var a = 3

a: Int = 3

scala> a *= (4 + 1)

scala> a
res4: Int = 15


演算子の正体

演算子は メソッド なんだ!

何を言っているかわからない?

例えば、1 + 1は実は1 .+(1)と同じなんだ。

Scalaの世界では全てがオブジェクトだから

演算子もメソッドというのは、すんなり入ってくるよね。

上記で記述したけど、メソッドの引数が1つの場合は

.と括弧を省略することができるんだ。

ちなみに1 + 1のような書き方を、 中値記法 と呼ぶんだよ。


まとめ

今回は、演算子だったけどどうだった?

本だと割と最初の方に出てくるから

遅くなってゴメンな。

今回も

体で感じてくれたかな?