Допустимо ли использовать хитрости для сохранения программиста при вводе данных в ваш код? - PullRequest
10 голосов
/ 14 июля 2009

Пример: действительно неудобно набирать список строк в python:

["January", "February", "March", "April", ...]

Я часто делаю что-то подобное, чтобы избавить меня от необходимости набирать кавычки повсюду:

"January February March April May June July August ...".split()

Это заняло столько же времени, и я набрал в 2 раза больше месяцев. Другой пример:

[('a', '9'), ('4', '3'), ('z', 'x')...]

вместо:

map(tuple, "a9 43 zx".split())

, что заняло гораздо меньше времени.

Ответы [ 13 ]

33 голосов
/ 14 июля 2009

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

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

19 голосов
/ 14 июля 2009

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

print `"January February March April May June July August September October November December".split()`

И затем, используя последовательность клавиш V:!python<ENTER>, я могу запустить строку через интерпретатор python, и на выходе получится следующее:

['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

Я использую Vim для моего примера, но я уверен, что это так же просто с Emacs, TextMate и т. Д.

6 голосов
/ 14 июля 2009

В достаточно умном редакторе вы могли бы:

  1. Выберите интересующие линии,
  2. вставить замену (<space> на "<space>" для 1-го отл.),
  3. отметьте флажок выбранных строк,
  4. нажмите заменить все,
  5. БАМ .. ты готов.

Удобочитаем и легко печатать ... уважайте силу редактора!

5 голосов
/ 14 июля 2009

В общем, я думаю, что это плохая идея. Первый пример не так уж плох (он заменяет отсутствие qw в python), но второй гораздо сложнее для понимания. В частности, я думаю, что такие вещи очень непитонны и, безусловно, не подходят для написания кода Python, во всяком случае. Читаемость кода гораздо важнее, чем экономия времени на написание кода. Если у вас действительно есть ЭТО много данных для жесткого кода, напишите сценарий для его генерации.

3 голосов
/ 14 июля 2009

В производственном коде делайте это правильно. В тестовом коде, пока эта идиома появляется более одного или двух раз, я думаю, что это приемлемо. Если в тестовом коде эта ситуация появляется один или два раза, сделайте это правильно.

3 голосов
/ 14 июля 2009

Как часто вам действительно нужно набирать ["January", "February"... etc]?

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

Если вам действительно нужно набирать его так часто ... Copy-Paste!

1 голос
/ 23 января 2010

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

1 голос
/ 17 июля 2009

Я почти клянусь Code Complete Стивом Макконнеллом : одна из основных идей заключается в том, что плохие программисты пишут код, чтобы заставить компьютеры что-то делать, а в то время как хорошие программисты сначала напишите, чтобы написать код, понятный людям, и только потом, чтобы заставить компьютер что-то делать.

(Наличие кода, написанного без читабельности, в качестве основной проблемы - это все равно, что пытаться найти вещи в шкафу или шкафу для хранения документов, где люди просто втискивают вещи, не задумываясь, что-то сделать, чтобы вы могли перемещаться и находить вещи в них.)

Я думаю, что вы могли бы получить много пользы от чтения Code Complete ; Я знаю, что сделал.

1 голос
/ 14 июля 2009

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

1 голос
/ 14 июля 2009

... Я часто делаю что-то подобное, чтобы избавить меня от необходимости набирать кавычки везде ...

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

Такая декларация должна быть написана только ОДИН РАЗ для всего кода.

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