Java или Kotlin — что учить Android-разработчику?
В наше время рынок мобильной разработки развивается семимильными шагами, и это неудивительно, ведь в мире в год покупается более полутора миллиардов смартфонов. И 8 из 10 этих смартфонов работают на ОС Android. Естественно, выбрав Android-разработку в качестве профессии, вы не прогадаете. В этой статье мы ответим на вопрос, с чего начать новичку и какой язык программирования выбирать — Java или Kotlin. А может, современному специалисту надо знать сразу два?
Вообще, языков мобильной разработки, конечно, больше, чем два вышеназванных. Тем не менее, если вы хотите стать Android-разработчиком, многие специалисты советуют начинать с изучения традиционного Java. Это беспроигрышный вариант, ведь язык стабильно попадает в топ-3 по индексу TIOBE, начиная с 2002 года. К тому же, если вы освоите Java, вам будут легче даваться основные языки. Главное — не учите сразу несколько — это гиблое дело.
Пару слов о Java
При написании Android-приложений на Java вы увидите, что код является длинным и многословным. Некоторых это отпугивает. С другой стороны, в процессе написания всё становится предельно чётким и ясным, поэтому шансы ошибиться минимальны. Да и вообще, большинство из языковых конструкций Java трактуются однозначно, что не может не радовать. А ещё он имеет обратную совместимость, а значит это следующее: при выходе новой версии языка программирования у нас ничего не ломается в старом коде, в отличие, скажем, от более специализированных языков, того же Swift’а.
Для новичка Java хорош и благодаря своей популярности, ведь комьюнити здесь просто огромное. Очень много и различных обучающих материалов, включая бесплатные.
Давайте посмотрим, как выглядит простой пример кода на языке Java для Андроид-приложения. Мы создаём экран с одной карточкой для поста из соцсети:
// Файл dto/Post.java public class Post { private long id; private String author; private String content; private boolean likedByMe; public Post(long id, String author, String content) { this(id, author, content, false); } public Post(long id, String author, String content, boolean likedByMe) { this.id = id; this.author = author; this.content = content; this.likedByMe = likedByMe; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public boolean isLikedByMe() { return likedByMe; } public void setLikedByMe(boolean likedByMe) { this.likedByMe = likedByMe; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Post post = (Post) o; return id == post.id && likedByMe == post.likedByMe && Objects.equals(author, post.author) && Objects.equals(content, post.content); } @Override public int hashCode() { return Objects.hash(id, author, content, likedByMe); } @Override public String toString() { return "Post{" + "id=" + id + ", author='" + author + '\'' + ", content='" + content + '\'' + ", likedByMe=" + likedByMe + '}'; } } // Файл activity/MainActivity.java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Post post = new Post(1, "Vasya", "First Post in our network!"); final TextView authorTv = findViewById(R.id.authorTv); authorTv.setText(post.getAuthor()); final TextView contentTv = findViewById(R.id.contentTv); contentTv.setText(post.getContent()); final ImageButton likeBtn = findViewById(R.id.likeBtn); if (post.isLikedByMe()) { likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp); } likeBtn.setOnClickListener(view -> { // Опустили в целях краткости }); final ImageButton shareBtn = findViewById(R.id.shareBtn); shareBtn.setOnClickListener(view -> { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, post.getAuthor() + "\n\n" + post.getContent()); intent.setType("text/plain"); startActivity(intent); }); } }
Допустим, Java вы освоили. Однако опытные программисты утверждают, что не стоит на этом останавливаться. Да, начинать нужно с Java, но если вы хотите быть экспертом в сфере мобильной разработки, следующий этап развития — Kotlin.
Пару слов о Kotlin
Язык программирования Kotlin максимально совместим с Джава, а значит, процесс его изучения станет проще и не займёт у вас много времени. Причём этот язык достаточно молодой (пусть он и создан в 2011 г., но компания Google назначила его приоритетным языком для платформы Android лишь в 2019 году).
Что ещё можно сказать про Kotlin? Если вспомнить ту же совместимость с Java, то даже бывают случаи, когда разработчики половину проекта пишут на одном языке, а потом переходят на другой. Причём из-за этого перехода доступ к существующему коду, библиотекам и Android SDK не теряется, что круто.
Второй большой плюс — код на Kotlin короче и выразительнее, если сравнивать с Java. Всё, что в Java занимает 4–5 строчек, в Kotlin помещается в одну.
А ещё Kotlin — это детище JetBrains, следовательно, язык имеет прекрасную поддержку со стороны IDE: навигацию по файлам, умные подсказки, рефакторинг кода и т. д.
Специалисты утверждают, что если вы знаете Java, Kotlin вы изучите за 1–2 недели. Причём поначалу можно писать в «Java-стиле», не используя все возможные фичи языка.
Теперь давайте посмотрим на тот же пример, только написанный на Kotlin:
// Файл dto/Post.kt data class Post( val id: Long, val author: String, val content: String, val likedByMe: Boolean = false ) // Файл activity/MainActivity.kt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Данные должны приходить по сети, но мы упростили пример val post = Post(1, "Netology", "First post in our network!") // Никаких findViewById за счёт Kotlin Android Extensions authorTv.text = post.author contentTv.text = post.content if (post.likedByMe) { likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp) } // lambda likeBtn.setOnClickListener { // Опущено для краткости } shareBtn.setOnClickListener { val intent = Intent().apply { // lambda with receiver action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, """ ${post.author} ${post.content} """.trimIndent()) type = "text/plain" } startActivity(intent) } } }
Как говорится, разница видна невооружённым глазом.
Подытожим
Итак, если хотите качественно и надолго войти в сферу мобильной Android-разработки, первый этап — изучение Java с его пусть и длинными, но зато понятными и традиционными синтаксическими конструкциями. Второй этап — «сахарный» Kotlin. Так как считается, что знать Kotlin невозможно без Java, вы вряд ли перепутаете эти этапы))
Конечно, вы можете остановиться и на Java, но учтите, что знание 2-х самых популярных языков в сфере мобильной разработки даст вам существенное профессиональное преимущество среди других программистов. Соответственно, будет выше и зарплата. Просто помните об этом.
За образцы кода спасибо Дмитрию Гордину, Android developer в RoadAR.