"No comentes tu código"
Un poco de mi
Sagrario Meneses
Software Architect
@sagmmd
Comentar el código requiere...
MANTENIMIENTO
Los comentarios...
MIENTEN
Los comentarios...
"Permiten compensar nuestra incapacidad para expresarnos en el código"
Preguntemonos
¿Existe una forma de expresar esto en mi código?
Comentarios que debemos evitar
Redundantes
Intención de un valor
De advertencia
Código zombie
Con comentarios
...
$this->discount($c, $p);
...
}
/**
* Cálculo del descuento de un producto
*
* Arreglo con la información de cupón
* @param array $c
*
* Arreglo con la información de producto
* @param array $p
*/
protected function discount($c, &$p) {
//Revisa si el cupón está disponible y no excede el 50%
if (array_key_exists('n', $c) && $c['d'] < 50) {
// Guarda el calculo del descuento en la variable del producto
$p['d'] = ($p['p'] * $c['d']) / 100;
}
}
Sin comentarios
const MAX_DISCOUNT = 50;
...
$this->setAvailableDiscount($coupon, $product);
...
}
protected function setAvailableDiscount(Coupon $coupon, Product &$product) {
if (!$coupon->getName()) {
error_log('Configuración incorrecta de cupón', 3, '/log/error.log');
return;
}
if ($coupon->getDiscount() > self::MAX_DISCOUNT) {
return;
}
$discountInCents = $product->getPrice() * $coupon->getDiscount();
$product->setDiscount($discountInCents / 100);
}
const MAX_DISCOUNT = 50;
...
$this->setAvailableDiscount($coupon, $product);
...
}
protected function setAvailableDiscount(Coupon $coupon, Product &$product) {
if (!$coupon->getName()) {
error_log('Configuración incorrecta de cupón', 3, '/log/error.log');
return;
}
if ($coupon->getDiscount() > self::MAX_DISCOUNT) {
return;
}
$discountInCents = $product->getPrice() * $coupon->getDiscount();
$product->setDiscount($discountInCents / 100);
}
...
$this->discount($c, $p);
...
}
/**
* Cálculo del descuento de un producto
*
* Arreglo con la información de cupón
* @param array $c
*
* Arreglo con la información de producto
* @param array $p
*/
protected function discount($c, &$p) {
//Revisa si el cupón está disponible y no excede el 50%
if (array_key_exists('n', $c) && $c['d'] < 50) {
// Guarda el calculo del descuento en la variable del producto
$p['d'] = ($p['p'] * $c['d']) / 100;
}
}
Redundancia
class Product
{
/**
* @var float
*/
private $price;
/**
* @param float $price
*/
public function setPrice($price): void
{
$this->price = $price;
}
}
class Product
{
private float $price;
public function setPrice(float $price): void
{
$this->price = $price;
}
}
Comentarios confusos
protected function productDiscount($c, &$p) {
//Revisa si el cupón está disponible y no excede el 50%
if (array_key_exists('n', $c) && $c['d'] < 30) {
// Guarda el cálculo del descuento en la variable del producto
$p['d'] = ($p['p'] * $c['d']) / 100;
}
}
Comentarios de advertencia
protected function setAvailableDiscount(Coupon $coupon, Product &$product) {
// OJO: Siempre siempre validar el nombre, porque si no hay nombre
// quiere decir que es un cupón que aún no se lanza a campaña.
if (!$coupon->getName()) {
return;
}
$discountInCents = $product->getPrice() * $coupon->getDiscount();
$product->setDiscount($discountInCents / 100);
}
Código zombie
protected function setAvailableDiscount(Coupon $coupon, Product &$product) {
if (!$coupon->getName()) {
//error_log('Configuración incorrecta de cupón', 3, '/log/error.log');
return;
}
/*if ($coupon->getDiscount() > self::MAX_DISCOUNT) {
return;
}*/
$discountInCents = $product->getPrice() * $coupon->getDiscount();
$product->setDiscount($discountInCents / 100);
}
Entonces ¿NO hay comentarios buenos?
Comentarios válidos
TODO
protected function setAvailableDiscount(Product &$product) {
$now = new DateTime("now");
if ($this->coupon->getExpirationDate() > $now) {
// TODO: Lanzar una excepción que informe al usuario este
// caso cuando el frontend este listo en la versión 1.4.
return;
}
$discountInCents = $product->getPrice() * $this->coupon->getDiscount();
$product->setDiscount($discountInCents / 100);
}
Datos autor/legal/
corporativo.
Documentación solo si no es expresiva en código y no tienes otra herramienta para hacerlo.
Symfony
php-cs-fixer
psr/http-client
Referencias
-
Proyectos de código abierto.
- https://medium.com/free-code-camp/code-comments-the-good-the-bad-and-the-ugly-be9cc65fbf83
-
Clean code (capítulo 4).
Comentarios
By smmd
Comentarios
- 296