На первых этапах обучения разработке приложений для Android новички сталкиваются с множеством сложностей. Они элементарно решаются профессионалом, но часто представляют сложную задачу для новичка. 

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

Дополнительная трудность заключается в том, что даже самые простые приложения для Android — это сложные программы, включающие сотни файлов и строк кода. Запустить их с первого раза без ошибок достаточно непросто.

Владимир Анисимов — практикующий Android-разработчик с более чем 4-летним опытом в нативной и мультиплатформенной разработке — разобрал 5 типичных ошибок новичков из своего опыта и дал лайфхаки, которые помогут их решить.

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

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

Представьте, что вы заходите в код своего проекта и видите примерно такую картинку:

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

Первая мысль: сразу проверять код, искать ошибку и пытаться исправить ее вручную. Однако такой подход на начальных этапах и без опыта в разработке может привести к новым ошибкам.

Вместо этого лучше сделать следующее:

1) Найти строку с описанием ошибки

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

Ключевое слово здесь — Exception (но может быть и Error), описание ошибки находится рядом с ним. Его нужно скопировать и вставить в поисковик Google.

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

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

Видя место в коде с ошибкой и зная описание, гораздо легче ее исправить.

Если эта ошибка создана вами как разработчиком (например, опечатка в коде), исправлять ее нужно исключительно вручную.

Если ошибка — внутри системы (например, не установлена нужная библиотека с данными), тогда ее нужно устранять в соответствии с рекомендациями в логе.

2) Попытаться избавиться от ошибки с помощью 4 кнопок в Android Studio, о которых не знают многие новички

Попробуйте их нажать, если нужно устранить ошибку, но вы не понимаете, что делать:

Rebuild Project

Она находится во вкладке Build:

Эта кнопка позволяет пересобрать проект, устранив ошибки.

Sync project with gradle files

Эта кнопка находится во вкладке File:

Логично, что, если нет связи между файлами проекта и gradle файлами (теми, которые собирают части проекта в единую систему) — приложение не будет работать. Кнопка Sync project with gradle files решает данную проблему.

Clean project 

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

Если после нажатия этой кнопки ошибка не устранена, можно вернуться к предыдущим двум и снова нажать их.

Кнопка Clean project находится на вкладке Build:

Invalidate caches

Эта кнопка — самое радикальное средство в борьбе с ошибками. Ее стоит нажимать, когда проект не запускается, Clean Project не работает и суть ошибки вы тоже не понимаете.

Invalidate caches очищает временные файлы уже самой Android Studio.

Она находится во вкладке File:

Следует оговориться, что эти советы направлены на новичков, более опытные разработчики знают, что и когда лучше использовать.

Ошибка #2. Неправильное наименование переменных

Эта ошибка встречается, наверное, у 80% начинающих разработчиков. Она не критична, однако делает код сложным и нечитаемым.

Вот, как это выглядит на примере:

В чем сложность с такими именами переменных?

Еще со школы мы привыкли переменные называть буквами a, b, c. Однако в программировании так делать нежелательно, так как через время трудно будет разобраться, какая буква что значит.

Это ключевой момент: код должен быть понятен не только компьютеру, но и человеку.

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

Нужно будет находить, где переменные a, b, c были введены, и восстанавливать логику у себя в голове.

А если ваш код будет читать другой человек, у него уйдет еще больше времени на то, чтобы его понять 

Иногда разработчик пытается спасти такую ситуацию с помощью комментариев к переменным:

Однако, к комментариям все равно придется возвращаться. К тому же, они утяжеляют код, ведь теперь придется читать сам код и комментарии к нему.

Называть переменные нужно сразу так, чтобы они сами себя объясняли:

В этом случае название переменной — money — сразу приблизительно дает понимание, о чем речь. А в идеале нужно уточнить, что за money, например назвав переменную так: moneyOnBalance.

Возьмем пример посложнее:

Это код для расчета баланса на счету при покупке товара стоимостью p и со скидкой d. Bal — количество средств на балансе.

В данном случае переменным заданы буквенные имена — p, d. Имя bal выглядит более понятно и читаемо, но все равно не является идеальным.

Попробуйте вникнуть в суть формулы. Попробовали? Сколько раз вы бегали глазами от буквы в формуле к пояснению, что она значит?

А вот так следовало бы оформить этот код:

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

Ошибка #3. Излишняя логика в коде

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

Например, разработчик задает 4 отдельные переменные и затем использует их в коде:

Создание отдельных переменных может быть обосновано — в том случае, если эти переменные будут использоваться в коде дальше много раз. Тогда данный подход действительно упростит код и сэкономит время разработчику. Но в конкретном фрагменте каждая переменная используется в коде только один раз.

Также в коде сделана ошибка с названиями переменных (см. ошибку #2). О чем вам говорит message1? Что такое 1? И чем отличается от message2?

Как можно упростить этот код и убрать все ошибки:

Сразу задать значения, которые должны выдаваться при определенных условиях без введения переменных.

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

Ошибка #4. Фокусировка на абстрактных заданиях

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

Например: вычислить факториал числа, решить квадратное уравнение, перепробовать все варианты сортировки данных.

Эти задания хорошо развивают алгоритмичное мышление и могут быть полезны на начальных этапах, но увлекаться ими не стоит. Они приведут вас к тому, что вы хорошо будете мыслить алгоритмами, но при этом сможете писать только простые и «математизированные» программы.

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

Ошибка #5. Пренебрежение возможностями режима Debug

Если разработанная вами программа запускается, однако выдает не те значения, которые вам нужны (и которые правильны), не спешите искать ошибку вручную. Для этого есть режим Debug.

Чтобы запустить программу в нем, нужно вместо обычной кнопки запуска нажать кнопку в форме жука, которая находится рядом с ней:

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

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

Если видно, что переменные имеют неверные значения, проверяем код в конкретной строке, экспериментируем с введенными элементами, пока не получим нужное значение переменной.

Эта функция позволяет не проверять весь код (как часто делают новички) и не придумывать «костыли», а проверить конкретно те места, в которых вы подозреваете наличие ошибки. 

Что это за ошибка и что с ней делать — нужно будет определить самостоятельно (в отличие от критической ошибки, из-за которой приложение не запускается), однако благодаря режиму Debug у вас будет понимание, в какой момент работы приложения и в какой части кода она появляется и как это исправить.

Полезные ссылки:

Контакт Владимира Анисимова в Telegram для вопросов по мобильной разработке: https://t.me/wovilon

Профиль Владимира в LinkedIn для связи: https://www.linkedin.com/in/владимир-анисимов-849017135/

Профиль Владимира в Facebook для связи и вопросов по мобильной разработке: https://www.facebook.com/profile.php?id=100018492451691

Комментарии (13)


  1. AntonSazonov
    03.01.2022 17:57
    +23

    Эта кнопка позволяет пересобрать проект, устранив ошибки.

    Вот я балбес. Всегда их вручную устранял. Оказывается можно было просто пересобрать...


  1. MFilonen2
    03.01.2022 18:05

    В Android Studio запрятано окно с возможностью выполнить код во время остановки программы – Evaluate Expression. После Xcode, где это одна из основ дебага, сперва непонятна где искать это окно.


  1. Tujh
    03.01.2022 18:14
    +17

    Ошибка #1. Искать ошибку в коде самостоятельно и пытаться устранить ее вручную

    нужно скопировать и вставить в поисковик Google

    а почему не сразу на StackOverflow? А Яндекс тоже не подходит?

    Вот и выросло поколение "сеньёров" которое серьёзно учит джуниоров только искать ошибки в поисковике, а не решать их самостоятельно.

    Печалька.


    1. Daddy_Cool
      03.01.2022 19:29

      Когда я додумался до дого, что можно искать ошибки в Гугле - это здорово упростило мою жизнь.
      Дело ведь в чем, языки и среды программирования это штуки созданные людьми и у этих людей есть какая-то своя логика. Вот например возникает ошибка из-за того, что что-то не так в настройках MSVS и надо это изменить - откуда я могу это узнать?


      1. lexx59
        04.01.2022 11:38
        +4

        На всякий случай скажу больше. В Гугле можно искать не только ошибки.


      1. Tujh
        04.01.2022 13:18

        Была не плохая статья на Хабре как раз по этому поводу и как раз про редкие настройки MSVS в том числе (выделил)

        Тот красивый, оптимальный код, который они выдавали на первом собеседовании, был найден в интернете. Те решения, которые обеспечили им взрывной рост продуктивности в первые месяцы работы, были найдены в интернете. Те вопросы пользователей, на которые чуваки отвечали после волшебного «я вам перезвоню», были найдены в интернете.

        Они пишут код, не понимая базовых конструкций. Нет, они не пишут код – они его скачивают. Нет, опять не то… Скачать код – это типа «npm i», это нормально. Они списывают код. Не умея его писать.

        Ладно там новую технологию раскурить с помощью интернета, или научиться пользоваться какой-нибудь редко встречающейся хренью, чтобы голову не забивать. Но базовые-то вещи! Как вы можете их из интернета списывать?!

        Если постоянно пишешь код, то делаешь это всё лучше и лучше. Если постоянно ищешь информацию в интернете, то прокачиваешь этот скилл. Если списываешь код из интернета, то становишься в этом большим мастером.

        Правда, не весь код есть в открытом доступе в интернете. Поэтому возникает плато.

        https://habr.com/ru/post/521104


        1. Daddy_Cool
          05.01.2022 13:17

          Кажется я понимаю. Я сталкивался с таким у студентов (в условнйо физике) - когда произносятся слова, но человек не понимает, что за ними стоит. Наверное с программированием можно также.
          -Напиши "Hello, world!".
          -... вот. красивый кодъ
          -Что такое main()?
          -Ну э... это такая штука...
          Так?


  1. Elsajalee
    03.01.2022 18:16
    +4

    #1 - OK, всё же имеет отношение к конкретной IDE и разработке под Android
    #2-#4 - Общее для всех программ, однако, заголовок намекает на Android.
    #5 - В общем-то тоже, что и 2-4, но "не спешите искать ошибку вручную" - а чем в Debug мы собираемся заниматься?


  1. Artem_zin
    03.01.2022 23:28
    +7

    Это.. сатира..? Очень хорошая!


  1. Semenych
    04.01.2022 00:52
    +13

    Технический уровень статей на Хабре опредленно обновил рекорд.


  1. bouncycastle
    04.01.2022 15:53

    Хотелось бы увидеть в подобных статьях архитектурные ошибки и советы по структурированию кода и о том, как не переизобретать велосипеды в Android.

    Пока что, в этой статье можно заменить Android на любую платформу/язык и суть не поменяется, тобишь к самой Android разработке не имеет особого отношения


  1. loltrol
    04.01.2022 16:15
    +6

    Я тут выучил слово новое, как "кринж" звучит. Так вот, кринжовый совет сразу гуглить ошибки подкрепляется еще более кринжовым скриншотом NullPointerException. Ну я даже не знаю, если гуглить NullPointerException, с стектрейсом в 3 метода, то может быть лучше проституткой стать?


  1. Sektor2350
    04.01.2022 21:39

    Ну хоть бы state в с описанием завернули в enum class, эх...