BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

当编程语言不再是最容易的部分——有关Lambda + LINQ之后的C#

| 作者 王翔 关注 0 他的粉丝 发布于 2008年1月11日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

现实社会中“变化”总是令既得利益者惴惴不安。

对于很多已经成为资深的开发人员而言,C# 3.0及其Lambda + LINQ的出现就好像晴朗的天空中从远处飘来的一片乌云。原因是,当我们致力于研究如何应付业务快速变化的同时,语言本身的灵活性却在空前提高,不断的变革。如果您对COM开发中的各种宏和Inline定义还记忆犹新的话,相信您也不会忘记那个时代看起来很“Cool”的与很平凡的代码之间的区别;现在C# 3.0又把这些翻出来,只不过这次变革的动力更多来自于如何在访问数据时动态提取强类型的需求。很多以往我们需要数十行代码完成的函数现在只要一行Lambda表达式就可以了,而且因为它执行的对象可以根据需要切换到不同的数据源,如:XML数据、关系数据库,甚至Google和Amazon的Web服务。因此,是否掌握语法中这些新的特性将很大程度上关乎你团队的开发效率,起码是编码部分的效率,难点在于是否还有心思坐下来重新学习这个“熟悉的陌生人”了。比如:下面一段代码仅仅是对一个一维数组操作的对照测试组:

public class Test
{
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    public IEnumerable<int> TestLambda()
    {
        return numbers.TakeWhile((n, index) => n >= index);
    }

    public IEnumerable<int> TestOrdinaryRoute()
    {
        IList<int> list = new List<int>();
        for (int i = 0; i < numbers.Length; i++)
        {
            if (numbers[i] >= i)
                list.Add(numbers[i]);
            else
                break;
        }
        return list;
    }
}

当模式和迭代成为我们这个时代开发主旋律的时候,动态语言因为其灵活性快速膨胀至Web开发的方方面面,但动态语言是否有足够的力量的开发我们需要的ERP、CRM等OLTP应用呢?应该可以,不过我不太会用。对于很多用户而言,“能够早点完成工作按时下班就是最好的用户体验”。而Lambda只是一个开始,他刚好位于一个全能的通用语言之中,并令C#本身在可以支持密集计算的同时,又可以根据外部类型的变化、根据外部信息对象的变化,主动地调整自己的计算;并且可以把这些动态变化的能力从业务对象一直传递到最前端的用户界面部分。上面的例子只是对一维数据的操作,但随着业务规则日趋复杂,我们经常面对的是,用关系数据库或XML数据库组织的具有层次关系的数据(比如:用户提单和提单明细间的关系);这时候在操作相对复杂结构对象的时候,Lambda的简洁优势更加明显了。

当语言的灵活与语法的复杂汇合在一起的时候,我们也许很有必要重新认识哪些是最容易的,哪些需要投入更多时间来琢磨的。语言未必是最容易学习的部分。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

这让我想起人月神话中那篇著名的论文来 by Wu Junyin

主要问题和次要问题的关系……

by Yang Ariel

“能够早点完成工作按时下班就是最好的用户体验”永远不可能实现,机器替我们做了这些,我们就要再去做新的东西。

Re: 无 by xu huisheng

有点儿搞笑了,如果语言这么难,谁还会去学?如何普及?
以基础来讲,资深程序员拥有更多的经验和技术积累,倒是这些人可能去挖掘如何更好更快的新技术。

表达力很重要 by Mao Sheng

个人感觉C#的这次提升是蛮有用的。一个类的主题部分很辅助部分的感念是不同的,这种小功能用一个lambda表示是提高清晰性的。应该制止的滥用。

Re: 无 by 麦 书

虽然从某个阶段看,最热闹的语言都是相对易学易用的,不过从一个比较长的过程看,好像一些相对“难”的语言才流传的更广,负责的工作也更In。
资深程序员——好像很少有人会把写脚本的程序员成为资深。

Re: 无 by lowng lowng

回楼上的,也许能说把窗口应用年代,还在用dos的人称之为“资深”吧?更何况现在很多的代码工人都喜欢以“资深”自居,不知道自己用的就是从由底层语言开发出的脚本化开发环境的产物,不是有点50步笑100步的意味吗?

微软的趋势就是让你越来越软,越来越.net,越来越web,越来越脚本化,难道你还能更硬?

况且国内也没有专门写脚本的程序员,out了吧?

Typo? by 熊 节

TestOrdinaryRoute中的break,似乎应该是continue?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

7 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT