Java или Kotlin — что учить Android-разработчику? | OTUS

Java или Kotlin — что учить Android-разработчику?

Androidbasic_Deep_4.3-5020-43f92f.png

В наше время рынок мобильной разработки развивается семимильными шагами, и это неудивительно, ведь в мире в год покупается более полутора миллиардов смартфонов. И 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.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто