จะเข้าใจอะไรได้ง่ายกว่าคำสั่งบูลีนขนาดใหญ่ (ค่อนข้างซับซ้อน) หรือคำเดียวกันนี้แบ่งออกเป็นเมธอดเพรดิเคต (มีโค้ดพิเศษมากมายให้อ่าน)
ตัวเลือก 1 นิพจน์บูลีนขนาดใหญ่:
    private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal)
    {
        return propVal.PropertyId == context.Definition.Id
            && !repo.ParentId.HasValue || repo.ParentId == propVal.ParentId
            && ((propVal.SecondaryFilter.HasValue && context.SecondaryFilter.HasValue && propVal.SecondaryFilter.Value == context.SecondaryFilter) || (!context.SecondaryFilter.HasValue && !propVal.SecondaryFilter.HasValue));
    }
ตัวเลือก 2 เงื่อนไขแบ่งออกเป็นวิธีเพรดิเคต:
    private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal)
    {
        return MatchesDefinitionId(context, propVal)
            && MatchesParentId(propVal)
            && (MatchedSecondaryFilter(context, propVal) || HasNoSecondaryFilter(context, propVal));
    }
    private static bool HasNoSecondaryFilter(CurrentSearchContext context, TValToMatch propVal)
    {
        return (!context.No.HasValue && !propVal.SecondaryFilter.HasValue);
    }
    private static bool MatchedSecondaryFilter(CurrentSearchContext context, TValToMatch propVal)
    {
        return (propVal.SecondaryFilter.HasValue && context.No.HasValue && propVal.SecondaryFilter.Value == context.No);
    }
    private bool MatchesParentId(TValToMatch propVal)
    {
        return (!repo.ParentId.HasValue || repo.ParentId == propVal.ParentId);
    }
    private static bool MatchesDefinitionId(CurrentSearchContext context, TValToMatch propVal)
    {
        return propVal.PropertyId == context.Definition.Id;
    }
ฉันชอบวิธีที่สองเพราะฉันเห็นชื่อวิธีเป็นความคิดเห็น แต่ฉันเข้าใจว่ามันเป็นปัญหาเพราะคุณต้องอ่านวิธีการทั้งหมดเพื่อทำความเข้าใจว่าโค้ดทำอะไรดังนั้นจึงสรุปเจตนาของโค้ด
ifในบล็อกของโค้ด คำถามของคุณเป็นเรื่องเกี่ยวกับการแสดงออกบูลีน