2012-02-01 21 views
7

¿Cuál es el método recomendado para formatear cláusulas grandes dentro de una sentencia cond en Clojure?cond con cláusulas grandes

Ex:

(cond 
(> (large-function large-arg1 
        large-arg2 
        large-arg3) 
    long-var-name)) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +)) 
(> (large-function large-arg4 
        large-arg5 
        large-arg6) 
    long-var-name)) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +)) 
(> (large-function large-arg7 
        large-arg8 
        large-arg9) 
    long-var-name)) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +))) 

Si el resultado está en la misma línea que la condición, el resultado termina demasiado sangría, pero si el resultado y la enfermedad son diferentes líneas, se hace muy fácil perder seguimiento de condiciones vs resultados. Esto parece una situación en la que el estilo de Common Lisp sería útil, pero agregar los paréntesis (probablemente corchetes en el caso de Clojure) no parece ser el curso recomendado.

Respuesta

7

En muchos casos, preguntas como esta tienen por defecto "formatearlo como lo hace emacs". No es que sea inherente a esta filosofía. Es ultimatly hasta su sentido de la estética

en conds cortos me gusta:

(cond 
    (clause1) (action) 
    (clause2) (action) 

para los realmente largas como la suya me gustaría añadir algunas nuevas líneas adicionales como delimitadores visuales:

(cond 
    (clause) 
    (action) 

    (clause2) 
    (action2) 

entonces formatearía su código:

(cond 
(> (large-function large-arg1 
        large-arg2 
        large-arg3) 
    long-var-name) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +)) 

(> (large-function large-arg4 
        large-arg5 
        large-arg6) 
    long-var-name) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +)) 

(> (large-function large-arg7 
        large-arg8 
        large-arg9) 
    long-var-name) 
(->> (iterate #(* % 6) 1) 
     (take 10) 
     (apply +))) 
Cuestiones relacionadas