English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Операторы Scala

Оператор - это символ, который говорит компилятору выполнять指定的 математические и логические операции.

Scala содержит множество встроенных операторов, включая следующие типы:

  • Арифметические операторы

  • Отношение операторы

  • Логические операторы

  • Битовыми операторами

  • Операторы присвоения

Далее мы подробнее рассмотрим использование этих операторов.

Арифметические операторы

В таблице приведены арифметические операторы, поддерживаемые Scala.

Предположим, что переменная A равна 10, B равна 20:

ОператорыОписаниеПример
+пзнаком сложенияA + B результат вычисления 30
-пзнаком вычитанияA - B результат вычисления -10
*пзнаком乘енияA * B результат вычисления 200
/делительB / A результат вычисления 2
%получение остаткаB % A результат вычисления 0

Пример онлайн

object Test {
   def main(args: Array[String]) {
      var a = 10;
      var b = 20;
      var c = 25;
      var d = 25;
      println("a + b = " + (a + b));
      println("a - b = " + (a - b));
      println("a * b = " + (a * b));
      println("b / a = " + (b / a));
      println("b % a = " + (b % a));
      println("c % a = " + (c % a));
      
   }
}

Выполните следующий код, результат вывода будет:

$ scalac Test.scala 
$ scala Test
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5

Отношение операторы

В таблице приведены отношения операторы, поддерживаемые Scala.

Предположим, что переменная A равна 10, B равна 20:

ОператорыОписаниеПример
==равно(A == B) результат вычисления false
!=не равно(A != B) результат вычисления true
>больше(A > B) результат вычисления false
<меньше(A < B) результат вычисления true
>=больше или равно(A >= B) результат вычисления false
<=меньше или равно(A <= B) результат вычисления true

Пример онлайн

Пример

object Test {
   def main(args: Array[String]) {
      var a = 10;
      var b = 20;
      println("a == b = " + (a == b));
      println("a != b = " + (a != b));
      println("a > b = " + (a > b));
      println("a < b = " + (a < b));
      println("b >= a = " + (b >= a));
      println("b <= a = " + (b <= a));
   }
}

Выполните следующий код, результат вывода будет:

$ scalac Test.scala 
$ scala Test
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false

Логические операторы

В таблице ниже перечислены логические операторы, поддерживаемые Scala.

Предположим, что переменная A равна 1, B равна 0:

ОператорыОписаниеПример
&&Логическое ИРезультат вычисления (A && B) равен false
||Логическое ИЛИРезультат вычисления (A || B) равен true
!Логическое неРезультат вычисления !(A && B) равен true

Пример онлайн

object Test {
   def main(args: Array[String]) {
      var a = true;
      var b = false;
      println("a && b = " + (a && b));
      println("a || b = " + (a || b));
      println("!(a && b) = " + !(a && b));
   }
}

Выполните следующий код, результат вывода будет:

$ scalac Test.scala 
$ scala Test
a && b = false
a || b = true
!(a && b) = true

Битовыми операторами

Битовыми операторами выполняются операции над битовыми единицами, ~, &, |, ^ соответственно инверсия, битовое И, битовое ИЛИ, битовое ИЛИ, примеры представлены ниже:

pqp & qp | qp ^ q
00000
01011
11110
10011

Если задать A = 60; и B = 13; то двоичное представление переменных будет:

A = 0011 1100
B = 0000 1101
------- битовое运算----------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011

Правила битовыми операциями в Scala таковы:

ОператорыОписаниеПример
&оператор битовского И(a & b) результат 12, двоичное представление: 0000 1100
|оператор битовского И(a | b) результат 61, двоичное представление: 0011 1101
^оператор битовского ИЛИ(a ^ b) результат 49, двоичное представление: 0011 0001
~оператор инверсии битов(~a ) результат -61, двоичное представление: 1100 0011, в виде комплемента для чисел с знаками в двоичной системе.
<<Оператор левого сдвигаa << 2 результат 240, двоичное представление: 1111 0000
>>Оператор右ого сдвигаa >> 2 результат 15, двоичное представление: 0000 1111
>>>Несigned right shiftA >>>2 результат 15, двоичное представление: 0000 1111

Пример онлайн

object Test {
   def main(args: Array[String]) {
      var a = 60;           /* 60 = 0011 1100 */  
      var b = 13;           /* 13 = 0000 1101 */
      var c = 0;
      c = a & b;            /* 12 = 0000 1100 */ 
      println("a & b = " + c );
      c = a | b;            /* 61 = 0011 1101 */
      println("a | b = " + c );
      c = a ^ b;            /* 49 = 0011 0001 */
      println("a ^ b = " + c );
      c = ~a;               /* -61 = 1100 0011 */
      println("~a = " + c );
      c = a << 2;           /* 240 = 1111 0000 */
      println("a << 2 = " + c );
      c = a >> 2;           /* 15 = 1111 */
      println("a >> 2  = " + c );
      c = a >>> 2;          /* 15 = 0000 1111 */
      println("a >>> 2 = " + c );
   }
}

Выполните следующий код, результат вывода будет:

$ scalac Test.scala 
$ scala Test
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2  = 15
a >>> 2 = 15

Операторы присвоения

Ниже перечислены операторы присвоения, поддерживаемые языком Scala:

ОператорыОписаниеПример
=Простое присвоение, определение значения правой части для левой.C = A + B, результат выполнения выражения A + B присваивается переменной C
+=Сумма после присвоения, сложение значений левой и правой частей выражения и присвоение их левой части.C += A эквивалентно C = C + A
-=При присваивании после вычисления вычитания, оба операнда вычисляются по вычитанию, и результат присваивается левой операнде.C -= A эквивалентно C = C - A
*=При присваивании после вычисления умножения, оба операнда вычисляются по умножению, и результат присваивается левой операнде.C *= A эквивалентно C = C * A
/=При присваивании после вычисления деления, оба операнда вычисляются по делению, и результат присваивается левой операнде.C /= A эквивалентно C = C / A
%=При присваивании после вычисления модуля, оба операнда вычисляются по модулю, и результат присваивается левой операнде.C %= A эквивалентно C = C % A
<<=Битовое левое смещение с последующей присваиваниемC <<= 2 эквивалентно C = C << 2
>>=Битовое правое смещение с последующей присваиваниемC >>= 2 эквивалентно C = C >> 2
&=Битовое и с последующей присваиваниемC &= 2 эквивалентно C = C & 2
^=Битовое исключающее или с последующей присваиваниемC ^= 2 эквивалентно C = C ^ 2
|=Арифметическое или с последующей присваиваниемC |= 2 эквивалентно C = C | 2

Пример онлайн

object Test {
   def main(args: Array[String]) {
      var a = 10;       
      var b = 20;
      var c = 0;
      c = a + b;
      println("c = a + b = " + c);
      c += a;
      println("c += a = " + c);
      c -= a;
      println("c -= a = " + c);
      c *= a;
      println("c *= a = " + c);
      a = 10;
      c = 15;
      c /= a;
      println("c /= a = " + c);
      a = 10;
      c = 15;
      c %= a;
      println("c %= a = " + c);
      c <<= 2;
      println("c <<= 2 = " + c);
      c >>= 2;
      println("c >>= 2 = " + c);
      c >>= a;
      println("c >>= a = " + c);
      c &= a;
      println("c &= 2 = " + c);
     
      c ^= a;
      println("c ^= a = " + c);
      c |= a;
      println("c |= a = " + c);
   }
}

Выполните следующий код, результат вывода будет:

$ scalac Test.scala 
$ scala Test
c = a + b = 30
c += a = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= a = 0
c &= 2 = 0
c ^= a = 10
c |= a = 10

Приоритет операторов зависит от группы, к которой они относятся, и это влияет на вычисление выражений.

Пример: x = 7 + 3 * 2; Здесь, результат вычисления x равен 13, а не 20, потому что умножение (*) выше, чем сложение (+), поэтому оно вычисляется сначала 3 * 2, а затем добавляется 7.

См. таблицу ниже, приоритет от верхнего к нижнему постепенно уменьшается, самыйupper имеет наибольший приоритет, оператор запятой имеет наименьший приоритет.

КатегорияОператорыСвязанность
1() []Слева направо
2! ~Справа налево
3* / %Слева направо
4+ -Слева направо
5>> >>> <<Слева направо
6> >= < <=Слева направо
7== !=Слева направо
8&Слева направо
9^Слева направо
10|Слева направо
11&&Слева направо
12||Слева направо
13= += -= *= /= %= >>= <<= &= ^= |=Справа налево
14,Слева направо