Владимир Селюх
Разработчик ПО
from model.cpsr import CPSR
from model.company import CPSR as CPreSR
def get_sum (invoice):
service_list = CPreSR.get_service_models(invoice)
if not isinstance(service_list, dict):
raise
service_list = CPSR.remove_superfluous_free_services(service_list)
return reduce(lambda acc, x: acc + x['sum'], service_list)from model.cpsr import SecurityRequest
from model.company import CompanyServiceRecordИзбегайте схем кодирования имен.
Избегайте мысленный преобразований:
не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.cpsr import CPSR
from model.company import CPSR as CPreSR
from model.cpsr import CPSR # Избегайте схем кодирования имен
# Избегайте мысленный преобразований:
# не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.company import CPSR as CPreSR
# Имена должны передавать намерения программиста
def get_sum (invoice): #Выбирайте имена, удобные для поиска.
# список по английски list ну это же список всех сервисов, че?
service_list = CPreSR.get_service_models(invoice)
# Избегайте ложных ассоциаций, затемняющих смысл кода.
# service_list это dict
if not isinstance(service_list, dict):
raise
# Используйте удобопроизносимые имена.
service_list = CPSR.remove_superfluous_free_services(service_list)
# superfluous переводится как не нужный,
# но как это слово вообще произносится ???? о_О
return reduce(lambda acc, x: acc + x['sum'], service_list)BAD
Выбирайте имена, удобные для поиска.
Имена должны передавать намерения программиста
Maybe Better
def get_sum (invoice):
def get_invoice_services_price_sum (invoice):
from model.cpsr import CPSR # Избегайте схем кодирования имен
# Избегайте мысленный преобразований:
# не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.company import CPSR as CPreSR
# Имена должны передавать намерения программиста
def get_sum (invoice): #Выбирайте имена, удобные для поиска.
# список по английски list ну это же список всех сервисов, че?
service_list = CPreSR.get_service_models(invoice)
# Избегайте ложных ассоциаций, затемняющих смысл кода.
# service_list это dict
if not isinstance(service_list, dict):
raise
# Используйте удобопроизносимые имена.
service_list = CPSR.remove_superfluous_free_services(service_list)
# superfluous переводится как не нужный,
# но как это слово вообще произносится ???? о_О
return reduce(lambda acc, x: acc + x['sum'], service_list)BAD
Избегайте ложных ассоциаций, затемняющих смысл кода.
Maybe Better
invoice_services = CompanyServiceRecord.get_service_models(invoice)
service_list = CPreSR.get_service_models(invoice) # service_list это dict
if not isinstance(service_list, dict):
raise
from model.cpsr import CPSR # Избегайте схем кодирования имен
# Избегайте мысленный преобразований:
# не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.company import CPSR as CPreSR
# Имена должны передавать намерения программиста
def get_sum (invoice): #Выбирайте имена, удобные для поиска.
# список по английски list ну это же список всех сервисов, че?
service_list = CPreSR.get_service_models(invoice)
# Избегайте ложных ассоциаций, затемняющих смысл кода.
# service_list это dict
if not isinstance(service_list, dict):
raise
# Используйте удобопроизносимые имена.
service_list = CPSR.remove_superfluous_free_services(service_list)
# superfluous переводится как не нужный,
# но как это слово вообще произносится ???? о_О
return reduce(lambda acc, x: acc + x['sum'], service_list)non_free_invoice_services = SecurityRequest.remove_free_services(invoice_services)
BAD
Используйте удобопроизносимые имена
Maybe Better
service_list = CPSR.remove_superfluous_free_services(service_list)from model.cpsr import CPSR # Избегайте схем кодирования имен
# Избегайте мысленный преобразований:
# не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.company import CPSR as CPreSR
# Имена должны передавать намерения программиста
def get_sum (invoice): #Выбирайте имена, удобные для поиска.
# список по английски list ну это же список всех сервисов, че?
service_list = CPreSR.get_service_models(invoice)
# Избегайте ложных ассоциаций, затемняющих смысл кода.
# service_list это dict
if not isinstance(service_list, dict):
raise
# Используйте удобопроизносимые имена.
service_list = CPSR.remove_superfluous_free_services(service_list)
# superfluous переводится как не нужный,
# но как это слово вообще произносится ???? о_О
return reduce(lambda acc, x: acc + x['sum'], service_list)BAD?
Не используйте функциональную(процедурную, ОО) парадигму там где она мешает пониманию
Maybe Better
total_sum = sum([service.get('sum', 0) for service in non_free_invoice_services])
return total_sumMaybe Better(save some functional flavor)
return reduce(lambda acc, x: acc + x['sum'], service_list)total_sum = 0
for service in non_free_invoice_services:
total_sum += service.get('sum', 0)
return total_sumfrom model.cpsr import CPSR # Избегайте схем кодирования имен
# Избегайте мысленный преобразований:
# не заставляйте читателя мысленно преобразовывать ваши имена в другие.
from model.company import CPSR as CPreSR
# Имена должны передавать намерения программиста
def get_sum (invoice): #Выбирайте имена, удобные для поиска.
# список по английски list ну это же список всех сервисов, че?
service_list = CPreSR.get_service_models(invoice)
# Избегайте ложных ассоциаций, затемняющих смысл кода.
# service_list это dict
if not isinstance(service_list, dict):
raise
# Используйте удобопроизносимые имена.
service_list = CPSR.remove_superfluous_free_services(service_list)
# superfluous переводится как не нужный,
# но как это слово вообще произносится ???? о_О
return reduce(lambda acc, x: acc + x['sum'], service_list)from model.cpsr import SecurityRequest
from model.company import CompanyServiceRecord
def get_invoice_services_price_sum(invoice):
invoice_services = CompanyServiceRecord.get_service_models(invoice)
non_free_invoice_services = SecurityRequest.remove_free_services(invoice_services)
total_sum = sum([service.get('sum', 0) for service in non_free_invoice_services])
return total_sumBAD
Maybe Better
from model.cpsr import CPSR
from model.company import CPSR as CPreSR
def get_sum (invoice):
service_list = CPreSR.get_service_models(invoice)
if not isinstance(service_list, dict):
raise
service_list = CPSR.remove_superfluous_free_services(service_list)
return reduce(lambda acc, x: acc + x['sum'], service_list)def get_products_ids_in_region_strategy(products, region):
if isinstance(products, dict):
return get_products_ids_in_region_from_dict(products, region)
else if isinstance(products, list):
return get_products_ids_in_region_from_list(products, region)
else:
raise SomeException
def get_products_ids_in_region_strategy(products, region):
if isinstance(products, dict):
return get_prods_ids_in_reg_dict(products, region)
else if isinstance(products, list):
return get_prods_ids_in_reg_list(products, region)
else:
raise SomeException
// Имя не в кемелкейсе это ж JS
import { image_or_text } from '......somesheet';
// Глагол. Обычно это означает что можно заменить просто на набор функций
class ElemResizer {
constructor(element) {
this.element = element;
}
static newSize(elem) {
return elem.big();
}
newSize() {
if (image_or_text(this.elem) === true) { // Булевым переменным имена, подразумевающие значение true или false.
this.elem.height = this.elem.height*2;
this.elem.width = this.elem.width*2;
return this.elem;
}
return this.element.bold();
}
installNew(element) { // Дисциплинированно используйте антонимы
this.element = element;
}
terminate() { // uninstall - не remove, не purge, не delete
this.element = null;
}
}import { isImage } from '......somesheet';
const multiplyImageSize = (image_element, multiplicator) => {
if (isImage(image_element) === false) {
throw "Not an image";
}
image_element.height = this.elem.height*multiplicator;
image_element.width = this.elem.width*multiplicator;
}
async def call_data_consumer(
call_queue: Queue,
):
while call_queue.qsize():
call_data = await call_queue.get()
await send_call_data(call_data)
db_client = loop.run_until_complete(create_engine(
config['db']['dsn'],
))
async with db_client.acquire() as conn:
await conn.execute(
call_data_table.update().values(
status=CallSendStatus.SENT
).where(
call_data_table.c.id.in_(call_data)
)
)async def call_data_consumer(
call_queue: Queue,
):
while call_queue.qsize():
call_data = await call_queue.get()
await send_call_data(call_data)
await update_calls_status(call_data, CallSendStatus.SENT)
Экземпляры классов
Структуры данных
Функциональный код (код опирающийся на структуры данных) позволяет легко добавлять новые функции без изменения существующих структур данных. Объектно - ориентированный код, напротив, упрощает добавление новых классов без изменения существующих функций.
И наоборот
Функциональный код усложняет добавление новых структур данных, потому что оно требует изменения всех функций. Объектно-ориентированный код усложняет добавление новых функций(методов), потому что для этого должны измениться все классы.
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def increaseSalary(self, amount):
self.salary = self.salary + amount
def increaseSalary(employee: Employee, amount: int):
employee.salary = employee.salary+amount
employee.last_salary_increase_date = datetime.now()
save_comment(employee)
def save_comment(employee):
save(f'{employee.name} salary increased at {employee.last_salary_increase_date}')
Паровозик смерти
Баянист
Ексепшин коубой
station_leader_name = paravozik.get_marshrut().get_station('Pukino').get_station_leader().get_name()sum = a[0][1][0]['sum']do_something()
res = requests.get('htpz://nonexistant_with%errors&url')
do_something_very_necessary(res)