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

 


Споріднені теми