Добавьте в ваш пример еще пару ифов
Иногда читаемость, как в данном примере, повышается на порядок.
static int
win32_urandom_init(int raise)
{
/* Acquire context */
if (!CryptAcquireContext(&hCryptProv, NULL, NULL,
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
if (raise) {
PyErr_SetFromWindowsErr(0);
} else {
Py_FatalError("Failed to initialize Windows random API (CryptoGen)");
}
return -1;
}
return 0;
}
Goto перестали рекомендовать, из-за того, что очень просто с ним пропустить освобождение чего-то важного
interface PriceCalculator {
long calc();
};
class AveragePriceCalculator implements PriceCalculator {
public long calc() { ... }
}
PriceCalculator price = new AveragePriceCalculator (/* dependencies */);
long result = price.calc();
вдальнейшем нам потребуется изменять способ вычисления цены.
new
. В остальных местах всегда работать со ссылкой PriceCalculator
.