Рефакторинг: замещение алгоритма

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

Сразу перейдем к примеру.

Допустим, у нас есть следующая функция, которая ищет в массиве нужных людей, и, если находит, возвращает имя человека, а если не находит - возвращает пустую строку:

<?
	…
	function findPerson($people) {
		foreach ($people as $person) {
			if ($person == 'Alex') {
				return 'Alex';
			}
			if ($person == 'Michael') {
				return 'Michael';
			}
			if ($person == 'Sergey') {
				return 'Sergey';
			}
		}
		return '';
	}
	…
?>

Как видим, у нас одна и та же конструкция с условием повторяется несколько раз. Переделаем функцию, удалив повторно используемый код:

<?
	…
function findPerson($people) {
		$candidates = Array('Alex', 'Michael', 'Sergey');
		foreach ($people as $person) {
			if (in_array($person, $candidates)) {
				return $person;
			}
		}
		return '';
	}
	…
?>

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

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

А шаги этого приема заключаются в выполнении следующих пунктов:

  1. Подготовьте Ваш замещающий алгоритм;
  2. Протестируйте всесторонне этот новый алгоритм. Если все нормально, то это последний шаг;
  3. Если в результате выполнения второго шага что-то пошло не так, используйте отладку для того, чтобы найти причину. Еще в этом помогают различные тесты, которые нужно применить и к старому и к новому алгоритму, чтобы понять, на каком именно тесте есть расхождения, и тем самым найти их и устранить.

Вот такой небольшой пост сегодня :)

До встречи!





Читайте также:




© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map