由于手头工作的缘故,在OpenHarmony的图形子系统源码,foundation/graphic/ui/interfaces/kits/layout/layout.h文件里看到下面这个成员函数,便好奇chatGTP会怎么去理解。
void SetLayoutDirection(const DirectionType& direction)
刚开始我想着提什么样的问题好,想来想去也没有很信服的好点子,于是最后决定皮一下:直接就把这行干巴巴的字符串扔给它,静等花开,完全没有明确预期的那种等待,也是别有一番滋味在心头。ChatGTP的网页在屏幕上一闪一闪地蹦出它的‘回答’文字,还举例说明,回答问题的姿势是相当专业了。
首先,它尝试从函数名解读函数的功能定义,也就是理解问题:这个函数是什么,干什么用的?然后,它解读函数的参数列表,从类型名DirectionType还原出具体数据类型。接着,它举例示意函数实现的完整代码结构,这也是专业级的代码结构,严谨而且完整。给出实现代码的实例之后,它进而用文字说明实例代码的思路,以及实际情况可能需要注意的地方。最后,它补充说明在UI框架不同的库要确保符合预期。
回答的质量蛮高的,继续让它详细解释这行代码时,它开始注意到了参数列表中使用到了const关键字,和&引用字符,解释也是中规中矩。
至此,在对C++函数的理解和表达上,我们要覆盖这些知识点后,可以提供与chatGTP3.5同等水平的解答:
- 函数名字 --> 定义函数要实现的功能,回答核心问题,也就是WHAT的问题。
- 函数的返回值 --> 返回值类型,解释函数,输入和输出的关系模型,调用者和实现者之间交换数据的接口。
- 参数列表 --> 类型+空格+参数名,空列表,1个参数,多个参数,不确定参数列表,使用和不用const修饰符,使用或不用&修饰符的差异,引用和指针参数,...
回到C++和计算机程序设计语言上来看,套用公式:程序 = 算法 + 数据,定义一个函数就是设计一个处理数据的算法,从参数列表【输入】传来0个或多个数据,balabala一同操作后,返回【输出】一个数据(称为返回值)。
想要深入const修饰符,这个试图为程序员在设计程序时候,明确界定程序中那些不变的数据,不改变数据的函数。有什么样的底层逻辑,值得忙碌的我们这么谨小慎微,不厌其烦地敲打const关键字,就像给自己的程序戴上紧箍咒,常常在不经意的时候,突然生效,头疼欲裂。好奇害死猫,一旦你开启了这样的念头,人便像是上了瘾,《Effective C++》和《More Effective C++》或许可以起到一定的缓解作用。
同样作为引用地址符&,也是神秘兮兮的,你若是没有火眼金睛,多半便是像三打白骨精里的八戒,就知道嚷嚷“这哪里是什么妖怪,这么漂亮的女人”,或者像唐三藏一样,怒不可遏,“你这泼猴,一下子干死三条人命,还毫无悔过之心,你走吧,我没法和带你你一起去西天取经了”。可有时候,只有你悟空一个人有火眼金睛时,只有老实人沙师弟和白龙马不言不语,师傅和师弟出于不同的动机和信念,挤压你,又当如何?《西游记》只给问题,没有solution,这也是名著代代相传,生生不息的缘故之一吧,看见又只是看见,那种想要有所为又有所不为的冲突感,如同有一股魔力,把人黏住,一茬又一茬。