- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
ULONG LCard791::SetChn(int _gain,int _channel)
{
ULONG ret;
if(isDiff)
ret=_channel&15;
else
{
ret=_channel&31;
ret|=1<<5;
}
int gain;
switch(_gain)
{
case 1:
gain=0;
break;
case 2:
gain=1;
break;
case 4:
gain=2;
break;
case 8:
gain=3;
break;
case 16:
gain=4;
break;
case 32:
gain=5;
break;
case 64:
gain=6;
break;
case 128:
gain=7;
break;
default:
gain=0;
}
ret|=gain<<6;
return(ret);
}
Есть у нас один мужик, которые такие шедевры творит. Хакер сновидений, РАГ - мы с тобой!
P.S. работаю с phys-tech в одной компании
можно сделать if (gain_ != 1 << gain) gain = 0;
и еще log не сможет 0 обработать.
еще вариант цикл со сдвигом вправо на 1
Если это функция из namespace'а, то мне не нравится глобальный isDiff, хотя скорее всего это метод класса. Лучше было бы сделать три функции: первая - из if'а, вторая - из case'а, третья зовет первые две и "лепит" возвращаемое значение, а сам метод зовет третью функцию.
По всему автор кода - неплохой кодер, а вот тот, кто запостил, со своими корешами насрут немало.
Ваша сентенция про разницу в отношении к большому числу простых функций лишь подтверждает мой предыдущий вывод.
К тому же, @Esper - лиспер (каламбур?) и у него чувство декомпозиции, возможно, развито лучше.
Да, код некрасив, название не соответствует содержанию, но воспроизвести поведение этой функции в точности меньшим числом строк довольно сложно. Я бы тоже вынес часть функционала в маленькие функции, предоставляющие хоть какую-то абстракцию.
Почему бы не использовать цикл для вычисления логарифма по основанию 2. Быстро и сердито:
Код "навырост". Можно маской регулировать кол-во возможных значений логарифма.
Вот вроде эквивалентный код. Приятной медитации.
// говно-комментатор
но они не должны. Стороннему человеку, чтобы понять логику работы, легче будет прочитать одну функцию, чем кучу инлайновых.
Можно вот так сократить строки:
Не хочу сказать что читабельность улучшилась, но все же
Кстати, название обсуждаемого метода неудачно.
Разумеется, функциям нужно дать более подходящие имена.
Дешево, да, но если каждую пару логических операций засовывать в функцию - этих функций будет куча и это скажется на производительности.
И тестировать одинаково легко, разве ошибешься с последним сдвигом и маски наползут друг на друга
Строки 11-40 тоже сокращаются к трём.