2008-09-17 41 views
51

Tôi muốn được quan tâm đến một số ví dụ C# trước và sau, một số ví dụ thành ngữ không thành ngữ. Các ví dụ không phải C# cũng sẽ ổn nếu chúng có ý tưởng. Cảm ơn.Mã thành ngữ là gì?

+4

Làm thế nào để có được một tiêu cực, đây là một câu hỏi darn tốt! – MrBoJangles

+1

Đồng ý, câu hỏi hay với một số câu trả lời hay. –

+3

[Tính năng ẩn của C#] (http://stackoverflow.com/q/9033/4830) có đầy đủ các thành ngữ C#. Không phải tất cả mọi người đều quan tâm đến bạn, nhưng nhiều người trong số những kẻ đơn giản có số lượng upvotes cao có thể được coi là thành ngữ. Và một số câu trả lời mô tả các lựa chọn thay thế không phải là thành ngữ. –

Trả lời

68

Các phương tiện thành ngữ theo các quy ước của ngôn ngữ. Bạn muốn tìm cách dễ nhất và phổ biến nhất để hoàn thành một tác vụ thay vì chuyển kiến ​​thức của bạn từ một ngôn ngữ khác.

python

phi ngữ sử dụng một vòng lặp với append:

mylist = [1, 2, 3, 4] 
newlist = [] 
for i in mylist: 
    newlist.append(i * 2) 

python thành ngữ sử dụng một danh sách hiểu:

mylist = [1, 2, 3, 4] 
newlist = [(i * 2) for i in mylist] 
10

Mã thành ngữ là mã thực hiện tác vụ phổ biến theo cách thông dụng cho ngôn ngữ của bạn. Nó tương tự như một mẫu thiết kế, nhưng ở quy mô nhỏ hơn nhiều. Thành ngữ khác nhau theo ngôn ngữ. Một thành ngữ trong C# có thể là sử dụng một trình lặp để lặp qua bộ sưu tập thay vì lặp qua nó. Các ngôn ngữ khác không có trình vòng lặp có thể dựa vào thành ngữ vòng lặp.

23

Một số ví dụ:

Quản lý nguồn lực, không thành ngữ:

string content; 
StreamReader sr = null; 
try { 
    File.OpenText(path); 
    content = sr.ReadToEnd(); 
} 
finally { 
    if (sr != null) { 
     sr.Close(); 
    } 
} 

Idiomatic:

string content; 
using (StreamReader sr = File.OpenText(path)) { 
    content = sr.ReadToEnd(); 
} 

Iteration, phi ngữ:

for (int i=0;i<list.Count; i++) { 
    DoSomething(list[i]); 
} 

Cũng không thành ngữ:

IEnumerator e = list.GetEnumerator(); 
do { 
    DoSomenthing(e.Current); 
} while (e.MoveNext()); 

Idiomatic:

foreach (Item item in list) { 
    DoSomething(item); 
} 

Lọc, phi ngữ:

List<int> list2 = new List<int>(); 
for (int num in list1) { 
    if (num>100) list2.Add(num); 
} 

thành ngữ:

var list2 = list1.Where(num=>num>100); 
+8

Niềng răng là thành ngữ Java ;-) –

3

Thực tế mà nói, nó có nghĩa là viết code theo một cách nhất quán, tức là tất cả các nhà phát triển làm việc trên cơ sở mã của bạn nên làm theo các quy ước tương tự khi viết các cấu trúc mã tương tự.

Cách thành ngữ là cách phù hợp với kiểu của mã khác, cách không thành ngữ có nghĩa là bạn đang viết loại hàm nhưng theo cách khác.

ví dụ: nếu bạn đang lặp một số lượng nhất định các hạng mục, bạn có thể viết các vòng lặp bằng nhiều cách:

for (int i = 0; i < itemCount; i++) 

for (int i = 1; i <= itemCount; i++) 

for (int i = 0; i < itemCount; ++i) 

vv

gì là quan trọng nhất là phong cách lựa chọn được sử dụng một cách nhất quán. Bằng cách đó mọi người trở nên rất quen thuộc và tự tin với cách sử dụng nó, và khi bạn theo dõi một cách sử dụng có vẻ khác, nó có thể là dấu hiệu của một sai lầm được giới thiệu, có thể là do một lỗi, ví dụ:

for (int i = 1; i < itemCount; i++) 
+1

Tôi đoán tôi nghĩ thành ngữ có nghĩa là "cách tốt nhất" thay vì chỉ là một tiêu chuẩn tùy ý. Nhưng tôi đoán một cách tốt nhất là tùy thuộc vào ngữ cảnh. – MrBoJangles

4

Trong PHP đôi khi tôi gặp phải mã như:

foreach ($array as $value) { 
    $trimmed[] = trim($value); 
} 
return $trimmed; 

nào idiomatically có thể được thực hiện với:

return array_map('trim', $array); 
Các vấn đề liên quan