unicloud云开发进阶49-项目33 封装公共函数简化代码
2023-09-13 09:24:32
unicloud云开发进阶49-项目33 封装公共函数简化代码。在这一系列中,我们讨论过云函数的很多特性,包括执行超时的控制,长轮询、设置内存大小和异步处理、错误监控、环境变量的使用,甚至引入日志管理。在这一篇中,我们来讲解一下如何封装云函数的公共函数,让同一个函数中不同的地方能使用同样的代码。特别是在计算代码中,这是经常会被用到的技巧。
我们先看看前面文章中的一个例子,这个例子中,当我们计算一个子数组的和,我们需要确定从哪个位置开始计算到哪个位置结束,在代码中,我们可能会这样写:
// 长度为n的数组nums
// 起始和结束位置分别为L和R
int sum(int L, int R){
int total=0;
for(int i=L; i<=R; ++i){
total+=nums[i];
}
return total;
}
如果我们的子数组会经常变化,我们可能会写一个这样的主函数:
int main(){
int L=1, R=4;
int ans=sum(L, R);
L=0, R=2;
ans+=sum(L, R);
return ans;
}
我们发现对于sum这个函数来说,其实L和R是可变的,但是对于sum函数来说,它本身是没有这些变化的,在任何情况下,它只要实现一个功能就是计算给定子数组的和。
我们想想,对于很多类似的功能来说,有时候仅需要改变函数的某些参数,但是对于函数本身来说,它并不需要进行修改。这种情况下,其实我们只需要定义一个公共函数,将这个功能提取出来就行了。
前面那个例子中,我们其实只需要定义一个这样的公共函数:
int sum(int nums[], int n, int L, int R){
int total=0;
for(int i=L; i<=R; ++i){
total+=nums[i];
}
return total;
}
然后主函数就不需要改动,只要把sum函数改成sum(nums, n, L, R)就可以了。
这就是函数封装的好处,方便了代码的修改。
代码优化
我们还可以对这个代码做一些小的优化,让它的效率有所提高,首先是让L
和R
从0开始,那么,就可以减少一部分判断语句,直接从数组中取数,不过,这就要求数组必须有至少一个元素,否则会越界。但是,实际上,在前面的文章中,我们已经见过,云函数必须传一个event对象进来。
event
对象中有很多东西,不过,对于我们来说,最需要的是query
对象,因为query
对象中就包含了所有的查询参数,所以,对于一个给定子数组来说,我们只需要这样写:
string query=event["query"];
vector<int> qs=split(query, ',');
int L=qs[0], R=qs[1];
就可以获取到L和R的值了,然后我们只要修改一下sum函数就可以:
int sum(int nums[], int n, int L, int R){
int total=0;
for(int i=L; i<=R; ++i){
total+=nums[i];
}
return total;
}
这样,整个函数看起来就会简洁很多。
int main(){
string query=event["query"];
vector<int> qs=split(query, ',');
int L=qs[0], R=qs[1];
int ans=sum(nums, n, L, R);
return ans;
}
封装的好处
封装的一个最主要好处是让代码看起来更加整洁,另外,在开发过程中,如果使用得当的话,可以大大减少代码量的,像我们前面这个例子,我们如果想要使用sum函数的话,只需要调用sum(nums, n, L, R)就可以,整个函数看起来就会更加清晰,另外,因为我们不需要重复书写sum函数,节省了代码量,整体来说,降低了代码的复杂度。
另外,由于每个函数都只承担特定的任务,所以在修改代码的时候,也会更加容易定位到修改的地方,这也是封装的好处之一。
最后,封装也是函数复用的基础。
本文同步发表于我的博客,点击这里可查看。