1. Java-компилятор
Кстати, вы не раз еще услышите, что неоспоримое преимущество Java над другими языками — это мультиплатформенность. Что же это такое и с чем его едят? Начнем издалека.
Дело в том, что компьютер умеет исполнять только простейшие команды.
Для собак есть команды «Рядом», «Лапу» и другие, слыша которую собака делает что-то важное. У компьютера роль таких команд выполняют числа: каждая команда закодирована некоторым числом (его еще называют машинным кодом).
Писать программу в виде чисел очень сложно, поэтому люди придумали языки программирования и компиляторы. Такой язык, с одной стороны, понятен человеку, с другой — компилятору. Компилятор — это специальная программа, которая переводит текст программы, написанный на языке программирования, в набор машинных кодов.
Обычно программист пишет программу на языке программирования, а затем запускает компилятор, который на основе написанных программистом файлов с кодом программы делает один файл с машинным кодом — окончательную (скомпилированную) программу.
- Программа на языке C++
-
Компилятор
- Программа, состоящая из машинных кодов
Получившаяся в итоге программа сразу может выполняться на компьютере. Минус такого подхода в том, что код полученной программы сильно зависит от процессора и операционной системы. Программа, скомпилированная под Windows, не будет работать на телефоне с Android.
Если вы написали программу под Android, то на операционной системе Windows она не запустится!
Но у Java гораздо более инновационный подход.
- Программа на языке Java
-
Java‑компилятор
- Программа, состоящая из специальных кодов (байт‑код)
-
Java VM
- Программа, состоящая из машинных кодов
Компилятор Java не компилирует все классы в одну программу из машинных кодов. Вместо этого он компилирует каждый класс по отдельности, и не в машинные коды, а в специальный промежуточный код (байт-код). Компиляция в машинный код выполняется при запуске программы.
А кто же компилирует программу в машинный код при ее запуске?
Для этого есть специальная программа под названием JVM (Java Virtual Machine) — Виртуальная Машина Java. Сначала запускают ее, а затем — программу, состоящую из байт-кода. А уже JVM перед выполнением нужной программы компилирует ее в машинный код.
Если у вас крутой процессор, который поддерживает больший набор машинных команд, то во время "второй компиляции" сгенерируется машинный код с учетом именно вашего процессора и ОС. Именно поэтому Java иногда быстрее С++, который сразу компилируется в машинный код и может использовать только самые распространение команды процессора.
2. Типовые ошибки при компиляции
Скорость и оптимизация кода нам пока что не сильно важна, а вот что важно, так это то, что компилятор проверяет вашу программу на ошибки. Он проверяет код на корректность и не пустит его дальше, если нашёл даже маленькую ошибку.
Пример ошибки:
Вы пытаетесь присвоить число переменной, которая может хранить только текст.
String userName = 42; // Ой! Нельзя так.
Компилятор сразу выдаст ошибку, что типы не соответствуют: Cannot implicitly convert type 'int' to 'string'.
Другой пример — опечатка в команде println:
System.out.printline("Привет!"); // Ошибка в названии метода
Компилятор скажет: "Нет такого метода — проверяй синтаксис!"
Как читать ошибки?
Большинство компиляторов подсказывают, где в коде ошибка, и даже иногда предлагают варианты исправления. Не бойтесь ошибок: каждая из них — это шаг к просветлению и прохождению вашего внутреннего "босса".
3. Комментарии
Итак, представьте: вы пишете сложную программу. Всё работает, вы — гений! Но через месяц вы открываете тот самый код и... ничего не понимаете. Пару строчек кода тут, странная переменная там. В голове только: «Это явно писал кто угодно, но не я!». Вот тут-то и спасают комментарии.
Комментарии — это как записки на полях учебника или подписи на холодильнике ("Пиво. Не пить. На утро!"). Компилятор их игнорирует, а люди — наоборот. Комментарии позволяют объяснить смысл кода, помечать важные детали и даже «выключать» куски программ, не удаляя их.
Важно: ни один компилятор не читает ваши комментарии, они полностью игнорируются!
Однострочные комментарии
В Java есть два вида комментариев — однострочные и многострочные. Однострочные начинаются с двойного слеша // и идут до конца строки. Всё, что находится после //, считается комментарием и абсолютно игнорируется компилятором.
Пример:
System.out.println("Привет, мир!"); // Это выводит приветствие на экран
Вот тут // Это выводит приветствие на экран — комментарий. Если в коде кажется непонятным, зачем нужна строка, вот так и пишите!
Ещё пример:
int x = 42; // Значение возраста программиста
Можно писать однострочные комментарии и на отдельных строках:
// Инициализация переменной с именем пользователя
String userName = "Вася";
Почти как реплики в сценарии: комментарий объясняет, зачем и почему.
Многострочные комментарии
Что, если у вас много всего накопилось? Настоящая история? Для этого есть многострочные комментарии, которые начинаются с /* и заканчиваются на */. Всё между этими символами игнорируется компилятором, даже если это несколько строк.
Пример:
/*
Здесь мы выводим имя пользователя на экран.
Если имя отсутствует, напишем "Гость".
*/
System.out.println("Введите ваше имя:");
Или так:
int age = 18; /* Начальное значение возраста
для нового пользователя */
Внимание: нельзя вложить одни многострочные комментарии в другие. Не пытайтесь быть хитрее компилятора — это не сработает.
Иллюстрация:
| Вид | Синтаксис | Пример |
|---|---|---|
| Однострочный | |
|
| Многострочный | |
|
4. Примеры из жизни
«Отключение» строки кода:
Бывает, что вы временно хотите не выполнять какой-то фрагмент кода. Комментарии тут как раз к месту:
// System.out.println("Текст, который временно не нужен");
Строчка осталась, но компилятор её не «видит».
Пометки TODO и FIXME
Программисты — тоже люди, и иногда нужно самому себе напомнить, что код ещё не доделан, или что тут есть баг. Для этого часто пишут:
// TODO: сделать проверку на пустой ввод
// FIXME: эта функция неверно считает сумму
Многие редакторы и IDE даже выделяют такие слова!
Программисты шутят
// Я не отвечаю за этот код. Меня заставили написать его против моего желания.
// Дорогой, я_из_будущего! Пожалуйста, прости меня за этот код.
// Если я ещё раз увижу такое, мне придётся начать носить на работу оружие.
// Если это условие когда-нибудь выполнится, пожалуйста, сообщите мне по тел. ххх-ххх-ххх за вознаграждение.
// Дорогой программист:
//
// Когда ты закончишь «оптимизировать» эту подпрограмму
// и поймёшь, насколько большой ошибкой было делать это,
// пожалуйста, увеличь счётчик внизу как предупреждение
// для следующего парня:
//
// количество_часов_потраченных_здесь = 42
// Когда я начинал это писать, только Бог и я понимали, что я делаю.
// Сейчас остался только Бог
// Иногда мне кажется, что компилятор игнорирует все мои комментарии
// Я посвящаю весь свой код, всю работу своей жене Дарлин, которой
// придётся содержать меня, наших троих детей и собаку, когда
// это пойдёт в продакшн.
Да, комментарии могут быть очень смешными. Ведь их пишут живые люди.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ