Help us understand the problem. What is going on with this article?

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

まとめ

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

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

f81@github
Fringe81のエンジニアが頑張って執筆ちゅうです! Scala の修行を始めました。 みなさま、温かい目で見守ってください。
fringe81
Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。 既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。
https://www.fringe81.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away