Что такое читаемый код? Каковы лучшие практики, которым нужно следовать при именовании переменных? - PullRequest
2 голосов
/ 18 января 2009

Как вы думаете, x, y, z - хорошие имена переменных? Как вы объясните новому программисту, как писать читаемый код?

Ответы [ 13 ]

4 голосов
/ 18 января 2009

Как уже говорилось, x, y и z - хорошие переменные для трехмерных координат, но, вероятно, плохие для всего остального ...

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

(Кстати, это единственная ситуация, когда обфускатор кода может быть полезен ИМХО)

4 голосов
/ 18 января 2009

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

Хорошие краткие описания в верхней части файлов и классов полезны для предоставления читателю контекста и справочной информации.

Четкие имена важны. Подробные имена значительно упрощают написание читаемого кода с гораздо меньшим количеством комментариев.

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

2 голосов
/ 18 января 2009

Кажется, что для языка программирования немного разные соглашения; однако в наши дни консенсус заключается в том, чтобы ...

  • используйте паскаль
  • сделать имя значимым
  • оканчивается на существительное

Вот достойное резюме того, что Microsoft публикует в качестве стандартных соглашений по именованию для .NET

Изобретатель python опубликовал руководство по стилю , которое включает соглашения об именах.

Было время, когда разработчики Microsoft VC ++ (включая меня) фактически объединились вокруг так называемой Венгерской нотации

0 голосов
/ 18 января 2009

Читаемый код и хорошие соглашения об именах - это не одно и то же!

Хорошее имя для переменной - это то, которое позволяет вам понять (или разумно угадать) назначение и тип переменной БЕЗ видя контекст, в котором она используется. Таким образом, «x», «y» и «z» говорят координаты, потому что это разумное предположение. И наоборот, плохое имя - это то, что приводит вас к неправильной вероятной догадке. Например, если «x», «y» и «z» представляют людей.

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

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

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

0 голосов
/ 18 января 2009

Идеальное имя переменной является как коротким (чтобы сделать код более компактным), так и описательным (чтобы помочь понять код).

Мнения расходятся в том, какой из двух пунктов важнее. Лично я бы сказал, что это зависит от области действия переменной. Переменная, используемая только внутри 3-х строчного цикла, может сойти с одной буквы. Поле класса в классе 500 строк лучше быть чертовски описательным. Философия Spartan Programming гласит, что, насколько это возможно, все единицы кода должны быть достаточно маленькими, чтобы имена переменных могли быть очень короткими.

0 голосов
/ 18 января 2009

Это короткий ответ, но он очень хорошо работает для меня:

Если для потребуется комментарий к коду для его описания, переосмыслите имя переменной.

Так что, если очевидно, почему был выбран «х», тогда это хорошие имена. Например. «i» как имя переменной в цикле (часто) довольно очевидно.

0 голосов
/ 18 января 2009

x, y и z являются допустимыми именами переменных, если они представляют трехмерные координаты или если они используются для итерации по 2 или 3-мерным массивам.

Насколько мне известно, этот код подходит:

for(int x = 0; x < xsize ; x++)
{
  for(int y = 0; y < ysize ; y++)
  {
    for(int z = 0; z < zsize ; z++)
    {
      DoSomething(data[x][y][z]);
...
0 голосов
/ 18 января 2009

Если x, y и z являются (3D) декартовыми координатами, то это великие имена.

В том же духе i, j и k были бы нормальными для переменных цикла.

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

0 голосов
/ 18 января 2009

Ну, дайте им кусок плохого кода и попросите их отладить его.
Возьмите следующий код (простой пример)

<?php $a = fopen('/path/to/file.ext', 'w');$b = "NEW LINE\n";fwrite($a, $b);fclose($a);?>

Ошибка в том, что файл должен содержать только 1 строку, если это должен быть журнал Проблема: «w» в fopen должно быть «a»

Это, очевидно, очень простой пример, если вы хотите дать им более сложный пример, предоставьте им источник ОМУ и попросите дать вам читаемый код через 2 часа, это поможет вам через.

0 голосов
/ 18 января 2009

Хорошие имена переменных точно описывают их, не будучи слишком сложными. Я всегда использую описательные имена, даже в циклах (например, index вместо i). Это помогает отслеживать, что происходит, особенно когда я работаю над переписыванием особенно сложного фрагмента кода.

...