determining which verb to use for method names in Java

会有一股神秘感。 提交于 2019-12-20 08:48:06

问题


I understand that naming conventions are important for a number of reasons, most having to do with making your code more readable and easier to integrate into larger projects, etc. In Java, most conventions require that method names be in lowerCamelCase begin with a verb.

My question is: how do I choose the verb to begin the method name?

To make this question less vague, I'm often in the situation where my first choice for a method name is a noun describing the output. In these cases, I'm usually torn between appending generic verbs such as get, generate, calculate, etc in font of the noun to conform to the verb rule. Are there general guidelines for when to use which?

Here's an example. I have a method that takes double[] array and an int k and returns double[] newArray which is the length k moving average of array, i.e. newArray[i] = (array[i-k+1]+...+array[i])/k with some fudging to make newArray the same length as array. My inclination is to call this method movingAverage since that's what it returns, but that's out since it doesn't begin with a verb. Should I call this method getMovingAverage or generateMovingAverage or calculateMovingAverage or does it not really matter?


回答1:


I usually ask myself:

What is this method doing?

The answer dictates what the method should be called. It is completely independent of the programmer, of course.

Note: If you can't succinctly describe what the method is doing, it's probably doing too much and should be split up.

Choosing your method's verb:

  • Performing calculation(s): calculate
  • Retrieving data: get or retrieve
  • Mutating data: set or change
  • Deleting data: delete or remove
  • Converting: convert
  • Initiating an action: start or initiate
  • Stopping an action: stop or cancel

Now, not all methods begin with a verb; but they really don't need to. If you read:

... myString.length();

or

... myArray.size();

you know exactly what is going on - no verb required. This is true for many class methods higher up in the Java hierarchy; Collections, Math, etc. As long as the name accurately communicates what the method does, it's fine.




回答2:


Do not forget to use this verbs "is, has or can" for boolean methods, such as: isOn(), isFull(), and so on.




回答3:


Regarding the use of get and set methods for property accessors only: the whole point of information hiding is that the user of an API (i.e. the calling code) should not need to know or depend on whether the property is stored or calculated on the fly. The implementation should be able to change at any time, as long as the API stays the same.




回答4:


(My opinion) You don't need a verb in the method name if the object has no state, like a math-library. Compare computeSquareRoot(x) and getJoin(listOfStrings) with squareRoot(x) and join(listOfStrings).




回答5:


As you said and as we can see in the answers, the verbs used at the beginning of method names are almost the same verbs. I think, if same amount of effort is spent for writing related documentation, methods become much more understandable and integrable :)

I also realized after reading the question, most of the methods I write start with get, retrieve, create. So again it seems verb selection does not matter so much.

Best




回答6:


I think to find anything which could be a "solution" for the problem we should first extract criteria which play any role in choosing name, like:

  • readableness (trivial: getValue instead of transferValueFromThisObjectToYou)
  • convenience (trivial: getCoordValue instead of )
  • semantics of the method (get is not the same as calculate)
  • context of usage (in IDEs I usually type aaa.get_ and press Ctrl+Space to check what I can get from the object)
  • code guides (or other "guides" like Java Bean convention which force you to use some names)

...

However as suat said - better spend some efforts on a documentation for your methods.




回答7:


I don't think java method names should "begin with a verb", I think they should describe the action. This often requires a verb, as verbs describe actions. Usually, they are important parts of the description (getVar and setVar mean totally different things). Occasionally, they add nothing to the description (can you think of anything that would operate on movingAverage besides get/calculate/generate?) and should be dropped.



来源:https://stackoverflow.com/questions/7151418/determining-which-verb-to-use-for-method-names-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!