函数类型-1:基本语法

简介: 本实验将介绍TypeScript中函数类型的基本语法

函数类型-1:基本语法


1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 实验环境操作指南

在本系列实验中,有两种方法可以进行操作。一种是控制台方式,另一种是远程桌面的方式。接下来我们分别介绍这两种操作方式。

控制台方式

使用控制台方式操作实验,上手比较简单,对网络带宽的要求也不高。但是在编辑代码时,需要使用Vim工具进行文本编辑。对于初学者来说使用Vim工具需要熟悉其操作模式。

进入控制台环境

资源创建成功后,我们在右侧选择切换到Web Terminal

切换到dev用户

本次实验的开发环境部署在dev用户的~/web目录中。因此我们执行这两条命令即可进入实验环境

su dev
cd ~/web

Vim工具的用法

vim是一个命令行下的文本编译器。使用vim编辑文件时。我们只需要通过快捷键,而不需要鼠标就可以对文本文件进行编辑。但是这种文本编辑器的用法和常见的图形界面编辑器使用习惯差别较大。接下来我们简单介绍vim的使用。

3.1 进入Vim

在命令行中输入vim即可进入操作界面,这时的Vim没有打开任何文件。

vim

3.2 Vim的三种模式

和普通编译器不同的是,Vim包含了三种操作模式。分别是命令模式编辑模式末行模式。接下来我们来简单介绍一下三种模式的用法。

3.3 命令模式

在刚进入界面的时候,vim默认状态为命令模式。这种模式下,无法编辑文件,键盘输入也不会在屏幕上有任何显示,这种情况往往会让使用者感到困惑。这时候我们可以输入大写的ZZ,即可退出Vim。

3.4 编辑模式

我们继续输入vim回到编辑器。在命令模式下我们按下小写的i。此时我们会发现下部的提示已经变成了插入。这表示vim已经进入了编辑模式。

在编辑模式下我们就可以像正常的编辑器一样编辑文件。此处我们输入hello world

在编辑完成之后,如果我们想退回命令模式,只需要按ECS键即可。按下该按钮之后我们会发现下部的插入提示消失了,这就表示vim回到了命令模式。

3.5 末行模式

回到命令模式之后,我们按下:键,这时下部的提示会变成:,这就表示vim进入了末行模式。在末行模式下,我们同样使用快捷命令操作vim,但是和命令模式不同的是,末行模式中输入的命令会显示的屏幕的最后一行。

接下来我们继续输入w demo.txt并按回车。会提示显示为如下内容。表示上面的内容已经保存到了demo.txt中。

最后我们按:q,该命令也可以退出vim。

4. 编辑index.js文件

4.1 创建新文件

当我们希望编辑特定文件时,我们可以输入vim 文件名。这时候在下部会看到"index.ts" [新]。表示vim自动创建了新文件。

vim index.ts

4.2 复制粘贴

在编辑模式下,vim同样可以使用ctrl+v进行粘贴。我们按i进入编辑模式之后,将下列内容粘贴到vim中。

//vim编辑模式和命令模式的常用命令:
//在编辑模式中:可以使用 上 下 左 右 按键移动光标
//在命令模式中:可以使用 h j k l 命令移动光标
//在编辑模式中:可以使用退格或者DEL键删除字符
//在命令模式中:可以使用 x 命令删除字符
//在命令模式中:可以使用 dd 命令删除整行文字(谨慎使用!)
//在命令模式中:可以使用 ggdG 命令删除全部文字(谨慎使用!)
//在命令模式中:可以使用 u 命令撤销操作
//在命令模式中:可以使用 ctrl + r 命令重做操作。

4.3 文件内容的查找

在命令模式下,除了按:命令之外,还可以使用/命令进入末行模式,通过/进入末行模式之后,输入相关的内容即可进行全文检索。我们在命令模式下输入/dd

光标就会移动到相关字符上。

4.3 文件的保存和放弃

当我们编辑完成之后,可以在命令模式中通过ZZ命令直接保存并退出编辑器,也可以通过在末行模式中通过:w单独保存文件。如果我们希望通过末行模式保存并退出,可以使用:wq

但是需要注意的时,如果文件在修改之后没有保存,是无法通过:q退出的。如果编辑过的文件是只读属性也无法通过ZZ退出。这时我们就可以使用:q!命令放弃所有的编辑内容,强制退出vim。

远程桌面方式

使用远程桌面方式进行实验是,可以使用VS Code编译器进行代码的编写和操作,相对控制台方式更加的直观。但是这种方式对网络带宽的要求比较高。

进入网页环境

1.1 进入远程桌面

资源创建成功后,我们在右侧选择切换到远程桌面

1.2 启动浏览器

在远程桌面页面中,点击Chromium网页浏览器

登录RAM用户

2.1 打开网页

浏览器启动后会默认打开阿里云的RAM用户登录页。在登录页面中我们点击下一步按钮。

2.2 获取密码

接下来我们需要输入RAM用户的密码。密码显示在实验控制台左侧,我们点击子用户密码右侧的复制按钮。

复制完成后,我们在用户密码框中按Ctrl + V 复制密码,然后点击登录按钮

进入ECS的远程连接。

3.1 进入ECS控制台

登录成功后,页面跳转到控制台,我们在控制台的搜索框中输入ECS,然后点击云服务器ECS进入云服务器控制台。

3.2 进入远程连接界面

在ECS控制台中,我们找到实验创建的ECS,点击右侧的远程连接按钮。

3.3 选择VNC远程连接

在远程连接中选择通过VNC远程连接中的立即登录如果没有显示该选项,则可点击展开其他登录方式按钮。

登录VNC远程连接

4.1 初始化VNC密码

初次登录VNC远程连接时需要先设置VNC密码。点击重置VNC密码按钮。

输入两次新的VNC密码,并点击确认

4.2 登录VNC

VNC密码设置成功后,输入密码并点击确认。

4.4 进入图形界面

VNC登录成功后会看到实验ECS的登录界面,在登陆界面中我们点击DEV用户图标

4.5 在图形界面中登录

在密码框中输入默认登录密码Dev12345。即可进入图形实验环境

使用VS Code编辑器

登录图形实验环境之后,接下来我们来启动VS Code 编辑器。

5.1 进入应用程序列表

首先我们点击界面的下方的显示应用程序按钮。

5.2 启动VS Code

在应用程序列表中选择最后一页

然后点击VS Code应用图标

5.3 选择文件

在VS Code 编译器中,左边区域为文件列表,可以选择要编辑的文件

5.4 编辑文件

在VS Code中,右上区域为文件编辑区,可以进行文件内容编辑

5.5 操作终端

在右下区域的终端选项卡,为控制台区域,可以进行命令输入执行


3. 函数的定义

  1. 函数类型的定义和调用

在TypeScript中函数除了可以执行之外,其本身就是一种变量。我们可以像使用变量一样存储和传递函数。我们修改index.ts文件为如下内容。会发现TypeScript的函数变量一般有两种定义形式。

function sum(x:number, y:number){
  return x+y
}
var ss = function(x:number, y:number){
  return x+y
}
console.log(ss);
console.log(ss(1, 10));
ss = sum
console.log(ss);
console.log(ss(10, 100));

终端选项卡中输入如下内容

tsc
cat index.js
node index.js

  1. 匿名函数的自调用

除了具有名字的函数变量之外,TypeScript还支持匿名函数的自调用方式,我们修改index.ts文件为如下内容。可以看到匿名函数自调用的语法为(匿名函数定义)(函数参数)

(function () {     
   var str = "Hello" + " " + "World";        
   console.log(str)      
})()

终端选项卡中输入如下内容,我们可以看到匿名函数在定义之后被调用了。

tsc
node index.js

  1. 匿名函数的用法

在上一个实验中我们讲解枚举类型时提到,枚举类型在编译之后会生成一个具体的对象。我们修改index.ts文件为如下内容。再次观察枚举类型编译后的结果

enum fruit{
  apple, banana, pair
}

终端选项卡中输入如下内容,可以看到枚举类型所编译的结果,正是一个匿名函数自调用。

tsc
cat index.js


4. 匿名函数的用法

除了具有名字的函数变量之外,TypeScript还支持不具有名字的函数,即匿名函数。本小节中我们将学习匿名函数的语法和用法。

  1. 匿名函数语法

由于匿名函数没有名称可以引用,因此在实际使用时,基本都会采用自调用的方法。匿名函数自调用的语法为function(匿名函数参数类定义...){匿名函数体}(函数调用参数)。我们修改index.ts文件为如下内容。

(function () {
    var str = "Hello" + " " + "World";
    console.log(str)
})()

终端选项卡中输入如下内容。

tsc
node index.js

  1. 匿名函数的调用时机

接下来我们使用console.log来观察匿名函数的调用时机,会发现匿名函数在定义后会直接调用。因此一般用于初始化工作。我们修改index.ts文件为如下内容。

console.log("匿名函数定义前");
(function () {     
    console.log("匿名函数1调用");
})();
(function () {     
    console.log("匿名函数2调用");
})();
console.log("匿名函数定义后");

终端选项卡中输入如下内容。

tsc
node index.js

  1. 匿名函数的用法

在前面的实验中我们讲解枚举类型时提到,枚举类型在编译之后会生成一个具体的对象。我们再次观察枚举类型编译后的结果,可以看到枚举类型所编译的结果,正是一个匿名函数自调用,在自调用函数中,使用了对象语法对变量进行初始化,关于对象语法可以详见后面的实验内容。我们修改index.ts文件为如下内容。

enum fruit {
    apple, banana, pair
}

终端选项卡中输入如下内容,

tsc
cat index.js


5. 可选参数和多返回值

在JavaScript中函数的参数没有类型的限制,调用方可以传递任意类型的参数。而在TypeScript中,函数传入的参数类型受到严格的限制。这种限制有利于在编译器消除可能的编码错误,但是也限制了函数调用的灵活。在实际开发环境中,我们往往会遇到一个函数名可以接受多种参数类型的情况。这种情况下,我们就需要使用函数的特殊参数。

  1. 函数的可选参数

当我们编写一个login函数时,我们希望既可以支持用户名密码登录,也支持只使用用户名登录。这时候就可以使用TypeScript的可选参数功能。可选参数的语法为在参数名后面加入?,表示这个参数在调用时可以不提供。我们修改index.ts文件为如下内容。

function login(user: string, passwd?: string) {
    console.log("[Login Function] User: " + user + " Password: " + passwd)
}
login("aliyun");
login("aliyun", "pass123");

终端选项卡中输入如下内容。

tsc
node index.js

  1. 可选类型和联合类型

在使用可选参数的时候,由于这个属性可以为空,因此我们不能用普通的类型来保存可选属性,而是要使用类型 | undefined的联合类型。

function login(user: string, passwd?: string) {
    var p: string | undefined = passwd
    console.log("[Login Function] User: " + user + " Password: " + p)
}
login("aliyun");
login("aliyun", "pass123");

终端选项卡输入如下命令编译并查看。

tsc
node index.js

  1. 函数的多返回值

在函数编写时,有时候单一的返回值不能满足业务逻辑的要求,例如在登录函数时,我们希望返回登录是否成功,同时如果登录失败希望返回登录的错误信息。这时我们就可以使用元组类型来作为返回值,一次性返回多个元素。

function login(user: string, passwd?: string): [boolean, string] {
    var p: string | undefined = passwd
    console.log("[Login Function] User: " + user + " Password: " + p)
    if (user != "aliyun") return [false, "用户名错误"]
    else if (p != "pass123") return [false, "密码错误"]
    else return [true, "登录成功"]
}
console.log(login("阿里云"));
console.log(login("aliyun"));
console.log(login("aliyun", "pass123"));

终端选项卡输入如下命令编译并查看。

tsc
node index.js


6. 其他类型的特殊参数

  1. 函数的参数默认值

如果我们想为可选参数在没有设置的时候提供一个默认值,这时候就可以使用参数默认值。我们继续修改login函数,为函数添加一个boolean类型的参数,保持活跃keepalive。这个参数默认为true。我们修改index.ts文件为如下内容。

function login(user: string, passwd?: string, keepalive: boolean = true) {
    console.log("[Login Function] User: " + user + " Password: " + passwd + " keepalive: " + keepalive)
}
login("aliyun");

  1. 不定长参数

当我们调用函数时还会出现一种情况,也就是无法确定函数参数的长度。例如我们需要编写一个添加订单的函数。该函数会接受多个订单编号做为参数。这时候我们就可以使用不定长参数

不定长参数的语法为...参数类型[]。当我们调用不定长参数函数时,只需要顺序添加符合类型约束的参数即可。而当我们编写函数获取不定长参数时。所有的不定长参数会放在数组中传递给函数体。我们修改index.ts文件为如下内容。

var orders: number[] = [];
function appendOrder(...o: number[]) {
    o.forEach((v: number) => orders.push(v))
}
appendOrder(0)
appendOrder(1, 10, 100)
console.log(orders)

终端选项卡中输入如下内容

tsc
node index.js

  1. 特殊参数的顺序

当函数中存在特殊参数时,其参数定义的顺序就会受到编译器的限制。函数参数的顺序基本上可以总结为两条

  1. 函数参数的顺序为:普通参数,可选参数和默认参数,不定长参数。
  2. 一旦某个参数被省略,他之后的就不能再出现其他参数。

我们修改index.ts文件为如下内容。

function login(user: string, passwd?: string, keepalive: boolean = true, ...code: number[]) {
    console.log("[Login Function] User: " + user + " Password: " + passwd + " keepalive: " + keepalive)
    console.log("[Login Function] code: " + code)
}
login("aliyun", "Password", false, 1024, 365, 999);

终端选项卡中输入如下内容

tsc
node index.js

实验链接:https://developer.aliyun.com/adc/scenario/8c83f5a9433a46ffac0fcdf05a1a2d60

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
安全 Swift iOS开发
switf定义和语法
switf定义和语法
63 2
|
30天前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
24 0
|
6月前
|
存储 Python 容器
python函数的返回值、嵌套方式以及函数中的变量(一)
python函数的返回值、嵌套方式以及函数中的变量(一)
241 2
|
6月前
|
Python
python函数的返回值、嵌套方式以及函数中的变量(二)
python函数的返回值、嵌套方式以及函数中的变量(二)
243 1
|
6月前
|
存储 安全 编译器
C/C++(2)基本语法和数据类型
C/C++(2)基本语法和数据类型
26 0
|
6月前
|
C++
C++ 默认参数与引用传递:语法、用法及示例
C++ 允许函数参数具有默认值,简化调用。例如,`void myFunction(string country = "Norway")` 中`country`默认为"Norway"。默认参数仅适用于函数参数,不包括返回值。引用传递是另一种传递方式,函数直接访问变量内存,允许修改原值,提高效率。`void swapNums(int &x, int &y)` 中`x`和`y`为引用参数。了解这些特性可提升代码可读性和性能。
115 0
|
SQL
函数的语法
函数的语法
107 1
|
安全 编译器 C#
2.1C#新语法
C#实用新语法
|
安全 C#
C#——特殊语法
C#——特殊语法
111 0
|
数据采集 存储 大数据
Lua 语法数据类型与变量|学习笔记
快速学习 Lua 语法数据类型与变量