有趣的C 本地函式

2021-10-03 15:13:42 字數 2562 閱讀 6464

目錄

究竟什麼是本地函式?

使用本地函式清理注釋

借助本地函式全力以赴閱讀rainbow

測試,測試,本地的!

選擇自己的冒險

許多流行的語言都支援使用本地函式,並且在c#

7中,對它們的支援幾乎沒有大張旗鼓地宣布。作為乙個自認為是

c#超級使用者的人,我很少利用該功能,直到我意識到它對提高**可讀性有多大幫助,特別是在上下文中,它代替了注釋

/黑客,單元測試和一般來說,只是為了清理東西。

本地函式是巢狀在另乙個成員中的一種

private

型別的方法。只能從其包含成員中呼叫它們。可以在以下位置宣告和呼叫本地函式:

與大多數情況一樣,有時,僅向您顯示本地函式的外觀更容易:

想到的第乙個可以幫助緩解功能的用例之一是任何令人討厭的環境衛生或業務邏輯規則,尤其是關於字串操作的規則。如果您在足夠多的業務應用程式中工作,您無疑會發現一些令人討厭的事情。關於為什麼要這樣做的大量注釋:

public static user processuser(user user)  

如您在這裡看到的,我們有一系列的鏈式替換,其中一些依賴於字串,而另一些依賴於正規表示式,這會使方法變得笨拙,尤其是當要執行多個操作時。現在,您可以在此處定義乙個本地函式來封裝所有這些業務邏輯以替換您的瘋狂注釋:

public static user processuser(user user)  

}

你可以隨意命名你的本地函式,甚至

,幷包含你想要的任何必要的注釋(如果你確實需要回答你為什麼要做某事的話),但這應該有助於**的其餘部分告訴您它在做什麼,而無需顯式地編寫注釋。

如果可讀性不是關於**的最重要的事情,那麼它就在頂部附近。

linq

是本地函式可以協助的另乙個流行領域,尤其是如果您必須對一系列記錄執行任何型別的瘋狂過濾邏輯時。您可以定義一系列本地函式,這些函式可以覆蓋過濾過程(或實際上任何過程)的每個步驟,並且從可讀性的角度更輕鬆地推論**:

public listfindprimesstartingwithaspecificletter(listnumbers, int startingdigit)  

)) .where(n => $"".startswith($""));

}

public listfindprimesstartingwithaspecificletter(listnumbers, int startingdigit)  

)); bool startswithdigit(int n, int startingdigit) => return $"".startswith

($"");

}

如您所見,本地函式正在幫助將所有醜陋

/討厭的邏輯包裝在它們自己的微小函式中。這是乙個非常瑣碎的情況,但是正如您可能想像的那樣,如果您的**行沒有碰到一種方法之外的任何東西,那麼它很可能是本地函式的可靠候選者。

如果您花費了很多時間來編寫單元或整合測試,則您可能熟悉寓言中的

「arrange-act-assert」

模式,該模式用於在測試給定**段時將每個功能分開,例如:如下:

正如您可能想象的那樣,對於複雜的測試用例,這可能非常適合這種模式:

public void isthisanarrangeactassertlocalfunction()  

void act()

void assert()

}

實用嗎?它適合所有用例嗎?您會發現自己使用過的東西嗎?所有這些答案都可能是壓倒性的,但似乎確實是本地函式可以發揮作用的場景。

本地函式提供了一些有趣的選項,這些選項比其他情況更適合某些情況。絕對可以代替大型注釋或非常混亂的業務邏輯。在單元測試或很少的襯裡中——可能沒有。擁有大多數新特徵,尤其是那些含糖的功能,這取決於您和您的團隊是否真正為您工作。雖然它們在某些情況下看起來很吸引人,但它們也似乎已經成熟,可以被濫用,可能是混亂的方法,以及其他問題,這些問題可能會完全挫敗最初使用它們的目的。

有趣的C 本地函式

許多流行的語言都支援使用本地函式,並且在c 7中,對它們的支援幾乎沒有大張旗鼓地宣布。作為乙個自認為是c 超級使用者的人,我很少利用該功能,直到我意識到它對提高 可讀性有多大幫助,特別是在上下文中,它代替了注釋 黑客,單元測試和一般來說,只是為了清理東西。本地函式是巢狀在另乙個成員中的一種priva...

有趣的 realloc 函式

在 c 語言中,我們最熟悉的函式排行榜上,malloc 和 free 想必名列前茅,而 realloc 則可能就要靠後了。不過你知道嗎,有了 realloc 函式,你甚至可以不使用 malloc 或者 free,而是由它一力承擔。該函式的原型如下 void realloc void ptr,size...

有趣的數字(C )

程式設計題 有趣的數字 時間限制 1秒 空間限制 32768k 小q今天在上廁所時想到了這個問題 有n個數,兩兩組成二元組,相差最小的有多少對呢?相差最大呢?輸入描述 輸入包含多組測試資料。對於每組測試資料 n 本組測試資料有n個數 a1,a2 an 需要計算的資料 保證 1 n 100000,0 ...