複数の戻り値の1つだけを返すより良い方法はありますか?
func makeRune(s string) (r rune) {
r, _ = utf8.DecodeRuneInString(s)
return
}
複数の戻り値の1つだけを返すより良い方法はありますか?
func makeRune(s string) (r rune) {
r, _ = utf8.DecodeRuneInString(s)
return
}
はい。これを行う理由についてコメントを追加する必要があります。これを行う動機はしばしば誤った方向に導かれるため、OPへのコメントにあるように、人々はそれを疑問視します。戻り値を投げる関数を書く正当な理由がある場合は、コメントでそれを正当化してください。おそらくあなたは書くことができます、
// makeRune helper function allows function chaining.
func makeRune(s string) (r rune) {
// toss length return value. for all use cases in this program
// only the first rune needs to be decoded.
r, _ = utf8.DecodeRuneInString(s)
return
}
これは、「コメントとコードが一致しない場合は、両方とも間違っている可能性があります」という経験則に従うことで、コードレビューにも役立ちます。関数の連鎖が必要ない場合、関数の全体的な目的は疑わしいです。あなたのコメントがあなたがエラー値を投げていると思ったことを示唆しているなら、それは危険信号でしょう。コメントで、sに含めることができるルーンは1つだけだと思われる場合は、それも危険信号になります。上記のコメントの例を考えると、私が書いたものを読んで、関数の名前をfirstRuneにするほうがよいと判断するかもしれません。これはより具体的な意味を持ち、Gomake関数と同様のセマンティクスを提案することを回避します。