Si te sentiste obligado a expandir una sola línea como
a = F(G1(H1(b1), H2(b2)), G2(c1));
No te culparía. Eso no solo es difícil de leer, es difícil de depurar.
¿Por qué?
- Es denso
- Algunos depuradores solo resaltarán todo al mismo tiempo
- Está libre de nombres descriptivos
Si lo amplías con resultados intermedios obtienes
var result_h1 = H1(b1);
var result_h2 = H2(b2);
var result_g1 = G1(result_h1, result_h2);
var result_g2 = G2(c1);
var a = F(result_g1, result_g2);
y todavía es difícil de leer. ¿Por qué? Resuelve dos de los problemas e introduce un cuarto:
- Es denso
- Algunos depuradores solo resaltarán todo al mismo tiempo
- Está libre de nombres descriptivos
- Está lleno de nombres no descriptivos
Si lo amplías con nombres que agregan un significado nuevo, bueno y semántico, ¡incluso mejor! Un buen nombre me ayuda a entender.
var temperature = H1(b1);
var humidity = H2(b2);
var precipitation = G1(temperature, humidity);
var dewPoint = G2(c1);
var forecast = F(precipitation, dewPoint);
Ahora al menos esto cuenta una historia. Soluciona los problemas y es claramente mejor que cualquier otra cosa que se ofrece aquí, pero requiere que hagas los nombres.
Si lo haces con nombres sin sentido como result_this
y result_that
porque simplemente no puedes pensar en nombres buenos, entonces realmente preferiría que nos ahorres el desorden de nombres sin sentido y expandirlos usando algunos espacios en blanco viejos y buenos:
int a =
F(
G1(
H1(b1),
H2(b2)
),
G2(c1)
)
;
Es tan legible, si no más, que el que tiene nombres de resultados sin sentido (no es que estos nombres de funciones sean tan buenos).
- Es denso
- Algunos depuradores solo resaltarán todo al mismo tiempo
- Está libre de nombres descriptivos
- Está lleno de nombres no descriptivos
Cuando no puedes pensar en buenos nombres, eso es lo mejor que hay.
Por alguna razón, los depuradores adoran las nuevas líneas , por lo que debería descubrir que no es difícil depurar esto:

Siesonoessuficiente,imaginequesellamóaG2()
enmásdeunlugaryluegosucedió:
Exception in thread "main" java.lang.NullPointerException
at composition.Example.G2(Example.java:34)
at composition.Example.main(Example.java:18)
Creo que es bueno que dado que cada llamada G2()
estaría en su propia línea, este estilo lo lleva directamente a la llamada ofensiva en la parte principal.
Entonces, no use los problemas 1 y 2 como excusa para seguir con el problema 4. Use buenos nombres cuando pueda pensar en ellos. Evita los nombres sin sentido cuando no puedes.
Razas de claridad en la órbita comentar señala correctamente que estas funciones son artificiales y tienen nombres muy pobres. Así que aquí hay un ejemplo de cómo aplicar este estilo a algún código de la naturaleza:
var user = db.t_ST_User.Where(_user => string.Compare(domain,
_user.domainName.Trim(), StringComparison.OrdinalIgnoreCase) == 0)
.Where(_user => string.Compare(samAccountName, _user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase) == 0).Where(_user => _user.deleted == false)
.FirstOrDefault();
Odio mirar esa corriente de ruido, incluso cuando no se necesita el ajuste de palabras. Así es como se ve bajo este estilo:
var user = db
.t_ST_User
.Where(
_user => string.Compare(
domain,
_user.domainName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(
_user => string.Compare(
samAccountName,
_user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(_user => _user.deleted == false)
.FirstOrDefault()
;
Como puede ver, he encontrado que este estilo funciona bien con el código funcional que se está moviendo hacia el espacio orientado a objetos. Si puede encontrar buenos nombres para hacer eso en un estilo intermedio, entonces tendrá más poder para usted. Hasta entonces estoy usando esto. Pero en cualquier caso, por favor, encuentre alguna manera de evitar nombres de resultados sin sentido. Me hacen doler los ojos.