什么是惯用代码?

我会对c#之前和之后的一些例子感兴趣,一些非惯用和习惯用法的例子。 非C#的例子也会很好,如果他们有这个想法。 谢谢。

语言意味着遵循语言的惯例。 你想find完成任务的最简单和最常见的方式,而不是从不同的语言移植你的知识。

非惯用python使用循环与追加:

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

使用列表理解的惯用python:

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

一些例子:

资源pipe理 ,非惯用:

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

成语:

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

迭代 ,非惯用:

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

也非惯用:

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

成语:

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

过滤 ,非惯用:

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

成语:

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

语言代码是代码,它以通用的方式为您的语言执行常见的任务。 它与devise模式相似,但规模小得多。 习语差异很大。 在C#中的一个习惯用法可能是使用迭代器遍历集合,而不是循环遍历它。 没有迭代器的其他语言可能依赖于循环习语。

在PHP中,我有时遇到如下代码:

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

哪些地方可以实现:

 return array_map('trim', $array); 

实际上,这意味着以一致的方式编写代码,即编写代码库的所有开发人员在编写类似的代码结构时应遵循相同的约定。

所以惯用的方式是与其他代码的风格相匹配的方式,非惯用的方式意味着你正在以不同的方式写这种function。

例如,如果你正在循环一定数量的项目,你可以用几种方式编写循环:

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

等等

最重要的是所select的风格是一贯使用的。 这样,人们对如何使用它变得非常熟悉和自信,而当你窥探到看起来不同的用法时,它可能是引入错误的标志,或许是由于一个错误而导致的错误,例如

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