今回は 演算子 だ。
プログラミングの中では基本的なとこみたいだよ。
サラッと見てみよう!
演算子の種類
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とはちょっと違うんだ。
以下で書いているので見てね!
論理演算子
演算子 | 例 | 意味 |
---|---|---|
&& | 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 + 1
、a*= (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
のような書き方を、 中値記法 と呼ぶんだよ。
まとめ
今回は、演算子だったけどどうだった?
本だと割と最初の方に出てくるから
遅くなってゴメンな。
今回も
体で感じてくれたかな?