Thanks for suggesting guru. I'll try it.

If there is a convention for naming, it makes code more clear, otherwise, 
yes, it makes code more unclear - in my experience. In times it's not an 
easy task. But having a long function too, is not a good thing (IMHO).

On Friday, August 11, 2017 at 6:02:31 PM UTC+4:30, Egon wrote:
>
> Note, this can fragment the code and make it harder to understand... (
> http://number-none.com/blow/john_carmack_on_inlined_code.html)
>
> As for the tool:
>
> guru can give you the callers of a function, so you might be able to 
> derive something from it.
>
> + Egon
>
> On Friday, 11 August 2017 10:39:16 UTC+3, dc0d wrote:
>>
>> "When you feel the need to write a comment, first try to refactor the 
>> code so that any comment becomes superfluous."
>> - Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts 
>> (1999) Refactoring: Improving the Design of Existing Code. Addison-Wesley.
>>
>> Based on this practice, the code below (this code's sole purpose is to 
>> demonstrate):
>>
>> func sampleSloppyFuncForDescribingThisSpecificProblem(data *Data, p *DLO) 
>> error {
>>     if !isNameOK(data.FirstName, data.MiddleName, data.LastName) {
>>         return errInvalidName
>>     }
>>
>>     if !isAddressOK(data.Address1, data.Address2) {
>>         return errInvalidAddress
>>     }
>>
>>     if !isPhoneOK(data.PhoneNumber, data.MobileNumber) {
>>         return errInvalidPhone
>>     }
>>
>>     p.Address1 = data.Address1
>>     p.Address2 = data.Address2
>>     p.BirthDate = data.BirthDate
>>     p.FirstName = data.FirstName
>>     p.LastName = data.LastName
>>     p.MiddleName = data.MiddleName
>>     p.MobileNumber = data.MobileNumber
>>     p.PhoneNumber = data.PhoneNumber
>>
>>     return nil
>> }
>>
>> Can get refactored to (instead of adding comments):
>>
>> func sampleSloppyFuncForDescribingThisSpecificProblem(data *Data, p *DLO) 
>> error {
>>     if err := validateData(data); err != nil {
>>         return err
>>     }
>>
>>     transferData(data, p)
>>
>>     return nil
>> }
>>
>> func validateData(data *Data) error {
>>     if !isNameOK(data.FirstName, data.MiddleName, data.LastName) {
>>         return errInvalidName
>>     }
>>
>>     if !isAddressOK(data.Address1, data.Address2) {
>>         return errInvalidAddress
>>     }
>>
>>     if !isPhoneOK(data.PhoneNumber, data.MobileNumber) {
>>         return errInvalidPhone
>>     }
>>
>>     return nil
>> }
>>
>> func transferData(data *Data, p *DLO) {
>>     p.Address1 = data.Address1
>>     p.Address2 = data.Address2
>>     p.BirthDate = data.BirthDate
>>     p.FirstName = data.FirstName
>>     p.LastName = data.LastName
>>     p.MiddleName = data.MiddleName
>>     p.MobileNumber = data.MobileNumber
>>     p.PhoneNumber = data.PhoneNumber
>> }
>>
>> Now the sole purpose of functions validateData and transferData is 
>> providing a clean and more descriptive code. They should appear only in one 
>> place in the code inside the body of 
>> sampleSloppyFuncForDescribingThisSpecificProblem. This is what I need to 
>> check.
>>
>> On Friday, August 11, 2017 at 8:57:46 AM UTC+4:30, Henry wrote:
>>>
>>> I don't fully understand the problem, but if you need a quick and dirty 
>>> way to ensure a function is called exactly once, you can always use a 
>>> global variable, have the function checks the variable when the function is 
>>> called. If the function is called the first time, it will set the variable. 
>>> If the function has been called more than once, it should panic and returns 
>>> the stacktrace.
>>>
>>> On Friday, August 11, 2017 at 3:02:47 AM UTC+7, dc0d wrote:
>>>>
>>>> Is there a tool/linter to check if a private package function gets 
>>>> called exactly once *in the code*? (I'm not looking for a runtime 
>>>> solution like *sync.Once* but a code analysis tool/linter).
>>>>
>>>> Purpose: A guideline on commenting code by Martin Fowler states that 
>>>> before writing a comment, see if it is possible to put that part inside a 
>>>> meaningful function. I've followed that guideline for sometime and it 
>>>> helps 
>>>> to have a cleaner code base. But those explanatory functions should get 
>>>> called only from where that they are meant to make it more clear.
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to