Scala operators



1. 함수와 메소드


  • 코드 블럭을 묶어서 같은 결말 또는 같은 업무로 실행하고 싶을 떄 만든다.

    객체지향은 객체를 정의하여 내부에 내용들을 정의하고 추상화한다.

  • 스칼라에서는 function 들이 이미 만들어진 객체이다.

  • function은 변수에 저장할 수 있다.

  • 스칼라에서는 모든 것들이 객체다.



2. 연산자


Operator Name Example
+ Addition x + y
- Subtraction x - y
* Multiplication x * y
/ Division x / y
% Modulus x % y
== Equal x == y
!= Not equal x != y
> Greater than x > y
< Less than x < y
Greater than or equal to x ≥ y
Less than or equal to x ≤ y
&& Returns True if bvoth statements are true x &gt= 4 && x &lt= 8 y
|| Return True if one of the statements is true x &gt 100 || x &lt 50
! Return the opposite of the evaluated result. Return True if false and False if true !(x > 100 || x < 50)
& Binary AND x & y
| Binary OR x | y
^ Binary XOR x ^ y
~ Binary One's Complement ~x
<< Binary Left-Shift x << 2
>> Binary Right-Shift x >> 2
>>> Shift-Right Zero-Fill x >>> 2
= Simple assignment x = 6
+= Add and Assignment x += 4
-= Subtract and Assignment x -= 4
*= Multiply and Assignment x *= 4
/= Divide and Assignment x /= 4
%= Modulus and Assignment x %= 4
&= Bitwise AND and Assignment x &= 4
|= Bitwise OR and Assignment x += 4
^= Bitwise XOR and Assignment x ^= 4
<≤ Left-shift and Assignment x <≤ 4
>≥ Right-shift and Assignment x >≥ 4



3. 예제


import scala.math._
sqrt(2)

val myHello = "hello"
// myHello(4) // sugar coating
myHello.apply(4)

// 스칼라의 모든 것은 객체이다.
// 심지어 연산 기호 조차도 객체이다.
1.+(5) // 1 + 1 은 1.+(5) 의 sugar coating 이다.
// res172: Int = 6

val one: Int= 1
one.to(10)

// one: Int = 1
// res174: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

val x : BigInt = 123456789
x * x * x * x
// x.*(x).*(x).*(x)

// x: scala.math.BigInt = 123456789
// res176: scala.math.BigInt = 232305722798259244150093798251441

5 / 2
5.0 / 2.0

// res182: Int = 2
// res184: Double = 2.5

val a = 12
val b = 5

~a
a & b
a | b
a ^ b

// a: Int = 12
// b: Int = 5
// res192: Int = -13
// res193: Int = 4
// res194: Int = 13
// res195: Int = 9



4. 스칼라 연산자 순위


Category Operator Associativity
Postfix () [] Left to Right
Unary ! ~ Right to Left
Multiplicative * / % Left to Right
Additive +- Left to Right
Shift >> >>> << Left to Right
Relational > ≥ < ≤ Left to Right
Equality == != Left to Right
Bitwise AND & Left to Right
Bitwise XOR ^ Left to Right
Bitwise OR | Left to Right
Locgical AND && Left to Right
Logical OR || Left to Right
Assignment = += -= *= /= %= >≥ <≤ &= ^= |= Right to Left
Comma , Left to Right