Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумНовичкам

Где брать примеры кода и как их читать

Полина Ждан
Полина Ждан
Новичок
сообщений 120
с мая, второй сезон
15 июля, 14:42первое сообщение

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

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

Откуда вы берёте примеры и как понимаете, что перед вами нормальный кусок кода?

stackfix
stackfix
Участник
сообщений 495
с окт
22 декабря, 17:59#2

Вопрос совсем не дурацкий, на нём буксуют месяцами.

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

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

И последнее, про то, как читать. Никогда не копируйте кусок целиком. Перепишите его руками по строке, и на каждой строке скажите вслух, что она делает. Строки, на которых вы замолчали, и есть ваш список на изучение.

пишу скрипты, чтобы не писать скрипты
Полина Ждан
Полина Ждан
Новичок
сообщений 120
с мая, второй сезон
1 мая, 08:16#3
stackfix: тесты в исходниках библиотеки

А их как искать? Я думала, тесты это внутренняя кухня и лезть туда рано.

Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
8 октября, 11:33#4

Лезть туда самое время. Папка почти всегда называется tests или test и лежит в корне проекта. Открываете файл, который называется похоже на вашу задачу, и смотрите функции с приставкой test.

Показываю на requests, там всё наглядно:

def test_proxy_authorization_preserved_on_redirect():
    s = requests.Session()
    s.proxies = {"http": "http://user:pass@127.0.0.1:8080"}
    r = s.get("http://example.org/", allow_redirects=True)
    assert r.status_code == 200

Из четырёх строк видно сразу: как передаётся вход в адрес посредника, что настройка живёт в сессии, и что при переходе она сохраняется. Ни одна статья вам этого так коротко не расскажет.

конфиг без комментария это загадка
veta_l
veta_l
Новичок
сообщений 210
с янв, второй сезон
15 марта, 14:50#5

плюс к тестам. и ещё примеры из книг хороши тем, что там объясняют, почему сделано так

hexdump
hexdump
Знаток
сообщений 940
с июн
22 августа, 17:07#6

Добавлю про признаки, по которым я на глаз отсеиваю мусор.

  • в примере нет обработки ошибок вообще, и при этом он длинный: писали для картинки
  • переменные названы a, b, tmp2: автор сам не понимал, что там лежит
  • перед кодом абзац воды, а после ни слова про то, что делать при отказе
  • в комментариях висят вопросы читателей, на которые никто не ответил

Хороший пример почти всегда короче, чем вы ожидали, и рядом с ним написано, чего он делать не умеет.

Полина Ждан
Полина Ждан
Новичок
сообщений 120
с мая, второй сезон
1 января, 08:24#7

Забрала совет переписывать руками по строке. Попробовала вчера на своём куске: из двенадцати строк вслух объяснила девять, три оказались скопированы вслепую, и как раз в них сидела ошибка.

Тесты тоже открыла, там правда понятнее, чем в статьях.