Método de un parámetro Naming: repita el parámetro en el nombre del método -- java campo con naming-conventions campo con method-names camp Relacionados El problema

one-parameter method naming: repeat paramter in method name


1
vote

problema

Español

A veces necesitamos crear un método simple con solo un parámetro. Por ejemplo:

  private boolean isMockedPlayer(Player player) {     return player == Player.MOCKED; }   

Entonces, mi pregunta es: ¿no sería mejor nombrar el método: isMocked (jugador jugador) ¿Y no repetir la palabra "jugador" tantas veces? ¿Alguna orientación oficial? Me doy cuenta de que tal repetición es esencial para los colonos, pero no estoy seguro de otros casos como los anteriores.

editado: Bueno, un ejemplo probablemente no fue el mejor. Pero la pregunta no se trata de este fragmento de código, pero sobre el principio general, ¿deberíamos repetir el tipo de parámetro en el nombre del método o no?

Original en ingles

sometimes we need to create simple method with just one parameter. For example:

private boolean isMockedPlayer(Player player) {     return player == Player.MOCKED; } 

So, my question is: wouldn't it be better to name method: isMocked(Player player) and not repeate word "Player" so many times? Any official guidance? I realize that such repeat is essential for setters, but not sure for other cases like above.

Edited: Well, an example probably wasn't the best. But the question is not about this code snippet, but about general principle - should we repeat parameter type in method name or not?

        

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

¿Por qué no tenerlo en la instancia Player ?

  public boolean isMocked() {     return this == Player.MOCKED; }   

player.isMocked() parece más natural que someOtherService.isMockedPlayer(player) .

DIFÍCIL DE DUROFIENDO EL PROPÓSITO Si es Player es un 9988777665 , porque luego MOCKED6 es público.

Por otro lado, si Player es una clase real y si MOCKED es una instancia estática interna que mantiene, entonces puede implementar isMocked() Como arriba y ni siquiera tendrá que exponer public boolean isMocked() { return this == Player.MOCKED; } 0 al mundo exterior.

Pero sobre el principio general, ¿deberíamos repetir el tipo de parámetro en el nombre del método o no?

Bueno, depende. Elija una convención de nombramiento que sea al menos:

  • natural
  • no es sorprendente
  • no confundiendo
  • como aspirante como sea posible

Desea transmitir claramente el contexto y el significado de la operación que está realizando.

Creo que su ejemplo en sí es un poco redundante porque está revisando el estado de una instancia. Entonces, en este escenario, tiene más sentido que el método sea parte de la instancia en sí. Pero un ejemplo mejor es quizás un método en una clase que acepte un parámetro que sea el mismo tipo que la clase en sí. Por ejemplo:

  public boolean isMocked() {     return this == Player.MOCKED; } 111  

En este caso, no hay necesidad de llamar al método public boolean isMocked() { return this == Player.MOCKED; } 2 ; public boolean isMocked() { return this == Player.MOCKED; } 3 no transmite más información que public boolean isMocked() { return this == Player.MOCKED; } 4 . Pero incluso entonces, no puedes usar esto como una regla difícil y rápida. Tal vez su objeto tenga muchos tipos diferentes de operaciones public boolean isMocked() { return this == Player.MOCKED; } 5 que aceptan cosas diferentes. En ese caso, podría tener sentido tener que el método incluya el nombre de la cosa que se fusiona ... pero eso también podría depender de cómo ha diseñado el modelo de objeto.

tl; Dr depende; Pero en general, elija un nombre que transmita información precisa sobre la semántica y el contexto de la operación sin ser redundante o verbosa.

 

Why not have it on the Player instance itself?

public boolean isMocked() {     return this == Player.MOCKED; } 

player.isMocked() seems more natural than someOtherService.isMockedPlayer(player).

It does kind of defeat the purpose though if Player is an enum, because then MOCKED is public.

On the other hand, if Player is an actual class and if MOCKED is an internal static instance that you maintain, then you can implement isMocked() as above and you won't even have to expose MOCKED to the outside world.

but about general principle - should we repeat parameter type in method name or not?

Well, it depends. Choose a naming convention that is at the very least:

  • natural
  • not surprising
  • not confusing
  • as succinct as possible

You want to clearly convey the context and meaning of the operation that you are performing.

I think your example itself is kind of redundant because you're checking the state of an instance. So in this scenario, it makes more sense for the method to be part of the instance itself. But a better example is perhaps a method on an class that accepts a parameter that is the same type as the class itself. For example:

public void merge(BinarySearchTree tree) {     ... } 

In this case there is no need to call the method mergeBinarySearchTree; bst.mergeBinarySearchTree(other) doesn't convey any more information than bst.merge(other). But even then, you can't use this as a hard and fast rule. Perhaps your object has many different kinds of merge operations that all accept different things. In that case it might make sense to have the method include the name of the thing being merged in... but that could also depend on how you have designed your object model.

tl; dr It depends; but in general, choose a name that conveys accurate information about the semantics and context of the operation without being needlessly redundant or verbose.

 
 
0
 
vote

Creo que está teniendo problemas para nombrar este método porque no hace nada útil. Simplemente hace una comparación que requiere apenas más código que la llamada del método. Puede ser útil agregar un método isMocked () al jugador enumio mismo. No hay una gran diferencia entre "jugador == burlado" y "jugador.ismocked ()", pero si hubiera varios tipos de jugadores burlados, sería útil.

Por cierto, creo que puede haber un problema de diseño si tiene que verificar si un objeto se burla o no. La idea de una burla es tomar el lugar de un objeto real para verificar las interacciones. Si modifica las interacciones cuando es una burla, ¿qué estás verificando?

 

I think you're having trouble naming this method because it doesn't do anything useful. It just does a comparison which requires barely more code than the method call. It might be useful to add an isMocked() method to the Player enum itself. There's not a big difference between "player == MOCKED" and "player.isMocked()", but if there were several types of mocked players, it would be useful.

BTW, I think there may be a design problem if you have to check whether an object is mocked or not. The idea of a mock is to take the place of a real object to verify the interactions. If you modify the interactions when it's a mock, what are you verifying?

 
 

Relacionados problema

2  Nombre del método que no se imprime correctamente en log4j Logger en Java  ( Method name not printing correctly in log4j logger in java ) 
Mi registro ocurre en gcloud auth login0 MÉTODO. Pero se registra como gcloud auth login111. MÉTODO. Y tengo tres objetos, pero no veo ninguna información...

1  Java, nombre de método a través de la reflexión para el registro  ( Java method name via reflection for logging ) 
Trabajar en un método de utilidad de registro rápido. Normalmente, usaría aspectos para esto, pero trabajando en el SDK de Android, donde no hay soporte para ...

9  ¿Existe una diferencia técnica entre los términos "longitud" y "tamaño" (en la programación, por supuesto)? [duplicar]  ( Is there a technical difference between the terms length and size in progra ) 
Esta pregunta ya tiene respuestas aquí : Cerrado hace 8 años . posible duplicado: Cuenta v...

0  Objetivo-C: Nombre del método que ajusta el valor de punto flotante a 0-1 [CERRADO]  ( Objective c name of the method that adjust floating point value to 0 1 ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

1  Utilizar @ símbolo en un nombre de método de rieles  ( Use symbol in a rails method name ) 
¿Hay alguna manera de usar el símbolo '@' en un nombre de método de rieles? e.g. def @method_name end no parece que rieles. Quiero hacerlo para adhe...

35  ¿Cómo desambiguar enlaces a métodos en ScaladoC?  ( How to disambiguate links to methods in scaladoc ) 
Estoy documentando una clase Scala con Métodos sobrecargados . ¿Cómo puedo distinguirlos al referirlos a ellos en los comentarios de Scaladoc? Por ejemplo, s...

0  Android - Barra de navegación - IZQUIERDO METROS MÉTODO DE TRIANGO NOMBRE  ( Android navigation bar left most triangle method name ) 
De forma predeterminada El triángulo está hacia la izquierda y si hago clic en la opción de búsqueda, se abre editar texto en la parte superior y amplificado...

3  ¿Cómo obtener el nombre del método real Istead de .ctor?  ( How to get real method name istead of ctor ) 
Hola, tengo método obteniendo el nombre del método de llamada: public static string GetMethodName() { System.Diagnostics.StackTrace trace =...

0  ¿Debe denominar los métodos dentro de las interfaces, ser concreto o abstracto?  ( Should naming of methods within interfaces be concrete or abstract ) 
A menudo, cuando creo nuevas clases, primero creo una nueva interfaz. Nombro los métodos de mi interfaz exactamente como quisiera que se comporten. Un colega ...

1  Cambie el nombre de los métodos de prueba abstractos (Visual Studio / C #)  ( Rename abstract test methods visual studio c ) 
Pregunta: ¿Hay alguna manera de nombrar manualmente un método de prueba en lugar de tomar el nombre de método? Fondo: Actualmente estoy activo como desarrol...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos