Kotlin. Операторы сравнения. Логические операторы

Операторы сравнения (>, <, >=, <= …). Логические операторы (&&, ||, !)


Содержание


Поиск на других ресурсах:

1. Операторы сравнения. Назначение. Сравнение значений и ссылок на объект

Для сравнения двух значений, в языке Kotlin используются операторы сравнения. Эти операторы есть бинарными. Это означает, что они требуют двух операндов соответственно в левой и правой частях. Результатом любого оператора сравнения есть значение true или false логического типа Boolean.

Операторы сравнения имеют такой же синтаксис и назначение как во многих других языках. К этим операторам относятся следующие:

  • < – сравнивает два значения и определяет, есть ли значение в левой части оператора меньше значения в правой части. Если этот факт подтверждается, то возвращается true;
  • > — определяет, есть ли значение в левой части оператора больше значения в правой части;
  • <= — определяет, есть ли значение в левой части меньше или равно значению в правой части;
  • >= — определяет, есть ли значение в левой части больше или равно значению в правой части;
  • == — оценивает, равно ли значение слева значению в правой части;
  • != — оценивает, не равно ли значение слева значению справа;
  • === — определяет, ссылаются ли две ссылки на один объект (рисунок 1);
  • !== — определяет, не ссылаются ли две ссылки на один объект (рисунок 2).

Из вышеприведенного перечня последние два оператора ===, !== сравнивают значения ссылок на объекты, а не значения этих объектов (см. рисунки 1, 2).

Kotlin. Операторы ===, !==. Две ссылки указывают на один объектРисунок 1. Случай, когда ссылки указывают на один объект. Оператор === возвращает true, оператор !== возвращает false

 

Kotlin. Операторы ===, !==. Две ссылки указывают на разные объектыРисунок 2. Случай, когда ссылки указывают на разные объекты. Оператор === возвращает false, оператор !== возвращает true

 

2. Пример операторов сравнения значений переменных различных типов

 

fun main(args:Array<String>)
{
  // Операторы сравнения >, <, >=, <=, ==, !=
  // Определение равенства значений переменных разных типов

  // 1. Сравнение значений целых типов
  val a : Int = 25
  val b : Int = 30
  var res1 : Boolean = a > b // res1 = false
  println("a > b => " + res1)

  res1 = a <= b // res1 = true
  println("a <= b => " + res1)

  // 2. Сравнение значений типов с плавающей запятой
  val x : Double = 2.85
  val y = x
  var res2 = x == y // оператор ==
  println("x == y => " + res2)

  // в операторе if
  if (x != 3.5) // оператор !=
    println("x != 3.5")
  else
    println("x == 3.5")

  res2 = x < 0   // оператор <
  println("x < 0 => " + res2)

  // 3. Сравнение значений типа Char
  val c1 : Char = 'z'
  var res3 : Boolean

  res3 = c1 > 'a'

  if (res3)
    println("z > a")
  else
    println("z < a")

  // 4. Сравнение значений типа String
  val s1 = "abcd"
  val s2 = "abcde"
  var res4 = s1 != s2
  println("\'abcd\' != \'abcde\' => " + res4)

  res4 = s1 < s2
  println("\'abcd\' < \'abcde\' => " + res4)
}

Результат выполнения программы

a > b => false
a <= b => true
x == y => true
x != 3.5
x < 0 => false
z > a
'abcd' != 'abcde' => true
'abcd' < 'abcde' => true

 

3. Пример, демонстрирующий применение операторов сравнения ссылок (===, !==)

 

// Некоторый класс с функцией
class A
{
  fun Hello()
  {
    println("Hello world!")
  }
}

fun main(args:Array<String>)
{
  // Операторы сравнения ===, !==
  // Определение, указывают ли две ссылки на один объект

  // 1. Ссылки ref1, ref2 указывают на тот самый объект (экземпляр)
  val ref1 = A()
  val ref2 = ref1 // присваивание значений ссылок

  // Оператор ===
  if (ref1 === ref2)
    println("ref1 === ref2")

  // Оператор !==
  if (ref1 !== ref2)
    println("ref1 !== ref2")

  // 2. Ссылки ref3, ref4 указывают на разные объекты
  val ref3 = A()
  val ref4 = A()

  // Оператор ===
  if (ref3 === ref4)
    println("ref3 === ref4") // не выполнится

  // Оператор !==
  if (ref3!==ref4)
    println("ref3 !== ref4") // выполнится
}

Результат выполнения программы

ref1 === ref2
ref3 !== ref4

 

4. Логические операторы (&&, ||, !). Перечень. Назначение

Логические операторы позволяют строить сложные логические выражения минуя большое (лишнее) количество операторов условного перехода в алгоритме решения задачи.

Результатом логического оператора является значение true или false логического типа Boolean. Последовательность логических операторов, объединенных операндами, образует логическое выражение.

С помощью логического выражения можно сократить программный код, улучшив его визуализацию.

Например, если в программе нужно выполнить одно единое действие (последовательность операторов) при выполнении различных условий

if (condition1) statement
if (condition2) statement
...
if (conditionN) statement

то более целесообразно применить логический оператор || по образцу ниже

if (condition1 || condition2 || ... || conditionN)
  statement

В языке Kotlin определены следующие логические операторы

  • && — логическое AND (И). Это бинарный оператор (требует двух операндов слева и справа). Оператор && возвращает true, если значение обоих операндов равно true. В противном случае возвращается false;
  • || — логическое OR (ИЛИ). Это бинарный оператор. Оператор || возвращает false, если значение обоих операндов равно false. В противном случае оператор возвращает true;
  • ! — логическое отрицание NOT (Нет). Это унарный оператор, возвращает true, если значение операнда равно false. Иначе возвращается false.

 

5. Примеры использования логических операторов &&, ||, ! в условных выражениях
5.1. Определение пары одинаковых чисел

Задача. Даны три вещественных числа a, b, c. Определить, есть ли среди них хотя бы одна пара равных между собой чисел.

Решение.

fun main(args:Array<String>)
{
  // Определение пары равных между собой чисел
  // 1. Объявление переменных
  val a : Double
  val b : Double
  val c : Double

  // 2. Ввод значений
  print("a = ")
  a = readLine().toString().toDouble()
  print("b = ")
  b = readLine().toString().toDouble()
  print("c = ")
  c = readLine().toString().toDouble()

  // 3. Вычисление, используется оператор || - логическое ИЛИ
  if ((a==b) || (a==c) || (b==c))
    println("Yes")
  else
    println("No")
}

Результат выполнения программы

a = 3.8
b = 2.2
c = 3.8
Yes

 

5.2. Определение наличия указанной цифры в числе

Задача. Дано двухзначное число. Определить, входит ли в него цифра 7.

Решение.

fun main(args:Array<String>)
{
  // Определение вхождения заданной цифры в числе   
  // 1. Объявление переменных
  val number : Int

  // 2. Ввод значений
  print("number = ")
  number = readLine().toString().toInt()

  // 3. Проверка корректности введенных данных
  if ((number<10) || (number>99))
  {
    println("Incorrect input.")
    return
  }

  // 4. Вычисление
  // Выделить первую и вторую цифры двузначного числа
  if ((number/10==7) || (number%10==7))
    println("Yes") // цифра 7 есть в числе
  else
    println("No")
}

Тестовый пример

number = 71
Yes

 

5.3. Определение наличия двух цифр в числе

Задача. Задано трехзначное число. Определить, содержатся ли в нем одновременно цифры 4 и 6.

Решение.

 

fun main(args:Array<String>)
{
  // Определение вхождения двух заданных цифр в числе
  // 1. Объявление переменных
  val number : Int   // указанное число

  // 2. Ввод значений
  print("number = ")
  number = readLine().toString().toInt()

  // 3. Проверка корректности введенных данных
  if ((number<100) || (number>999))
  {
    println("Incorrect input.")
    return
  }

  // 4. Вычисление
  // Выделить первую, вторую и третью цифры трехзначного числа
  val digit1 : Int = number/100
  val digit2 : Int = (number/10)%10
  val digit3 : Int = number%10

  if ((digit1==6)&&(digit2==4) || (digit1==4)&&(digit2==6))
    println("Yes")
  else
  if ((digit1==6)&&(digit3==4) || (digit1==4)&&(digit3==6))
    println("Yes")
  else
  if ((digit2==6)&&(digit3==4) || (digit2==4)&&(digit3==6))
    println("Yes")
  else
    println("No")
}

Тестовый пример

number = 624
Yes

 

5.4. Определение принадлежности числа заданному диапазону

Задача. Определить, принадлежит ли заданное число диапазону [a; b]. Задачу решить с использованием оператора отрицания! (NOT).

Решение.

 

fun main(args:Array<String>)
{
  // Определение принадлежности числа заданному диапазону
  // 1. Объявление переменных
  val number : Int   // указанное число
  val a : Int // нижний предел
  val b : Int // верхний предел

  // 2. Ввод значений
  print("number = ")
  number = readLine().toString().toInt()
  print("a = ")
  a = readLine().toString().toInt()
  print("b = ")
  b = readLine().toString().toInt()

  // 3. Проверка корректности введенных данных
  if (a>b)
  {
    print("Incorrect input.")
    return
  }

  // 4. Вычисление
  // используется отрицание ! (NOT)
  if (!((number>=a)&&(number<=b)))
    print("No") // за пределами диапазона
  else
    print("Yes") // в пределах диапазона
}

Тестовый пример

number = 24
a = 35
b = 77
No

 


Связанные темы