Найти - Пользователи
Полная версия: Запись в БД с условием
Начало » Python для новичков » Запись в БД с условием
1 2 3 4 5 6 7
py.user.next
Rodegast
> Принцип работы
Это ещё один пример того как делать не нужно. Ибо Простое лучше, чем сложное. и Сложное лучше, чем запутанное..
Это простое? Не смеши меня. Там уже нагромождено и каждое новое добавляемое действие будет всё усугублять в результате эмерджентности. Вот первый признак сложного кода - надо начинать выдумывать имена для переменных.
Rodegast
> Это простое?

Это тупое, но ничего сложного я там не вижу. У тебя “Функции вызывают функции, которые вызывают функции, которые вызывают функции и так далее”, а вот это уже “запутанное”.
py.user.next
Rodegast
Это тупое, но ничего сложного я там не вижу.
Да? А я вижу десяток имён в коде на десять строк. Имена же находятся в одном пространстве имён, а их надо, наоборот разделять, чтобы не плодить кучу имён, а использовать несколько имён всего.

Rodegast
У тебя “Функции вызывают функции, которые вызывают функции, которые вызывают функции и так далее”, а вот это уже “запутанное”.
Вообще-то, это структурная парадигма программирования. Она, наоборот, борется со сложностью и позволяет код сделать модульным, ясным. Так написаны программы на C. Так написан Git, так написан Nginx. Ты читал их исходники? Да и питон тоже так написан.
Rodegast
> Да? А я вижу десяток имён в коде на десять строк.

Для тебя это большая проблема?

> Имена же находятся в одном пространстве имён, а их надо, наоборот разделять, чтобы не плодить кучу имён, а использовать несколько имён всего.

Да, но это не означает что для такого разделения нужно создать десяток функций.
py.user.next
Rodegast
Для тебя это большая проблема?
А ещё десять строк напишет, ещё надо будет десять имён придумывать. А потом будет пятьдесят разных имён, похожих друг на друга по своему назначению, но разных, и он уже будет путаться в них.

Rodegast
Да, но это не означает что для такого разделения нужно создать десяток функций.
Ну, функция, во-первых, изолирует кусок кода - то есть с ним можно отдельно от программы делать всё что угодно без повреждения всей программы в целом; во-вторых, она даёт использовать одни и те же имена, не размножая их из-за коллизий; в-третьих, ответственность за разные процессы разделяется между этими функциями - на каждой функции только её задача лежит, которая выполняется от какого-то конкретного момента до какого-то конкретного момента, типа как функция “прочитать файл” или функция “послать запрос принять ответ”; в-четвёртых, эти функции можно вызывать ещё раз и ещё раз - прочитать сначала этой функцией файл такой, а потом прочитать этой же функцией файл другой; в-пятых, эти функции функции легко покрыть юнит-тестами, потому что всегда можно выдернуть одну функцию и выполнить её отдельно от всего остального.
Rodegast
> А ещё десять строк напишет, ещё надо будет десять имён придумывать …. и он уже будет путаться в них.

Возьми код любого большого проекта и ты там ещё не такое увидишь.

> Ну, функция, …. всегда можно выдернуть одну функцию и выполнить её отдельно от всего остального.

Тогда объясни чем check_data(data) принципиально отличается от data.isdigit()
py.user.next
Rodegast
Возьми код любого большого проекта и ты там ещё не такое увидишь.
Не, что Git, что Nginx довольно чистые. Питон - да, он пишется всеми подряд, там просто замучаешься всё исправлять, поэтому принимают всё что просто работает. Поэтому править код интерпретатора питона неприятно и работать с ним неприятно. И поэтому я там контрибутингом не занимаюсь, хотя мог бы. Зачем мне копаться в этом, если есть более приятный и нужный мне код.

Rodegast
Тогда объясни чем check_data(data) принципиально отличается от data.isdigit()
Тем, что check_data() можно расширить и основная программа, которая обратилась к этой функции, этого не заметит. В данном топике речь зашла про плавающую точку (хотя я посмеялся, когда ты её ввёл, так как в устройствах бывает много потерь и там не до плавающих точек). Может там быть и не точка, могут быть данные вообще не числовые, а просто символы какие-то определённые. То есть приходят числа, которые представляют из себя символы (отдельно или сгруппированно, неважно). Соответственно, проверка данных может вообще не включать в себя str.isdigit(), а может включать str.isdigit() и вдобавок к str.isdigit() ещё что-то дополнительно. Также проверка может быть гораздо сложнее устроена и потребовать какие-то подпроверки, которые так же вынесены в функции, в которых так же что-то проверяется очень досконально, не по-тупому то есть. Соответственно, вставлять data.isdigit() прямо в главную программу при работе с реальным устройством - это глупость на уровне школьника. Тебе не хватит простенькой проверки, когда задача реальная, а не какая-то учебная из школы для девятиклассников. Поэтому я сразу это делаю, а не сижу и жду, когда же устройство вернёт мне какую-то совершенно новую забубённую хрень, из-за одной которой мне придётся распарывать всю программу, добавлять туда что-то новое и потом сшивать эти лоскуты заново воедино, и так до следующей новой забубённой хрени или сюрприза от устройства. Я взял эти данные под контроль. И они могут быть любыми теперь, мне абсолютно на это похеру. У меня всё под контролем, и я обработаю любые данные, и они очень точно обработаются, и в итоге всё правильно будет. В основную программу вернётся истина, а не какое-то приблизительное кратенькое тупенькое предположение, что “возможно, эти данные правильные, подходящие, я точно не знаю, потому что я тупой и там слишком много сложных проверок надо делать, а я не умею ничего, кроме hello world, делать”. А то, что там пока str.isdigit() внутри и его хватает, - это только временное явление. Может быть, оно не изменится. Но, скорее всего, оно не только изменится, но оно ещё и усложнится в десять раз. И я буду готов к этому усложнению, потому что позаботился об этом заранее, а не ждал у моря погоды “авось ничего не поменяется”.
Rodegast
> Тем, что check_data() можно расширить и основная программа

Давай без этой демагогии. Ты сделал функцию которая возвращает data.isdigit(). Зачем?
py.user.next
Rodegast
Ты сделал функцию которая возвращает data.isdigit(). Зачем?
Знаешь, какая разница между check data и is digit? По-русски это будет разница “проверить данные на правильность” и “данные являются циферными?”. Вот “проверить данные на правильность” означает что? Это значит, что нужно проверить, состоят ли они из одних цифр, после этого надо проверить, какое число образуют эти данные из одних цифр, после этого надо проверить, входит ли это число из данных в приемлемый диапазон чисел. Если эти все условия соблюдены, то нужно сообщить, что данные правильные. Если хоть одно из этих условий нарушено, то нужно сообщить, что данные неправильные. Тогда те данные, которые пришли с мусором, который выглядит как не цифры, не подойдут. Тогда те данные, которые пришли с мусором, который выглядит как цифры, тоже не подойдут. И тогда те данные, которые пришли с устройства, в котором произошёл сбой и оно дало неправильное число за нормальными пределами, тоже не подойдут. И только когда пришли данные без символьного мусора, без циферного мусора и при нормальной работе устройства, - эти данные подойдут и с ними можно будет дальше работать. И вот для того, чтобы всю эту хрень проверить, всё это выносится в отдельную функцию, которая может храниться в библиотеке функций. Таким образом, при изменении проверок данных, появлении новых требований к данным, к составу данных, к формату данных, программа будет также вызывать функцию check_data() и всё. Она будет вызывать функцию select_data() и всё, и она будет вызывать функцию check_data() и всё. При этом что там происходит внутри select_data() и что там происходит внутри check_data(), программу не должно волновать. Там может сто раз всё поменяться, а программа останется всё равно такой, какой и была изначально.

Rodegast
Давай без этой демагогии.
Это не демагогия. Я тебе просто перессказываю то, что прочитал в книгах ещё хрен знает сколько лет назад. И заметь, эти книги на русском языке. Ты не сможешь сказать “я не знаю английский, и поэтому я не знаю, что там в книгах на английском”. Ты и на русском книжки не читаешь. Поэтому ты отстаёшь. Поэтому ты нихера не знаешь.
Rodegast
> Знаешь, какая разница между check data и is digit? По-русски это будет разница “проверить данные на правильность” и “данные являются циферными?”.

Видел сколько там методов? Ты каждый из них будешь в функцию оборачивать что бы название поменять? Или как?
PS Не надо столько буков писать, я их всё равно не читаю.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB