2008-11-19 40 views
57

Tôi thấy cụm từ "thành ngữ lập trình" được ném xung quanh như thể nó thường được hiểu. Tuy nhiên, trong các kết quả tìm kiếm và stackoverflow tôi thấy tất cả mọi thứ ...Thành ngữ lập trình là gì?

Từ vi:

  • Tăng dần biến
  • Đại diện cho một vòng lặp vô hạn
  • Việc trao đổi các giá trị biến

Để trung :

Để vĩ mô:

Có một định nghĩa duy nhất, phổ biến cho "thành ngữ lập trình" không? Kể từ khi "lập trình thành ngữ" được sử dụng trong nhiều phạm vi:

  • Micro: nuance cú pháp hoặc cú pháp chung
  • Medium: phong cách phổ biến và các mẫu
  • Macro: lập trình mô như thành ngữ

Có hợp lệ để sử dụng cụm từ trong bất kỳ phạm vi nào trong số này? Các câu trả lời cho đến nay tập trung vào các thành ngữ cú pháp. Những người khác có hợp lệ không?

Trả lời

42

Thành ngữ lập trình là cách thông thường để mã hóa tác vụ bằng một ngôn ngữ cụ thể. Ví dụ một vòng lặp thường được viết như thế này trong C:

for (i=0; i<10; i++) 

PHP sẽ hiểu một cấu trúc tương tự:

for ($i = 1; $i <= 10; $i++) 

Nhưng nó không được khuyến khích trong PHP cho Looping trên một mảng. Trong trường hợp này bạn sẽ sử dụng:

foreach ($arr as $value) 

Trong khi đó Ruby, bạn sẽ sử dụng:

(1..10).each 

cho vòng lặp, hoặc:

array.each 

Có rất nhiều nhiều khả năng để viết một vòng lặp trong các ngôn ngữ đó. Sử dụng thành ngữ làm cho nó ngay lập tức nhận dạng bởi độc giả có kinh nghiệm. Sau đó, họ có thể dành thời gian cho những vấn đề quan trọng hơn.

8

Xem http://en.wikipedia.org/wiki/Programming_idiom

Một thành ngữ lập trình là một mô hình, thuật toán hoặc cách mã cấu trúc. Để nói về các thành ngữ lập trình là nói về các mẫu lặp lại thường xuyên trong mã hoặc đề xuất các mẫu mới.

Lợi ích của việc làm quen với các thành ngữ, đặc biệt là các thành ngữ lớn hơn, là khi nhìn vào mã, bạn có thể thấy nhiều dòng mã khác nhau, vì nó quen thuộc như một thành ngữ cụ thể mà bạn có thể thể hiện và suy nghĩ về mã thành ngữ duy nhất thay vì phải nhất thiết phải đọc và hiểu từng dòng riêng lẻ.

Để nói rằng mã không phải là thành ngữ là để nói rằng nó không cấu trúc chính nó theo cách cho phép người đọc của con người suy nghĩ về mã hiệu quả.

2

Từ WikiPedia: Thành ngữ lập trình là phương tiện thể hiện cấu trúc lặp lại trong một hoặc nhiều ngôn ngữ lập trình.

Tôi đoán bạn đã đi xuống con đường đó!

+0

Điều này chỉ ủy quyền câu hỏi cho "Cấu trúc * là gì *?" Có vi mô, phương tiện hoặc macro không? – Pacerier

1

Thành ngữ là thuật ngữ từ ngôn ngữ học. Đó là một nhóm các từ không có nghĩa là những gì nói.Ví dụ, nói ai đó là "dưới thời tiết" khi họ cảm thấy không khỏe. Đó là cụm từ đặc biệt đến từ thủy thủ nói về hành khách, hành khách say sóng sẽ đi dưới sàn "thời tiết" nơi các tàu chuyển động ít hơn. Nhưng hầu hết chúng ta không phải là thủy thủ và không biết nghĩa đen của cụm từ.

Trong lập trình nhiều, thậm chí hầu hết các hướng dẫn không được hiểu bởi công chúng mặc dù chúng là từ tiếng Anh. ví dụ "cho vòng lặp". Trong khi họ có ý nghĩa với các lập trình viên, họ không cho hầu hết những người khác.

+4

-1: Thành ngữ lập trình khác với biến thể không lập trình. –

+0

... nhưng chưa. –

12

Ngôn ngữ "thành ngữ" trong (không phải lập trình) là một câu nói hoặc biểu thức duy nhất cho một ngôn ngữ cụ thể. Nói chung một cái gì đó mà không làm theo các "quy tắc" của langauge, và chỉ tồn tại bởi vì người bản xứ "chỉ biết" những gì nó có nghĩa là. (Ví dụ, bằng tiếng Anh chúng ta nói "phù hợp" nhưng "ra của dòng" - đó sẽ là thành ngữ)

Moving này để đấu trường lập trình, chúng ta có được những điều như:

if(c=GetValue()) 
{...} 

có nghĩa là:

c = GetValue(); 
if (c != 0) 
{....} 

mà mọi lập trình viên C/C++ đều hiểu, nhưng hoàn toàn ngăn cản ai đó đến từ một ngôn ngữ lập trình khác.

+1

-1 Trong khi thành ngữ có thể bị ảnh hưởng bởi cú pháp, tôi nghĩ rằng có nhiều hơn nữa cho họ. –

+0

Tôi thích câu trả lời này. Trong ngôn ngữ tự nhiên, một thành ngữ là một cái gì đó có nghĩa là không thể được xây dựng từ ý nghĩa của các điều khoản thành phần của nó. Nói cách khác, nó là một nguyên tử không phân chia ngữ nghĩa mặc dù cú pháp nó có thể được chia ra. Vì vậy, trong lập trình, thành ngữ là những thứ bạn không đặt câu hỏi nhưng chỉ cần ghi nhớ và có thể làm việc hiệu quả. –

0

Thành ngữ là cách nói điều gì đó đặc biệt cho một ngôn ngữ cụ thể. Ví dụ ở đây là một số ít english idioms.

Bạn có thể ngoại suy điều này để áp dụng khái niệm cho lập trình.

2

Thành ngữ là 'mẫu' có thể được xác định ở một số nơi.

Tôi sẽ không nói rằng nó có liên quan đến một ngôn ngữ lập trình cụ thể.

Iterator foo; 
foo.reset(); 
while (foo.next()) 
{ 
    print(foo.value()); 
} 

Đó là đoạn trích mà tôi gọi là thành ngữ 'cho mỗi' được thể hiện hơi khác nhau trong một số ngôn ngữ.

Một ví dụ tuyệt vời khác về thành ngữ là Ổ cắm. Tất cả các nền tảng yêu cầu có ổ cắm, tất cả đều hoạt động theo cách giống nhau, nghĩa là tất cả chúng đều có cùng giao diện.

+0

Khi tôi nghe "Ổ cắm", tôi nghĩ "mẫu I/O". Tôi không thấy nó như là một thành ngữ - mẫu tồn tại trên các ngôn ngữ, trong khi (như được mô tả bởi hầu hết những người trả lời khác) thành ngữ có xu hướng đặc trưng cho ngôn ngữ. – Tom

+0

Tôi đã không đưa ra câu trả lời cụ thể của tôi như là một nỗ lực để phân biệt giữa một 'thành ngữ' và một 'mẫu', nên rõ ràng nếu bạn đọc năm từ đầu tiên. Nó có ý nghĩa như một câu trả lời mang tính thông tin và giải thích. – Zuu

1

Đi vào một giai đoạn sớm: Thực hiện quy trình tương tự theo cùng một cách. Tích lũy thành ngữ. Chuẩn hóa. Sự khác biệt duy nhất (!) Giữa Shakespeare và bạn là kích thước của danh sách thành ngữ của mình - không phải là kích thước từ vựng của anh ấy.

  • Alan Perlis, dí dỏm trong Lập trình

http://www.cs.yale.edu/quotes.html

2

Kể từ khi chương trình lớn phát triển từ những cái nhỏ, điều quan trọng là chúng tôi phát triển một kho vũ khí của cấu trúc chương trình tiêu chuẩn có tính đúng đắn, chúng tôi đã trở thành chắc chắn - chúng tôi gọi chúng là thành ngữ - và học cách kết hợp chúng thành các cấu trúc lớn hơn bằng cách sử dụng các kỹ thuật tổ chức có giá trị đã được chứng minh.

Một lập trình viên nên có được các thuật toán và thành ngữ tốt.

Alan J. Perlis - SICP Foreword

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