clojure naming-conventions

¿Cuáles son las Convenciones de Nombramiento de Clojure?



naming-conventions (4)

¿Alguien puede explicarme o señalarme dónde puedo encontrar las convenciones de nomenclatura de clojure para:

  1. Nombres de archivo
  2. Funciones (por lo que entiendo, los nombres de las funciones son simplemente valores separados por guiones)
  3. Variables

Aunque no lo solicitó explícitamente, explicaré lo que he visto para las convenciones de nombres de protocolo.

Normalmente, el nombre comienza con una "I" en mayúscula y el resto es en camello, donde la primera letra de cada palabra está en mayúscula y el resto en minúscula. Por ejemplo, quiero definir un protocolo para naves espaciales, usaría el nombre IRocketShip

También he visto ''A'' en lugar de ''I'' usado, probablemente para representar la palabra ''abstracto''.


Es posible que desee consultar los estándares de codificación de la biblioteca Clojure en Wiki del desarrollador: esta es probablemente la lista más exhaustiva que he visto.

Para sus puntos específicos:

  1. Los nombres de los archivos están en minúscula, y se almacenan en una estructura de directorio para que coincida con el espacio de nombres, y terminan en .clj, por ejemplo, "my / special / namespace.clj"
  2. Las funciones son palabras minúsculas separadas por guiones, elegidas idealmente de forma descriptiva para que el código sea claro y autodocumentado. No tenga miedo de volver a utilizar buenos nombres de funciones en diferentes espacios de nombres (¡para eso son los espacios de nombres!).
  3. Las variables (por las cuales supongo que usted quiere decir parámetros, variables de límite permitido, etc.) también suelen ser palabras separadas por guion y minúsculas. Como code-is-data, creo que es apropiado que las funciones y los datos tengan la misma convención de nomenclatura :-)


Hay algunas pautas interesantes sobre nombres escritos por Stuart Sierra que sugieren que:

  • las funciones puras deben ser sustantivos que describan el valor de retorno ( age lugar de calculate-age )
  • las funciones de efecto secundario deben ser verbos que describan la acción ( create- para construir y obtener-para recuperar), ¡reservando el swap! instantáneo swap! cambios a referencias mutables.
  • los verbos que también pueden ser sustantivos deben distinguirse como frases verbales ( send-message lugar de message )
  • las coerciones deben nombrar el tipo de salida sin un prefijo de flecha ( connection lugar de ->connection ) excepto cuando el tipo de entrada debe ser explícito (tipo de input-type->output-type )
  • los alias de espacio de nombres pueden ahorrar en la repetición ( products/price lugar de products/price del products/product-price ) y evitar conflictos locales en soltar enlaces
  • funciones que devuelven funciones deben tener el sufijo -fn