2010-06-26 26 views
7

Duplicar posibles:
Anyone else find naming classes and methods one of the most difficult part in programming?dificultad en las funciones de nomenclatura

A veces parece que no puedo realmente encontrar ningún nombre para una función que estoy escribiendo, puede ser porque la función no es coherente ¿suficiente?

¿Qué hace cuando no le viene a la mente un buen nombre para una función?

+27

Hay dos problemas difíciles en informática: (1) invalidación de caché; (2) Nombrar cosas; (3) Errores uno a uno. –

+0

Duplicado: http://stackoverflow.com/questions/421965/anyone-else-find-naming-classes-and-methods-one-of-the-most-difficult-part-in-pro – gnovice

+0

@Greg Hewgill: I Apuesto a que si Phil Karlton todavía estuviera vivo, a él le encantaría. –

Respuesta

14

Por nombrar funciones, simplemente evitar tener simplemente sustantivos y que más bien los verbos nombre después. Algunos punteros:

  1. Tienen nombres de funciones que son únicos visiblemente, p. Ej. no tiene validateInput() y validateUserInput() ya que es difícil decir lo que uno hace sobre otro. Además, evite tener caracteres que se vean muy similares, p.el número 1 y la letra minúscula 'l'. A veces hace una diferencia.
  2. ¿Estás trabajando en un proyecto con varias personas? También debe dedicar un tiempo a revisar las convenciones de nombres, como si el nombre de la función debe tener guiones bajos, debe ser camelCase, etc.
  3. La notación húngara es una mala idea; evitar hacerlo
  4. Piensa en lo que hace la función. La cohesión que mencionaste en tu pregunta me viene a la mente. En general, las funciones deberían hacer una sola cosa, por lo que no debe llamarse constructCarAndRunCar(), sino tener una función que construya y otra que la ejecute. Si tus funciones están entre, digamos 20 y 40 líneas, estás bien.
  5. A veces, y esto depende del proyecto, es posible que también prefiera el prefijo de sus nombres de función con la clase si la clase es puramente de procedimiento (solo compuesta de funciones). Entonces, si tienes una clase que se encarga de ejecutar una simulación, nombra tus funciones sim_pauseSimulation() y sim_restartSimulation(). Si su clase está basada en OOP, esto no es un problema.
  6. No utilice las estructuras de datos subyacentes en las funciones mismas; estos deben ser abstraídos. En lugar de tener funciones como addToVector() o addToArray(), haga que sean addToList(). Esto es especialmente cierto si se trata de prototipos o las estructuras de datos pueden cambiar más adelante.
  7. Finalmente, sea coherente en sus convenciones de nomenclatura. Una vez que inventas una convención después de pensar, mantente firme. PHP viene a la mente cuando se piensa en nombres de funciones inconsistentes.

Happy coding! :)

+0

Wow, lista agradable, La notación húngara es una de las peores cosas MS propagadas, incluso MS tiene problemas para deshacerse del demonio liberado ... – jdehaan

+0

contármelo :) trabajé en MS verano pasado y la notación húngara estaba terrible. Imagine tener un puntero largo a una cadena WCHAR: 'LPWSTR *'. – SHC

+0

Personalmente, no utilizo la notación húngara y nunca lo he hecho, pero ¿qué pasa con eso hace que sea tan terrible? –

1

Dale tu mejor opción y vuelve a factorizar más tarde si aún no cabe.

0

Vaya a www.thesaurus.com y trate de encontrar un nombre mejor con sinónimos.

+0

También viene con experiencia. Hay muchas palabras mágicas en programación como: controlador, repetidor, constructor, utilidades, convertidor, administrador, etc. Cuando lea un montón de código y libros sobre programación, poco a poco descubra estas palabras y situaciones cuando se pueden usar. –

+3

Normalmente, cuando algo se llama mejor "Administrador", tiene un problema. –

+0

No estoy de acuerdo. En .Net tienes muchos gerentes. No diría que están mal nombrados o que .Net tiene problemas en estas partes en particular. Manager es solo un nombre como cualquier otro. Consulte: CommandManager, ApplicationManager, ResourceManager, PropertyManager, SecurityManager ... Podría nombrar al menos 100 administradores en .Net framework. –

2

A veces podría ser que su función sea demasiado grande y, por lo tanto, haga demasiadas cosas. Intente dividir su función en otras funciones y podría ser más claro qué llamar a cada función individual.

No se preocupe por nombrar cosas con una o dos palabras. A veces, si las funciones hacen algo que pueda explicarse en una especie de minipreferencia, adelante y asigne un nombre a la función un poco más si esto ayuda a otros desarrolladores a comprender lo que está sucediendo.

Otra sugerencia es obtener comentarios de los demás. A menudo, otros que vienen desde otra perspectiva y ven la función por primera vez tendrán una mejor idea de cómo llamar a la función.

0

Casi tan importante como el nombre de la función es que usted es coherente con los comentarios. Muchos IDE utilizarán los comentarios formateados correctamente, no solo para proporcionar ayuda contextual para una función que pueda estar usando, sino que pueden usarse para generar documentación. Esto es invaluable al regresar a un proyecto después de un largo período o cuando se trabaja con otros desarrolladores.

En entornos académicos, proporcionan una apreciada demostración de sus intenciones.

Una buena regla de oro es [verb] returnDescription. Esto es fácil con las funciones de tipo GetName() y no se puede aplicar universalmente. Es difícil encontrar un equilibrio entre el código discreto y el descriptivo.

Aquí hay un .Net convention guide, pero es aplicable a la mayoría de los idiomas.

+2

Estoy de todo corazón en desacuerdo. Con frecuencia encuentro que el mejor código comentado es el más difícil de leer y, por lo general, también el más propenso a errores. En la universidad, los profesores nos decían que el código de comentario era el del pj del gato, pero años de experiencia me han enseñado lo contrario. El código bueno es realmente un código que no requiere comentarios en línea, porque las funciones están a la par de la arquitectura systemes. "Tiene sentido, no comentarios" es lo que siempre digo. –

+0

@Banang. Aprecio la perspectiva. El desorden de los comentarios es un problema y no debe usarse en lugar del "buen diseño". Como has dicho http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered/694644#694644 – Laramie

+0

@MiaClarke, como dice el refrán , "si el código y los comentarios no están de acuerdo, ambos están equivocados". Simplemente repetir el algoritmo en los comentarios es confuso/redundante. Solo una descripción general de la función, las decisiones de diseño, el comentario donde se está haciendo algo complicado, tenga en cuenta posibles puntos problemáticos. Quizás agregue una especie de registro de cambios para errores (o tal vez confíe eso al software de control de versiones, * con suficientes detalles *). – vonbrand

0

Me resulta más fácil nombrar las funciones cuando no tengo que recortar las palabras. Mientras no hagas javascript para la página de inicio de google, puedes hacer nombres más largos.

Por ejemplo, usted tiene el método dequeueReusableCellWithIdentifier y mergeChangesFromContextDidSaveNotification en manzanas cacao.

Mientras está claro cuál es la función que está haciendo puede que el nombre lo que quiera y refactorearlo más tarde.

+1

ifTheNameIsSoLongItIsEasyToConfuseItWithAnotherSimilarOne es solo un * bad * nombre. "Refactorizar más tarde" nunca ocurrirá, ya que te familiarizas con el (mal) nombre, o se usa por todas partes y es demasiado trabajo para cambiar. – vonbrand

2

Sigo la regla siguiente: Nombre según propósito (¿Por qué? - decisión de diseño) y no a los contenidos (¿Qué, cómo? - se puede ver en el código).

Para las funciones, casi siempre es una acción (verbo) seguido del nombre de los parámetros y (o resultados (Fuera del tema pero para las variables no usa "arrayOfNames" o "listOfNames", estas son tipo de información pero simplemente "nombres"). Esto también se evitan inconsistencias si refactorizar el código en parte.

Para patrones dados como la creación de objetos, sean consistentes y utilizan siempre la misma denominación como "Crear ..." (y no a veces "Asignar ..." o "Construir ..." de lo contrario, usted o sus colegas terminarán rascándose la cabeza)

0

Como regla práctica propia, si el nombre de una función es demasiado largo, debe ser atomizado en un nuevo objeto. Sin embargo, estoy de acuerdo con todas las publicaciones anteriores. por cierto, buena pregunta de novato

Cuestiones relacionadas