2012-06-20 2 views
0

Что нового в программировании, я придерживался (самоналоженного) представления о том, что чем меньше строк (кода), тем лучше. Таким образом, при программировании чего-то, вместо того, чтобы иметь отдельные переменные для кусков, я вложил все, что мог, в строку. Например:Следует ли пытаться сконденсировать свой код как можно больше?

preg_match('~><a href=~', substr(file_get_contents($match[1])), strpos($match[1], "help")), $match_rating) 

было бы более профессионально/вообще-предпочтительнее разорвать линию выше на отдельные переменные куски, так что это больше похоже на:

preg_match($regExp, $bigString, $matches) 

..с каждой переменной/шт определенная выше с собственной линией (и переменной)?

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


ответ

3

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

Ваша вторая цель должна состоять в том, чтобы ваша программа работала по назначению (учитывая цель 1).

Если вы выполнили первые цели и обнаружили, что есть проблема с производительностью/памятью, , то вам нужно подумать, как сделать код более эффективным. Если вы дойдете до этой части, первым шагом будет измерение, где проблема; затем исправить эту часть (возможно, отклонившись от цели 1 выше) - ополаскивать и повторять, если есть проблемы с производительностью/памятью.

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

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

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

Примечание: упорядочивание 1) и 2) является вкус зависит, но если вы идете на «правильность» пренебрегая «читаемость», вы обнаружите, что вам тяжело чтобы понять, таким образом, трудно отлаживаемый и трудноподдерживающийся код

+0

Хорошо сказано. Я начинал в эпоху, когда основной проблемой был размер кода, в основном значение исходного кода. В наши дни компиляторы намного, намного лучше оптимизируют код, чем мы, вероятно, будем программистами, поэтому теперь я проповедую, что исходный код должен быть читабельным и обслуживаемым в первую очередь, и нужно позволить компилятору сделать оптимизацию. В качестве побочного примечания, с имеющимися сегодня технологиями компилятора, программисту не нужно знать много о том, как работает компилятор (хотя это, безусловно, помогает понять). – strings42

1

Я думаю, что наиболее важным (в большинстве случаев) является то, что ваш код читабельен и доступен. Поэтому, если вы думаете, что все будут хорошо понимать, что вы делаете, без каких-либо проблем, то пусть это так, как есть.

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

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

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

0

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

Если позже вам нужно будет сделать оптимизацию, будет намного яснее, где будет выполняться «работа». Компилятор не легко оптимизирует зависимость цикла, но легко видеть, есть ли у вас письменные функции, которые работают с массивами и массивами структур/классов, которые содержат значения, хотя очевидно, что они работают напрямую с массивами, у вас будет больше кода чем если бы вы затушевывали вычисление с помощью неправильных указателей указателей или что-то в этом роде.

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

Смежные вопросы