ArkTS 基础入门
本篇文章将带你快速入门 ArkTS 的基础知识,包括变量声明、数据类型、运算符、控制流语句以及空安全处理,为鸿蒙应用开发打下坚实的基础。
目录
七:函数与方法
1. 函数声明
函数声明用于定义一个函数,包含函数名称、参数列表、返回类型和函数体。
function add(x: string, y: string): string {
let z: string = `${x} ${y}`;
return z;
}
1.1 可选参数
可选参数的格式为 name?: Type
,允许在调用时省略这些参数。
function greet(name?: string) {
if (name === undefined) {
console.log('Hello!');
} else {
console.log(`Hello, ${name}!`);
}
}
1.2 默认值参数
参数可以有默认值。在调用时若省略该参数,则使用默认值。
function multiply(n: number, coeff: number = 2): number {
return n * coeff;
}
multiply(2); // 返回 4
multiply(2, 3); // 返回 6
1.3 Rest 参数
Rest 参数允许函数接受任意数量的参数,并将它们收集到一个数组中。Rest 参数必须位于参数列表的末尾,通常用于处理不定参数,例如计算不定数量的数字和。
- 语法为
...paramName: Type[]
。 - Rest 参数可与其他参数一起使用,但必须放在最后。
function sum(...numbers: number[]): number {
return numbers.reduce((acc, curr) => acc + curr, 0);
}
console.log(sum(1, 2, 3)); // 输出:6
console.log(sum()); // 输出:0
Rest 参数与其他参数结合使用
可以在函数中将 Rest 参数与其他参数搭配使用,以接受固定参数和任意数量的可变参数。
function introduce(greeting: string, ...names: string[]): void {
for (let name of names) {
console.log(`${greeting}, ${name}!`);
}
}
introduce("Hello", "Alice", "Bob", "Carol");
// 输出:
// Hello, Alice!
// Hello, Bob!
// Hello, Carol!
在上例中,greeting
是固定参数,names
是 Rest 参数,可以接受任意数量的名字。
2. 返回类型
如果可以从函数体内推断出返回类型,则可以省略返回类型标注。无返回值的函数类型可以显式指定为 void
或省略。
function display(): void { console.log('Displaying...'); }
function getMessage() { return 'Hello'; } // 推断为 string 类型
3. 函数作用域与调用
函数中定义的变量只能在函数内部访问,外部无法访问这些变量。调用函数会执行其函数体,并将实参赋值给形参。
function join(x: string, y: string): string {
let z: string = `${x} ${y}`;
return z;
}
let message = join('hello', 'world');
console.log(message); // 输出 "hello world"
4. 函数类型
函数类型可以用于定义回调函数或作为类型标注。
type MathFunc = (x: number) => number;
function applyFunc(func: MathFunc) {
console.log(func(3.14));
}
applyFunc(Math.sin); // 将 Math.sin 作为参数传入
5. 箭头函数(Lambda 函数)
箭头函数可以用简洁的语法定义匿名函数。可以省略花括号和返回类型,让表达更简短。
let sum = (x: number, y: number): number => x + y;
let multiply = (x: number, y: number) => x * y; // 自动推断返回类型
6. 闭包
闭包是由函数及其声明时的环境组成的。闭包捕获并保留函数创建时作用域内的变量,使得这些变量在闭包函数中可以继续访问。
function createCounter(): () => number {
let count = 0;
return () => { count++; return count; };
}
let counter = createCounter();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
在上例中,counter
是一个闭包,它捕获了 count
变量,并在每次调用时保留并更新其值。
7. 函数重载
函数重载允许定义多个具有相同名称但参数类型或数量不同的函数,常用于需要对不同数据类型执行相似操作的情况。ArkTS 通过重载签名声明不同的参数类型,最后在实现部分使用联合类型处理不同的情况。
重载签名
重载签名是函数定义的不同版本,仅声明参数和返回类型,不包含实现。
function format(value: string): string;
function format(value: number): string;
实现签名
在实现中,使用联合类型涵盖所有可能的参数类型,并添加逻辑来区分参数类型。
function format(value: string | number): string {
if (typeof value === "string") {
return `String: ${value}`;
} else {
return `Number: ${value}`;
}
}
console.log(format("ArkTS&#