Как долго это слишком долго для имени переменной? - PullRequest
6 голосов
/ 12 августа 2011

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

Как долго длится имя переменной?

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

Например, я просто использовал MBReadPerSecondAverageAfterLastFlushToLog, который настолько близок к supercalifragilisticexpialidocious, насколько я надеюсь, что я когда-либо приду.

Matt

ps Извините, если сейчас у вас в голове есть песня Мэри Поппинс.

Ответы [ 3 ]

7 голосов
/ 12 августа 2011

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

Нет, длина имени переменной абсолютноничего общего с производительностью.

Редактировать:

Почему-то мне показалось, что вы говорите о C ++.Если вы (или C, или Delphi, или другой скомпилированный язык), вышеприведенное верно (за исключением отладочной информации, которая не появится в исполняемом файле релиза).

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

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

1 голос
/ 12 августа 2011

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

  1. Имя переменной указывает на то, что у вас есть функция с более чем одной ответственностью.

  2. Разве не для этого предназначены объекты? Представьте себе объект с именем Reads, это просто очень простой пример, который в любом случае может не соответствовать тому, что вам нужно.

      Reads.AveragePerSecond  
      Reads.Size  
      Reads.IsLoggedFlushed
    
0 голосов
/ 17 февраля 2019

Я думаю, что главная проблема в том, что вы забыли, что переменные не являются какими-то глобальными уникальными идентификаторами.У них есть контекст, который помогает их объяснить.Читая их, вы обычно узнаете этот контекст: пространство имен, имя класса, имя метода, значение предыдущих строк, имя метода путем присвоения значения переменной или в вашем примере некоторые базовые научные знания, такие как MBps, - это единица скорости передачи данных,скорость всегда измеряется средним значением и т. д. * MBReadPerSecondAverageAfterLastFlushToLog может быть просто Speed, если контекст объясняет все остальное ...

Чтобы было легче понять, хотите ли вы пиво, чем выпросто скажите своей подруге, что Give me a beer please! не то, что Give me an 5°C Gösser beer from the fridge I bought yesterday in the shop for 1$ please!

Какие издержки делает введение объекта?Разве переменная не объявляется гораздо меньше?

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

У меня уже есть метод "ReadFiles", где этот метод, такой как MBReadPerSecondAfterFlushToLog, KBReadPerSecondAverageAfterLastFlushToLog, MBReadPerSecondAveragePerReadOperation, etc6 и т. Д., Работают и т. Д.*

Это могут быть ReadSpeadAfterFlushToLog, если первые 2 переменные примерно одинаковы, и у вас должен быть класс DataTransferSpeed, который выполняет преобразование единиц для вас при необходимости.Третья переменная может быть AverageSpeedPerReadOperation.Если у нас есть только скорости чтения и контекст описывает это, например, имя метода содержит эту информацию, тогда даже часть Read может быть опущена.Если у вас слишком много переменных, вам может потребоваться несколько более мелких методов, и вы можете сгруппировать переменные, которые вы используете, с структурами и объектами.

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