什么是代码库(Library)
每当我们写代码时,发现自己一直在重复一组指令或某些程序时,对它们进行一次编码,并将结果转化为一个库,这样我们和其他人以后就可以通过简单地加载库并在我们的程序中使用它,这可能会有帮助。
因此,库是一个代码集合,通常专注于启用一个特定的组件、外围设备或功能。区分库和程序的重要一点是,库是一个组件或构件,将在程序中使用,但它本身并不是一个完整的程序。
库可以通过使用特定语言开发环境的集成开发环境来创建,也可以通过用开始创建集成开发环境时的原始源语言编写代码来创建。
库是如何构成的
一个特定的目的
一个干净的用户界面
而且不应该做不相关的事情
为了实现上述目标,我们需要做一些规划和思考。
目标
库应该是用一个特定的功能来实现一个确定的结果。
为了实现这一目标,我们需要考虑手头的任务,并确保将其简化为最重要的单一功能,并在库中捕获。无论它是驱动一个硬件,还是执行某种类型的数据操作。库的目标应该是明确和简洁的。
界面(接口)
这方面是库中最明显和最重要的部分。我们图书馆的用户将通过用户界面与我们的代码互动,并通过它来判断其可用性和清晰度。
为了组织我们库的界面,我们需要考虑我们库的输入和输出。
输入将构成我们从用户那里需要的所有数据,以完成库需要做的事情。这些将被组织成我们库的输入参数。
而输出是库处理输入的结果。有些库只是执行一些操作,这些操作将导致一些物理变化。其他的库会有一个明确定义的返回值。
重要的是要记住,不是所有的库函数都会返回一个值。
相关性
大多数库的代码都是从用户编码的自定义块功能开始的。
我们意识到我们需要一个缺失的功能,于是编写一些自定义块来弥补这个缺失的功能。然后我们决定这将是有帮助的功能,并决定将自定义块转换为一个库。
我们很容易得意忘形,开始在代码中添加越来越多的功能。这导致了一个非常复杂的最终结果。最好的办法是计划好需要做的事情,并只关注代码来实现该功能。
通常情况下,有必要对某些功能进行分解,并将它们组合在一起,组成库。这些将以相关的功能块形式出现,完成同一原始任务的不同方面。
一个很好的例子是MicroBlocks中的LED显示库。它包含了操作作为一个整体的 LED 面板的积木块,以及操作单个 LED 像素,还有显示字母和数字的能力。
我们来写一个
为了简单起见,我们将着重于使用 MicroBlocks的IDE 开发一个简单的库。
微型块库的块的长度必须不超过1000字节。
目的
我们想实现的功能是。
通过允许发送任何大小的信息来增强 micro:bit 设备默认的19字节的无线广播能力。
我们应该能够处理任何类型的数据:字符串、数字、列表和布尔。
另外,如果我们发送的信息超过了默认的19字节,我们应该在设备的 LED 面板上显示缓冲区的数量。
以上功能列表是我们定义库的一个好的起点。
界面(接口)
我们的广播信息块将被命名为 RadioMsg。
为了进行信息处理,我们需要用户给我们一个包含信息本身的参数。该参数将被命名为:msg,它将是一个数字/字符串输入。
为了确定消息内容的类型,我们可以依靠MicroBlocks的 "运算" 积木块来报告输入的类型。
为了满足显示大于19字节的信息的缓冲区计数的可选要求,我们将使用一个开关作为附加参数。它将被命名为。ShowBuf,它将使用一个名为 bufYN 的布尔输入域。
基于这些最初的输入决定,我们的积木块头(帽子积木)将看起来像这样。
由于我们的目标非常简单,我们的库中只需要一个块。
代码块
现在,让我们来看看我们需要的代码,以完成所有的消息处理。我们将分组检查所有需要的块,并详细解释其功能。
我们从定义一些局部变量开始。
延迟将被用来给无线电信息的缓冲区留出空间,所以我们不会使无线电传输不堪重负。radMsgSize 用于确定每个消息的分块大小。msgLen 被设置为要发送的消息的长度。buffers 设置为我们需要发送的19字节缓冲区的数量。rem 被设置为最后一个消息缓冲区大小的剩余部分。
下一组积木块查看要发送的消息,确定其类型,并将其转换为字符串格式。
列表成为逗号分隔的字符串。
数字成为数字字符串。
布尔运算成为真/假字符串
我们使用列表块的连接操作积木块来进行转换。
现在,我们处于开始处理消息的实际位置。
如果要发送的信息不大于我们的 radMsgSize(19字节),那么我们就直接发送。
如果它大于 radMsgSize,那么我们就用计算出的 buffers 变量作为循环计数器,分别发送每块信息。
可选的参数 bufYN 被检查,看我们是否需要在设备的LED面板上显示缓冲区的数量。
为了把一条长消息分割成 radMsgSize 的小块,我们用块拷贝积木把截短的消息放入本地变量 msgPart,并把每个小块发送出去。
一旦所有的主缓冲区发送完毕,在信息的最后部分仍然可能有剩余。
这是由前面计算的 rem>0 的条件表示的。
如果是这样,我们在这里发送最后一个消息片段。
我们代码的最后一部分是清除设备显示,如果我们显示的是在可选参数 bufYN 中选择的缓冲区计数。
这样,我们的RadioMsg库块的代码部分就完成了。
现在我们需要继续把这个代码块变成 MicroBlocks 库模块的部分。
转换为库格式
库模块是由扩展名UBL来定义的。
我们需要把我们编码的自定义块,转换成具有适当扩展名的文件。
MicroBlocks实际上为我们提供了完成这一任务的方法,非常容易。
当我们在设置菜单中选择显示高级块选项时,我们会在文件菜单中看到另一个菜单项:导出功能为库。
这个选项为我们提供了一种方法,可以将我们创建的自定义块保存为一个库格式的文件。
我们为我们的库输入名称 "RadioMsg",然后点击确定。
我们将被带到系统文件保存对话框,在那里我们可以把库文件 RadioMsg.ubl 放到我们系统的一个理想目录中。
一旦完成,我们就可以进入 MicroBlocks IDE的 Libraries +部分,将我们的 Library 从我们保存它的地方直接加载到我们希望的任何程序中。
通过分享 RadioMsg.ubl 文件,我们将为其他用户提供一种方法,以同样的方式利用我们的库。
我希望你能从这篇文章中得到足够的信息来尝试创建你自己的库。
不要忘了,还有一种方法可以直接用 IDE 开发的语言(GP)编写 Library 代码。
原文:https://wiki.microblocks.fun/create_a_library