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 [email protected].
For more options, visit https://groups.google.com/d/optout.