Я предпочитаю использовать длинные идентификаторы, чтобы сохранить мой код семантически чистым, но в случае повторных ссылок на один и тот же идентификатор я бы хотел, чтобы он "убирался с пути" в текущей области видимости.Возьмите этот пример в Python:
def define_many_mappings_1(self):
self.define_bidirectional_parameter_mapping("status", "current_status")
self.define_bidirectional_parameter_mapping("id", "unique_id")
self.define_bidirectional_parameter_mapping("location", "coordinates")
#etc...
Давайте предположим, что я действительно хочу придерживаться этого длинного имени метода, и что эти аргументы всегда будут жестко закодированы.Реализация 1 кажется неправильной, потому что большая часть каждой строки занята повторением символов.Строки в целом также довольно длинные и легко превысят 80 символов, если вложены внутрь определения класса и / или блока try / исключением, что приведет к уродливому переносу строк.Давайте попробуем использовать цикл for:
def define_many_mappings_2(self):
mappings = [("status", "current_status"),
("id", "unique_id"),
("location", "coordinates")]
for mapping in mappings:
self.define_parameter_mapping(*mapping)
Я собираюсь собрать воедино все похожие итерационные методы под эгидой реализации 2, в которой улучшено отделение уникальных аргументов от повторяющихся.название методаОднако мне не нравится, что это приводит к размещению аргументов перед методом, в который они передаются, что сбивает с толку.Я бы предпочел сохранить синтаксис «глагол, за которым следует прямой объект».
В качестве компромисса я обнаружил следующее:
def define_many_mappings_3(self):
d = self.define_bidirectional_parameter_mapping
d("status", "current_status")
d("id", "unique_id")
d("location", "coordinates")
В реализации 3 длинный методс псевдонимом чрезвычайно короткой переменной «аббревиатура».Мне нравится этот подход, потому что он сразу распознается как набор повторных вызовов методов с первого взгляда, имея менее избыточные символы и намного более короткие строки.Недостатком является использование чрезвычайно короткого и семантически нечеткого идентификатора "d".
Какое решение является наиболее читабельным?Допустимо ли использование «переменной аббревиатуры», если она явно назначена из не сокращенной версии в локальной области видимости?