回归基础:for,if,switch之外的事情

我访问了很多的客户,查看了大量的代码。我还在我以前的工作中接触到了很多大型产品代码基地,我看到了大量的 if、 for和switch语句。我看到循环之中还嵌套着循环,其中if做着各种数据转换,从一种格式转换为另一种。我看到解析字符串来获取数据,用英文来表达这个意思很简单,但如果是编写代码的话,就需要100 行。

当我们刚起步编程时,我们就首先学习if,接着是for,然后是滥用 switch 语句。

几个星期前我在Miguel的博客上看到这片小小的代码段:

1: var biggerThan10 = new List; 2: for (int i = 0; i < array.Length; i++){ 3: if (array [i] > 10) 4: biggerThan10.Add (array[i]); 5: }

它很简单。排列一组整数数组,然后将那些比 10 大的数字做一个新的列表。我们已经百万次看到类似这样的代码。这里是其他几种语言所编写的同一事情。

C#

1: var a = from x in array where x > 10 select x; 2: var b = array.Where(x => x > 10);

Ruby

1: a = array.select{|x| x >10}

JavaScript

1: a = array.filter(function(x){return x > 10});

比起上述的循环和if,我更喜欢编写这些一行操作的代码。我在世界上看到了很多,所以或许人们没有看见足够多的例子。我要求请求 Twitter 上的朋友提交他们的例子。谢谢你们,Twitter 朋友们 !

这里有几个很好的例子。Iron Shay在他的博客中有一些不错的 LINQ示例。请在评论中分享你的例子。请务必使用 <pre> 标记。

说明:这是关于"将事情简化为一行",同样的解决方案,同等的可读性,它们比循环更简单、 简洁和少出错。

1: def calculate_primes(n): 2: no_primes = [] 3: primes = [] 4: for i in range(2, 8): 5: for j in range(i*2, n, i): 6: no_primes.append(j) 7: for x in range(2, n): 8: if x not in no_primes: 9: primes.append(x) 10: return primes 11:&">nbsp; 12: calculate_primes(500) 13: # Can be like this instead! 14: (lambda n: [x for x in range(2, n) if x not in [j for i in range(2, 8) for j in range(i*2, n, i)]])(500)

来自Aaron Bassett

1: foreach (var i in categories) { 2: foreach (var x in GetAllChildCategories(i.Id)) { 3: yield return x; 4: } 5: } 6:  7: //Can be... return categories.SelectMany(i => this.GetAllChildCategoriesIds(i.Id));

来自James Hull

1: var inputNumbersInString = Console.ReadLine(); 2: var inputNumbersStringArray = inputNumbersInString.Split(' '); 3: var inputNumbers = new List<int>(); 4:  5: for (int i = 0; i < inputNumbersStringArray.Length; ++i) { 6: inputNumbers.Add(int.Parse(inputNumbersStringArray[i])); 7: } 8:  9: int maxNumber = inputNumbers[0]; 10:  11: for (int i = 1; i < inputNumbers.Count; ++i) 12: if (inputNumbers[i] > maxNumber) 13: maxNumber = inputNumbers[i]; 14:  15: Console.WriteLine(maxNumber); 16: 17: //Or rather... 18:  19: Console.WriteLine(Console.ReadLine().Split(' ').Select(t => int.Parse(t)).ToList().Max());

来自Amit Saraswat

1: // create a poker deck as a list of two characters strings: 2: // rank, suite

时间: 2024-10-04 07:28:49

回归基础:for,if,switch之外的事情的相关文章

回归基础:简单技巧挫败复杂APT攻击

本文讲的是回归基础:简单技巧挫败复杂APT攻击,高级持续性威胁(ATP),是当今企业面对的最隐蔽网络攻击之一.大名鼎鼎的震网蠕虫,2014年索尼影业被黑,2015 年的 Hacking Team,前不久NSA的Equation-- 那么,APT会影响到你的公司吗?信息系统审计与控制协会(ISACA)的<2015 APT意识研究>发现:74%的受访者认为他们会被APT盯上,28%已经被攻击了.问题在于,APT在本质上,非常的复杂高端.它们本来就具备隐秘潜伏逃脱检测的属性,可以悄悄在网络中传播数周

Java基础-04.总结switch,for,while,do。while跳转语句

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:switch语句(掌握) (1)格式:switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n+1;break;} 格式解释说明:sw

c语言基础编程知识:switch开关语句浅析

在c语言的选择结构中,if--else语句一般指用来处理一个或者两个分支的选择结构,如果分支较多还使用if_else语句的话就会导致程序运行效率降低,代码可读性减弱.所以,switch就应运而生了.switch的英文意思是"切换",所以它在编程中就做了一个选择分支的专业术语. 首先我们来交流下switch语句的基本语法 switch (表达式) //计算表达式的值 { case 常量 1: //如果等于常量1 语句; //case后面只能加常量 break; //跳出分支,执行swit

秋式广告杀手技术分享:网络请求基础知识

最近园子里,关于.net门槛的文章风风火火,不过这类事情每过段时间就会出来一次,所以酱油都懒的打了. 当然个人也是有想法的,特别是这两天碰巧和一个三四年经验的java开发者呆在一起,对方说.net就是拉拉控件时,我还是很严厉的批评了对方,用自己比对方更具的丰富知识,重新引导对方对.net的看法. 不知道是谁在传播这种.net纯控件论,而且这么传播的这个"谁",一定是个新手,所以建议新手,就不要整天跑外面乱吹了,好好学知识去吧. 对于老手,在对新手进行知识传播时,特别是刚教授新学拉控件的

详解Swift的switch...case语句中break关键字的用法_Swift

与Objective-C中这部分内容相比,在Swift中switch得到了极大的改善.这是一件非常有趣的事,因为这还是没有添加到Objective-C中,还是没有打破Objective-C是C的超集的事实. 第一件令人兴奋的地方是可以对字符串转换.这也许正是你之前想要做,却不能做的事.在Objective-C中如果要对字符串用"switch",你必须要使用多个if语句,同时要用isEqualToString:,像下面这样: if ([person.name isEqualToStrin

将PHP作为Shell脚本语言使用_php基础

我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短--).但是只有很少数的人意识到PHP也可以很好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并没有Perl或者Bash那么强大,但是他却有着很好的优势,特别是对于我这种熟悉PHP但是不怎么熟悉Perl的人. 要使用PHP作为Shell脚本语言,你必须将PHP作为二进制的CGI编译,而不是Apache模式:编译成为二进制CGI模式运行的PHP有一些安全性的问题,关于解决的方法可以参见PHP手册(ht

PHP的switch判断语句的“高级”用法详解_php实例

只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法! switch 语句和具有同样表达式的一系列的 IF 语句相似.很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码.这正是 switch 语句的用途. 注意: 注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break.如果在循环中有一个 switch 并希望 continue 到外层循环中的下一个轮回

PHP中的switch语句的用法实例详解_php实例

switch是一个开关语句,那么很多朋友都只知道简单的switch开关语句的用法了,下面一聚教程小编就为各位详细的介绍一下switch用法例子吧. 只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法! switch 语句和具有同样表达式的一系列的 IF 语句相似.很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码.这正是 switch 语句的用途. 注意: 注意和其它语言不同,cont

PHP的switch方法的各种用法详解

只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法!   switch 语句和具有同样表达式的一系列的 IF 语句相似.很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码.这正是 switch 语句的用途. 注意: 注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break.如果在循环中有一个 switch 并希望 continue 到外层循环中的下一个