2013-06-15 40 views
12

Một hội nghị thực sự thú vị đã được đưa ra về D-Specific Design Patterns và trong cộng đồng D, một số người nghĩ rằng nó có thể là một điểm khởi đầu cho một kinh nghiệm mã hóa hiệu quả book. Những người khác cho rằng quá sớm vì không có nhiều người có số lượng kinh nghiệm là , tác giả của một cuốn sách như vậy sẽ có một số sự đánh giá cao về sự hiệu quả. SO là một phương tiện truyền thông tương tác hơn (với những hạn chế của nó). Vì vậy, chờ đợi cho 'Hiệu quả D' để đi ra, nó sẽ là tuyệt vời nếu chúng ta có thể chia sẻ một số (giết chết) lời khuyên/kỹ thuật/mẫu để làm cho mã D trông đẹp hơn. Tôi nghĩ rằng nó sẽ được rõ ràng hơn nếu một câu trả lời:Hiệu quả D: thực hành tốt nhất và các mẫu thiết kế

  • phơi bày một kỹ thuật độc đáo
  • về bản chất là một mảnh nhận xét đang
  • (nếu nó là quá lớn) chỉ là một liên kết đến mã (ý chính công cộng ...)
+1

Có lẽ nên được thực hiện như "cộng đồng wiki" Câu hỏi để thay thế. –

+0

Có cách nào để "chuyển đổi" câu hỏi này không? – matovitch

+0

Có thể ai đó có đại diện đủ cao có thể làm điều đó. –

Trả lời

5

tôi có một vài bài viết D Mẹo trên tôi blog (123).

Dưới đây là một: Testing With TypeTuple


Khi thử nghiệm một chức năng, nó thường là một ý tưởng tốt để thử nghiệm nó với một loạt các đầu vào khác nhau. Để làm điều này, bạn có thể dễ dàng sử dụng vòng lặp for trên một mảng các giá trị đầu vào, nhưng điều gì sẽ xảy ra nếu đầu vào của bạn là một kiểu, vì nó thường là với mã mẫu?

D Ngôn ngữ lập trình cho phép bạn lặp trên một TypeTuple, vì vậy tất cả các bạn cần làm là khai báo một tuple của tất cả các loại bạn muốn kiểm tra, và lặp qua chúng theo cách thông thường:

import std.typetuple; 
alias TypeTuple!(int, long, double) Types; 
foreach (T; Types) 
    test!T(); 

Bạn có thể tự hỏi những gì biên dịch này. Sau khi tất cả, cơ thể của vòng lặp thay đổi với T, do đó, mã được tạo ra cũng phải thay đổi theo từng lần lặp. Trình biên dịch xử lý như thế nào?

Câu trả lời là vòng lặp hoàn toàn không được kiểm soát. Mã ở trên theo nghĩa đen giống như:

test!int(); 
test!long(); 
test!double(); 

Vì lý do này, bạn có thể muốn theo dõi kích thước của TypeTuples, để tránh bị phồng lên mã.

+0

Những mẹo tuyệt vời! Đặc biệt là về lợi ích của việc sử dụng các phạm vi trong mã chung thông qua ví dụ về loại chuỗi tinh tế. – matovitch

Các vấn đề liên quan