Me he encontrado con un problema de esquina con la guía general de:
- sustantivos para variables
- verbos para funciones
Específicamente, tengo un caso en el que la palabra es ambigua: puede ser un verbo o un sustantivo. Y en algunos casos, cuando estamos discutiendo la aplicación, se usará en ambos sentidos en la misma oración.
Mi intención es asegurarme de que el programa seguirá siendo legible para futuros desarrolladores, así como para mí, cuando regrese a las secciones del código meses después.
Uno de los ejemplos es con a battery
. A battery
tiene una charge
y también puede charge()
una batería.
Creo que tener ambos Battery.Charge
y Battery.Charge(value)
será confuso para futuros desarrolladores.
Mi solución actual es simplemente elegir una palabra diferente para uno o ambos casos (la variable y la función). Mi problema con ese enfoque es Battery
que la variable y la función del objeto charge
no se alinearán con las discusiones de diseño que involucran el Battery
.
Mi pregunta es si hay otra / mejor manera de manejar este conflicto en la convención de nomenclatura.
Algunas lecturas adicionales sobre el tema. Ninguno realmente abordó lo particular de mi pregunta.
enqueue
sea una palabra, pero es un verbo en Java. ¿Qué taldoCharge
? Todavía fallará la prueba de simetría porque sus otros métodos no tendrán este prefijoRespuestas:
En situaciones similares trato de encontrar sinónimos. En este caso, usaría "recargar" para el verbo. El "re" es ligeramente redundante, pero el significado es claro. Usar la simple "carga" para la carga restante en la batería es ambiguo porque no especifica ninguna unidad física. Preferiría "availableAmpHours", "hoursUntilRecharge" o algo similar. Las unidades dependerán de lo que sea conveniente para la aplicación.
Mi preferencia personal es usar verbos solo para funciones que cambian de estado. Yo uso sustantivos para funciones no mutantes. Supongo que depende de tu punto de vista. A nivel de máquina, las funciones no mutantes hacen algo, pero a nivel de modelo, no lo hacen.
fuente
Solo lanzando esto, pero tal vez la solución para esta instancia de ambigüedad de nombres es eliminar esa funcionalidad de la batería por completo. Nunca he visto una batería de carga automática y tendría más sentido para mí tener una clase BatteryCharger. Esto ayudaría a mantener sus preocupaciones más desacopladas y hacer que la acción sea más explícita.
battery.Charge(50)
vsbatteryCharger.Charge(battery, 50)
Para mí, la segunda forma es mucho más comprensible y mantiene todo su código de "Carga" en un solo lugar en lugar de rociarlo en todas sus clases de batería.
fuente
Battery
es una abstracción para el sistema de batería + carga. Nuestra aplicación no requiere dividir los dos aspectos en objetos separados, por lo que se enrollan en uno (akaBattery
) para mayor comodidad. En última instancia, la física de una batería recargable dicta que tiene algún tipo de función para aceptar una carga.Evita los significados dobles
Usted ha seleccionado deliberadamente una palabra que tiene más de un significado, y esa primera decisión es el problema. Hay un montón de palabras que son problemáticas para los programadores. Otro ejemplo sería
phone
. Puedephone
alguien, o podría tener unophone
en su bolsillo.Usar captadores y setters
El nombre estándar para la mayoría de los objetos son los métodos getters / settings para propiedades.
Las propiedades son estados, no sustantivos
Creo que te equivocas al clasificar las propiedades de los objetos como sustantivos, y las variables también podrían pensarse en estados. Son estados relevantes para el alcance local de su existencia.
Podría describir el valor que tienen como sustantivo, pero no estoy seguro de que sea cierto en todos los casos.
En la terminología OOP, las propiedades del objeto describen el estado de ese objeto. En su caso,
Battery
es un objeto yCharge
es un estado. Eso sería una propiedad del objeto, pero esto depende del contexto de cómo se usa.Si necesita poder usar
Charge
la batería y también saber cuál es su corrienteCharge
, entonces tiene un problema.Uso del alcance para hacer cumplir el contexto
El contexto es lo que aclarará qué significado de una palabra desea que transmita un método o propiedad. Ámbito es establecer la accesibilidad de una propiedad / método desde fuera del objeto.
Los métodos son verbos
Puede describir el método de un objeto como un verbo, pero la palabra acción es más adecuada. En la terminología de OOP, realiza acciones sobre objetos utilizando sus métodos. Es una mala forma modificar la propiedad de un objeto desde fuera del objeto. Se prefiere llamar a un método que realice las acciones necesarias que provoquen cambios en su estado.
La palabra
Charge
es un verbo, pero también es un sustantivo. Cuando se usa para llamar al método de una acción, queda claro que se está usando el verboBattery.Charge(....)
.Pero, el contexto es muy importante. Si bien la palabra
Charge()
es un verbo, no es tan significativa comostartCharging()
.Métodos válidos para
Battery
podría incluirCharging
,Discharging
,setCharge
,getCharge
,hasCharge
,Discharge
yCharged
.Métodos simples palabras una frecuencia no se indica explícitamente sus acciones claridad, pero hay algunos casos como
open
yclose
donde se requiere poca explicación.Entonces, no hay realmente una respuesta correcta sobre cómo nombrar estos tipos de propiedades / métodos. Excepto que debe usar las técnicas anteriores con prudencia para asegurarse de que no haya confusión.
fuente
StartCharge()
eEndCharge()
implicaría. De hecho, esa terminología agregaría una sobrecarga significativa al manejo del sistema de batería. En cada intervalo puedeCharge()
o bienDischarge()
.Charge
Resulta ser la palabra ambigua más fácil de entender para este dominio. Hay varios otros.Añádelos con verbos que los harán verbos o sustantivos.
fuente
Para el caso verbal, creo que
Charge
está bien. Para el caso sustantivo, ¿getCurrentChargeLevel
funcionaría para usted?fuente
getCurrentChargeLevel()
Todavía no tendría que referirse a una variable interna deBattery
, y cuál sería el nombre de esa variable?Battery.currentChargeLevel
podría funcionar. Podría intentar usarBattery.coloumbs
oBattery.ampereHours
pero eso podría no ser tan obvio ...Charge
esEnergy
cuál esPower
(Voltios * Amperios == Vatios) multiplicado por el tiempo. Entonces, en este caso, el cargo es un número. También hay un estado de carga que resulta ser un porcentaje.Watt*time
definitivamente no se alinearía con las conversaciones de diseño, pero loChargeLevel
haría.En la mayoría de los casos, agregar un verbo, adverbio o adjetivo de ayuda es lo suficientemente bueno como para distinguirlos y en realidad puede ayudar con la comprensión. Con su caso de carga y carga () en una batería, DeltaCharge () podría mostrar que es una función que puede manejar la carga o la descarga.
Delta (en los casos en que hay un cambio pero ambiguo) es un modificador que uso y recomiendo a otros todo el tiempo para entregar un cambio de estado (incluso si el verbo es semi-obvio).
fuente
Notación húngara al rescate. Puede tener
intCharge
yfcnCharge(value)
, por lo tanto, evitar la confusión y no agregar un nombre largo y loco cuando tres letras funcionarán bien.O simplemente podría usar el mismo nombre y dejar que el IDE lo maneje. Crear un nombre más largo o diferente puede ser igualmente confuso a largo plazo de todos modos.
fuente