Кодирование математических алгоритмов - стоит ли мне использовать переменные в книге или более описательные? - PullRequest
5 голосов
/ 25 марта 2011

Я поддерживаю код для математического алгоритма из книги со ссылками в комментариях. Лучше ли иметь имена переменных, которые описывают то, что переменные представляют, или переменные должны соответствовать тому, что в книге?

В качестве простого примера я могу увидеть этот код, который отражает переменную в книге.

A_c = v*v/r

Я мог бы переписать это как

centripetal_acceleration = velocity*velocity/radius

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

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

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

Ответы [ 7 ]

8 голосов
/ 25 марта 2011

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

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

3 голосов
/ 04 декабря 2012

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

// A_c = Centripetal Acceleration
// v = Velocity
// r = Radius

A_c = (v^2)/r
3 голосов
/ 25 марта 2011

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

3 голосов
/ 25 марта 2011

Я пишу много математических программ.Если я могу вставить в комментарии очень конкретную ссылку на книгу или статью или (лучший) веб-сайт, который объясняет алгоритм и определяет имена переменных, тогда я буду использовать короткие имена, такие как a = v * v / r, потому что этооблегчает чтение, написание и проверку формул.

Если нет, то я напишу очень подробный код с большим количеством комментариев и длинными описательными именами переменных.По сути, мой код становится документом, описывающим алгоритм (кто-нибудь помнит усилия Кнута по «грамотному программированию», много лет назад? Хотя технология для этого никогда не развивалась, я подражаю духу этих усилий).Я использую МНОГО искусства ascii в своих комментариях с диаграммами в виде прямоугольников и стрелок и другой описательной графикой.Я использую Jave.de - редактор Java Ascii Vmumble.

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

1 голос
/ 25 марта 2011

Я голосую за «книжную» версию.'v' и 'r' и т. д. довольно хорошо понимаются как сокращения скорости и радиуса и являются более компактными.

0 голосов
/ 25 марта 2011

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

например, A_c @ = v @ * v @ / r @

0 голосов
/ 25 марта 2011

Как далеко вы бы это взяли?

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

int Δv;
int Δx;

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

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

...