LoginSignup
8
2

More than 1 year has passed since last update.

メソッドの命名について考えてみた(Swift)

Last updated at Posted at 2021-06-10

はじめに

Twitterで気になったツイートを引用RTしたら、リプでいろいろ意見を頂きました。

非常に興味深かったので、まとめてみることにします。

updateAge(_ age: Int) vs update(age: Int)

updateAge(_ age: Int)update(age: Int) メソッド、どちらの名前のほうがいいと思いますか?
少しだけ考えてみてください。

正解は…

.
.
.
.
.
.
.
.
.
.

メソッドの処理によって異なる だと思います。

updateAge(_ age: Int)

updateAge(_ age: Int) というメソッドを見て、どのような処理を想像するでしょうか?

私は「 年齢のプロパティを更新する 」ことを想像しました。

コードに落とし込むとこんな感じです。

FooCollectionViewCell.swift
final class FooCollectionViewCell: UICollectionViewCell {
    private var age: Int = 0

    func updateAge(_ age: Int) {
        self.age = age
    }
}

呼び出しはこのようになります。

cell.updateAge(31) // `cell.age` が `31` に更新される

同じ処理を想像した人が多いと思っています。

余談ですがSwiftは引数にラベルを付けることができるので、 updateAge(_ age: Int) より updateAge(to age: Int) のほうが英語で意味が読み下せて、より処理を想像しやすくなります。

cell.updateAge(to: 31) // 「update age to 31」で意味が通る

ただ今回のようにプロパティにセットするだけなら setAge(_ age: Int) が最も処理を想像しやすいと思います。

cell.setAge(31) // ほとんどの人が `age` というプロパティに値をセットするとわかると思う

update(age: Int)

続いて update(age: Int) です。

updateAge(to age: Int) よりも短く、意味も同じように捉えられそうですが、どうでしょうか。

実はよく考えると意味が異なることに気づきます。

先に呼び出し側のコードから見てみましょう。

cell.update(age: 31)

age はセルを更新するために使う要素のひとつに過ぎず「 年齢を使ってセルを更新する 」ことが想像できると思います。

コードに落とし込むとこんな感じです。

FooCollectionViewCell.swift
final class FooCollectionViewCell: UICollectionViewCell {
    @IBOutlet private weak var birthYearLabel: UILabel!

    func update(age: Int) {
        birthYearLabel.text = convertAgetoBirthYearString(31)
    }

    private func convertAgetoBirthYearString(_ age: Int) -> String {
        // ...
    }
}

あくまで例ですが、 age というプロパティを持たず、年齢から生まれた年を算出してラベルに表示する、というような処理が想像できます。

余談ですが、私はセルを初期化するメソッドは setup() という名前にしています。

cell.setup(age: 31)

参考: https://github.com/uhooi/UhooiPicBook/blob/v1.4.0/UhooiPicBook/Modules/MonsterList/Views/MonsterCollectionViewCell.swift#L38

どこかで見たのをマネしたと思うのですが、どこで見たかは覚えていません。

おわりに

他にも「 updateAge(_ age: Int) はObjective-C感がある」「API Design Guidelinesに従っていればこだわらない」などの意見がありました。

他にも意見があればコメントなどで教えていただけると嬉しいです :relaxed:

参考リンク

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2