Bối cảnh
Trong Clean Code , trang 35, nó nói
Điều này ngụ ý rằng các khối trong câu lệnh if, câu lệnh khác, trong khi câu lệnh, v.v. nên dài một dòng. Có lẽ dòng đó nên là một chức năng gọi. Điều này không chỉ giữ cho hàm kèm theo nhỏ mà còn thêm giá trị tài liệu vì hàm được gọi trong khối có thể có một tên mô tả độc đáo.
Tôi hoàn toàn đồng tình, điều đó rất có ý nghĩa.
Sau đó, trên trang 40, nó nói về các đối số chức năng
Số lượng đối số lý tưởng cho một hàm là 0 (niladic). Tiếp đến là một (monadic), theo sát bởi hai (dyadic). Nên tránh ba đối số (bộ ba) nếu có thể. Hơn ba (polyadic) đòi hỏi sự biện minh rất đặc biệt và sau đó không nên sử dụng. Luận cứ thì khó. Họ có rất nhiều sức mạnh khái niệm.
Tôi hoàn toàn đồng tình, điều đó rất có ý nghĩa.
Vấn đề
Tuy nhiên, thay vào đó, tôi thường thấy mình tạo ra một danh sách từ một danh sách khác và tôi sẽ phải sống với một trong hai tệ nạn.
Hoặc là tôi sử dụng hai dòng trong khối , một để tạo điều, một để thêm nó vào kết quả:
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
Flurp flurp = CreateFlurp(badaBoom);
flurps.Add(flurp);
}
return flurps;
}
Hoặc tôi thêm một đối số vào hàm cho danh sách nơi điều sẽ được thêm vào, làm cho nó "một đối số tồi tệ hơn".
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Câu hỏi
Có (không) những lợi thế mà tôi không thấy, điều này làm cho một trong số chúng thích hợp hơn nói chung? Hoặc có những lợi thế như vậy trong các tình huống nhất định; trong trường hợp đó, tôi nên tìm kiếm gì khi đưa ra quyết định?
f(g(x))
là trái với hướng dẫn phong cách của bạn, tốt, tôi không thể sửa hướng dẫn phong cách của bạn. Ý tôi là, bạn cũng không chia sqrt(x*x + y*y)
thành bốn dòng, phải không? Và đó là ba (!) Các biểu hiện phụ lồng nhau ở hai cấp độ lồng trong (!) (Thở hổn hển!). Mục tiêu của bạn phải là khả năng đọc , không phải là câu lệnh đơn lẻ. Nếu bạn muốn sau này, tốt, tôi có ngôn ngữ hoàn hảo cho bạn: Trình biên dịch.
mov
và một lệnh jmp toStart
ở cuối. Ai đó thực sự đã tạo một trình biên dịch thực hiện chính xác điều đó: D
rlwimi
hướng dẫn khét tiếng trên PPC. (Đó là viết tắt của Xoay mặt từ ngay lập tức Chèn mặt nạ.) Lệnh này mất không dưới năm toán hạng (hai thanh ghi và ba giá trị ngay lập tức) và nó đã thực hiện các thao tác sau: Một nội dung thanh ghi được xoay bởi một ca ngay lập tức, mặt nạ là được tạo ra với một lần chạy 1 bit được điều khiển bởi hai toán hạng tức thời khác và các bit tương ứng với 1 bit trong mặt nạ đó trong toán hạng thanh ghi khác được thay thế bằng các bit tương ứng của thanh ghi xoay. Hướng dẫn rất tuyệt :-)
flurps.Add(CreateFlurp(badaBoom));
vậy?