Это такой, казалось бы, простой вопрос, но на него почти невозможно ответить. Причина в том, что то, что «правильно», зависит от ряда факторов.
1. Производительность
В своем ответе Skilldrick рекомендует, чтобы вы предпочитали то, что читается, а не то, что работает лучше всего, как общее правило:
[R] пригодность и ремонтопригодность должны
только приносится в жертву ради исполнения
когда это абсолютно необходимо.
Я бы возразил, сказав, что это только верно для типичного бизнес-приложения, где производительность и функциональность являются двумя четко различимыми характеристиками. В некоторых сценариях высокопроизводительного программного обеспечения это не так легко сказать, так как производительность и функциональность могут быть неразрывно связаны, то есть если то, насколько хорошо ваша программа выполняет свою задачу, зависит от того, насколько надежно она работает (это относится к мое текущее место работы, компания, которая занимается алгоритмической торговлей).
Так что это призыв к суду с вашей стороны. Лучший совет - вести профиль всякий раз, когда у вас есть подозрения; и если в вашем случае целесообразно жертвовать удобочитаемостью ради производительности, то вам следует это сделать.
2. Использование памяти
0xA3 предлагает довольно элегантный подход, предусматривающий компромисс своего рода: только вычисляйте значение по мере необходимости, а затем кэшируйте его.
Недостатком этого подхода, конечно, является то, что для его обслуживания требуется больше памяти. int?
требует по существу того же объема памяти, что и int
плюс bool
(что из-за проблем с выравниванием может фактически означать 64 бита вместо 40). Если у вас есть множество экземпляров этого класса data
, а память является дефицитным ресурсом на платформе, на которую вы ориентируетесь, увеличение числа типов на 32 бита на экземпляр может оказаться не самым умным ходом.
3. Ремонтопригодность
Тем не менее, я в целом согласен с тем, что говорили другие, что при прочих равных условиях вам лучше ошибиться в сторону читабельности, чтобы вы могли понять свой код, если и когда вы вернетесь к нему в будущем , Однако ни один из различных подходов к этой проблеме не является особенно сложным.
Суть в том, что только вы знаете свои точные обстоятельства и, следовательно, вы в лучшем положении, чтобы решить, что делать здесь.