>Две операции -- не потянет на профи.
Опять же не критерий это :) Нужно чтобы код работал стабильно - это главное условие, оптимизацией нужно заниматься после профайлинга готового продукта ибо 20 процентов кода выполняются 80 процентов
времени :)
>На самом деле разница огромна. Стоит глянуть в ассемблерный листинг.
Гляньте, разницы нет. Вы может и программы по вытягиванию данных из базы данных на ассемблере писать предлогаете ? Программа должна работать стабильно это главное для чего вообще пишут программы. 20 процентов кода выполняются 80 процентов времени :) Предлогаете все оптимизировать ? Предлогаете на ассемблере писать все ? Под разные процы ? Трезвым ? :)
Сначала нужно добиться нужного функционала и стабильной работы, потом посмотреть на результаты профайлинга и только потом что-то оптимизировать.
Пипец, писать надо сразу как надо! Если не получается -- поштудируйте математические дисциплины. Если при профилировании приходится переписывать более 20% кода, надо серьёзно задумываться о другой работе. А судя по тому, что вы предложили для тривиального случая, за вами придётся переписывать более 80%.
Мне это напоминает спор Линуса и Таненбаума, Linux работает, а Minix в попе... Или спор о том применять goto или нет. Это вопрос скорее теоретический а не практический.
Не надо говорить что придется а что не придется. Мне предложили тест в шутку, я в шутку ответил, естественно в реальной задаче решение могло быть другим. Даже вариант с if'ами не является не верным. Задача написать без глючный код. Мне лично скажем быстрая файловая система которая рушится на раз нафиг не нужна. Может вам нужна ?
>>Пипец, писать надо сразу как надо!
Это как ? Быстрый код ? Это явно вам на ассемблере надо ! Мы уже все напишем, отпрофилируем и оптимизируем (только то что действительно надо !), а вы только первый блок закончите писать, а там глядишь и процессор этот в небытие уйдет когда закончите. Вы ведь по-серьезному оптимизировать будете, по конвеерам раскидывать ?
За отмаз не катит. Нарушил ТЗ, отвечай по всей строгости закона. :)
На самом деле вы, ребята, повелись как дети. Смайлики в моей задиче видили? Вот! Вы все дружно упустили такоую часть жизненного цикла программы как сопровождение. А оно, зачастую, стоит 50-70 процентов всех вложений в программу.
Ну и че? Прикольно сопровождать код 3-a; или a xor 3; или (4 >> a) & 3;
Через месяц как баран будешь на него смотреть, и ругаться на себя матом. А если через год в этот код сунется кто-то другой, то за такую писанину и по едальнику можно схлопотать.
Вывод, или писать читаемый код, или коментировать подробным описанием чего и как тут наворочено. Но с коментариями тож не все гладко. Про языковый барьер слышали? Вот и остается писать читаемый код. А если место узкое, и требует хитроумной оптимизации злобным кодом, то коментировать, коментировать, коментировать...
> Есть древний тест для того, чтоб отличить профи от непрофи.
Эх, помню в студенческие годы "скандальчик" небольшой. ;) Задача: напишите функцию, возвращающую "Истина", если аргумент нечетный, и "Ложь", если четный.
Естественно, умные студиозусы пишут
if (a % 2 > 0) return TRUE; else return FALSE;
Я, бормоча "зачем функция", рисую
#define odd(a) (a & 1)
Что вызывает резкое неприятие одного препода и такое же резкое одобрение второго (у нас на лабах оба сразу были, а лекции по очереди читали). ;) До завкефедрой дошло...
>Про другие аргументы, отличные от {1,2} речь не шла
Тебе два варианта предложили быстрый без проверки и с проверкой и то что if то-же правильно сказали.
>Вот такие умники и пишут заумный, но неработающий код :)
А такие умники не могут определить работает код или нет, а значит относятся к первой описанной выше категории.