LoginSignup
14
13

More than 5 years have passed since last update.

第17章:Scalaの演算子

Posted at

今回は 演算子 だ。
プログラミングの中では基本的なとこみたいだよ。
サラッと見てみよう!

演算子の種類

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のような書き方を、 中値記法 と呼ぶんだよ。

まとめ

今回は、演算子だったけどどうだった?
本だと割と最初の方に出てくるから
遅くなってゴメンな。

今回も
体で感じてくれたかな?

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13