Давайте посмотрим на следующий код, который я для примера выдрал из ядра linux:
if (!strncmp(name, p, k) && p[k] == '=') { p += k + 1; ...
Много загадочного и непонятного скрывает в себе мир вообще и мир программирования в частности.
Не запутаться бы.
if (!strncmp(name, p, k) && p[k] == '=') { p += k + 1; ...
class foo { public: foo(); void doSomething(); private: ... };И это логично. При чтении кода первое, что мы видим, это доступные нам рычаги для воздействия на класс, его интерфейс. Для тех, кто дочитал до private, становятся известны некоторые подробности реализации. Но речь не о том...
Что касается женщин, то это чувство сугубо интимное...
if (MIN_ELEMENTS == i) ...Я долго не мог понять почему мне это так не нравится, и наконец сформулировал для себя ответ на этот вопрос.
if (MIN_ELEMENTS <= i && i <= MAX_ELEMENTS) ...Очень похожая ситуация, хотя меня она коробит меньше.
Если MIN_ELENEMTS равен...Стоп, как может быть константное значение сегодня равно, а завтра не равно? В этом выражении как будто содержится предположение, что MIN_ELEMENTS может измениться.
i равно чему-то; если i равно MAX_ELEMENTS...Все последовательно и логично. Но это если код читать... Если воспринимать код целостно, то, возможно, все воспринимается несколько иначе.
certutils -renewCert
, но только с командной строки, специальной утилитой. Почему нельзя было сделать этого когда я открываю администрирование ЦС??? Ну или хотя бы сообщение об ошибке повменяемее? Я же не многого хочу! :) Хотя насчет ошибок - это вечная неиссякаемая тема.printf
. Самый правильный путь - это указывать строку непосредственно в тексте. При этом в случае с printf
мы получаем возможность визуально установить соответствие аргументов и собственно строки без отрыва от данного участка кода. В других случаях это тоже может быть актуально, так как строка обычно содержит в себе какой-то смысл, который вряд ли может быть полноценно передан через какой либо идентификатор.QObject::tr()
. В этом случае строка на основном языке видна явно, а соответствие интернациональным версиям - отдельная самостоятельная проблема, но самостоятельные проблемы решать проще, чем взаимосвязанные.LoadResourceString(IDS_STRING136,strTemp);
wsprintfA(szTm, strTemp.c_str(), from.wDay, from.wMonth, from.wYear, to.wDay, to.wMonth, to.wYear);
IDS_STRING136
, то мы обнаружим всего лишь...#define IDS_STRING136 136
int i
в отдельном файле, может даже хуже. Могу себе представить какие сложности испытывают программисты многоязычных приложений.IDS_STRING136
, и собственно его числовое значение тоже - это два лишних звена между главноязычными и дополнительноязычными сообщениями. Вернее даже не совсем так. Мы почему-то пытаемся главноязычные сообщения подменить безликими малоговорящими идентификаторами. К тому же строки иногда меняются, и строка легко может перестать соответствовать тому участку кода, в который она подставляется.