Разбор решения задачи "Вес Хемминга"
22 августа 2016 г.

Код на Ревью
Контрольные точки
- Понятно ли с первого взгляда что делает функция (основываясь на содержимом)?
- Попробуйте воспроизвести определение понятия "Вес Хемминга", глядя только на код
Спецификация
Вес Хэмминга это количество единиц в двоичном представлении числа.
Реализуйте функцию hammingWeight, которая считает вес Хэмминга.
Проблемы
Ничего не говорящие и запутывающие имена переменных
Как известно, именование переменных является одной из самых сложных задач в разработке, и данный пример это подтверждает.
Плохие имена не только не помогают читать код, но и могут запутывать. В данном примере переменная $weight это, на самом деле,
исходное число, а вес это $amount.
Имя $array не запутывает, но и не помогает. Разумно, в данном случае, было назвать переменную $digits, что соответствует сути.
Алгоритм вычисления веса опирается не на спецификацию, а на корреляцию
По случайному совпадению оказалось что можно сложить все цифры, из которых состоит число в двоичном представлении, и мы получим вес Хемминга. Да, это сработает, и этим фактом воспользовался автор, но определение веса Хемминга звучит совсем по-другому. Это приводит к семантическому разрыву. По коду сложно понять и восстановить описание, так же верно и обратное. После знакомства с определением трудно увидеть в коде его реализацию.
Алгоритм опирается на особенности типизации в php
PHP обладает, так называемой, слабой типизацией. Это означает, что PHP автоматически преобразует типы операндов в различных операциях, вместо того, чтобы сообщить об ошибке. Например, при сложении числа со строкой. Слабая типизация — это источник большого количества проблем и странного поведения программы при определенных входных данных. Это относится не только к php, в javascript ситуация точно такая же.
Подписывайтесь на канал Кирилла Мокевнина в Telegram — чтобы узнать больше о программировании и профессиональном пути разработчика
Вывод
Функция выглядит магической и требует время на осознание. Перед тем как она будет понята, смотрящему придется увидеть указанную корреляцию.
Решение
Использовать реализацию основанную на определении понятия "вес Хемминга".
Kirill Mokevnin
10 лет назад
13
Категории


.png)


