# Поиск и понимание примера кода

Улучшайте навыки программирования, обучая пример кода на GitHub.

## Как узнать из кода на GitHub?

Обучение проектов на GitHub — отличный способ **обучения новых методов и **поиска вдохновения** для собственных проектов**.

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

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

В этом руководстве вы узнаете, как это сделать **, выполнив пример сценария**: узнайте, как загружать и отображать данные из файлов на веб-сайте Jekyll. Затем вы можете применить советы и методы к другим проектам и языкам программирования.

## Поиск примера проекта

Первым шагом является поиск подходящего проекта для обучения.

### Используйте Копилот Чат для идентификации репозитория

Самый быстрый способ найти проект с кодом, который можно узнать, заключается в том, чтобы попросить [Копилот Чат](https://github.com/copilot) найти репозитории, соответствующие вашим критериям.

Откройте [Копилот Чат](https://github.com/copilot) и запустите чат общего назначения. Затем спросите:

> Можно ли найти некоторые популярные репозитории, использующие Jekyll для отображения данных из файлов в репозитории?

Copilot вернет ссылки на соответствующие репозитории, и вы можете задать дополнительные вопросы о репозиториях.

Часто Copilot завершает ответ с ссылкой на GitHub с дополнительными результатами. Далее мы рассмотрим эти результаты.

### Использование поиска для определения дополнительных параметров

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

1. Перейдите к расширенному поиску[](https://github.com/search/advanced).
2. В разделе "Дополнительные параметры" используйте раскрывающийся список "Написанный на этом языке" для выбора языка программирования. Для нашего сайта Jekyll мы будем выбирать HTML.
3. При необходимости в разделе "Параметры репозиториев" рядом с параметром "С этим множеством звезд", введите `>150`. Это поможет вам найти популярные репозитории, которые, вероятно, хорошо поддерживаются.
4. В верхней части страницы нажмите кнопку **"Поиск**".

> \[!TIP]
> Мы можем дополнительно сузить результаты поиска, добавив разделы и текст в поисковый запрос. Например, `topic:jekyll "blog"` возвращать репозитории владелец классифицировался как связанный с Jekyll и словом "блог" в имени или описании репозитория. Список популярных тем см. в разделах [GitHub](https://github.com/topics).

### Выбор проекта

После просмотра результатов из Copilot и поиска мы решили использовать репозиторий [`github/choosealicense.com`](https://github.com/github/choosealicense.com) . Этот репозиторий содержит исходный код [Choose a License](https://choosealicense.com/) — сайта Jekyll, который делится информацией о open source лицензиях.

Нас особенно интересует страница [Licenses](https://choosealicense.com/licenses/), где представлены популярные лицензии open source из файлов данных. <!-- markdownlint-disable-line search-replace -->

## Ориентирование на себя в проекте

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

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

### Файл README.md

Всегда рекомендуется читать **файл README.md** , который является первой страницей репозитория и автоматически отображается под списком файлов. Различные средства обслуживания будут включать разные сведения, но часто можно найти сведения о проекте, как создать его на локальном компьютере и ссылки на документацию.

[
`github/choosealicense.com`
](https://github.com/github/choosealicense.com) В репозитории README.md-файл объясняет, где живут файлы лицензий (`/_licenses`), атрибуты каждой лицензии и как получить веб-сайт, работающий на компьютере.

### Использование Копилот Чат

Если файл README.md не дает вам всех ответов, вы можете попросить Copilot помочь вам перейти к репозиторию и найти функциональные возможности.

Чтобы открыть переменные данных.copilot. copilot\_chat\_short %} нажмите на значок **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copilot" aria-label="Copilot" role="img"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>** рядом с строкой поиска и задайте свой вопрос. Например:

> Что такое основная целевая страница для этого веб-сайта Jekyll?

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

### Вики-сайт репозитория

Другой возможный источник информации — вики-сайт\*\* репозитория\*\*, раздел репозитория специально для размещения документации. Каждый репозиторий на GitHub оснащен возможностью использовать вики-сайт, но не каждый репозиторий использует его. Чтобы получить доступ к вики-сайту, щелкните вкладку **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-book" aria-label="book" role="img"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg> Wiki** в репозитории.

### Выпуски

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

Выпуски репозитория можно найти на боковой панели справа от списка файлов и README.md.

### Внутренняя документация

Вы также можете найти внутреннюю документацию в содержимом репозитория. Это может быть один файл Markdown или каталог, полный файлов Markdown. Распространенные имена для поиска: "docs", "документация", "wiki", "resources", "help" и "manual".

## Навигация по исходному коду

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

Когда вы находитесь в репозитории и щелкните поле поиска в верхней части страницы, GitHub автоматически добавит `repo` квалификатор поиска, чтобы результаты поиска были ограничены в репозитории, который вы просматриваете.

Чтобы приступить к работе, нам нужно что-то найти. Это может быть строка текста, уникального для проверяемой функции, или мы могли бы просмотреть html-источник страницы и найти конкретный `class` или `id` атрибут.

В нашем примере мы найдем текст в верхней части [страницы](https://choosealicense.com/licenses/) лицензий, используя следующий запрос: [`repo:github/choosealicense "If you’re looking for a reference table?"`](https://github.com/search?q=repo%3Agithub%2Fchoosealicense.com+%22If+you%E2%80%99re+looking+for+a+reference+table%22\&type=code) Возвращается один результат, файл с именем `licenses.html`.

Теперь мы можем щелкнуть результат и углубиться!
[
`licenses.html`
](https://github.com/github/choosealicense.com/blob/gh-pages/licenses.html) является источником страницы "Лицензии" мы искали. Мы видим строку, которую мы искали, и что каждая из лицензий включена в код ниже:

```markdown
{% include license-overview.html license-id="agpl-3.0" %}
```

## Общие сведения о исходном коде

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

### Запрос Копилот Чат о коде

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

Давайте попросите Copilot объяснить, что происходит в строке 11 с тегом `{% include %}` . Щелкните номер строки. Затем справа от строки нажмите <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copilot" aria-label="copilot icon" role="img"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>. В окне чата попросите:

> Что происходит в этой строке?

Copilot объяснит, что строка включает `license-overview.html` файл и передает их в `"agpl-3.0"` качестве отображаемого `license-id` .

> \[!TIP]
> Если вы не понимаете ответ от Копилот Чат, вы всегда можете попросить его упростить или расширить в определенной части.

### Чтение комментариев

Комментарии — это доступные для чтения заметки, которые можно использовать для понимания кода и не выполняются. Обычно они разделены символами, такими как `//` или `/*`.

Есть несколько типов комментариев для поиска:

* **Строка**: одно строковый комментарий, описывающие то, что делает определенная строка
* **Блок**: много строковый комментарий, которые могут описать, что делает вся функция или файл.
* **Файл**: блок-комментарий в самом начале файла, предоставляющий обзор этой конкретной части базы кода.

### Поиск функций в ссылках на язык программирования

Каждый язык программирования будет иметь ссылку в Интернете, объясняя каждый аспект языка.

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

В нашем примере поиск `jekyll include` в поисковой системе должен вернуть [документацию "Включает" в документации](https://jekyllrb.com/docs/includes/) Jekyll. Если ознакомиться с документацией Jekyll, мы видим, что сами лицензии являются коллекцией в каталоге[](https://jekyllrb.com/docs/collections/)`_licenses`.[](https://github.com/github/choosealicense.com/tree/gh-pages/_licenses)

> \[!TIP] Если вы не можете найти функцию в справочнике по языку программирования, скорее всего, эта функция определена в самой базе кода. Попросите [GitHub Copilot](https://github.com/copilot) найти его.

Чтобы сводные сведения о том, что мы узнали: [`licenses.html`](https://github.com/github/choosealicense.com/blob/gh-pages/licenses.html) файл включает в себя [`/_includes/license-overview.html`](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) каждую лицензию. Файл [`/_includes/license-overview.html`](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) соответствует `license-id` предоставленной лицензии в [`/_licenses`](https://github.com/github/choosealicense.com/tree/gh-pages/_licenses) коллекции и отображает сведения.

### Экспериментирование с небольшими изменениями

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

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

Попробуйте найти [`license-overview.html`](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) файл в `_includes` каталоге, а затем внести изменения в способ отображения лицензии или экспериментировать с тем, как лицензия загружается из коллекции.

Вы можете изменить метаданные в начале одного из файлов лицензий, изменить атрибуты, отображаемые в `license-overview.html`, или даже попробовать добавить собственный атрибут. После внесения изменений его можно протестировать, выполнив README.md инструкции по просмотру в браузере.

### Применение того, что мы узнали

Репозиторий [`github/choosealicense.com`](https://github.com/github/choosealicense.com) является отличным примером большого проекта Jekyll и демонстрирует, сколько возможно с Jekyll и GitHub Pages. Можете ли вы применить то, что вы узнали из структуры репозитория, как он использует коллекции и как он включает данные лицензии для создания собственного проекта?

## Следующие шаги

Теперь, когда вы понимаете, как работает пример кода, может потребоваться повторно использовать его в собственном проекте. Повторное использование кода является мощной частью разработки программного обеспечения, но есть важные шаги, чтобы сделать это правильно и юридически. Полный учебник см. в разделе [Повторное использовать код других пользователей в проектах](/ru/get-started/learning-to-code/reusing-other-peoples-code-in-your-projects).