it-swarm-ja.com

プライベート計算プロパティをどこに配置しますか?

クリーンコードでは、プライベートヘルパー関数は、それらが直接使用される関数のすぐ下に常に存在する必要があることが提案されています。計算されたプロパティを使用するときにこれを行う必要がありますか?プライベートインスタンス変数をクラスの先頭に配置するのが一般的ですが、本質的にヘルパー関数である場合、そうするのは混乱します。

ここでは、インスタンス変数をクラスの上部に保持し、ヘルパー関数を下部に保持するという規則が矛盾しています。慣例のためにこれを関数にする必要がありますか?これをそのままにしておくのか、それともクラスのトップに置くのか。

/// Done button in nav bar should let know that tapping will dismiss the view
func applyVoiceOverToNavigationBar() {
    guard timelinesAreInitialized else { return }
    let openDay = Scheduler.sharedInstance.timelines[SharedGlobals.Calendar.SELECTED_DAY].DAY.dayName
    self.navigationItem.rightBarButtonItem?.applyVoiceOverAccessibility(
        label: self.navigationItem.rightBarButtonItem?.title ?? "",
        hint:"VoiceOver.OpenScreenHint".localized.replacingOccurrences(of: "{Screen}", with: openDay))
}

private var timelinesAreInitialized: Bool {
    return Scheduler.sharedInstance.timelines.count > SharedGlobals.Calendar.SELECTED_DAY
}
2
Declan McKenna

計算されたプロパティを使用するときにこれを行う必要がありますか?プライベートインスタンス変数をクラスの先頭に配置するのが一般的ですが、本質的にヘルパー関数である場合、そうするのは混乱します。

計算されているかどうかにかかわらず、最初に詳細にぶつからないのはとてもいいことです。まず、ハイレベルな話を教えてください。

私の議論を弱体化させる最も確実な方法は、くだらない名前を使用することです。定義される前にtimelinesAreInitializedを読んでもかまいませんでした。どうして?その名前があなたの意図を非常に明確にしたからです。

これは多くの言語の慣習に反し、コードベースは一貫している必要があることを理解していますが、他のすべての条件が同じであれば、これがより良いスタイルです。

慣習を持つことは一貫性のために良いです。しかし、これはあなたが過去の最高の知恵を祀っているので、あなたが今日の最高の知恵に従うことができないことを意味します。きれいな休憩をとる機会が与えられたとき、過去の過ちを繰り返さないでください。

2
candied_orange

プライベートインスタンス変数をクラスの先頭に配置するのが一般的です

それは私にはナンセンスな慣習のように思われるので、私はかつてこれをしないことを試みました。私はここでCandiedOrangeを使用しています。全体像を上部に、詳細を下部に配置します。しかし、少なくともC#の場合、ファイルを編集するときにコンパイラーが非常に簡単に混乱しました。つまり、これらのフィールドを見失い、多くの行でエラーが報告されることがよくありました。

だから私は今、実用的な理由でその慣習に固執しています。プロパティ、内部タイプ、メソッドなど、他のすべてのプライベートは、それが属する下部に押し込まれます。そして、私は本当に下部を意味します。すべてのプライベートメンバーは、すべてのパブリックメンバーの後に来ます。

0
David Arno