Biểu thức LINQ và Lambda có làm giảm độ phức tạp của chu trình không? Chỉ cần tò mò vì CodeRush thực sự cho thấy giảm cc khi phân tích VS tăng nó.Các biểu thức LINQ và Lambda có làm giảm độ phức tạp của Cyclomatic không?
Trả lời
Tôi nghi ngờ rằng sự khác biệt có thể là do thực thi hoãn lại. Khi bạn sử dụng LINQ với các biểu thức lambda, bạn chỉ định mã sẽ chạy nếu bạn sau đó lặp qua bộ sưu tập.
Cá nhân tôi không quá lo lắng về độ phức tạp của chu trình, nhưng tôi hoàn toàn chắc chắn rằng (khi được sử dụng một cách thích hợp) LINQ cải thiện khả năng đọc. Đó là những gì tôi thực sự quan tâm về :)
Tôi chỉ đến với cùng một câu hỏi và, trên thực tế, lambda có thể làm tăng độ phức tạp của chu trình. Tôi đã thử nghiệm và các mệnh đề Where() có thể tăng nó một cách hợp lý.
Khả năng đọc thực sự là một trong những ưu tiên hàng đầu của bạn.
Nhưng không mất nhiều thời gian để thay thế một số truy vấn LINQ bằng phương thức Get() cung cấp cho tôi cùng dữ liệu và lợi ích bổ sung.
Tôi giữ Fxcop trên tập lệnh xây dựng/xuất bản của mình vì vậy tôi không bao giờ triển khai một cái gì đó mà không đạt mục tiêu 25 cho độ phức tạp của chu trình.
Thật khó khăn, nhưng tôi nghĩ nó đáng để nỗ lực.
Điều này cho tôi một số điểm trong các cuộc thảo luận khi bạn tình của tôi đến với một mã rất xấu nói rằng: hoạt động, đó là những gì quan trọng.
mũi của tôi là: giữ phức tạp cyclomatic của bạn dưới đây 25. này có thể giúp bạn để giữ cho mọi phương pháp đơn giản, đủ để bảo trì tốt.
Jon Skeet trả lời khá nhiều câu hỏi ngắn gọn. Tôi muốn thêm rằng trong kinh nghiệm của tôi với các ngôn ngữ cấp cao như C#, giá trị đo độ phức tạp của chu trình giảm do giá trị mà các gói đường cú pháp như LINQ thêm vào để phát triển. Trong vòng mười năm qua, khi các ngôn ngữ đã phát triển, nhiều người trên mạng đã minh họa mối tương quan chặt chẽ giữa độ phức tạp của chu trình và các dòng mã, khiến nhiều người trong số họ đặt câu hỏi giá trị thực sự mang lại. Một cách khác để xem xét nó là sự mất giá của CC như một thước đo về chất lượng mã thực sự là một sự khẳng định tầm quan trọng của khả năng đọc, vì nó thường là nghịch đảo của cái kia.
Ví dụ: nếu tôi đặt điều kiện bên trong vòng lặp foreach, điều kiện được đánh giá là mã của tôi và số đường dẫn mã thích hợp được tính. Mặt khác, nếu tôi áp dụng một cây chức năng cho bộ sưu tập, tôi đang lặp lại (ví dụ: Where (evalStr => evalStr == origStr) Tôi đang chuyển điều kiện sang bên ngoài vòng lặp và vào mã do trình biên dịch tạo ra. vẫn có cùng số nhánh, tuy nhiên các điều kiện không phải là một phần của vòng lặp, nhưng CC tăng vượt quá vòng lặp foreach, với "hình phạt" cho việc sử dụng các phương thức nặc danh (lambdas và delegate) ở phía trên số nhánh thực tế. Trong trường hợp hàm cho phép tôi điều kiện trước bộ sưu tập được lặp lại để vòng lặp chỉ lặp lại nếu nó cần.
Tuy nhiên, mã ở xa và dễ đọc hơn.
Cuối cùng, nếu một người quyết định rằng biểu thức Boolean được sử dụng bên trong hàm LINQ IQueryable không cần phải được kiểm tra đơn vị, bề ngoài bởi vì nếu có ngoại lệ, nó là một thứ tự cao hơn (còn gọi là cấp doanh nghiệp) giá trị được kiểm tra, toán tử sai, toán hạng sai, vv) trái ngược với việc sử dụng ngôn ngữ ít hơn lý tưởng (sử dụng công tắc thay vì nếu, nếu thay vì số ba, vv) thì đo lường độ phức tạp của chu trình : Hàm Where() không nên tăng CC của tôi. Đo độ phức tạp của chu trình sẽ không giúp tạo mã tốt hơn; nếu bất cứ điều gì, nó sẽ tăng giả tạo xu hướng đơn giản hóa để đơn giản hóa nơi không cần đơn giản hóa hoặc mong muốn.
- 1. Làm cách nào để giảm "Độ phức tạp Cyclomatic" của mã sau đây
- 2. Tính Độ phức tạp của Cyclomatic cho Javascript
- 3. Làm thế nào để giảm Cyclomatic phức tạp của Switch trường hợp báo cáo
- 4. Phát triển tính phức tạp của Cyclomatic trong .NET
- 5. OSGi có thể giúp giảm độ phức tạp?
- 6. Biểu thức điều kiện javascript phức tạp
- 7. Không thể giảm độ phức tạp của chu trình trong phương thức Nhà máy mà không sử dụng phản chiếu
- 8. Giảm mã phức tạp cho GWT
- 9. Độ phức tạp của ưu tiênQueue addAll()
- 10. Độ phức tạp của thuật toán
- 11. Các công cụ phân tích phức tạp mã vượt quá độ phức tạp của chu trình
- 12. Truy vấn LINQ hoặc biểu thức Lambda?
- 13. Sự khác nhau giữa "phức tạp" metric và "phức tạp/phương pháp" metric
- 14. Độ phức tạp của OrderedDictionary là gì?
- 15. Ví dụ về biểu thức lambda VB.NET
- 16. C#: Không có chuyển đổi ngầm giữa 'biểu thức lambda' và 'biểu thức lambda'?
- 17. Độ phức tạp thời gian của random.sample
- 18. Độ phức tạp của thuật toán
- 19. Tiêu chuẩn đặt tên LINQ - Biểu thức Lambda
- 20. Độ phức tạp của các hoạt động bộ python?
- 21. Các kỹ thuật để giảm độ phức tạp trong lập trình trò chơi
- 22. Biểu thức luồng và lambda
- 23. Bạn có thể giải thích các biểu thức lambda không?
- 24. Tìm kiếm giải thích về cấu trúc mã để giảm độ phức tạp chu kỳ
- 25. Khi không sử dụng biểu thức lambda
- 26. Bảng biểu mẫu phức tạp vs div
- 27. LINQ to SQL: Tái sử dụng biểu thức lambda
- 28. Độ phức tạp thời gian của thuật toán Prim
- 29. Biểu thức Lambda và Quản lý bộ nhớ
- 30. Độ phức tạp của thời gian nguyên trong Haskell