From 675ef7ad27d96b0ea0598008e3313125f7efdc60 Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 18 Jun 2026 14:55:51 +0500 Subject: [PATCH 1/2] =?UTF-8?q?feat(10-basics):=20=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BE=D1=80=D0=B8=D0=B8=20=D0=B8=D0=B7=20Python=20?= =?UTF-8?q?=D0=B8=20=D0=B0=D0=B4=D0=B0=D0=BF=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=20java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Доведение RU-теории и заданий модуля 10-basics до паритета с эталонным exercises-python с сохранением Java-специфики. - 10-hello-world: секция «Значение символов», диаграмма Код→Компилятор/JVM→Экран; кавычки описаны по-Java (строка — двойные, одинарные — char), без PEP 8. - 20-comments: секция «Служебные комментарии» (BEGIN/END), definition + tip. - 30-statements: секции «Порядок имеет значение» и «Зачем это нужно»; `;` описан как обязательный терминатор; definitions «Инструкция»/«Компилятор». - 40-testing: структурный заголовок «Моя ошибка или нет?» (формат ошибок — JUnit). - 50-syntax-error: секции «Что такое синтаксическая ошибка?», «Почему ошибки простые?», «Что делать при ошибке?»; tip; задание в стиле Python (сломай-и-почини). - description.ru.yml модуля дополнено до объёма Python. Java-специфика, отличная от Python: компилятор/JVM вместо интерпретатора; двойные кавычки для строк; обязательная `;`; формат ошибок javac/JUnit; 3 вида комментариев сохранены. Локаль только RU (en/es — отдельной фазой). Задание 20-comments оставлено обычным комментарием (не TODO): checkstyle-правило TodoComment запрещает TODO. Проверки: тесты всех 5 уроков зелёные, checkstyle 0 ошибок, YAML валиден. Co-Authored-By: Claude Opus 4.8 (1M context) --- modules/10-basics/10-hello-world/ru/README.md | 40 ++++++++++-- modules/10-basics/20-comments/ru/EXERCISE.md | 2 + modules/10-basics/20-comments/ru/README.md | 35 +++++++++- modules/10-basics/20-comments/ru/data.yml | 9 +++ modules/10-basics/30-statements/ru/README.md | 64 +++++++++++++++++-- modules/10-basics/30-statements/ru/data.yml | 12 ++++ modules/10-basics/40-testing/ru/README.md | 4 +- .../10-basics/50-syntax-error/ru/EXERCISE.md | 13 +++- .../10-basics/50-syntax-error/ru/README.md | 29 ++++++++- modules/10-basics/50-syntax-error/ru/data.yml | 4 ++ modules/10-basics/description.ru.yml | 2 +- 11 files changed, 196 insertions(+), 18 deletions(-) diff --git a/modules/10-basics/10-hello-world/ru/README.md b/modules/10-basics/10-hello-world/ru/README.md index 95b7f281..b9a54ce7 100644 --- a/modules/10-basics/10-hello-world/ru/README.md +++ b/modules/10-basics/10-hello-world/ru/README.md @@ -14,7 +14,15 @@ class App { } ``` -Текст *Hello, World!* появится на экране благодаря команде `System.out.println()`, где `println()` — это сокращение от английского *print line*. Она выводит на экран значение, указанное в скобках `("Hello, World!")` — в данном случае строку. Сама строка обрамляется двойными кавычками `""`. Если этого не сделать, то компилятор укажет на синтаксическую ошибку: +Текст *Hello, World!* появится на экране благодаря команде `System.out.println()`, где `println()` — это сокращение от английского *print line*. Она выводит на экран значение, указанное в скобках `("Hello, World!")` — в данном случае строку. Вместо примера можно вывести любой другой текст: + +```java +System.out.println("Хекслет — школа программирования"); +``` + +Команда остаётся той же, меняется только содержимое скобок. + +Чтобы программа понимала, что в скобках именно текст, его заключают в кавычки. В Java строка всегда обрамляется **двойными** кавычками `"..."`. Одинарные кавычки `'...'` для строки использовать нельзя: в них записывают одиночный символ (тип `char`), например `'A'`. Если обрамить строку одинарными кавычками, компилятор укажет на синтаксическую ошибку: ```bash # Например, вот так @@ -27,14 +35,36 @@ System.out.println('Hello, World!'); Сейчас мы не будем на них останавливаться, так как для их понимания нужно уметь немного программировать. Поэтому во многих заданиях они даются «как есть», то есть вам не придется их задавать самостоятельно. Когда придет время, мы их разберем. -## JShell +## Значение символов + +Код состоит из команд, и каждая из них должна быть написана в определённой форме. Помимо букв, в коде важны кавычки `"`, скобки `()`, фигурные скобки `{}` и точка с запятой `;`. Пропущенный или перепутанный знак приведёт к тому, что программа не скомпилируется. Попробуйте определить, какая ошибка допущена в каждой из строк? + +```java +System.out.println("I am the King"); +System.out.println("I am the King"; +System.out.println(I am the King"); +System.ouprintln("I am the King"); +System.out.println("I am the King") +``` -Двигаясь по урокам, вы постоянно будете встречаться с примерами кода и описаниями его работы. Чтобы их лучше понимать и уметь пользоваться языком, нужно постоянно практиковаться и экспериментировать. +Даже небольшое отличие — лишняя буква, потерянная скобка или забытая `;` — может привести к тому, что программа не заработает. Это относится и к регистру, то есть к различию между большими и маленькими буквами. Если в обычном тексте `Привет` и `привет` выглядят одинаково, то для Java это разные слова. Java считает `println`, `Println` и `PRINTLN` разными именами, и сработает только первый вариант. -Поэтому по возможности запускайте все примеры из теории и проводите эксперименты с непонятными моментами. +## Где практиковаться -С Java проще всего начать на сайте [onecompiler](https://onecompiler.com/jshell), который позволяет запускать построчно код прямо в браузере. Попробуйте перейти туда прямо сейчас и набрать такой код: +Теория усваивается лучше, когда параллельно запускаешь код и видишь результат. Двигаясь по урокам, вы постоянно будете встречаться с примерами кода и описаниями его работы. Чтобы лучше их понимать и уметь пользоваться языком, нужно постоянно практиковаться и экспериментировать — по возможности запускайте все примеры из теории. + +С Java проще всего начать на сайте [onecompiler](https://onecompiler.com/jshell), который позволяет запускать код построчно прямо в браузере с помощью JShell. Попробуйте перейти туда прямо сейчас и набрать такой код: ```text System.out.println(85 * 3); ``` + +Как это работает технически? В отличие от языков, которые выполняются построчно интерпретатором, код на Java сначала проходит через компилятор, а затем выполняется виртуальной машиной Java (JVM), которая и выводит на экран результат: + +```text +Код Компилятор + JVM Экран +┌──────────────────┐ ┌─────────────────┐ ┌──────────────┐ +│ System.out │ ──→ │ javac + JVM │ ──→ │ Hello, World!│ +│ .println(…) │ │ │ │ │ +└──────────────────┘ └─────────────────┘ └──────────────┘ +``` diff --git a/modules/10-basics/20-comments/ru/EXERCISE.md b/modules/10-basics/20-comments/ru/EXERCISE.md index fb87993a..d8cb3b3f 100644 --- a/modules/10-basics/20-comments/ru/EXERCISE.md +++ b/modules/10-basics/20-comments/ru/EXERCISE.md @@ -1,3 +1,5 @@ +Программисты часто оставляют в коде заметки для себя и коллег — пояснения, напоминания, пометки о том, что нужно доделать. + Создайте однострочный комментарий с текстом: ```text diff --git a/modules/10-basics/20-comments/ru/README.md b/modules/10-basics/20-comments/ru/README.md index 5fc8e96a..99944494 100644 --- a/modules/10-basics/20-comments/ru/README.md +++ b/modules/10-basics/20-comments/ru/README.md @@ -1,4 +1,17 @@ -Практически все языки программирования позволяют оставлять в коде комментарии. Они никак не используются кодом и нужны исключительно для людей: чтобы программист оставлял пометки для себя и для других программистов. +Практически все языки программирования позволяют оставлять в коде комментарии. Они никак не используются кодом и нужны исключительно для людей: чтобы программист оставлял пометки для себя и для других программистов, пояснял, как работает код, отмечал ошибки или напоминал, что нужно доделать. + +```java +// Удалить строку ниже после реализации задачи по регистрации +System.out.println(10); +``` + +Компилятор полностью игнорирует комментарии — на работу программы они не влияют: + +```text +// комментарий ──→ [ пропущено компилятором ] +System.out.println("hello"); ──→ [ выполнено → hello ] +// ещё один ──→ [ пропущено компилятором ] +``` Комментарии в Java бывают трех видов: @@ -29,3 +42,23 @@ System.out.println("I am the King"); // => I am the King **Документирующие комментарии** начинаются с `/**` и заканчиваются на `*/`. Уже для них обязательно каждую строку начинать с символа `*`. Документирующие комментарии — это подвид многострочных. При этом несут дополнительную функцию — их можно собрать при помощи специальной утилиты javadoc и выдать в качестве документации к вашему коду. Мы поговорим о них позже – когда разберем классы и методы. + +## Служебные комментарии + +В процессе работы вы будете встречаться с таким кодом в нашем редакторе: + +```java +// BEGIN + +// END +``` + +*BEGIN* и *END* здесь — это обычные однострочные комментарии, которые никак не влияют на работу программы. Они показывают, куда писать код задания. + +```java +// BEGIN +<здесь ваше решение> +// END +``` + +Увидев *BEGIN* и *END*, пишите свой код между ними, остальное оставляйте без изменений. diff --git a/modules/10-basics/20-comments/ru/data.yml b/modules/10-basics/20-comments/ru/data.yml index 17b084ff..97ff2a41 100644 --- a/modules/10-basics/20-comments/ru/data.yml +++ b/modules/10-basics/20-comments/ru/data.yml @@ -1,2 +1,11 @@ --- name: Комментарии +tips: + - > + [Подробнее о + комментариях](https://www.w3schools.com/java/java_comments.asp) +definitions: + - name: Комментарий + description: > + текст в коде программы, который не влияет на функциональность и + добавляется программистами для себя и своих коллег. diff --git a/modules/10-basics/30-statements/ru/README.md b/modules/10-basics/30-statements/ru/README.md index 1e665da7..583aa941 100644 --- a/modules/10-basics/30-statements/ru/README.md +++ b/modules/10-basics/30-statements/ru/README.md @@ -1,8 +1,18 @@ -Инструкция — это команда для компьютера. Код на Java — это набор инструкций, которые, обычно, отделяются друг от друга символом `;`. Вот пример кода с двумя инструкциями: +Инструкция — это команда для компьютера. Код на Java — это набор инструкций, и каждая из них завершается символом `;`. Таких инструкций может быть сколько угодно: каждая выполняется после того, как закончилась предыдущая, и так из простых элементов получается сколь угодно большая и сложная программа. + +```text +Инструкция 1: System.out.println("Hello"); → выполнена + ↓ +Инструкция 2: System.out.println("World"); → выполнена + ↓ +Инструкция 3: System.out.println("!"); → выполнена +``` + +Вот пример кода с двумя инструкциями. Эти строки говорят компьютеру вывести фразы на экран: ```java -System.out.println("Mother of Dragons"); -System.out.println("Dracarys!"); +System.out.println("Mother of Dragons"); // Первая инструкция +System.out.println("Dracarys!"); // Вторая инструкция ``` При запуске этого кода на экран последовательно выводятся два предложения: @@ -12,12 +22,52 @@ Mother of Dragons Dracarys! ``` -Почему это важно знать? Инструкция — это единица исполнения. Программа, которая запускает код на Java, выполняет инструкции строго по очереди. Разработчики должны понимать этот порядок и уметь мысленно разделять программу на независимые части, удобные для анализа. +## Порядок имеет значение + +Java выполняет код строго в том порядке, в котором вы его написали. Если поменять строки местами: + +```java +System.out.println("Dracarys!"); +System.out.println("Mother of Dragons"); +``` + +на экране они тоже поменяются: + +```text +Dracarys! +Mother of Dragons +``` + +## Завершение инструкций -Теоретически инструкции можно написать последовательно друг за другом без переноса на новую строчку: +В Java символ `;` обязателен — он отмечает конец каждой инструкции. Если его забыть, компилятор сообщит об ошибке. Благодаря `;` несколько инструкций можно даже записать на одной строке: ```java -System.out.println("Mother of Dragons."); System.out.println("Dracarys!"); +System.out.println("Mother of Dragons"); System.out.println("Dracarys!"); ``` -Результат на экране будет таким же, но на практике такой подход считается плохим. +Результат на экране будет таким же, но на практике такой подход считается плохим: код труднее читать. Поэтому инструкции почти всегда пишут по одной на строку. + +## Зачем это нужно + +Сейчас мы пишем очень простые программы, но со временем они начнут усложняться. Один из самых важных навыков, который поможет их понимать, — это способность мысленно разбивать программу на независимые инструкции. Только так можно разобраться, что в коде происходит. Ниже пример для привлечения внимания, понимать его пока не надо: + +```java +static boolean isPrime(int number) { + if (number < 2) { + return false; + } + + int divider = 2; + + while (divider <= number / 2) { + if (number % divider == 0) { + return false; + } + + divider++; + } + + return true; +} +``` diff --git a/modules/10-basics/30-statements/ru/data.yml b/modules/10-basics/30-statements/ru/data.yml index 62200903..517cdbc1 100644 --- a/modules/10-basics/30-statements/ru/data.yml +++ b/modules/10-basics/30-statements/ru/data.yml @@ -1,2 +1,14 @@ --- name: Инструкции (Statements) +tips: + - | + [Что такое компилятор?](https://guides.hexlet.io/compiler/) +definitions: + - name: Компилятор + description: >- + программа, преобразующая исходный код на Java в формат, который + выполняет виртуальная машина Java (JVM). + - name: Инструкция (statement) + description: >- + команда для компьютера, написанная на языке программирования. Код на + Java — это набор инструкций, каждая из которых завершается символом `;`. diff --git a/modules/10-basics/40-testing/ru/README.md b/modules/10-basics/40-testing/ru/README.md index 895382b8..10e0f4fa 100644 --- a/modules/10-basics/40-testing/ru/README.md +++ b/modules/10-basics/40-testing/ru/README.md @@ -14,7 +14,9 @@ expected: "35" but was: "10" Самое главное начинается после двоеточия: «ожидалось: "35", но было "10"». То есть правильный код должен был выдать 35, но текущее решение работает неправильно и выдаёт 10. ---- +Такой подход называется тестированием, и он используется в реальной разработке. Тесты помогают проверить, правильно ли работает программа, и быстро заметить ошибку после изменений. Именно поэтому наш сайт говорит «Тесты пройдены», когда вы правильно решили задачу. + +## Моя ошибка или нет? Иногда в процессе решения будет казаться, что вы сделали все правильно, но система "капризничает" и не принимает решение. Подобное поведение практически исключено. Нерабочие тесты просто не могут попасть на сайт, они автоматически запускаются после каждого изменения. В подавляющем большинстве таких случаев, (а все наши проекты в сумме провели миллионы проверок за много лет), ошибка содержится в коде решения. Она может быть очень незаметной, вместо английской буквы случайно ввели русскую, вместо верхнего регистра использовали нижний или забыли вывести запятую. Другие случаи сложнее. Возможно ваше решение работает для одного набора входных данных, но не работает для другого. Поэтому всегда внимательно читайте условие задачи и вывод тестов. Там почти наверняка есть указание на ошибку. diff --git a/modules/10-basics/50-syntax-error/ru/EXERCISE.md b/modules/10-basics/50-syntax-error/ru/EXERCISE.md index 18314ebe..e300dd48 100644 --- a/modules/10-basics/50-syntax-error/ru/EXERCISE.md +++ b/modules/10-basics/50-syntax-error/ru/EXERCISE.md @@ -1,2 +1,13 @@ +Напишите программу, которая выводит на экран: -Это задание не связано с уроком напрямую. Но будет полезным потренироваться с выводом на экран. Выведите на экран *What Is Dead May Never Die* +```text +What Is Dead May Never Die +``` + +После того как программа заработает, намеренно сломайте её — допустите одну из синтаксических ошибок: + +- уберите закрывающую кавычку `"`; +- уберите закрывающую скобку `)`; +- уберите точку с запятой `;` в конце строки. + +Запустите код и прочитайте сообщение компилятора. Такие сообщения вы будете видеть часто — важно научиться их читать. Затем верните рабочий вариант, чтобы упражнение прошло проверку. diff --git a/modules/10-basics/50-syntax-error/ru/README.md b/modules/10-basics/50-syntax-error/ru/README.md index 2424739a..e6898516 100644 --- a/modules/10-basics/50-syntax-error/ru/README.md +++ b/modules/10-basics/50-syntax-error/ru/README.md @@ -2,6 +2,20 @@ Примером может быть забытая `;`, неправильно расставленные скобки и другие детали. Подобные ошибки называются **синтаксическими**, потому что они нарушают правила синтаксиса языка. +## Что такое синтаксическая ошибка? + +Синтаксическая ошибка — это нарушение грамматических правил написания кода в конкретном языке программирования. Такие ошибки возникают, если код написан с отклонением от ожидаемого формата: не закрыта строка, пропущена скобка или точка с запятой, нарушен порядок символов и так далее. + +```text +Код с ошибкой Компилятор Результат +┌──────────────────┐ ┌─────────────┐ ┌──────────────────┐ +│ println("Hi" │ ──> │ javac │ ──> │ error: ')' или │ +└──────────────────┘ └─────────────┘ │ ';' expected │ + └──────────────────┘ +``` + +В отличие от естественных языков, где текст с ошибками можно понять по контексту, в программировании даже малейшее отклонение делает код неработоспособным. + Если программа на Java написана синтаксически некорректно, то компилятор выводит на экран: * Сообщение об ошибке @@ -22,6 +36,17 @@ System.out.println("alala | System.out.println("alala ``` -С одной стороны, ошибки синтаксиса — самые простые, потому что они связаны исключительно с грамматическими правилами написания кода, а не с самим смыслом кода. Их легко исправить — нужно лишь найти нарушение в записи. +## Почему такие ошибки считаются простыми? + +Синтаксические ошибки: + +- легко заметить: код часто подсвечивается в редакторе; +- легко исправить: достаточно вернуть пропущенный символ (`"`, `)`, `;`) или поправить структуру. + +Но есть ложка дёгтя. Компилятор не всегда указывает точно то место, где допущена ошибка. Иногда проблема находится несколькими строками выше. Например, открытая, но не закрытая скобка на одной строке может «сломать» весь следующий код. + +## Что делать при синтаксической ошибке? -С другой стороны, компилятор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке. +- Читайте сообщение об ошибке. Оно почти всегда содержит полезную информацию — тип ошибки и строку, где компилятор «споткнулся». +- Проверьте строку, указанную в сообщении, и строку до неё: иногда ошибка «спрятана» чуть раньше (забытая `;` на предыдущей строке). +- Используйте [редактор с подсветкой синтаксиса](https://code.visualstudio.com/): он поможет сразу заметить незакрытые кавычки, скобки или пропущенные символы. diff --git a/modules/10-basics/50-syntax-error/ru/data.yml b/modules/10-basics/50-syntax-error/ru/data.yml index 10b42ac8..364dc28a 100644 --- a/modules/10-basics/50-syntax-error/ru/data.yml +++ b/modules/10-basics/50-syntax-error/ru/data.yml @@ -1,5 +1,9 @@ --- name: Ошибки оформления (синтаксиса) +tips: + - > + [Редактор с подсветкой + синтаксиса](https://code.visualstudio.com/) definitions: - name: Компилятор description: >- diff --git a/modules/10-basics/description.ru.yml b/modules/10-basics/description.ru.yml index d429aaad..04700205 100644 --- a/modules/10-basics/description.ru.yml +++ b/modules/10-basics/description.ru.yml @@ -1,4 +1,4 @@ --- name: Основы Java description: | - Изучать Java мы будем с нуля, с самых азов. Первый модуль – плацдарм для написания осмысленных программ. В нем мы разберем, как написать свой первый код на Java. Расскажем, что такое комментарии и зачем они нужны. На примере проверки ваших решений рассмотрим, что такое тестирование и как читать вывод тестов. + Изучать Java мы будем с нуля, с самых азов. Первый модуль – плацдарм для написания осмысленных программ. В нем мы разберем, как дать команду компьютеру на языке Java и написать свой первый код. Расскажем, что такое инструкции и комментарии и зачем они нужны. На примере проверки ваших решений на сайте рассмотрим, что такое тестирование и как читать вывод тестов. Объясним, почему нельзя нарушать грамматические правила языка программирования. From bb6b4d9c3b89318b758edda6e5be11b4220ee84a Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 18 Jun 2026 15:05:50 +0500 Subject: [PATCH 2/2] =?UTF-8?q?chore(checkstyle):=20=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B8=D1=82=D1=8C=20TodoComment=20+=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=83=D1=82=D1=8C=20TODO-=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=2020-comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правило TodoComment запрещало `// TODO:` в коде решений, из-за чего нельзя было перенести из Python педагогически ценное задание про TODO-комментарии. Отключаем правило (закомментировано в checkstyle.xml) и выравниваем задание 20-comments под Python: студент добавляет `// TODO: добавить метод приветствия`. Проверки: checkstyle 0 ошибок, тест 20-comments зелёный. Co-Authored-By: Claude Opus 4.8 (1M context) --- checkstyle.xml | 3 ++- modules/10-basics/20-comments/App.java | 2 +- modules/10-basics/20-comments/ru/EXERCISE.md | 8 +++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/checkstyle.xml b/checkstyle.xml index 1522c638..9556b03d 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -171,7 +171,8 @@ - + + diff --git a/modules/10-basics/20-comments/App.java b/modules/10-basics/20-comments/App.java index b9884bad..2795fbf0 100644 --- a/modules/10-basics/20-comments/App.java +++ b/modules/10-basics/20-comments/App.java @@ -1,7 +1,7 @@ class App { public static void main(String[] args) { // BEGIN - // You know nothing, Jon Snow! + // TODO: добавить метод приветствия // END } } diff --git a/modules/10-basics/20-comments/ru/EXERCISE.md b/modules/10-basics/20-comments/ru/EXERCISE.md index d8cb3b3f..4a46a498 100644 --- a/modules/10-basics/20-comments/ru/EXERCISE.md +++ b/modules/10-basics/20-comments/ru/EXERCISE.md @@ -1,7 +1,9 @@ -Программисты часто оставляют в коде заметки для себя и коллег — пояснения, напоминания, пометки о том, что нужно доделать. +Вы пишете программу и понимаете, что одну часть нужно доделать позже. Чтобы не забыть, программисты оставляют себе заметки прямо в коде — TODO-комментарии. -Создайте однострочный комментарий с текстом: +Добавьте в файл такой однострочный комментарий: ```text -You know nothing, Jon Snow! +// TODO: добавить метод приветствия ``` + +Когда вернётесь к этому месту позже, комментарий напомнит, что здесь ещё есть незавершённая работа.