fact[n_] := Times @@ Range[n]
, Который является синтаксическим сахаром для Apply[Times, Range[n]]
. Я думаю, что это - лучший способ сделать это, не считая встроенное n!
, конечно. Обратите внимание, что это автоматически использует сверхбольшие числа.
Модульные тесты всегда помогают мне определить места, где я нарушил код из-за рефакторинга. Модульные тесты на динамических языках (PHP, Ruby, Python и т. Д.) Помогают там, где статическая типизация на других языках (Java, C #) обычно позволяет более безопасно провести рефакторинг.
Ваш вопрос имеет определенный смысл. Но - в то же время - это подразумевает, что реализация заведомо неадекватна и написана для замены. Почему бы просто не спроектировать его правильно с первого раза?
Что ж, лучший способ написать код, удобный для рефакторинга, - это написать слабосвязанный, очень связный код и объектно-ориентированный код.
Вы должны попробовать как можно больше абстракции, ведь абстракция - это ключевое слово при программировании.
Более того, вы должны разделить свой код на уровень представления, бизнес-уровень, уровень данных и т. Д., И использование шаблонов проектирования - довольно хорошее решение.
Я бы порекомендовал вам прочитать Мартина Фаулера.
Во-первых, убедитесь, что имена ваших переменных имеют смысл. Если возможно, используйте ООП, насколько это возможно, или, по крайней мере, сохраняйте все организованным (файл функции изображения, файл базы данных и т.д.)
Во-вторых, и это удобно, проверьте свою IDE. В Netbeans есть возможности для рефакторинга. Вы можете искать в файле, в папке, в проекте и т. Д.
По возможности избегайте магии: переменные переменные, eval, ошибки маскировки с помощью @ и хранение кода в базе данных приведут к укусу.