2. Основы Kotlin. Ветвления

До этого мы рассматривали ситуации, когда вычисление результата функций происходило без рассмотрения вариантов. Это возможный, но сравнительно редкий случай в программировании. Существует очень много задач, где приходится рассматривать различные варианты, и для этой цели программисты придумали ветвления.

Максимум из двух

В качестве простого примера рассмотрим функцию, результат которой равен наибольшему из её параметров.

fun max(m: Int, n: Int) = if (m > n) m else n

Здесь if..else — оператор или конструкция ветвления, переводится с английского как если..иначе. После ключевого слова if в скобках следует условие ветвления m > n. Если условие истинно, в качестве результата используется выражение сразу за условием ветвления, в данном случае m. Если же условие ложно, используется выражение за ключевым словом else, в данном случае n. Конструкцию можно прочитать по-русски как “Если m > n, (то) m, иначе n”. Функция max, аналогичная данной, имеется в стандартной библиотеке Котлина.

Число корней квадратного уравнения

Рассмотрим более сложный пример. Следующая функция рассчитывает число корней квадратного уравнения ax2 + bx + c = 0. Напомним, что квадратное уравнение имеет два корня, если его дискриминант больше 0, один корень, если дискриминант равен 0, и ноль корней в противном случае. Для реализации этого алгоритма следует вначале рассчитать дискриминант, а затем применить конструкцию if..else. Функция на Котлине может быть записана так:

fun quadraticRootNumber(a: Double, b: Double, c: Double): Int {
    // Применяем готовую функцию из первой части
    val d = discriminant(a, b, c)
    // Для сравнения на равенство применяем ==
    return if (d > 0.0) 2 else if (d == 0.0) 1 else 0
}

Здесь мы применили запись функции в виде блока и использовали промежуточную переменную d. Последняя строчка функции читается как “вернуть: если d > 0.0, (то) 2, иначе, если d = 0.0, (то) 1, иначе 0”. Обратите внимание на возможность так называемой “каскадной” записи конструкции if..else в виде if..else if..else if..else if..else (с неограниченным количеством промежуточных элементов).

Операции сравнения

В обоих примерах в условиях мы использовали операции сравнения. Таких операций имеется восемь:

  • > строго больше;
  • >= больше или равно, аналог математического ≥
  • < строго меньше;
  • <= меньше или равно, аналог математического ≤
  • x in a..b — x принадлежит интервалу от a до b, аналог математического a ≤ x ≤ b;
  • x !in a..b — x НЕ принадлежит интервалу от a до b;
  • != не равно, аналог математического ≠
  • == равно (используется два знака равенства, чтобы не путать данную операцию с инициализацией / вычислением результата =).

Операции == и != в Котлине применимы для сравнения аргументов произвольных типов. В частности, разрешается сравнивать на равенство строки — они равны, если имеют равную длину, и соответствующие их символы совпадают: “abc” != “cba”.

Остальные операции применимы только в том случае, если для аргументов определена специальная функция сравнения compareTo — об этом мы будем говорить позже. Первое время, нам придётся применять их только для числовых типов.

Математически, результат всех операций сравнения имеет тип Boolean с ровно двумя возможными значениями: truefalse.

Коментарі: 1
  1. Edgar
    Edgar

    не много подумал над последней задачей, не понимал условие, пока не нарисовал наглядно на системе координат

Додати коментар

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.