Linux中國

我最喜歡的 D 語言功能

早在 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 語言。

via: https://opensource.com/article/20/7/d-programming

作者:Lawrence Aberba 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國