Disfruté mucho Jeff's post en Spartan Programming. Estoy de acuerdo en que un código como ese es un placer de leer. Desafortunadamente, no estoy tan seguro de que sea necesariamente un placer trabajar con él.Spartan Programming
Durante años he leído y adherido a la práctica de "una expresión por línea". He peleado la buena batalla y se mantiene mi tierra cuando muchos libros de programación contrarrestados este consejo con el ejemplo de código como:
while (bytes = read(...))
{
...
}
while (GetMessage(...))
{
...
}
Recientemente, me he defendido una expresión por línea por razones más prácticas - depuración y apoyo a la producción. Conseguir un archivo de registro de producción que reclama una excepción NullPointer en "línea 65", que dice lo siguiente:
ObjectA a = getTheUser(session.getState().getAccount().getAccountNumber());
es frustrante y totalmente evitables. A menos que agarre a un experto con el código que puede elegir el objeto "más probable" que fue nulo ... este es un verdadero dolor práctico.
Una expresión por línea también ayuda bastante al pasar por el código. Practico esto con la suposición de que la mayoría de los compiladores modernos pueden optimizar todos los objetos temporales superfluos que acabo de crear ...
Intento ser ordenado, pero abarrotar mi código con objetos explícitos me parece a veces laborioso. Por lo general, no hace que el código sea más fácil de navegar, pero realmente me ha sido útil para rastrear cosas en la producción o recorrer el código de mi persona o de otra persona.
¿Qué estilo hace usted abogado y puede racionalizarlo en un sentido práctico?
Las API fluidas de las que habla generalmente no recorren un árbol de objetos con estado (como su primer ejemplo), sino que devuelven el mismo objeto o el nuevo estado de encapsulación de objetos internos. Entonces, mientras violan la letra del LoD, no violan su espíritu. – kyoryu
@Kyoryu, estoy de acuerdo con su declaración, pero la pregunta se centró en 1 afirmación por línea. Las API fluidas aún hacen que sea un poco más difícil de depurar porque estás ejecutando múltiples operaciones en una sola línea. –
Entiendo tu punto por completo. Las buenas interfaces fluidas usan las 'declaraciones múltiples' como simplemente una mejor manera de lograr una sola declaración lógica, en lugar de ser llamadas atómicas múltiples. Para su ejemplo, incluso diría que Account.GetUser() no es un ejemplo particularmente bueno, ya que normalmente uno actuaría sobre el usuario. Prefiero ver Account.ActualOperation().(Todavía votando, ya que creo que estamos de acuerdo en general, estamos objetando el 2%) – kyoryu