* На самом деле меньше, но все равно достаточно 🙂

Ребята из JetBrains сделали очень много крутых вещей, среди которых Kotlin — молодой, но очень перспективный язык программирования под JVM и Android. В этой статье я покажу, чем этот язык может заинтересовать Android-разработчика и заставить его навсегда позабыть про Java.

 

Java сдает позиции

Стоит признать, что Java в последнее время развивается не очень активно. Новые фишки добавляются в нее со скрипом. Отчасти это вызвано тем, что «большая» Java, та, что еще называется Java EE, тащит за собой огромный багаж проектов, которые необходимо беречь при апгрейде на новую версию. Из-за этого появляются новые JVM-совместимые языки программирования, которые, с одной стороны, не обременены обратной совместимостью и могут развиваться очень динамично, а с другой — могут работать со всей огромной кодовой базой Java: библиотеками, фреймворками, плагинами. И Kotlin — один из таких языков.

Эта статья не научит тебя азам и не покажет тебе Hello world на Kotlin. Она здесь для того, чтобы заинтересовать тебя, программиста под Android, новым инструментом разработки — невероятно гибким, расширяемым и простым.

INFO


Язык Java назван в честь марки кофе, которая получила имя от острова Ява в Индонезии. Шутка ли, что существует и остров Котлин? Он находится в Финском заливе около Санкт-Петербурга, и на нем располагается город Кронштадт.
 

Лаконичность

Kotlin очень бережет время программиста и старается сделать так, чтобы тот долбил по клавишам как можно реже. Взгляни на этот пример инициализации пары переменных на Kotlin:

var userNames = ArrayList<String>()
val admin = "ADMIN"

Ключевые слова var и val указывают, что ты хочешь объявить переменную или константу. При этом тебе не нужно задавать их тип самостоятельно — в большинстве случаев Kotlin сам может определить тип переменной по коду. А теперь давай посмотрим на эквивалентный код на Java и найдем менее очевидные отличия:

ArrayList<String> userNames = new ArrayList<>();
final String admin = "ADMIN";

Во-первых, ты наконец-то можешь перестать писать ; в конце каждой строки, теперь это не обязательно. Во-вторых, ты избавляешься от ключевого слова new перед созданием объекта.

Еще один отличный пример лаконичности Kotlin — это строковые шаблоны. Вспомни, как Java издевалась над тобой, когда ты хотел составить строку с какими-нибудь динамическими данными. Наверняка это выглядело примерно так:

// Плохой вариант
String message = "Hello " + name + " " + lastName;
// Вариант получше
String message = String.format("Hello %1$S %2$S", name, lastName;

А теперь забудь это, ведь с механизмом строковых шаблонов на Kotlin ты можешь вставлять переменные прямо внутрь строки:

val message = "Hello $name $lastName"

Ты можешь использовать для составления строки даже вызов метода, если обернешь его в фигурные скобки. К примеру:

"Hello ${user.getName()}"

Теперь давай рассмотрим пример, непосредственно связанный с Android. Сможешь посчитать, сколько раз ты писал вызов findViewById(...)? Я встречал проекты, в которых их было почти 400! Конечно, есть ButterKnife, который сделает все за тебя, но даже с ним тебе придется заводить отдельное поле под каждую вьюшку, чтобы навесить на него аннотацию @BindView. В Kotlin все становится еще проще, если подключить стандартный плагин kotlin-android-extensions. Этот плагин позволяет, добавив всего одну строчку в секции import, получить доступ ко всем вьюшкам, имеющим уникальный ID в XML-разметке. Смотри, как это работает.

Подготовим XML-разметку нашего будущего экрана со всего одной кнопкой, которую назовем pushMe.

// Файл activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
  <Button
    android:text="Hi there"
    android:id="@+id/pushMe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</FrameLayout>

Создадим новую активити с названием MainActivity и установим ей наш лейаут.

class MainActivity : Activity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  }
}

Немного о синтаксисе языка

В Kotlin нет аннотации @Override, но есть ключевое слово override. Слово extends превратилось в двоеточие, а методы (функции) объявляются ключевым словом fun.

ОK, теперь, чтобы получить доступ к нашей кнопке, просто добавим еще одну строку в секцию импортов:

// activity_main — имя файла с XML-разметкой
import kotlinx.android.synthetic.main.activity_main.*

И все, теперь мы можем работать с кнопкой:

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_auth)
  pushMe.setOnClickListener(
    // Что-то делаем по клику
  )
}

Еще одна фишка Kotlin, позволяющая писать меньше кода, — это лямбды. Вообще, лямбда-функции и функции высших порядков (функции, которые могут принимать функцию как параметр или возвращать ее) — это очень мощный инструмент, который заслуживает отдельной статьи, но в следующем примере я покажу тебе, как ты можешь их использовать в разработке под Android, даже не зная принципов работы.

Вот как обычно выглядит установка callback’а на клик по кнопке в Java:

pushMe.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Toast.makeText(context, "Hi there!", Toast.LENGTH_SHORT).show();
  }
});

Здесь создается новый анонимный класс, который реализует интерфейс View.OnClickListener, и он сразу передается в качестве параметра в метод setOnClickListener(...). Заметь, что у интерфейса View.OnClickListener есть всего один метод onClick(View view), который тебе нужно реализовать. Эта информация пригодится нам позже.

А вот как это выглядит в Kotlin:

pushMe.setOnClickListener {
  Toast.makeText(context, "Hi there!", Toast.LENGTH_SHORT).show()
}

Код стал в три раза короче! Все, что ты видишь, от первой фигурной скобки до последней — это и есть лямбда-функция. Фокус заключается в том, что все анонимные классы, у которых есть только один метод, могут быть написаны в Kotlin как лямбды.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Корпоративный КоПИРАТ. О конфликтах между работодателями и сотрудниками по исключительным правам

Программисты, меняя компанию-нанимателя, порой уносят с собой из старого офиса не только а…

1 комментарий

  1. Аватар

    avator888

    15.08.2016 at 23:23

    сколько раз слышал призывы переписать всю Java на Js(NodeJs) или вот еще один вариант — Kotlin
    в итоге — воз и ныне там

Оставить мнение