我会对一些之前和之后的 c # 示例感兴趣,一些非惯用与惯用的示例。非 c # 示例也可以,如果他们能够理解这个想法的话。谢谢。
惯用代码是以通用方式为您的语言执行通用任务的代码。它类似于一种设计模式,但规模要小得多。习语因语言的不同而有很大的差异。C # 中的一个习惯用法可能是使用迭代器迭代集合,而不是循环遍历集合。其他没有迭代器的语言可能依赖于循环习惯用法。
习语的意思是遵循语言的惯例。你想找到最简单和最常见的方法来完成一项任务,而不是从不同的语言移植你的知识。
non-idiomatic python using a loop with append:
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]
Some examples:
资源管理 ,非惯用语:
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);
实际上,它意味着以一种一致的方式编写代码,也就是说,在编写类似的代码构造时,所有从事代码库工作的开发人员都应该遵循相同的约定。
所以惯用方式就是与其他代码的风格相匹配的方式,非惯用方式意味着你正在用不同的方式编写函数。
e.g. if you are looping a certain number of items, you could write the loop in several ways:
for (int i = 0; i < itemCount; i++) for (int i = 1; i <= itemCount; i++) for (int i = 0; i < itemCount; ++i)
等等
最重要的是所选样式的使用要始终如一。这样人们就会对如何使用它变得非常熟悉和自信,当你发现一个看起来不同的用法时,它可能是一个引入错误的信号,也许是一个错误,例如。
for (int i = 1; i < itemCount; i++)
在 PHP 中,我有时会遇到这样的代码:
foreach ($array as $value) { $trimmed[] = trim($value); } return $trimmed;
习惯用法是:
return array_map('trim', $array);