D 编程语言的惊人之处

嵌套使协作者更容易理解代码库。这是一个 D 语言中嵌套的示例,用于创建干净、可重用的代码。
62 位读者喜欢这个。

软件开发可能是一个非常复杂的过程。随着您编写的代码在规模和复杂性上不断增加,保持代码的可读性和易于理解非常重要。在 开源软件 开发中,许多人协作处理代码,这些代码具有多个相互关联且经常变动的部分。这可能会使潜在的贡献者难以理解代码库。

理解代码库所需的努力可能会直接影响贡献,因为许多人的贡献时间有限,许多人是在业余时间进行贡献。这使得代码库对于经验丰富和新的贡献者来说都易于理解至关重要。

复杂性问题

考虑一个实现烘焙面包算法的函数示例,名为 bakeBread。烘焙面包涉及多个步骤,因此将代码分解为多个辅助函数很有帮助

string bakeBread() 
{ 
	mixIngredients();
	kneadDough();
	riseDough();
	punchDough();
	riseDough();
	bakeInOven();
}


void mixIngredients() { /* code here */ }

void kneadDough() { /* code here */ }

void riseDough() { /* code here */ }

void punchDough() { /* code here */ }

void bakeInOven() { /* code here */ }

正如您从上面的示例代码中看到的,烘焙面包是一个相当复杂的过程,将其在多个函数中实现可以将问题分解为易于理解的步骤。然而,这种方法的一个缺点是,在 bakeBread 之外有几个函数仅在该函数内部使用。

嵌套来救援

嵌套 有助于减轻代码结构方面的一些复杂性。它使所有上述函数都可以在它们使用的 bakeBread 的范围内声明

string bakeBread()
{
        void mixIngredients() { /* code here */ }
        void kneadDough() { /* code here */ }
        void riseDough() { /* code here */ }
        void punchDough() { /* code here */ }
        void bakeInOven() { /* code here */ }

        mixIngredients();
        kneadDough();
        riseDough();
        punchDough();
        riseDough();
        bakeInOven();
}

嵌套通过提供一种 封装 形式来帮助清理代码。函数在它们使用的地方定义,而不会使全局范围混乱。这也防止了与其他使用相同名称的函数发生名称冲突,而无需求助于奇怪的函数名称来区分它们。嵌套还有助于协作者轻松识别函数的定义位置、使用方式以及如何快速进行改进。

D 语言中的强大嵌套

D 语言中的嵌套 超越了函数。您可以将 嵌套在类中,将 结构体 嵌套在结构体中,结构体嵌套在类中,类嵌套在结构体中,甚至可以在函数或任何其他范围内本地导入 模块。这个概念被称为“层层嵌套”。

如果 bakeBread 示例(或其任何现在嵌套的函数)需要导入外部模块,则可以在其使用的范围内导入它

string bakeBread() 
{ 
	import std.stdio: writeln;

	void mixIngredients() { 
		import std.array: split;

		// more code here
	}
	
	/* the rest of code which may include 
	* functions, classes or structs goes here
	*/
}

这使得跟踪事物的来源变得容易,并防止与来自不同模块但名称相同的符号(函数、类、结构体等)发生名称冲突。像这样实现的函数可以在重构期间移动,而不会破坏代码,因为它不依赖于任何全局导入的模块。这最大限度地减少了对大型代码库进行重大更改所需的工作量——这对于协作开发来说是一件好事。

是时候试试 D 语言了

D 语言是一种非常适合开发的语言。它很容易 安装 D 编译器,编写一些示例代码,并 运行它 以亲自体验 D 语言。您还可以在 在线 D 编辑器 中运行您的代码。《D 语言编程》一书由 Ali Çehreli 撰写,对 D 语言进行了很好的介绍,并提供了免费的在线版本。

接下来阅读什么
标签
User profile image.
Lawrence 是一位自由职业全栈工程师(React、Node.Js、D)和 100% Linux 用户。他喜欢设计和编码。对 SaaS 和现代 Web 充满热情。

1 条评论

嗨 Lawrence,

嵌套或其他代码内解决方案有一个缺点。该函数无法直接重用。

创建一个库可以解决这个问题。

对于烘焙蛋糕,您需要相同的函数。

此致,

Jan Gerrit

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.