泛语言计划 第二弹 函数

开始之前,我们先复习一下数学中是怎么定义函数的。

数集A和B,如果A所有数在B中都存在且只有一个数与之对应,则称B是A的函数

由此,我们可以看出一个关键词:对应。

编程中的函数也一样,只是编程中不一定是数,也可以是布尔值、字符串,甚至操作。

这个A集,我们叫他参数,B集,叫他返回值。如果B是操作,相当于没有返回值,A一般不能是操作。

那么,知道函数的大致概念后,我们开始吧。

泛语言计划 第二弹 函数

本次举例使用语言:Scratch,C/C++,C#,Java,JavaScript,Kotlin,Python,Visual Basic,Swift 排名不分先后
(别问我为什么有Scratch,根据Tiobe语言排行榜,Scratch市场份额现在占所有编程语言的1.17%,排名第十六,三月份的时候甚至更高)
顺便祝贺C++成功超过C语言,晋升排行榜第二!

先从Scratch开始大家玩Scratch的时候,应该都注意到这个“自定义模块”吧
image
这就是函数,只是他只能对应一种操作。

比如,我没要让角色说出Hello World,就可以这么写
image
image
image
从这里,我们也可以看出编程中函数必须具备的两个东西:

一个是定义,相当于数学函数的解析式。一个是调用,就是使用函数。

定义函数,就是定义对应关系。比如说这个函数就定义了什么都对应说Hello World
image
而这个就定义了输入什么参数,就说什么
image
在调用下面这个函数的时候,就需要把字符串作为参数传给函数。
image
那么,参数是怎么传递的呢?

我记得整个公众号的第一篇文章,我就讲过关于变量的内容。我们再用Mind+上传模式(类似与Scratch)来讲解
image
可以看到,这里变量有了三种类型,数字型(其实更准确的说叫浮点型,可以理解为小数)、字符串类型,列表型。所有编程语言都有变量类型,只是有的语言可以自动识别变量类型,不用手动指定。变量可以储存一个值,你可以随时设置变量的值,也可以读取变量的值。

函数的这些参数,其实都是变量。调用函数时,实际发生的,就是把你输入进去的值,赋值给参数变量。
image

这些参数变量只是一个壳子,一个形式,并不是你实际输入的东西(值相等,但不是一个东西)。

因此,我们叫他形式参数,简称形参

而你调用函数时输入的就叫实际参数,简称实参
image
好了,Scratch部分结束,接下来正式开始敲代码。

函数的定义

由于函数的英文是function,大部分语言定义函数都是用fun/func/function等关键字,在需要手动定义类型的语言,往往还需要指定返回值类型。

除了特别特殊的Python

def funtion_name():pass

Python
注:Python中pass是占位符号,别的语言没有东西可以空着,但Python不行

接下来,是其他不需要手动定义类型的语言。

function function_name(){
}

javascript

Visual Basic函数有两种,没有返回值的称为“子程序”,有返回值的才被称作“函数”。我们先讲子程序,函数我们后面讲到返回值了再讲。

Sub sub_name()
End Sub

Visual Basic

接下来是需要手动定义类型的语言,均以没有返回值举例

fun function_name():Unit{
}

kotlin
Unit可以省略

fun function_name():Unit{
}

kotlin

func function_name(){
}

swift
swift中,没指定就是没有返回值

C/C++,C#,Java的写法比较类似,这里合起来讲

void function_name(){
}

C/C++/C#/Java

添加参数

我们还是举之前Scratch的那个例子
image
这里的说我们用各编程语言的“输出”来代替。

首先是不需要指定类型的

def function_name(text):print(text)

python
当然,最好还是指定一下类型

def function_name(text:String):print(text)

python

function function_name(text){alert(text);
}

javascript

Sub sub_name(text)msgbox(text)
End Sub

visual basic

需手动指定类型

fun function_name(text:String){print(text)
}

kotlin

func function_name(text:String){print(text)
}

swift

#include <iostream>
using namespace std;
void function_name(string text){cout << text;
}

C++

#include <string.h>
#include <stdio.h>
void function_name(string text){printf("%s",text);
}

C

void function_name(String text){Console.WriteLine(text);
}

C#

void function_name(String text){System.out.println(text);
}

Java

添加返回值

这里我们就用数学题最常见的二次函数:y=x²+2x+3举例吧

首先是不需要指定类型的

def y(x):return x*x+2*x+3

python
当然,最好还是指定一下类型

def y(x:int)->int:return x*x+2*x+3

python

function y(x){return x*x+x*2+3;
}

javascript

前面我们说过,有返回值在visual basic中,就要用函数,也就是Function

Function y(x)function_name=x*x+x*2+3
End Function

visual basic

需手动指定类型

fun y(x:Int):Int{return x*x+x*2+3
}

kotlin

func y(x:Int)->Int{return x*x+x*2+3
}

swift

void y(int x){return x*x+x*2+3;
}

C/C++/C#/Java
这里再次四个一起讲

调用函数

这里我们就用上面定义的函数,又有参数,又有返回值。我们就输入1,输出那个返回值。

python/kotlin/swift差不多,这里直接合起来讲

print(y(1))

python/kotlin/swift

cout << y(1);//记得在头文件写上#include <iostream>

C++

printf("%d",y(1));//记得在头文件写上#include <stdio.h>

C

Console.WriteLine(y(1));

C#

System.out.println(y(1));

Java

alert(y(1));

javascript

msgbox(y(1))

visual basic
Visual Basic中,如果函数没有返回值,还可以使用Call关键字

Call y(1)

visual basic
或者直接省略Call

y 1

visual basic

上面的输出结果都是6

不过再次强调,实际参数不等于形式参数,比如下面的程序(C++举例)

#include <iostream>
using namespace std;
void change(int a){a=a+1;
}
int main(){int a=1;change(a);cout << a;return 0;
}

C++
上面程序输出结果是1而非2。毕竟只有形式参数a加了1变成了2,实际参数仍然是1。
在C++中,加上&就可以让形式参数和实际参数一致,其他语言也可以使用指针。这里就不细讲了,指针我们会单独开一个专题的。

#include <iostream>
using namespace std;
void change(int &a){a=a+1;
}
int main(){int a=1;change(a);cout << a;return 0;
}

C++
结果为2

本期教程到此结束,我还要忙着做球说化学第零集呢
小预告:
image
(右上角不要管他,是我视频播放器的窗口,实际视频里没有)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738297.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署) 简介 OpenEBS 是一种开源云原生存储解决方案。OpenEBS 可以将 Kubernetes 工作节点可用的任何存储转化为本地或复制的 Kubernetes 持久卷。OpenEBS 帮助应用和平台团队轻松地部署需要快速、持久耐用、可靠且…

想要流程化办公,不妨了解拖拽式报表设计器!

看看拖拽式报表设计器是如何为客户降低成本、提高效率,携手进入产业分工新时代。当前,经济发展越来越快,经济水平提升的同时也给职场人提成了更高的要求。很多领域的客户都希望能实现降本、提质、增效,进入流程化办公新时代,可以先来了解低代码技术平台、拖拽式报表设计器…

代码随想录算法训练营第四十九天 | 300.最长递增子序列 674.最长连续递增序列 718.最长重复子数组

300.最长递增子序列 题目链接 文章讲解 视频讲解动规五部曲:dp[i]: 表示考虑元素i的最长子序列为dp[i] 递推公式:dp[i] = max(dp[j] + 1, dp[i]); 初始化:dp[i] = 1; 每个元素单独算一个子序列长度为1 遍历顺序:从前向后遍历 打印dp数组class Solution { public:int length…

基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点

1.程序功能描述LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。本课题将分别对比lea…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。今天要介绍的这位同…

VPS折腾记七搭建稍后阅读应用

1.简介 看微信公众号的时候,文章太长,可以收藏起来,但是等到晚上看的时候,发现作者已经删除了,很遗憾。wallabag能够收藏文章并且保存到服务器,让我们可以稍后阅读,而且也不怕文章丢失。 wallabag is a self hostable application for saving web pages: Save and class…

基于PSO粒子群优化的CNN-LSTM的时间序列回归预测matlab仿真

1.算法运行效果图预览 2.算法运行软件版本 matlab2022a3.部分核心程序for i=1:Iterifor j=1:Npeoprng(i+j)if func_obj(x1(j,:))<pbest1(j)p1(j,:) = x1(j,:);%变量pbest1(j) = func_obj(x1(j,:));endif pbest1(j)<gbest1g1 = p1(j,:);%变量gbest1 = pbest1(j);end…

关于领域驱动设计,大家都理解错了

翻遍整个互联网,我发现,关于领域驱动设计,大家都**理解错了**。 今天,我们尝试通过一篇文章的篇幅,给大家展示一个完全不同的视角,把“领域驱动设计”这六个字解释清楚。 ## 领域驱动设计学习资料现状领域驱动设计的概念提出已经有20年的时间了,整个互联网充斥着大量书籍…

7.4日BootlLoad总结

最近在研究单片机远程升级方法,看了网上许多资料后了解到,远程升级就是用IAP方法去烧写flash区,而IAP方法在EEPROM中有用到,也就是所说的掉电记忆,掉电不丢失的情况,而相较于51单片机,网上的资料大多是有关STM32单片机的,且使用操作系统,适合于芯片内存较大的芯片,分…

(一):小程序与服务器的链接

首原文写于18年5月,因不再想继续使用C站,现将主要文件迁移至博客园。文中涉及技术部分已相对过时,但依旧对初始web的小朋友具有一定参考价值,权且玩乐。 环境IDE:myeclipse,服务器容器Tomcat,服务端主要用servlet。创建servlet小程序与服务器链接(前端和后端的交互)的…

可视化数据看板/数字孪生大屏到底有没有实际价值?详解数据可视化的实用价值

数据驾驶舱/数据看板/可视化大屏的实际价值,取决于使用者的实际需求。华而不实?华就是实! 关于可视化大屏最广泛的争议,便是对其“华而不实”的批评,认为可视化大屏缺乏技术含量,只是一钟比较高级的“装饰品”,更是一种典型的“面子工程”。这种偏见乍一看似乎有其道理,…

osg使用整理(12):SSAO屏幕空间环境光遮蔽

一、基础概念 1、SSAO:通过将褶皱、孔洞和非常靠近墙面变暗的方法,近似模拟间接光照。SSAO称为屏幕空间环境光遮蔽 ,使用屏幕空间场景的深度而不是真实的几何体数据来确定遮蔽量,速度快效果好。2、实现原理:根据物体表面法线方向生成一个半球随机深度采样,主要看物体周围…

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

本文主要分析了大学生电子计算机类比赛中“卷”“祖传老项目”“找关系”的现象,结合自身实践经验,给出了相应的解决方案。比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象? 正文 目前现状 对于大部分的比赛小白来说,对当前比赛的现…

2024.7.4 鲜花

今日推歌 natural Will you hold the line. 只有你还没有放弃。 When every one of them is giving up or giving in, tell me. 当其他所有人都停止了尝试,被挫折磨尽了希望。 In this house of mine,Nothing ever comes without a consequence or cost, tell me. 我所在之处,…

【python+selenium的web自动化】—— 控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

Python自动化之控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

设计模式-设计原则与设计模式总结

设计原则,是设计模式的基础。在实际开发中,并不是一定要求所有代码都遵循设计原则,我们需要综合考虑人力、时间、成本、质量,不是可以追求完美,要在设当的场景遵循合适的设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。 设计模式(Design Pattern)是前…

mirai Bot初始化配置

RT其实本来我的bot已经因为自己手贱登陆qq nt直接报废了,但是论坛里有佬提供了新的协议库,那这不赶紧复活bot都对不起这个新的协议库。 本文写于2024年7月4日19:20:21,可能随着时间久远而无法实现功能。由于存在下载障碍,所以这里也搞了个存档,本帖中的相关标星*资源无法下…

量化曲线的平滑程度

思路 1. 对原始数据一阶求导,得到一阶导数数组。 2. 对一阶导数数组求标准差。导数的标准差提供了导数值的波动性,标准差越小,曲线越平滑。 平滑曲线import numpy as np import matplotlib.pyplot as plt from matplotlib import font_manager fname="/usr/local/pytho…

Android常见错误

错误1 A problem occurred configuring root project ����ʶ��. > Could not resolve all files for configuration :classpath.> Could not resolve com.android.tools.build:gradle:8.4.0.Required by:project : > com.android.application:com.android.appli…