Пишем красивый код
Код, который вы пишете, должен быть красивым, как кот. Когда мы смотрим на красивого кота, мы умиляемся и говорим: ми-ми-ми. При чтении вашего кода должно возникать такое же чувство. В противном случае, у вас не код, а, извините, говнокод.
Косо смотрит кот на код, Написанный хозяином. Код большой, как бегемот, Плохо он читаемый. Кот переписал бы код, Только вот хозяин Очень сильно занял комп И со стола сгоняет. Этим сильно он коту Душу задевает, И программера в коте Тихо подавляет. *** Тихо смотрит кот на код И в душе сомненье Мой хозяин идиот, нет другого мнения. Пишет код и жрет, баран, сахарные кексики, Ты бы тему запорол, даже в старом бейсике, Запятую не туда, снова эти скобки. И мяуканье кота выбивает пробки. Засыпает в темноте программист от скуки, Кот дописывает код. на старом ноутбуке! --- С просторов интернета.
Я часто получаю письма от пользователей, которые делятся своими листингами. И порой волосы дыбом встают. Некоторые программисты наивно полагают, что свой код они прекрасно понимают и им не нужно писать красиво — мол и так понятно. В своё время я тоже так думал, а потом мучительно вспоминал, что делает та или иная функция в программе, которую писал несколько лет назад. Кроме того, правильная система написания кода помогает разработке, как это ни странно звучит.
Сравните код для запуска второй активности через нажатие кнопки (из урока 5):
public void onClick(View v) < Intent intent = new Intent(PassingDataDemoActivity.this, Privet.class); intent.putExtra("username", userNameEditText.getText().toString()); // в ключ username пихаем текст из текстового поля intent.putExtra("gift", descriptionEditText.getText().toString()); // в ключ gift пихаем текст из текстового поля startActivity(intent); >
А вот реальный пример из письма пользователя, который на основе того урока, писал своё приложение:
public void oc(View v)
В обоих случаях код делает одну и ту же работу. Но сколько же лишних усилий мне пришлось потратить, чтобы уяснить код даже в таком простом примере. При чтении такого кода нужно помнить, что oc — это метод обработки нажатия кнопки, t1 и t2 — это текстовые метки и т.д. и т.п.
Вот почему я беру плату за чтение чужих программ — разбор листингов отнимает много времени и сил.
А ведь писать красивый код не так уж и сложно. Не надо экономить на лишних символах в названиях классов и методов, а также не стоит избегать комментариев. Впрочем, и в другую крайность впадать тоже не стоит.
Понимание к такому подходу приходит не сразу. Когда я только начинал учиться программированию, то не обращал внимания на подобные «мелочи». Потом стал приглядываться не только к коду, но и как он написан. Стиль написания кода многое говорит о программисте. Есть очень интересная книга Читаемый код, или Программирование как искусство, который рекомендую к прочтению. Вот одна иллюстрация из этой книги.
Используйте говорящие имена
Код намного проще читать, если в нём будут использоваться говорящие имена, хорошо написанные комментарии, а также будет использоваться форматирование кода.
Когда вы придумываете имя для переменной, метода, класса и т.д., то подойдите к данному действию ответственно. Не стоит давать имена из непонятного набора символов типа m1, wl, KU, o, p, r, s, t. Представьте себе, что вы даёте имя коту. Вряд ли ему понравится имя m1 или t. Конечно, он сделает вид, что его это не касается, но карма у вас вряд ли повысится. А если вам такое имя дадут родители?
Итак, договорились — давайте нормальные имена. Даже если это временный тестовый пример на пять минут, который вы удалите. Выбрав хорошее имя, вы сообщаете гораздо больше информации, чем кажется на первый взгляд. По сути правильное имя уже содержит комментарий. Сравним:
// в этой переменной будем хранить имена котов String c; String catname;
Во втором случае даже не обязательно писать комментарий, уже понятно по названию переменной для чего она создана.
С другой стороны даже целые слова типа size, put тоже не всегда оправданны, так как не дают ясности. Избегайте пустых и неинформативных слов и выражений.
Допустим, мы создали метод getPage(url), который получает какую-то страницу. А откуда получает: из интернета, базы данных, диска? Если из интернета, то может стоит назвать метод downloadPage(url)? Кстати, мы пока не рассматриваем приёмы, связанные со стилем кодирования. Например, для Android имена методов должны начинаться с маленькой буквы, а второе слово с большой. В других языках могут использоваться другие стили, например, в Visual Basic совсем по другому.
class Cat
Что возвращает метод size()? Метод getTailSize() даёт основание предполагать, что речь идёт о размере хвоста. Кроме того, метод должен начинаться с глагола.
Или метод stop() — мы понимаем, что метод что-то останавливает. Но может есть более подходящие имена, например, kill() или pause() с родственным ему методом resume(). Ищите яркие запоминающие имена-синонимы.
- send (посылать) — deliver (доставлять), announce (извещать), route (направлять)
- find (искать) — search (искать), locate (обнаруживать)
- start (начинать) — launch (запускать), create (создавать), begin (начинать)
- make (создавать) — create (создавать), setup (устанавливать), build (строить), generate (генерировать)
Избегайте общих имён
Часто разработчики используют имена вроде tmp, retval, foo и т.д. В учебных примерах этот приём вполне допустим, чтобы показать, что это именно учебный пример. В своих программах следует избегать подобной практики. Иначе получается, что автор признаётся, что никак не может придумать имя. Придумайте такое имя, которое описывает назначение или содержание объекта. Тот же retval — совершенно неинформативное имя, которое сообщает, что это возвращаемое значение, что и так очевидно.
В некоторых случаях общие имена допустимы. Например, у нас есть код, где две переменные обмениваются своими значениями:
if(right
Здесь tmp хорошо подходит, так как служит для временного хранилища значения. Больше он нигде не используется и чтение кода не вызовет затруднений.
В более сложных примерах использование слова tmp неоправданно и свидетельствует о лени программиста.
String tmp = user.name(); tmp += " " + user.phone_number(); text.setText("Пользователь: " + tmp);
Если речь идёт о временном файле, то используйте, например, вариант tmp_file. Одного взгляда на код будет достаточно, чтобы понять, что в выражении используется объект файла:
saveData(tmp_file, . );
Сравните с вариантом:
saveData(tmp, . );
Для итераторов в цикле обычно используют имена i, j, k. Поэтому не стоит использовать подобные имена в других местах вашего кода. С другой стороны и циклах тоже лучше использовать говорящие имена. Иногда это помогает избежать ошибок, особенно во вложенных циклах, когда можно перепутать имена переменных и использовать неправильные индексы для массивов.
Имя переменной можно использовать как маленький комментарий. Любая информация, добавленная в имя переменной, будет напоминать вам о сущности переменной. Например, если у вас есть переменная, которая содержит строчку в шестнадцатеричном формате, то почему бы не использовать данный факт в имени:
string hex_id; // содержит "AF45CD98" string id; // плохой вариант
Переменные, связанные с измерениями
Удобно записывать единицы времени или другие данные в имя переменных. Например, если речь идёт о миллисекундах, то можно создать переменные таким образом:
int start_ms; int elapsed_ms; // и т.д.
Подобный стиль напомнит, что результат возвращается в миллисекундах и нужно проделать дополнительные операции, если результат нужно вывести в секундах, минутах и т.д.
Аналогично можно поступать и с другими мерами измерений:
start(int delay_secs); createCache(int size_mb); downloadFile(float max_kbps); rotate(float degrees_cw);
Взглянув на подобный код, вы уже можете приблизительно предположить, что делает метод.
Стиль кодирования для Android
На официальном сайте для разработчиков есть отдельная страница Code Style Guidelines for Contributors, посвящённая правилам оформления кода для проектов, написанных под Android.
А также есть ещё одна страница правил — Google Java Style
Правила написания кода на Java
Такие правила приняты в нашей компании. Они позволяют делать код более читаемым и аккуратным, избегать ошибок, связанных с разными стилями написания кода у людей, работающих над проектом, и в будущем легко редактировать его.
Имена файлов, пакетов
- В именах пакетов используются только строчные буквы.
- Имена Java-классам даются согласно стандартной нотации Java.
- Имена классов должны быть существительными, первые буквы всех слов — заглавные.
- В именах web-папок и файлов используются только строчные буквы. Слова в многословных названиях разделяются подчеркиванием.
Имена методов, переменных
- Названия методов должны быть глаголами, первая буква должна быть строчной, первые буквы внутренних слов — заглавные.
- Имена переменных должны начинаться со строчной буквы, внутренние слова — с заглавной.
- Имена констант составляются из всех заглавных букв, разделенных на слова символом подчеркивания.
Отступы, длина строки, переносы строк
- Отступы должны составлять строго 4 пробела (не знак табуляции).
- Длина строки не должна превышать 80 символов.
- Если длина выражения превышает длину строки, то необходимо разбить его на несколько строк согласно следующим правилам:
- перенос после запятой;
- перенос перед оператором;
- необходимо использовать отступ 8 пробелов для обозначения второй строки разделенного выражения. Последующие строки выравниваются по второй строке либо добавляются новые 8 пробелов для обозначения вложенности.
int result = function1(longExpression1, function2(longExpression2, longExpression3));
Расположение блоков, операторов, пробелы, скобки
- Определение переменных нужно располагать в начале блока, а не «ждать» первого использования переменной. Инициализация должна производиться, по возможности, сразу.
void myMethod() < int count = 0; // beginning of method block if (condition) < int int2; // beginning of "if" block . >>
getStaffList(String name)
getStaffList(String name, int count)
res = getCount(); (a > 10) ? b : c;
while (b
public Collection getStaffList(String name)
if (b)
Структурирование кода
- Методы должны быть короткими, и выполнять только одну задачу (к примеру, почти любой цикл уже достоин того, чтобы вынести его в особый метод).
- Имена методов должны быть самодокументированными.
- Шаблоны ООП должны применяться для структурирования и облегчения восприятия.
Стандарт разработан на основе “Code Conventions for the Java Programming Language” by Sun (http://java.sun.com/docs/codeconv/) с учетом принятых в коллективе практик.
Читать далее

Как мы работаем
Гибким графиком ИТшников не удивить. В последние годы все больше крупных фирм предпочитают плавающий график работы фиксированному. Безусловно, очень удобно добираться на работу и с работы не в час пик, не тратя безумное количество времени и сил на дорогу, иметь возможность синхронизировать график работы со второй половиной… Мы в этом вопросе не являемся исключением. Гибкость […]

ЛАР улетел в трубу
Начнем, пожалуй, с главного — покажем короткое промо-видео, которое Google «скреативил» по нашему заказу , а затем расскажем, как это было. Кстати, добавляйтесь в круги команды ЛАР в Google+, ну или подписывайтесь на страницу в Facebook, как вам удобнее. Все мероприятие проходило в «Аэро» (стрелковый клуб «Медведь»), именно там с недавних пор стоит аэротруба. С информацией о стоимости, отзывами от […]
Как оформлять код Java

В языке программирования Java есть большой набор не совсем официальных, но все же уважаемых среди разработчиков правил и соглашений касательно оформления кода. В случае с языком Java своего рода кодекс по оформлению программ называется Java Code Style. Предлагаем более подробно рассмотреть этот кодекс и понять, почему стоит использовать его в своей работе независимо от вашего опыта.
Что такое Java Code Style
Java Code Style — это набор правил и соглашений относительно форматирования и стиля написания кода на языке программирования Java. Он определяет, как должен выглядеть код, как именовать те или иные объекты, какие комментарии следует добавлять, и так далее. Цель Java Code Style состоит в том, чтобы сделать код более читабельным, понятным и поддерживаемым. Каждая компания или команда разработчиков может создавать собственные своды правил на базе Java Code Style. Так, Oracle определяет собственный стиль написания кода под названием «Oracle Code Conventions for the Java Programming Language». Есть другие стандарты, такие как «Google Java Style Guide» и «Sun Code Conventions». Каждый из них имеет собственные особенности и подходы к разработке, но все они стремятся к общей цели — повышению качества и читабельности кода.
Зачем нужен Java Code Style
- До 80% затрат при разработке ПО приходится не на создание, а на поддержку и дальнейшее развитие кода. Если с чего читабельностью большие проблемы, расходы будут серьезные.
- Над проектом, как правило, работает несколько разработчиков в составе команды, зачастую довольно большой. Ее состав может меняться, как и любой другой рабочий коллектив. Единый стиль написания кода упрощает ввод новых специалистов в работу над проектом.
- Внесение изменений в код — лишь малая часть работы. В основном проект читают, и чтобы этот процесс был быстрым и эффективным, оформление должно быть понятным и единым.
- Поддержка проектов занимает гораздо меньше времени и усилий, когда все файлы имеют согласованный стиль оформления. В особенности это актуально для больших IT-разработок.
В конечном итоге, исходный код — продукт, который должен быть грамотно оформлен и упакован. Именно этого и помогает достичь Java Code Style. Давайте рассмотрим этот кодекс более подробно, узнаем, как оформлять код Java, писать комментарии, называть переменные и другие объекты.

Правила оформления кода Java
Вы можете найти полный кодекс Java Code Style на официальном сайте Oracle на английском языке с подробными примерами оформления кода в тех или иных ситуациях. Мы же рассмотрим главные правила и принципы коротко и доступно, так, чтобы вы смогли сразу применить их в своей работе.
Отступы и пробелы
За одну единицу отступа в языке Java принято использовать четыре пробела. Табуляция же, в свою очередь, равна восьми пробелам, а не четырем, как во многих других языках программирования.
Максимальная длина одной строки кода — 80 символов. Строки, размер которых превышает такое ограничение, зачастую обрабатываются некорректно в большинстве современных сред разработки. Для работы с документацией ограничение еще строже — не более 70 символов в одной строке кода.
Отдельная тема — переносы длинных строек. В случае, если выражение настолько длинное, что его нельзя уместить в одной строке и укоротить, можно воспользоваться переносом по правилам:
- любое выражение переносится строго после запятой и перед оператором;
- начало новой строки должно находиться на том же уровне, что и предыдущей.
В случае, если попытки перенести выражение на новую строку ухудшают читабельность кода, сразу после переноса введите 8 пробелов (одна единица табуляции). Как правило, это решает проблему.
Используйте пробелы для разделения двух и более аргументов (сразу после запятой), а также всех бинарных операторов от своих операндов за исключением точки. При этом будьте внимательны — пробел не используется для разделения инкремента, декремента и прочих унарных операторов.
Пустые строки
Для большей читабельности текста программы рекомендуем использовать пустые строки там, где это уместно. Так, две пустые строки принято устанавливать между секциями и определениями классов/интерфейсов. Одна пустая строка обязательно прописывается в перечисленных местах:
- между переменными метода и его первым по счету оператором;
- между двумя методами, расположенными друг рядом с другом;
- перед однострочным и/или блочным комментарием (об этом ниже).
Также одну пустую строку принято ставить между логическими частями кода внутри одного метода.
Наименования переменных
Переменные в языке Java именуются со строчной буквы. Если название состоит из двух или более слов, каждое из них, за исключением первого, указывают с большой буквы. Подчеркивания и тире не используются. Рекомендуется назвать переменные существительными, в том числе составными.
- правильные наименования: mailService, backDoor, louderBark;
- неправильные наименования: MailService, back-door, Louderbark.
При необходимости в названии переменных можно использовать уточняющие прилагательные.
Наименования методов
Методы именуются одним либо несколькими словами слитно без использования подчеркиваний и тире. Если название метода составное, первое слово указывают со строчной буквы, остальные — уже с заглавной. Так как метод — это действие, для его наименования принято использовать глаголы:
- правильные примеры: print (), parseText (), isScroll ();
- неправильные примеры: Print (), Parse-Text (), isscroll ().
Так как в языке программирования Java широко используются такие виды методов, как «геттеры» и «сеттеры», правила их наименования также прописаны в кодексе. В случае с геттерами название метода начинается с префикса get. Исключение — метод, взаимодействующий с переменной типа boolean. В этом случае название геттера начинается с префикса is, тем самым отвечая на вопрос.
Названия методов-сеттеров формируются так же, но вместо префикса get пишется приставка set.
Наименования классов
Классы и интерфейсы в языке Java именуются с заглавной буквы. Если имя составное, то есть в его структуре содержится два или более слова, каждое из них также прописывается с заглавной буквы. Слова в названии классов и интерфейсов указываются слитно. Тире и подчеркивания недопустимы:
- правильно: GuideBook, LastName, FullSize, BlueNumber;
- неправильно: guide_Book, lastname, Full-Size, Bluenumber.
В названии классов в языке Java принято использовать существительные. Если есть необходимость, к ним можно добавить прилагательное, которое уточняет наименование. Например, ImmutableList.
Наименование интерфейса может содержать существительные или прилагательные в случае, если речь идет о каком-либо свойстве. Что касается классов тестов, для большей читабельности кода их названия должны включать слово test на последнем месте. Примеры: SpeedTest, CrushTest и другие.

Наименования констант
В отличие от перечисленных выше примеров, названия констант оформляются в стиле SNAKE_CASE. Следовательно, все слова начинаются с заглавной буквы, а между ними ставится подчеркивание. Как и в случае с переменными, рекомендуется использовать существительные с прилагательными.
Скобки и операторы
Фигурная скобка в коде на языке программирования Java открываются на той же строке, в которой находится код перед ней. Тело условного оператора или цикла рекомендуется размещать внутри фигурных скобок даже в том случае, если код занимает всего одну строку. Это предотвратит ошибку в случае добавления второй строки без добавления фигурных скобок. Вы сэкономите себе время.
Аббревиатуры и сокращения
Использование сокращений при разработке кода нежелательно хотя бы по той причине, что другие разработчики, которые заглянут в ваш проект, не поймут, что именно вы имели ввиду. Может быть и такое, что коллеги не найдут методы и классы со стандартизированными названиями и создадут их самостоятельно. Очевидно, что это утяжелит код и даже может привести к серьезным ошибкам.
Как не стоит сокращать: int lstId вместо int lastId, class CurPage вместо class CurrentPage и так далее.
Что касается аббревиатур, их применение зачастую неизбежно, но в ваших силах сделать их более читабельными. Для этого прописывайте аббревиатуры как слово только с одной заглавной буквой. Например, не HTMLPage, а HtmlPage, не class HTTPRequest, а class HttpRequest. Это смотрится лучше.
Комментирование кода
В ходе разработки программы на языке Java возможно использование двух видов комментариев — реализации и документации. К первым относятся комментарии, которые также применяются в C++. Они обозначаются следующим образом — /*…*/ и //. Документирующие, в свою очередь, есть лишь в Java. Для их обозначения используются символы /**…*/. Особенность таких комментариев в том, что их можно извлекать из кода и отправлять в HTML-файл при помощи инструмента JavaDoc.
Комментирование можно использовать в отношении как отдельных строк, так и блоков, и даже в рамках целых алгоритмов, занимающих десятки и даже сотни строчек. Документирующие нужны в случае, когда стоит задача описать спецификацию программы (в том числе пользовательский интерфейс) вне зависимости от ее реализации. Такие комментарии пишутся в том числе для тех разработчиков, которые будут пользоваться софтом, не имея доступа к его исходному коду.
Java-разработчикам доступно четыре вида комментариев. Давайте рассмотрим их подробнее.
Блочные
Применяются для описания методов, алгоритмов, файлов и структур данных, в том числе внутри описываемых участков. Если блочный комментарий прописывается внутри метода или функции, он должен иметь аналогичный отступ.
Для визуального отделения блочного комментария от остального кода перед ним нужно оставлять пустую строку. Текст пояснения укладывается между открывающим тегом /* и закрывающим */. Каждая строка начинается символом *. Интересно, что при таком оформлении на комментарий не распространяется опция автоформатирования.
Однострочные
Однострочные комментарии оформляются так же, как и блочные, но в одну строку. Рекомендуется прописывать его с отступом на уровне комментируемого блока. Если размер пояснения слишком большой и не умещается в одну строку, необходимо использовать блочное комментирование.
Прицепные
Если комментарий очень короткий, буквально в 2−3 слова, можно расположить его прямо на строке с описываемым кодом. Чтобы пояснение не сливалось с текстом программы, нужно сдвинуть его вправо. Количество пробелов не регламентировано, главное, чтобы был контраст на фоне кода. В случае использования нескольких прицепных пояснений их начала должны быть на одном уровне.
До конца строки
С помощью символов // можно обозначить начало комментария, который продолжается вплоть до начала следующей строки. Для многострочных пояснений этот метод не подходит, но его можно использовать, когда надо закомментировать несколько строчек, например, на время отладки.
Несмотря на всю пользу и удобство комментариев, не стоит злоупотреблять их количеством. Если вы видите необходимость прокомментировать тот или иной участок программы, подумайте, можно ли отредактировать его таким образом, чтобы сделать код более читабельным и понятным.
Правила объявления
Для удобочитаемости кода рекомендуется использовать одно объявление на строку. Это не только выглядит более читабельно в сравнении с нагромождением переменных или констант, но еще и упрощает дальнейшее комментирование программы. Чего точно нельзя делать, так это объявлять переменные и функции в одной строке, как и размещать таким образом переменные разных типов.
Вы сделаете код более понятным, если будете проставлять между типом и идентификатором не один пробел, а четыре. Необязательно нажимать Space четыре раза — достаточно нажать Tab.
Размещение
Объявления переменных размещаются только в самом начале блоков, то есть участков кода между фигурными скобками < >. Пожалуй, единственным допустимым исключением из этого правила будет объявление индексов в цикле for. В этом случае они указываются непосредственно в операторе.
Инициализация
Инициализируйте локальные переменные в том же месте, в котором их объявляете. Исключение- если начальное значение данной переменной определяется предварительными вычислениями.

Инструменты для оформления кода в IDE
Чтобы сэкономить время на ручном оформлении кода, подключите правила в среде разработки, которой пользуетесь в своей работе. Тот же Google Java Style Guide, упомянутый в начале статьи, можно скачать на GitHub и подключить в IDE как модуль. После установки остается дело техники — включить автоформатирование кода и наблюдать за тем, как оформление само приходит в норму.
Несмотря на возможность автоматического соблюдения правил и соглашений Java Code Style, все же стоит запомнить их и писать код изначально в соответствии с рекомендациями разработчиков.
Даже если вы начинающий разработчик и только учитесь, рекомендуем сразу привыкать к единым стандартам оформления кода. Поверьте, это лучше, чем долго переучиваться в дальнейшем, когда трудоустроитесь в более-менее серьезную команду. Более опытным разработчикам рекомендуем ознакомиться с полной версией Java Code Style в оригинале, доступной на сайте компании Oracle.
Java: Привет, Мир!
Изучать язык программирования по традиции начинают с программы «Hello, World!», которая выводит этот текст на экран.
Hello, World!
На языке Java эта программа будет выглядеть так:
class App < public static void main(String[] args) < System.out.println("Hello, World!"); >>
Текст Hello, World! появится на экране благодаря команде System.out.println() , где println() — это сокращение от английского print line. Она выводит на экран значение, указанное в скобках («Hello, World!») — в данном случае строку. Сама строка обрамляется двойными кавычками «» . Если этого не сделать, то компилятор укажет на синтаксическую ошибку:
# Например, вот так App.java:5: error: unclosed character literal System.out.println('Hello, World!');
Сама команда находится внутри нескольких конструкций, которые нужны для работы даже простейших программ на Java.
В данном случае это класс App и метод main() .
Сейчас мы не будем на них останавливаться, так как для их понимания нужно уметь немного программировать. Поэтому во многих заданиях они даются «как есть», то есть вам не придется их задавать самостоятельно. Когда придет время, мы их разберем.
JShell
Двигаясь по урокам, вы постоянно будете встречаться с примерами кода и описаниями его работы. Чтобы их лучше понимать и уметь пользоваться языком, нужно постоянно практиковаться и экспериментировать.
Поэтому по возможности запускайте все примеры из теории и проводите эксперименты с непонятными моментами.
С Java проще всего начать на сайте onecompiler, который позволяет запускать построчно код прямо в браузере. Попробуйте перейти туда прямо сейчас и набрать такой код:
System.out.println(85 * 3);
Задание
Наберите в редакторе код из задания символ в символ и нажмите «Проверить».
class App < public static void main(String[] args) < System.out.println("Hello, World!"); >>
Если вы напишете heLLo, woRld! вместо Hello, World!, то это будет считаться другим текстом, потому что заглавные и строчные буквы — это разные символы. Размер буквы называют регистром, и говорят: регистр — важен! Это касается почти всего в коде, поэтому привыкайте всегда обращать внимание на регистр.
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
- Если в редакторе есть запись // BEGIN и // END , то код нужно писать между этими строчками.
- Что такое компилятор?
