Вы находитесь на странице: 1из 6

Презентация Kotlin vs Java

1 слайд

Итак, вопрос состоит в том, стоит ли разработчику переходить на Kotlin с Java или нет? Конечно это
зависит от предпочтений разработчика. Однако, прежде чем переключаться, важно понять
разницу между двумя языками программирования

2 слайд

Одно из основных различий между Java и Kotlin заключается в том, что в последнем нет условий
для проверяемых исключений (checked exception). Следовательно, нет необходимости
отлавливать или объявлять какие-либо исключения

Если разработчик, работающий на Java, считает, что использование кода try / catch в коде
раздражает, то упущение, сделанное Kotlin, можно считать желанным изменением. Однако
противоположностью будет, если разработчик считает, что проверяемые исключения нужны,
способствуя восстановлению после ошибок и созданию надежного кода. В этом случае это можно
считать для Kotlin плюсом и минусом, в зависимости от подхода к разработке

3 слайд

Сравнение класса Java с эквивалентным классом Kotlin демонстрирует лаконичность кода Kotlin.
Для той же операции, что выполняется в классе Java, класс Kotlin требует меньше кода (что
существенно экономит время разработчика)

4 слайд

Здесь вы можете видеть пример того, как без библиотек происходит присвоение текста полю

5 слайд

Процессы, интенсивно загружающие процессор и сетевой ввод-вывод, обычно используют


длительные операции. Вызывающий поток блокируется до завершения всей операции. Поскольку
Android является однопоточным по умолчанию, пользовательский интерфейс приложения
полностью блокируется, как только блокируется основной поток
6 слайд

Традиционное решение этой проблемы в Java - создать фоновый поток для длительной или
интенсивной работы. Однако управление несколькими потоками приводит к увеличению
сложности, а также к ошибкам в коде.

Kotlin также позволяет создавать дополнительные потоки. Тем не менее, есть лучший способ
управления интенсивными операциями в Kotlin, известный как сопрограммы или корутины
(coroutines). Корутины в Kotlin реализованы без стека, что означает, что они требуют меньшего
использования памяти по сравнению с обычными потоками.

7 слайд

Корутины могут выполнять длительные и интенсивные задачи, приостанавливая выполнение, не


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

Код с использованием корутин не только понятен, но и лаконичен. Более того, корутины


позволяют создавать элегантные дополнительные стили асинхронной неблокирующей
разработки, такие как async / await. Все это также явно относится к плюсам Котлина.

8 слайд

Теперь давайте сравним реализацию классов данных в Java и Kotlin:

Если говорить о Java, то в полноразмерных проектах обычно есть несколько классов,


предназначенных исключительно для хранения данных и, хотя эти классы практически не имеют
функциональности, разработчику необходимо написать много стандартного кода на Java.

Обычно разработчик должен определить конструктор и несколько полей для хранения данных,
функции геттеры и сеттеры для каждого из полей, а также функции equals(), hashCode() и toString().

Если говорить о Kotlin, то здесь есть очень простой способ создания таких классов. Разработчику
достаточно включить только ключевое слово data в определение класса, и все - компилятор сам
позаботится обо всем. Такое удобство создания классов явно свидетельствует в пользу Kotlin

9 слайд

Kotlin позволяет разработчикам расширять класс новыми функциями с помощью функций


расширения. Эти функции, хотя и доступны в других языках программирования, таких как C#, не
доступны в Java.

Создать функцию расширения легко в Kotlin. Это делается путем добавления префикса к имени
класса, который должен быть расширен до имени создаваемой функции. Чтобы вызвать функцию
в экземплярах расширенного класса, нужно использовать нотацию «.»
10 слайд

Теперь обсудим функции высшего порядка и лямбды:

Функция высшего порядка - это функция, которая принимает другие функции в качестве
параметров или возвращает функцию.

11 слайд

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

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

12 слайд

Как статически типизированный язык программирования, Kotlin использует ряд функциональных


типов для представления функций. Более того, он поставляется с набором специализированных
языковых конструкций, таких как лямбда-выражения.

Анонимные функции и лямбда-выражения также известны как функциональные литералы. Это


функции, которые не объявлены, но передаются как выражения.

13 слайд

В Котлине нет поддержки неявных расширяющих преобразований для данных. Таким образом,
меньшие типы не могут быть преобразованы в большие типы. В то время как Java поддерживает
неявные преобразования, Kotlin требует выполнить именно явное преобразование.

Ряд разработчиков воспринимает это как минус Котлин.

14 слайд

Теперь поговорим о встроенных функциях.

Переменные, к которым осуществляется доступ в теле функции, называются замыканиями.


Использование функций высшего порядка может существенно увеличить время выполнения
вычислений. Каждая функция в Kotlin является объектом, и он захватывает замыкание.

И классы, и функторы требуют выделения памяти. Они, наряду с виртуальными вызовами,


требуют определенных затрат на время выполнения. Таких дополнительных издержек можно
избежать, вставив лямбда-выражения в Kotlin. Одним из таких примеров является функция lock()
15 слайд

В отличие от Kotlin, Java не обеспечивает поддержку встроенных функций. Тем не менее,


компилятор Java способен выполнять встраивание с использованием метода final. Это так, потому
что методы final не могут быть переопределены подклассами. Кроме того, вызов метода final
разрешается во время компиляции.

Такие нововведения также воспринимаются как плюсы Котлина.

16 слайд

Делегирование в Kotlin является альтернативой наследования. Этот механизм позволяет


использовать множественное наследование. Кроме того, делегированные свойства Kotlin
предотвращают дублирование кода.

17 слайд

Неприватные поля или public поля в Java полезны в сценариях, где вызывающие объекты должны
меняться в соответствии с их представлением. Это означает, что такие поля предоставляют
представление объекта вызывающим объектам. У Kotlin нет не-private полей.

И это достаточно интересное отличие при сравнении Kotlin и Java.

18 слайд

Одной из самых заметных проблем для разработчиков, связанных с Java, является


NullPointerExceptions. Java позволяет разработчикам присвоить значение null любой переменной.
Однако, если они пытаются использовать ссылку на объект с значением null, возникает
исключение NullPointerException!

В отличие от Java, в Kotlin все типы по умолчанию являются не-nullable. Если разработчики
попытаются присвоить или вернуть значение null в коде Kotlin, во время компиляции произойдет
сбой.

19 слайд

Тем не менее, есть способ обойти этот момент. Чтобы присвоить значение null переменной в
Kotlin, необходимо явно пометить эту переменную как nullable. Это делается путем добавления
знака вопроса после типа. Пример вы можете видеть у себя на экране.

Таким образом, в Kotlin нет исключений NullPointerException. Если вы встречаете такое


исключение в Kotlin, то, скорее всего, вы либо явно присвоили значение null, либо это связано с
каким-то внешним Java-кодом.
20 слайд

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

В отличие от Java, Kotlin имеет функцию умного приведения, которая автоматически обрабатывает
такие избыточные приведения. Вам не нужно выполнять приведение внутри оператора, если он
уже проверен оператором is в Kotlin.

21 слайд

В Kotlin нет статических элементов. Однако в языке программирования Java ключевое слово static
отражает то, что конкретный член, с которым используется это ключевое слово, принадлежит
самому типу, а не экземпляру этого типа.

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

22 слайд

Классы Kotlin, в отличие от классов Java, могут иметь один или несколько вторичных
конструкторов, в дополнение к первичному конструктору. Это делается путем включения этих
вторичных конструкторов в объявление класса.

23 слайд

В отличие от Kotlin, Java имеет тернарный оператор. Тернарный оператор в Java работает как
базовый оператор if. Он состоит из условия, которое оценивается как истинное или ложное.

Кроме того, тернарный оператор в Java имеет два значения. Только одно из них возвращается в
зависимости от того, является ли условие истинным или ложным. Синтаксис для тернарного
оператора Java имеет вот такой вид:

24 слайд

В общем коде, ' ?' представляет неизвестный тип. Этот символ известен как подстановочный знак.
Существует несколько вариантов использования подстановочного знака, в том числе в качестве
типа поля, локальной переменной или параметра.

В то время как система типов Java предлагает использовать подстановочные знаки, в Kotlin их нет.
Тем не менее, у него есть два других механизма - вариативность на уровне объявления и
проекции типов как альтернатива.
25 слайд

Что же мы имеем в итоге?

Несмотря на значительные плюсы Kotlin, в вопросах разработки общего назначения Java


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

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


совместимы. И Java, и Kotlin компилируются в байт-код. Это означает, что в вопросах «Kotlin или
Java» не будет однозначного ответа, ведь можно вызывать код Java из Kotlin и наоборот

26 слайд

Всем спасибо за внимание!