- 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);
}
Есть у нас один мужик, которые такие шедевры творит. Хакер сновидений, РАГ - мы с тобой!
roman-kashitsyn 02.09.2011 12:27 # +3
TheHamstertamer 02.09.2011 12:33 # 0
guest 02.09.2011 12:49 # 0
P.S. работаю с phys-tech в одной компании
roman-kashitsyn 02.09.2011 12:54 # +1
absolut 02.09.2011 13:00 # +1
guest 02.09.2011 13:03 # 0
roman-kashitsyn 02.09.2011 13:05 # 0
TarasB 02.09.2011 13:45 # +3
absolut 02.09.2011 13:54 # +2
SadKo 05.09.2011 10:41 # 0
phys-tech 02.09.2011 14:04 # 0
ctm 02.09.2011 14:31 # +3
можно сделать if (gain_ != 1 << gain) gain = 0;
и еще log не сможет 0 обработать.
еще вариант цикл со сдвигом вправо на 1
Esper 02.09.2011 14:53 # −3
Если это функция из namespace'а, то мне не нравится глобальный isDiff, хотя скорее всего это метод класса. Лучше было бы сделать три функции: первая - из if'а, вторая - из case'а, третья зовет первые две и "лепит" возвращаемое значение, а сам метод зовет третью функцию.
По всему автор кода - неплохой кодер, а вот тот, кто запостил, со своими корешами насрут немало.
FAKYOUINTIRNEAT 02.09.2011 15:08 # −1
absolut 02.09.2011 15:12 # 0
Esper 02.09.2011 15:16 # −1
phys-tech 02.09.2011 15:13 # +3
Esper 02.09.2011 15:25 # +1
Ваша сентенция про разницу в отношении к большому числу простых функций лишь подтверждает мой предыдущий вывод.
phys-tech 02.09.2011 15:27 # +3
FAKYOUINTIRNEAT 02.09.2011 15:42 # 0
Esper 02.09.2011 16:05 # 0
roman-kashitsyn 02.09.2011 16:30 # 0
FAKYOUINTIRNEAT 02.09.2011 22:47 # 0
roman-kashitsyn 02.09.2011 15:34 # 0
К тому же, @Esper - лиспер (каламбур?) и у него чувство декомпозиции, возможно, развито лучше.
Да, код некрасив, название не соответствует содержанию, но воспроизвести поведение этой функции в точности меньшим числом строк довольно сложно. Я бы тоже вынес часть функционала в маленькие функции, предоставляющие хоть какую-то абстракцию.
CPPxCoDeR 02.09.2011 15:40 # 0
Почему бы не использовать цикл для вычисления логарифма по основанию 2. Быстро и сердито:
roman-kashitsyn 02.09.2011 15:45 # 0
CPPxCoDeR 02.09.2011 15:47 # −1
FAKYOUINTIRNEAT 02.09.2011 15:50 # 0
roman-kashitsyn 02.09.2011 15:50 # +1
Esper 02.09.2011 15:51 # 0
CPPxCoDeR 02.09.2011 16:15 # 0
Код "навырост". Можно маской регулировать кол-во возможных значений логарифма.
roman-kashitsyn 02.09.2011 16:42 # 0
Esper 02.09.2011 17:51 # 0
Вот вроде эквивалентный код. Приятной медитации.
guest 02.09.2011 17:56 # 0
Esper 02.09.2011 18:02 # 0
guest 02.09.2011 18:04 # 0
// говно-комментатор
gegMOPO4 02.09.2011 18:06 # +3
roman-kashitsyn 02.09.2011 18:12 # 0
Esper 02.09.2011 18:29 # 0
FAKYOUINTIRNEAT 02.09.2011 16:05 # 0
но они не должны. Стороннему человеку, чтобы понять логику работы, легче будет прочитать одну функцию, чем кучу инлайновых.
Можно вот так сократить строки:
Не хочу сказать что читабельность улучшилась, но все же
Esper 02.09.2011 16:17 # 0
Кстати, название обсуждаемого метода неудачно.
roman-kashitsyn 02.09.2011 16:24 # +1
Разумеется, функциям нужно дать более подходящие имена.
roman-kashitsyn 02.09.2011 16:31 # +1
FAKYOUINTIRNEAT 02.09.2011 22:56 # 0
roman-kashitsyn 02.09.2011 23:08 # +1
FAKYOUINTIRNEAT 02.09.2011 23:26 # 0
Дешево, да, но если каждую пару логических операций засовывать в функцию - этих функций будет куча и это скажется на производительности.
И тестировать одинаково легко, разве ошибешься с последним сдвигом и маски наползут друг на друга
roman-kashitsyn 02.09.2011 23:28 # 0
FAKYOUINTIRNEAT 02.09.2011 23:35 # 0
roman-kashitsyn 02.09.2011 23:52 # 0
Lure Of Chaos 02.09.2011 15:19 # 0
gegMOPO4 02.09.2011 18:11 # 0
Строки 11-40 тоже сокращаются к трём.
Esper 02.09.2011 18:24 # +1
gegMOPO4 02.09.2011 18:36 # +2
guest 03.09.2011 18:36 # 0
phys-tech 05.09.2011 11:12 # +1