【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!

搜搜吧

查看: 38|回复: 0

[资讯] 我最喜欢的D语言功能

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 684 天

    [LV.9]以坛为家II

    博士生

    1万

    主题

    1万

    帖子

    5万

    积分

    Rank: 8Rank: 8

    UID
    15343
    威望
    -561
    贡献
    8107
    在线时间
    361 小时
    注册时间
    2015-10-12
    发表于 2020-8-6 15:57:09 | 显示全部楼层 |阅读模式


    71e70798938603398fc55268b65d091b.jpg-wh_651x-s_2923702830.jpg

    UFCS 能让你能够编写自然的可重用代码而不会牺牲便利性。

    早在 2017 年,我就写过为什么 D 语言是开发的绝佳选择的文章。但是 D 语言中有一个出色的功能我没有充分的展开介绍:通用函数调用语法Universal Function Call Syntax(UFCS)。UFCS 是 D 语言中的一种语法糖,它可以在类型(字符串、数字、布尔值等)上链接任何常规函数,就像该类型的成员函数一样。

    如果你尚未安装 D 语言,请安装 D 语言编译器,以便你可以自己运行 D 代码。

    看一下以下示例代码:

    • // file: ufcs_demo.d
    • module ufcs_demo;
    • import std.stdio : writeln;
    • int[] evenNumbers(int[] numbers)
    • {
    •     import std.array : array;
    •     import std.algorithm : filter;
    •     return numbers.filter!(n => n % 2 == 0).array;
    • }
    • void main()
    • {
    •     writeln(evenNumbers([1, 2, 3, 4]));
    • }

    使用你喜欢的 D 语言编译器进行编译,查看这个简单示例应用做了什么:

    • $ dmd ufcs_demo.d
    • $ ./ufcs_demo
    • [2, 4]

    但是,使用作为 D 语言的内置功能的 UFCS ,你还可以自然方式编写代码:

    • ...
    • writeln([1, 2, 3, 4].evenNumbers());
    • ...

    或完全删除现在多余的括号,使 evenNumbers 看起来像是一个属性:

    • ...
    • writeln([1, 2, 3, 4].evenNumbers); // prints 2, 4
    • ...

    因此,完整的代码现在变为:

    • // file: ufcs_demo.d
    • module ufcs_demo;
    • import std.stdio : writeln;
    • int[] evenNumbers(int[] numbers)
    • {
    •     import std.array : array;
    •     import std.algorithm : filter;
    •     return numbers.filter!(n => n % 2 == 0).array;
    • }
    • void main()
    • {
    •     writeln([1, 2, 3, 4].evenNumbers);
    • }

    使用你最喜欢的 D 语言编译器进行编译,然后尝试一下。 如预期的那样,它产生相同的输出:

    • $ dmd ufcs_demo.d
    • $ ./ufcs_demo
    • [2, 4]

    在编译过程中,编译器自动地将数组作为函数的第一个参数。这是一个常规模式,使得使用 D 语言成为一种乐趣,因此,它与你自然而然考虑代码的感觉非常相似。结果就是函数式编程。

    你可能会猜出这打印的是什么:

    • //file: cool.d
    • import std.stdio : writeln;
    • import std.uni : asLowerCase, asCapitalized;
    • void main()
    • {
    •     string mySentence = "D IS COOL";
    •     writeln(mySentence.asLowerCase.asCapitalized);
    • }

    确认一下:

    • $ dmd cool.d
    • $ ./cool
    • D is cool

    结合其他 D 语言的功能,UFCS 使你能够编写可重用的代码,并在不牺牲便利性的情况下自然地进行编写。

    是时候尝试 D 语言了

    就像我之前写的那样,D 语言是一种很棒的开发语言。从 D 语言的下载页面可以很容易地进行安装,因此请下载编译器,查看示例,并亲自体验 D 语言。


    搜搜吧社区温馨提示:
    搜搜吧(www.sosoba.org)十分重视网络版权及其他知识产权的保护,针对网络侵权采取如下版权政策:
    1、本站有理由相信网友侵犯任何人的版权或作品,(图文,文字,下载,视频,非法传播),本站有权不事先通知即删除涉嫌侵权的作品和内容
    2、本站将采取必要的网络技术手段,确认为侵权作品或内容的用户有权进行警告、屏蔽、删除的行为,尽可能的防止侵权行为的发生
    3、搜搜吧影视资源均收集自互联网,没有提供影片资源存储,也未参与录制上传,若本站收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除
    4、搜搜吧,删帖,投诉,举报,侵权,若本站侵犯您的权益,附上身份及权利证明,请直接发送邮件到 kefu-sosoba@qq.com 我们将在一个工作日内删除
    soso搜搜吧社区是聚合百度搜索,搜狗搜索,360搜索,新闻,教育,站长,广告,娱乐,影视,微信,网盘,营销,手机,汽车,游戏,论坛综合为一体的大型门户社区www.sosoba.org
    【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求,云服务器2.5折起
    Powered by www.sosoba.org Copyright © 2013-2020 搜搜吧社区 小黑屋|手机版|地图|联系站长|腾讯云代金券|帮助中心|公共DNS|搜搜
    广告服务/项目合作/会员购买:QQ 侵权举报邮箱: kefu-sosoba@qq.com  搜搜吧建站时间:创建于2013年07月23日
    免责声明:本站所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,搜搜吧不承担任何的法律责任,若有侵权请来信告知,我们立即删除!

    GMT+8, 2020-9-21 14:45 , Processed in 0.210976 second(s), 12 queries , MemCache On.

    快速回复 返回顶部 返回列表